* file based spec operation backed by pydantic models * pr feedback to clean up various config and the test scenarios * fix tests after rebase
24 lines
741 B
Python
24 lines
741 B
Python
#
|
|
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
|
|
#
|
|
|
|
import json
|
|
import re
|
|
|
|
from jsonschema import RefResolver
|
|
|
|
|
|
def resolve_refs(schema: dict) -> dict:
|
|
"""
|
|
For spec schemas generated using Pydantic models, the resulting JSON schema can contain refs between object
|
|
relationships.
|
|
"""
|
|
json_schema_ref_resolver = RefResolver.from_schema(schema)
|
|
str_schema = json.dumps(schema)
|
|
for ref_block in re.findall(r'{"\$ref": "#\/definitions\/.+?(?="})"}', str_schema):
|
|
ref = json.loads(ref_block)["$ref"]
|
|
str_schema = str_schema.replace(ref_block, json.dumps(json_schema_ref_resolver.resolve(ref)[1]))
|
|
pyschema: dict = json.loads(str_schema)
|
|
del pyschema["definitions"]
|
|
return pyschema
|