@@ -37,8 +37,7 @@ def _resolve_file_references(self, value):
3737
3838 def _standardize_models (self ):
3939 documentation = self .serverless_config .get ('custom' , {}).get ('documentation' , {})
40-
41- standardized_models = []
40+
4241 model_sources = []
4342 if 'models' in documentation :
4443 models_config = self ._resolve_file_references (documentation ['models' ])
@@ -51,6 +50,15 @@ def _standardize_models(self):
5150 if 'modelsList' in documentation :
5251 model_sources .extend (self ._resolve_file_references (documentation ['modelsList' ]))
5352
53+ api_gateway_models = self .serverless_config .get ('provider' , {}).get ('apiGateway' , {}).get ('request' , {}).get ('schemas' , {})
54+ if api_gateway_models :
55+ for model_key , model_definition in api_gateway_models .items ():
56+ if 'name' not in model_definition :
57+ model_definition ['name' ] = model_key
58+ model_definition ['key' ] = model_key
59+ model_sources .append (model_definition )
60+
61+ standardized_models = []
5462 for model in model_sources :
5563 if not isinstance (model , dict ) or 'name' not in model :
5664 continue
@@ -61,6 +69,8 @@ def _standardize_models(self):
6169 'name' : model .get ('name' ),
6270 'description' : model .get ('description' , '' ),
6371 }
72+ if 'key' in model :
73+ std_model ['key' ] = model ['key' ]
6474 if 'contentType' in model and 'schema' in model :
6575 std_model ['contentType' ] = model ['contentType' ]
6676 std_model ['schema' ] = model ['schema' ]
@@ -163,27 +173,23 @@ def _resolve_schema_references(self, schema):
163173
164174 schema = self ._clean_schema (schema )
165175
166- registry = Registry ()
167- if "definitions" in schema :
168- for name , sub_schema in schema ["definitions" ].items ():
169- resource = Resource .from_contents (self ._clean_schema (sub_schema ), default_specification = DRAFT4 )
170- registry = registry .with_resource (f"#/definitions/{ name } " , resource )
176+ resource = Resource .from_contents (schema , default_specification = DRAFT4 )
177+ registry = Registry ().with_resource ("root" , resource ).crawl ()
178+ resolver = registry .resolver (base_uri = "root" )
171179
172- main_resource = Resource .from_contents (schema , default_specification = DRAFT4 )
173- registry = registry .with_resource ("root" , main_resource )
174- resolver = registry .resolver ("root" )
175180 dereferenced_schema = self ._recursive_dereference (schema , resolver )
176181
177182 if isinstance (dereferenced_schema , dict ):
178183 dereferenced_schema .pop ("definitions" , None )
184+
179185 return dereferenced_schema
180186
181187 def _recursive_dereference (self , node , resolver ):
182188 if isinstance (node , dict ):
183189 if "$ref" in node :
184190 try :
185191 resolved = resolver .lookup (node ["$ref" ])
186- return self ._recursive_dereference (resolved .contents , resolver )
192+ return self ._recursive_dereference (resolved .contents , resolved . resolver )
187193 except Exception :
188194 return node
189195 return {k : self ._recursive_dereference (v , resolver ) for k , v in node .items ()}
0 commit comments