Skip to content

Commit 84cf29b

Browse files
committed
Expand $ref when assiging the definition field in JsonSchemaValueException
1 parent 478ce59 commit 84cf29b

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

fastjsonschema/generator.py

+21-2
Original file line numberDiff line numberDiff line change
@@ -245,8 +245,27 @@ def exc(self, msg, *args, rule=None):
245245
Short-cut for creating raising exception in the code.
246246
"""
247247
msg = 'raise JsonSchemaValueException("'+msg+'", value={variable}, name="{name}", definition={definition}, rule={rule})'
248-
definition_rule = self.e(self._definition.get(rule) if isinstance(self._definition, dict) else None)
249-
self.l(msg, *args, definition=repr(self._definition), rule=repr(rule), definition_rule=definition_rule)
248+
definition = self._expand_refs(self._definition)
249+
definition_rule = self.e(definition.get(rule) if isinstance(definition, dict) else None)
250+
self.l(msg, *args, definition=repr(definition), rule=repr(rule), definition_rule=definition_rule)
251+
252+
def _expand_refs(self, definition):
253+
if isinstance(definition, list):
254+
return [self._expand_refs(v) for v in definition]
255+
if not isinstance(definition, dict):
256+
return definition
257+
if "$ref" in definition:
258+
with self._resolver.resolving(definition["$ref"]) as schema:
259+
return schema
260+
if "properties" in definition:
261+
return {
262+
**definition,
263+
"properties": {
264+
k: self._expand_refs(v)
265+
for k, v in definition["properties"].items()
266+
}
267+
}
268+
return {k: self._expand_refs(v) for k, v in definition.items()}
250269

251270
def create_variable_with_length(self):
252271
"""

0 commit comments

Comments
 (0)