Skip to content

Commit a4c132f

Browse files
committed
递归合并 allOf 的结果(dict)
1 parent d78e9de commit a4c132f

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

swagger_py_codegen/jsonschema.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -172,11 +172,27 @@ def get_check(self, key, default=None):
172172
has_key = True
173173
return value, has_key
174174

175+
def _merge_dict(src, dst):
176+
for k, v in six.iteritems(dst):
177+
if isinstance(src, dict):
178+
if isinstance(v, dict):
179+
r = _merge_dict(src.get(k, {}), v)
180+
src[k] = r
181+
else:
182+
src[k] = v
183+
else:
184+
src = {k: v}
185+
return src
186+
175187
def _normalize_dict(schema, data):
176188
result = {}
177189
if not isinstance(data, DataWrapper):
178190
data = DataWrapper(data)
179191

192+
for _schema in schema.get('allOf', []):
193+
rs_component = _normalize(_schema, data)
194+
_merge_dict(result, rs_component)
195+
180196
for key, _schema in six.iteritems(schema.get('properties', {})):
181197
# set default
182198
type_ = _schema.get('type', 'object')
@@ -194,11 +210,6 @@ def _normalize_dict(schema, data):
194210
errors.append(dict(name='property_missing',
195211
message='`%s` is required' % key))
196212

197-
for _schema in schema.get('allOf', []):
198-
rs_component = _normalize(_schema, data)
199-
rs_component.update(result)
200-
result = rs_component
201-
202213
additional_properties_schema = schema.get('additionalProperties', False)
203214
if additional_properties_schema:
204215
aproperties_set = set(data.keys()) - set(result.keys())

0 commit comments

Comments
 (0)