Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit dbe284e

Browse files
committedMar 10, 2021
feat: Add parameter description to properties
1 parent 0c2efd3 commit dbe284e

File tree

3 files changed

+73
-10
lines changed

3 files changed

+73
-10
lines changed
 

‎openapi_python_client/parser/openapi.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ def _add_parameters(
220220
data=param.param_schema,
221221
schemas=schemas,
222222
parent_name=endpoint.name,
223+
description=param.description,
223224
)
224225
if isinstance(prop, ParseError):
225226
return ParseError(detail=f"cannot parse parameter of endpoint {endpoint.name}", data=prop.data), schemas

‎openapi_python_client/parser/properties/__init__.py

Lines changed: 71 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ def inner_properties_with_template(self) -> Iterator[Property]:
199199

200200

201201
def _string_based_property(
202-
name: str, required: bool, data: oai.Schema
202+
name: str, required: bool, data: oai.Schema, description: Optional[str]
203203
) -> Union[StringProperty, DateProperty, DateTimeProperty, FileProperty]:
204204
""" Construct a Property from the type "string" """
205205
string_format = data.schema_format
@@ -209,20 +209,23 @@ def _string_based_property(
209209
required=required,
210210
default=convert("datetime.datetime", data.default),
211211
nullable=data.nullable,
212+
description=description,
212213
)
213214
elif string_format == "date":
214215
return DateProperty(
215216
name=name,
216217
required=required,
217218
default=convert("datetime.date", data.default),
218219
nullable=data.nullable,
220+
description=description,
219221
)
220222
elif string_format == "binary":
221223
return FileProperty(
222224
name=name,
223225
required=required,
224226
default=None,
225227
nullable=data.nullable,
228+
description=description,
226229
)
227230
else:
228231
return StringProperty(
@@ -231,6 +234,7 @@ def _string_based_property(
231234
required=required,
232235
pattern=data.pattern,
233236
nullable=data.nullable,
237+
description=description,
234238
)
235239

236240

@@ -259,7 +263,12 @@ def build_model_property(
259263
for key, value in (data.properties or {}).items():
260264
prop_required = key in required_set
261265
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,
263272
)
264273
if isinstance(prop, PropertyError):
265274
return prop, schemas
@@ -320,6 +329,7 @@ def build_enum_property(
320329
schemas: Schemas,
321330
enum: List[Union[str, int]],
322331
parent_name: Optional[str],
332+
description: Optional[str],
323333
) -> Tuple[Union[EnumProperty, PropertyError], Schemas]:
324334
"""
325335
Create an EnumProperty from schema data.
@@ -379,13 +389,20 @@ def build_enum_property(
379389
reference=reference,
380390
values=values,
381391
value_type=value_type,
392+
description=description,
382393
)
383394
schemas = attr.evolve(schemas, enums={**schemas.enums, prop.reference.class_name: prop})
384395
return prop, schemas
385396

386397

387398
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],
389406
) -> Tuple[Union[UnionProperty, PropertyError], Schemas]:
390407
sub_properties: List[Property] = []
391408
for sub_prop_data in chain(data.anyOf, data.oneOf):
@@ -404,28 +421,35 @@ def build_union_property(
404421
default=default,
405422
inner_properties=sub_properties,
406423
nullable=data.nullable,
424+
description=description,
407425
),
408426
schemas,
409427
)
410428

411429

412430
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],
414438
) -> Tuple[Union[ListProperty[Any], PropertyError], Schemas]:
415439
if data.items is None:
416440
return PropertyError(data=data, detail="type array must have items defined"), schemas
417441
inner_prop, schemas = property_from_data(
418442
name=f"{name}_item", required=True, data=data.items, schemas=schemas, parent_name=parent_name
419443
)
420444
if isinstance(inner_prop, PropertyError):
421-
return PropertyError(data=inner_prop.data, detail=f"invalid data in items of array {name}"), schemas
422445
return (
423446
ListProperty(
424447
name=name,
425448
required=required,
426449
default=None,
427450
inner_property=inner_prop,
428451
nullable=data.nullable,
452+
description=description,
429453
),
430454
schemas,
431455
)
@@ -437,6 +461,7 @@ def _property_from_data(
437461
data: Union[oai.Reference, oai.Schema],
438462
schemas: Schemas,
439463
parent_name: str,
464+
description: Optional[str],
440465
) -> Tuple[Union[Property, PropertyError], Schemas]:
441466
""" Generate a Property from the OpenAPI dictionary representation of it """
442467
name = utils.remove_string_escapes(name)
@@ -451,22 +476,41 @@ def _property_from_data(
451476
return PropertyError(data=data, detail="Could not find reference in parsed models or enums"), schemas
452477
if data.enum:
453478
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,
455486
)
456487
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+
)
458496
if not data.type:
459497
return NoneProperty(name=name, required=required, nullable=False, default=None), schemas
460498

461499
if data.type == "string":
462-
return _string_based_property(name=name, required=required, data=data), schemas
500+
return (
501+
_string_based_property(
502+
name=name, required=required, data=data, description=description
503+
),
504+
schemas,
505+
)
463506
elif data.type == "number":
464507
return (
465508
FloatProperty(
466509
name=name,
467510
default=convert("float", data.default),
468511
required=required,
469512
nullable=data.nullable,
513+
description=description,
470514
),
471515
schemas,
472516
)
@@ -477,6 +521,7 @@ def _property_from_data(
477521
default=convert("int", data.default),
478522
required=required,
479523
nullable=data.nullable,
524+
description=description,
480525
),
481526
schemas,
482527
)
@@ -487,11 +532,19 @@ def _property_from_data(
487532
required=required,
488533
default=convert("bool", data.default),
489534
nullable=data.nullable,
535+
description=description,
490536
),
491537
schemas,
492538
)
493539
elif data.type == "array":
494-
return build_list_property(data=data, name=name, required=required, schemas=schemas, parent_name=parent_name)
540+
return build_list_property(
541+
data=data,
542+
name=name,
543+
required=required,
544+
schemas=schemas,
545+
parent_name=parent_name,
546+
description=description,
547+
)
495548
elif data.type == "object":
496549
return build_model_property(data=data, name=name, schemas=schemas, required=required, parent_name=parent_name)
497550
return PropertyError(data=data, detail=f"unknown type {data.type}"), schemas
@@ -504,9 +557,17 @@ def property_from_data(
504557
data: Union[oai.Reference, oai.Schema],
505558
schemas: Schemas,
506559
parent_name: str,
560+
description: Optional[str] = None,
507561
) -> Tuple[Union[Property, PropertyError], Schemas]:
508562
try:
509-
return _property_from_data(name=name, required=required, data=data, schemas=schemas, parent_name=parent_name)
563+
return _property_from_data(
564+
name=name,
565+
required=required,
566+
data=data,
567+
schemas=schemas,
568+
parent_name=parent_name,
569+
description=description,
570+
)
510571
except ValidationError:
511572
return PropertyError(detail="Failed to validate default value", data=data), schemas
512573

‎openapi_python_client/parser/properties/property.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class Property:
2525
nullable: bool
2626
_type_string: ClassVar[str] = ""
2727
default: Optional[str] = attr.ib()
28+
description: Optional[str]
2829
python_name: str = attr.ib(init=False)
2930

3031
template: ClassVar[Optional[str]] = None

0 commit comments

Comments
 (0)
Please sign in to comment.