json: fix $ref resolution
This commit is contained in:
parent
12f0d7e84b
commit
ea4244e1f7
1 changed files with 11 additions and 0 deletions
|
@ -28,6 +28,7 @@ class SchemaConverter:
|
||||||
def __init__(self, prop_order):
|
def __init__(self, prop_order):
|
||||||
self._prop_order = prop_order
|
self._prop_order = prop_order
|
||||||
self._rules = {'space': SPACE_RULE}
|
self._rules = {'space': SPACE_RULE}
|
||||||
|
self.ref_base = None
|
||||||
|
|
||||||
def _format_literal(self, literal):
|
def _format_literal(self, literal):
|
||||||
escaped = GRAMMAR_LITERAL_ESCAPE_RE.sub(
|
escaped = GRAMMAR_LITERAL_ESCAPE_RE.sub(
|
||||||
|
@ -111,7 +112,17 @@ class SchemaConverter:
|
||||||
raise Exception(f'Error processing pattern: {pattern}: {e}') from e
|
raise Exception(f'Error processing pattern: {pattern}: {e}') from e
|
||||||
|
|
||||||
def visit(self, schema, name):
|
def visit(self, schema, name):
|
||||||
|
old_ref_base = self.ref_base
|
||||||
|
if 'definitions' in schema:
|
||||||
|
self.ref_base = schema
|
||||||
|
try:
|
||||||
|
return self._visit(schema, name)
|
||||||
|
finally:
|
||||||
|
self.ref_base = old_ref_base
|
||||||
|
|
||||||
|
def _visit(self, schema, name):
|
||||||
schema_type = schema.get('type')
|
schema_type = schema.get('type')
|
||||||
|
ref = schema.get('$ref')
|
||||||
rule_name = name or 'root'
|
rule_name = name or 'root'
|
||||||
|
|
||||||
if 'oneOf' in schema or 'anyOf' in schema:
|
if 'oneOf' in schema or 'anyOf' in schema:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue