@@ -199,7 +199,7 @@ def inner_properties_with_template(self) -> Iterator[Property]:
199
199
200
200
201
201
def _string_based_property (
202
- name : str , required : bool , data : oai .Schema
202
+ name : str , required : bool , data : oai .Schema , description : Optional [ str ]
203
203
) -> Union [StringProperty , DateProperty , DateTimeProperty , FileProperty ]:
204
204
""" Construct a Property from the type "string" """
205
205
string_format = data .schema_format
@@ -209,20 +209,23 @@ def _string_based_property(
209
209
required = required ,
210
210
default = convert ("datetime.datetime" , data .default ),
211
211
nullable = data .nullable ,
212
+ description = description ,
212
213
)
213
214
elif string_format == "date" :
214
215
return DateProperty (
215
216
name = name ,
216
217
required = required ,
217
218
default = convert ("datetime.date" , data .default ),
218
219
nullable = data .nullable ,
220
+ description = description ,
219
221
)
220
222
elif string_format == "binary" :
221
223
return FileProperty (
222
224
name = name ,
223
225
required = required ,
224
226
default = None ,
225
227
nullable = data .nullable ,
228
+ description = description ,
226
229
)
227
230
else :
228
231
return StringProperty (
@@ -231,6 +234,7 @@ def _string_based_property(
231
234
required = required ,
232
235
pattern = data .pattern ,
233
236
nullable = data .nullable ,
237
+ description = description ,
234
238
)
235
239
236
240
@@ -259,7 +263,12 @@ def build_model_property(
259
263
for key , value in (data .properties or {}).items ():
260
264
prop_required = key in required_set
261
265
prop , schemas = property_from_data (
262
- name = key , required = prop_required , data = value , schemas = schemas , parent_name = class_name
266
+ name = key ,
267
+ required = prop_required ,
268
+ data = value ,
269
+ schemas = schemas ,
270
+ parent_name = class_name ,
271
+ description = value .description ,
263
272
)
264
273
if isinstance (prop , PropertyError ):
265
274
return prop , schemas
@@ -320,6 +329,7 @@ def build_enum_property(
320
329
schemas : Schemas ,
321
330
enum : List [Union [str , int ]],
322
331
parent_name : Optional [str ],
332
+ description : Optional [str ],
323
333
) -> Tuple [Union [EnumProperty , PropertyError ], Schemas ]:
324
334
"""
325
335
Create an EnumProperty from schema data.
@@ -379,13 +389,20 @@ def build_enum_property(
379
389
reference = reference ,
380
390
values = values ,
381
391
value_type = value_type ,
392
+ description = description ,
382
393
)
383
394
schemas = attr .evolve (schemas , enums = {** schemas .enums , prop .reference .class_name : prop })
384
395
return prop , schemas
385
396
386
397
387
398
def build_union_property (
388
- * , data : oai .Schema , name : str , required : bool , schemas : Schemas , parent_name : str
399
+ * ,
400
+ data : oai .Schema ,
401
+ name : str ,
402
+ required : bool ,
403
+ schemas : Schemas ,
404
+ parent_name : str ,
405
+ description : Optional [str ],
389
406
) -> Tuple [Union [UnionProperty , PropertyError ], Schemas ]:
390
407
sub_properties : List [Property ] = []
391
408
for sub_prop_data in chain (data .anyOf , data .oneOf ):
@@ -404,28 +421,35 @@ def build_union_property(
404
421
default = default ,
405
422
inner_properties = sub_properties ,
406
423
nullable = data .nullable ,
424
+ description = description ,
407
425
),
408
426
schemas ,
409
427
)
410
428
411
429
412
430
def build_list_property (
413
- * , data : oai .Schema , name : str , required : bool , schemas : Schemas , parent_name : str
431
+ * ,
432
+ data : oai .Schema ,
433
+ name : str ,
434
+ required : bool ,
435
+ schemas : Schemas ,
436
+ parent_name : str ,
437
+ description : Optional [str ],
414
438
) -> Tuple [Union [ListProperty [Any ], PropertyError ], Schemas ]:
415
439
if data .items is None :
416
440
return PropertyError (data = data , detail = "type array must have items defined" ), schemas
417
441
inner_prop , schemas = property_from_data (
418
442
name = f"{ name } _item" , required = True , data = data .items , schemas = schemas , parent_name = parent_name
419
443
)
420
444
if isinstance (inner_prop , PropertyError ):
421
- return PropertyError (data = inner_prop .data , detail = f"invalid data in items of array { name } " ), schemas
422
445
return (
423
446
ListProperty (
424
447
name = name ,
425
448
required = required ,
426
449
default = None ,
427
450
inner_property = inner_prop ,
428
451
nullable = data .nullable ,
452
+ description = description ,
429
453
),
430
454
schemas ,
431
455
)
@@ -437,6 +461,7 @@ def _property_from_data(
437
461
data : Union [oai .Reference , oai .Schema ],
438
462
schemas : Schemas ,
439
463
parent_name : str ,
464
+ description : Optional [str ],
440
465
) -> Tuple [Union [Property , PropertyError ], Schemas ]:
441
466
""" Generate a Property from the OpenAPI dictionary representation of it """
442
467
name = utils .remove_string_escapes (name )
@@ -451,22 +476,50 @@ def _property_from_data(
451
476
return PropertyError (data = data , detail = "Could not find reference in parsed models or enums" ), schemas
452
477
if data .enum :
453
478
return build_enum_property (
454
- data = data , name = name , required = required , schemas = schemas , enum = data .enum , parent_name = parent_name
479
+ data = data ,
480
+ name = name ,
481
+ required = required ,
482
+ schemas = schemas ,
483
+ enum = data .enum ,
484
+ parent_name = parent_name ,
485
+ description = description ,
455
486
)
456
487
if data .anyOf or data .oneOf :
457
- return build_union_property (data = data , name = name , required = required , schemas = schemas , parent_name = parent_name )
488
+ return build_union_property (
489
+ data = data ,
490
+ name = name ,
491
+ required = required ,
492
+ schemas = schemas ,
493
+ parent_name = parent_name ,
494
+ description = description ,
495
+ )
458
496
if not data .type :
459
- return NoneProperty (name = name , required = required , nullable = False , default = None ), schemas
497
+ return (
498
+ NoneProperty (
499
+ name = name ,
500
+ required = required ,
501
+ nullable = False ,
502
+ default = None ,
503
+ description = description ,
504
+ ),
505
+ schemas ,
506
+ )
460
507
461
508
if data .type == "string" :
462
- return _string_based_property (name = name , required = required , data = data ), schemas
509
+ return (
510
+ _string_based_property (
511
+ name = name , required = required , data = data , description = description
512
+ ),
513
+ schemas ,
514
+ )
463
515
elif data .type == "number" :
464
516
return (
465
517
FloatProperty (
466
518
name = name ,
467
519
default = convert ("float" , data .default ),
468
520
required = required ,
469
521
nullable = data .nullable ,
522
+ description = description ,
470
523
),
471
524
schemas ,
472
525
)
@@ -477,6 +530,7 @@ def _property_from_data(
477
530
default = convert ("int" , data .default ),
478
531
required = required ,
479
532
nullable = data .nullable ,
533
+ description = description ,
480
534
),
481
535
schemas ,
482
536
)
@@ -487,11 +541,19 @@ def _property_from_data(
487
541
required = required ,
488
542
default = convert ("bool" , data .default ),
489
543
nullable = data .nullable ,
544
+ description = description ,
490
545
),
491
546
schemas ,
492
547
)
493
548
elif data .type == "array" :
494
- return build_list_property (data = data , name = name , required = required , schemas = schemas , parent_name = parent_name )
549
+ return build_list_property (
550
+ data = data ,
551
+ name = name ,
552
+ required = required ,
553
+ schemas = schemas ,
554
+ parent_name = parent_name ,
555
+ description = description ,
556
+ )
495
557
elif data .type == "object" :
496
558
return build_model_property (data = data , name = name , schemas = schemas , required = required , parent_name = parent_name )
497
559
return PropertyError (data = data , detail = f"unknown type { data .type } " ), schemas
@@ -504,9 +566,17 @@ def property_from_data(
504
566
data : Union [oai .Reference , oai .Schema ],
505
567
schemas : Schemas ,
506
568
parent_name : str ,
569
+ description : Optional [str ] = None ,
507
570
) -> Tuple [Union [Property , PropertyError ], Schemas ]:
508
571
try :
509
- return _property_from_data (name = name , required = required , data = data , schemas = schemas , parent_name = parent_name )
572
+ return _property_from_data (
573
+ name = name ,
574
+ required = required ,
575
+ data = data ,
576
+ schemas = schemas ,
577
+ parent_name = parent_name ,
578
+ description = description ,
579
+ )
510
580
except ValidationError :
511
581
return PropertyError (detail = "Failed to validate default value" , data = data ), schemas
512
582
0 commit comments