@@ -28,7 +28,7 @@ This repository does *not* contain any generated clients, such as for S3 or othe
28
28
AWS services. Rather, these are the tools that facilitate the generation of those
29
29
clients and non-AWS Smithy clients.
30
30
31
- ### How do I use this?
31
+ ### How do I use this to create a client ?
32
32
33
33
The first step is to create a Smithy package. If this is your first time working
34
34
with Smithy, follow [ this quickstart guide] ( https://smithy.io/2.0/quickstart.html )
@@ -82,9 +82,9 @@ this file, see the
82
82
"sources" : [" model" ],
83
83
"maven" : {
84
84
"dependencies" : [
85
- " software.amazon.smithy:smithy-model:[1.34 .0,2.0)" ,
86
- " software.amazon.smithy:smithy-aws-traits:[1.34 .0,2.0)" ,
87
- " software.amazon.smithy.python:smithy-python- codegen:0.1.0 "
85
+ " software.amazon.smithy:smithy-model:[1.54 .0,2.0)" ,
86
+ " software.amazon.smithy:smithy-aws-traits:[1.54 .0,2.0)" ,
87
+ " software.amazon.smithy.python. codegen:core:0.0.1 "
88
88
]
89
89
},
90
90
"projections" : {
@@ -175,6 +175,154 @@ Only for now. Once the generator has been published, the Smithy CLI will be able
175
175
to run it without a separate Java installation. Similarly, once the python
176
176
helper libraries have been published you won't need to install them locally.
177
177
178
+ ### How do I generate types for shapes without a client?
179
+
180
+ If all you want are concrete Python classes for the shapes in your Smithy model,
181
+ all you need to do is replace ` python-client-codegen ` with
182
+ ` python-type-codegen ` when following the steps above. Your ` smithy-build.json `
183
+ would now look like:
184
+
185
+ ``` json
186
+ {
187
+ "version" : " 1.0" ,
188
+ "sources" : [" model" ],
189
+ "maven" : {
190
+ "dependencies" : [
191
+ " software.amazon.smithy:smithy-model:[1.54.0,2.0)" ,
192
+ " software.amazon.smithy.python.codegen.plugins:types:0.0.1"
193
+ ]
194
+ },
195
+ "projections" : {
196
+ "shapes" : {
197
+ "plugins" : {
198
+ "python-type-codegen" : {
199
+ "service" : " com.example#EchoService" ,
200
+ "module" : " echo" ,
201
+ "moduleVersion" : " 0.0.1"
202
+ }
203
+ }
204
+ }
205
+ }
206
+ }
207
+ ```
208
+
209
+ The module with the generated shape classes can be found in
210
+ ` build/smithy/client/python-type-codegen ` after you run ` smithy-build ` .
211
+
212
+ Unlike when generating a client, a service shape is not required for shape
213
+ generation. If a service is not provided then every shape found in the model
214
+ will be generated. Any naming conflicts may be resolved by using the
215
+ [ ` renameShapes ` transform] ( https://smithy.io/2.0/guides/smithy-build-json.html#renameshapes )
216
+ (or renaming the shapes in the model of course).
217
+
218
+ The set of shapes generated can also be constrained by using the
219
+ [ ` includeShapesBySelector ` transform] ( https://smithy.io/2.0/guides/smithy-build-json.html#includeshapesbyselector ) .
220
+ For example, to generate only shapes within the ` com.example ` namespace:
221
+
222
+ ``` json
223
+ {
224
+ "version" : " 1.0" ,
225
+ "sources" : [" model" ],
226
+ "maven" : {
227
+ "dependencies" : [
228
+ " software.amazon.smithy:smithy-model:[1.54.0,2.0)" ,
229
+ " software.amazon.smithy.python.codegen.plugins:types:0.0.1"
230
+ ]
231
+ },
232
+ "projections" : {
233
+ "shapes" : {
234
+ "transforms" : [
235
+ {
236
+ "name" : " includeShapesBySelector" ,
237
+ "args" : {
238
+ "selector" : " [id|namespace = 'com.example']"
239
+ }
240
+ }
241
+ ],
242
+ "plugins" : {
243
+ "python-type-codegen" : {
244
+ "module" : " echo" ,
245
+ "moduleVersion" : " 0.0.1"
246
+ }
247
+ }
248
+ }
249
+ }
250
+ }
251
+ ```
252
+
253
+ Input and output shapes (shapes with the ` @input ` or ` @output ` traits and
254
+ operation inputs / outputs created as part of an operation definition) are not
255
+ generated by default. To generate these shapes anyway, remove the traits with
256
+ the
257
+ [ ` excludeTraits ` transform] ( https://smithy.io/2.0/guides/smithy-build-json.html#excludetraits ) :
258
+
259
+ ``` json
260
+ {
261
+ "version" : " 1.0" ,
262
+ "sources" : [" model" ],
263
+ "maven" : {
264
+ "dependencies" : [
265
+ " software.amazon.smithy:smithy-model:[1.54.0,2.0)" ,
266
+ " software.amazon.smithy.python.codegen.plugins:types:0.0.1"
267
+ ]
268
+ },
269
+ "projections" : {
270
+ "shapes" : {
271
+ "transforms" : [
272
+ {
273
+ "name" : " excludeTraits" ,
274
+ "args" : {
275
+ "traits" : [" input" , " output" ]
276
+ }
277
+ }
278
+ ],
279
+ "plugins" : {
280
+ "python-type-codegen" : {
281
+ "module" : " echo" ,
282
+ "moduleVersion" : " 0.0.1"
283
+ }
284
+ }
285
+ }
286
+ }
287
+ }
288
+ ```
289
+
290
+ You can also generate both a client package and a shape package in one build,
291
+ but they won't depend on each other. To do this, just add both plugins in the
292
+ projection, or create a projection for each plugin. Below is an example showing
293
+ both plugins in one projection:
294
+
295
+ ``` json
296
+ {
297
+ "version" : " 1.0" ,
298
+ "sources" : [" model" ],
299
+ "maven" : {
300
+ "dependencies" : [
301
+ " software.amazon.smithy:smithy-model:[1.54.0,2.0)" ,
302
+ " software.amazon.smithy:smithy-aws-traits:[1.54.0,2.0)" ,
303
+ " software.amazon.smithy.python.codegen:core:0.0.1" ,
304
+ " software.amazon.smithy.python.codegen.plugins:types:0.0.1"
305
+ ]
306
+ },
307
+ "projections" : {
308
+ "client" : {
309
+ "plugins" : {
310
+ "python-client-codegen" : {
311
+ "service" : " com.example#EchoService" ,
312
+ "module" : " echo" ,
313
+ "moduleVersion" : " 0.0.1"
314
+ },
315
+ "python-type-codegen" : {
316
+ "service" : " com.example#EchoService" ,
317
+ "module" : " echo" ,
318
+ "moduleVersion" : " 0.0.1"
319
+ }
320
+ }
321
+ }
322
+ }
323
+ }
324
+ ```
325
+
178
326
### Core Modules and Interfaces
179
327
180
328
* ` smithy-core ` provides transport-agnostic core modules and interfaces
0 commit comments