2020 Property ,
2121 Schemas ,
2222 build_parameters ,
23+ build_request_bodies ,
2324 build_schemas ,
2425 property_from_data ,
2526)
26- from .properties .schemas import parameter_from_reference
27+ from .properties .schemas import RequestBodies , parameter_from_reference
2728from .responses import Response , response_from_data
2829
2930_PATH_PARAM_REGEX = re .compile ("{([a-zA-Z_][a-zA-Z0-9_]*)}" )
@@ -44,7 +45,12 @@ class EndpointCollection:
4445
4546 @staticmethod
4647 def from_data (
47- * , data : Dict [str , oai .PathItem ], schemas : Schemas , parameters : Parameters , config : Config
48+ * ,
49+ data : Dict [str , oai .PathItem ],
50+ schemas : Schemas ,
51+ parameters : Parameters ,
52+ request_bodies : RequestBodies ,
53+ config : Config ,
4854 ) -> Tuple [Dict [utils .PythonIdentifier , "EndpointCollection" ], Schemas , Parameters ]:
4955 """Parse the openapi paths data to get EndpointCollections by tag"""
5056 endpoints_by_tag : Dict [utils .PythonIdentifier , EndpointCollection ] = {}
@@ -65,6 +71,7 @@ def from_data(
6571 tag = tag ,
6672 schemas = schemas ,
6773 parameters = parameters ,
74+ request_bodies = request_bodies ,
6875 config = config ,
6976 )
7077 # Add `PathItem` parameters
@@ -191,15 +198,19 @@ def _add_body(
191198 endpoint : "Endpoint" ,
192199 data : oai .Operation ,
193200 schemas : Schemas ,
201+ request_bodies : RequestBodies ,
194202 config : Config ,
195203 ) -> Tuple [Union [ParseError , "Endpoint" ], Schemas ]:
196204 """Adds form or JSON body to Endpoint if included in data"""
197205 endpoint = deepcopy (endpoint )
198- if data .requestBody is None or isinstance ( data . requestBody , oai . Reference ) :
206+ if data .requestBody is None :
199207 return endpoint , schemas
200-
208+ if isinstance (data .requestBody , oai .Reference ):
209+ request_body = request_bodies .bodies_by_reference [data .requestBody .ref ]
210+ else :
211+ request_body = data .requestBody
201212 form_body , schemas = Endpoint .parse_request_form_body (
202- body = data . requestBody , schemas = schemas , parent_name = endpoint .name , config = config
213+ body = request_body , schemas = schemas , parent_name = endpoint .name , config = config
203214 )
204215
205216 if isinstance (form_body , ParseError ):
@@ -213,7 +224,7 @@ def _add_body(
213224 )
214225
215226 json_body , schemas = Endpoint .parse_request_json_body (
216- body = data . requestBody , schemas = schemas , parent_name = endpoint .name , config = config
227+ body = request_body , schemas = schemas , parent_name = endpoint .name , config = config
217228 )
218229 if isinstance (json_body , ParseError ):
219230 return (
@@ -226,7 +237,7 @@ def _add_body(
226237 )
227238
228239 multipart_body , schemas = Endpoint .parse_multipart_body (
229- body = data . requestBody , schemas = schemas , parent_name = endpoint .name , config = config
240+ body = request_body , schemas = schemas , parent_name = endpoint .name , config = config
230241 )
231242 if isinstance (multipart_body , ParseError ):
232243 return (
@@ -465,6 +476,7 @@ def from_data(
465476 tag : str ,
466477 schemas : Schemas ,
467478 parameters : Parameters ,
479+ request_bodies : RequestBodies ,
468480 config : Config ,
469481 ) -> Tuple [Union ["Endpoint" , ParseError ], Schemas , Parameters ]:
470482 """Construct an endpoint from the OpenAPI data"""
@@ -490,7 +502,9 @@ def from_data(
490502 if isinstance (result , ParseError ):
491503 return result , schemas , parameters
492504 result , schemas = Endpoint ._add_responses (endpoint = result , data = data .responses , schemas = schemas , config = config )
493- result , schemas = Endpoint ._add_body (endpoint = result , data = data , schemas = schemas , config = config )
505+ result , schemas = Endpoint ._add_body (
506+ endpoint = result , data = data , schemas = schemas , request_bodies = request_bodies , config = config
507+ )
494508
495509 return result , schemas , parameters
496510
@@ -549,8 +563,10 @@ def from_dict(data: Dict[str, Any], *, config: Config) -> Union["GeneratorData",
549563 schemas = build_schemas (components = openapi .components .schemas , schemas = schemas , config = config )
550564 if openapi .components and openapi .components .parameters :
551565 parameters = build_parameters (components = openapi .components .parameters , parameters = parameters )
566+ if openapi .components and openapi .components .requestBodies :
567+ request_bodies = build_request_bodies (components = openapi .components .requestBodies )
552568 endpoint_collections_by_tag , schemas , parameters = EndpointCollection .from_data (
553- data = openapi .paths , schemas = schemas , parameters = parameters , config = config
569+ data = openapi .paths , schemas = schemas , parameters = parameters , request_bodies = request_bodies , config = config
554570 )
555571
556572 enums = (prop for prop in schemas .classes_by_name .values () if isinstance (prop , EnumProperty ))
0 commit comments