in src/aaz_dev/swagger/model/schema/operation.py [0:0]
def link(self, swagger_loader, *traces):
if self.is_linked():
return
super().link(swagger_loader, *traces)
if self.parameters is not None:
for idx, param in enumerate(self.parameters):
if isinstance(param, Linkable):
param.link(swagger_loader, *self.traces, 'parameters', idx)
# replace parameter reference by parameter instance
for idx in range(len(self.parameters)):
param = self.parameters[idx]
while isinstance(param, Reference):
param = param.ref_instance
assert isinstance(param, ParameterBase)
self.parameters[idx] = param
# current response
# verify path is resource id template or not
resource_id_template = None
if self.traces[-1] == 'get':
# path should support get method
resource_path = self.traces[-2]
resource_id_template = swagger_resource_path_to_resource_id_template(resource_path)
for key, response in self.responses.items():
if resource_id_template and key != "default" and int(key) < 300:
response.link(
swagger_loader, *self.traces, 'responses', key,
resource_id_template=resource_id_template
)
else:
response.link(
swagger_loader, *self.traces, 'responses', key
)
# replace response reference by response instance
for key in [*self.responses.keys()]:
resp = self.responses[key]
while isinstance(resp, Reference):
if resp.ref_instance is None:
raise exceptions.InvalidSwaggerValueError(
msg="Reference not exist",
key=[],
value=resp.ref
)
resp = resp.ref_instance
assert isinstance(resp, Response)
self.responses[key] = resp
if self.x_ms_odata is not None:
self.x_ms_odata_instance, instance_traces = swagger_loader.load_ref(
self.x_ms_odata, *self.traces, 'x_ms_odata')
if isinstance(self.x_ms_odata_instance, Linkable):
self.x_ms_odata_instance.link(swagger_loader, *instance_traces)
if self.x_ms_long_running_operation_options is not None and \
self.x_ms_long_running_operation_options.final_state_schema is not None:
# `final-state-schema` to `$ref`
self.x_ms_lro_final_state_schema = ReferenceSchema()
self.x_ms_lro_final_state_schema.ref = self.x_ms_long_running_operation_options.final_state_schema
self.x_ms_lro_final_state_schema.link(
swagger_loader,
*self.traces, "x_ms_long_running_operation_options", "final_state_schema"
)
if self.x_ms_examples is not None:
for key, example in self.x_ms_examples.items():
try:
example.link(swagger_loader, *self.traces, "x_ms_examples", key)
except Exception as e:
logger.error(f"Link example failed: {e}: {key}.")