in utils/dsl-generator.py [0:0]
def add_behaviors(self, type_, k, for_types_py=False, for_response=False):
"""Add behaviors reported in the specification of the given type to the
class representation.
"""
if "behaviors" in type_:
for behavior in type_["behaviors"]:
if (
behavior["type"]["name"] != "AdditionalProperty"
or behavior["type"]["namespace"] != "_spec_utils"
):
# we do not support this behavior, so we ignore it
continue
key_type, _ = self.get_python_type(
behavior["generics"][0], for_response=for_response
)
if "InstrumentedField" in key_type:
value_type, _ = self.get_python_type(
behavior["generics"][1], for_response=for_response
)
if for_types_py:
value_type = value_type.replace('"DefaultType"', "DefaultType")
value_type = value_type.replace(
'"InstrumentedField"', "InstrumentedField"
)
value_type = re.sub(
r'"(function\.[a-zA-Z0-9_]+)"', r"\1", value_type
)
value_type = re.sub(
r'"types\.([a-zA-Z0-9_]+)"', r'"\1"', value_type
)
value_type = re.sub(
r'"(wrappers\.[a-zA-Z0-9_]+)"', r"\1", value_type
)
k["args"].append(
{
"name": "_field",
"type": add_not_set(key_type),
"doc": [":arg _field: The field to use in this query."],
"required": False,
"positional": True,
}
)
k["args"].append(
{
"name": "_value",
"type": add_not_set(add_dict_type(value_type)),
"doc": [":arg _value: The query value for the field."],
"required": False,
"positional": True,
}
)
k["is_single_field"] = True
else:
raise RuntimeError(
f"Non-field AdditionalProperty are not supported for interface {type_['name']['namespace']}:{type_['name']['name']}."
)