Skip to content

Commit 2b1c1a1

Browse files
authored
Merge pull request #91 from guokr/fixes_allof
递归合并 allOf 的结果(dict)
2 parents d78e9de + d406a2c commit 2b1c1a1

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

swagger_py_codegen/jsonschema.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ def has(self, key):
156156
def keys(self):
157157
if isinstance(self.data, dict):
158158
return list(self.data.keys())
159-
return list(vars(self.data).keys())
159+
return list(getattr(self.data, '__dict__', {}).keys())
160160

161161
def get_check(self, key, default=None):
162162
if isinstance(self.data, dict):
@@ -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)