Skip to content

Commit 82bcdd7

Browse files
committed
feat: Add parameter description to properties
1 parent 0c2efd3 commit 82bcdd7

File tree

3 files changed

+83
-11
lines changed

3 files changed

+83
-11
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: 81 additions & 11 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,50 @@ 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:
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+
)
460507

461508
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+
)
463515
elif data.type == "number":
464516
return (
465517
FloatProperty(
466518
name=name,
467519
default=convert("float", data.default),
468520
required=required,
469521
nullable=data.nullable,
522+
description=description,
470523
),
471524
schemas,
472525
)
@@ -477,6 +530,7 @@ def _property_from_data(
477530
default=convert("int", data.default),
478531
required=required,
479532
nullable=data.nullable,
533+
description=description,
480534
),
481535
schemas,
482536
)
@@ -487,11 +541,19 @@ def _property_from_data(
487541
required=required,
488542
default=convert("bool", data.default),
489543
nullable=data.nullable,
544+
description=description,
490545
),
491546
schemas,
492547
)
493548
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+
)
495557
elif data.type == "object":
496558
return build_model_property(data=data, name=name, schemas=schemas, required=required, parent_name=parent_name)
497559
return PropertyError(data=data, detail=f"unknown type {data.type}"), schemas
@@ -504,9 +566,17 @@ def property_from_data(
504566
data: Union[oai.Reference, oai.Schema],
505567
schemas: Schemas,
506568
parent_name: str,
569+
description: Optional[str] = None,
507570
) -> Tuple[Union[Property, PropertyError], Schemas]:
508571
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+
)
510580
except ValidationError:
511581
return PropertyError(detail="Failed to validate default value", data=data), schemas
512582

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)