@@ -75,36 +75,29 @@ def __call__(self, uri: str) -> Dict[str, Any]:
75
75
package = importlib .import_module (self .package_name )
76
76
base = os .path .dirname (package .__file__ ) + "/"
77
77
78
- def create_definitions (obj : dict , definitions : dict ) -> Dict [str , Any ]:
78
+ def resolve_ref_links (obj : Any ) -> Dict [str , Any ]:
79
79
"""
80
- Scan resolved schema and compose definitions section, also convert
81
- jsonref.JsonRef object to JSON serializable dict.
80
+ Scan resolved schema and convert jsonref.JsonRef object to JSON
81
+ serializable dict.
82
82
83
83
:param obj - jsonschema object with ref field resovled.
84
- :definitions - object for storing generated definitions.
85
84
:return JSON serializable object with references without external dependencies.
86
85
"""
87
86
if isinstance (obj , jsonref .JsonRef ):
88
- def_key = obj .__reference__ ["$ref" ]
89
- def_key = def_key .replace ("#/definitions/" , "" ).replace (".json" , "_" )
90
- definition = create_definitions (obj .__subject__ , definitions )
87
+ obj = resolve_ref_links (obj .__subject__ )
91
88
# Omit existance definitions for extenal resource since
92
89
# we dont need it anymore.
93
- definition .pop ("definitions" , None )
94
- definitions [def_key ] = definition
95
- return {"$ref" : "#/definitions/" + def_key }
90
+ obj .pop ("definitions" , None )
91
+ return obj
96
92
elif isinstance (obj , dict ):
97
- return {k : create_definitions ( v , definitions ) for k , v in obj .items ()}
93
+ return {k : resolve_ref_links ( v ) for k , v in obj .items ()}
98
94
elif isinstance (obj , list ):
99
- return [create_definitions (item , definitions ) for item in obj ]
95
+ return [resolve_ref_links (item ) for item in obj ]
100
96
else :
101
97
return obj
102
98
103
99
resolved = jsonref .JsonRef .replace_refs (raw_schema , loader = JsonFileLoader (base , "schemas/shared" ), base_uri = base )
104
- definitions = {}
105
- resolved = create_definitions (resolved , definitions )
106
- if definitions :
107
- resolved ["definitions" ] = definitions
100
+ resolved = resolve_ref_links (resolved )
108
101
return resolved
109
102
110
103
0 commit comments