1
0
mirror of synced 2025-12-26 05:05:18 -05:00
Files
airbyte/airbyte-cdk/python/airbyte_cdk/utils/spec_schema_transformations.py
Brian Lai f0951ffbd8 [file-based cdk] file based spec boilerplate backed by pydantic models (#28139)
* file based spec operation backed by pydantic models

* pr feedback to clean up various config and the test scenarios

* fix tests after rebase
2023-07-12 19:42:50 -04:00

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