You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.1 KiB
69 lines
2.1 KiB
from dynamix_sdk import types as sdk_types
|
|
from dynamix_sdk.base import (
|
|
get_alias,
|
|
name_mapping_dict,
|
|
)
|
|
|
|
|
|
def test_missing_mappings_in_name_mapping_file(dx_models):
|
|
attrs_without_mapping = []
|
|
for model_cls in dx_models:
|
|
for field_name in model_cls.model_fields.keys():
|
|
try:
|
|
get_alias(
|
|
field_name=field_name,
|
|
model_cls=model_cls,
|
|
name_mapping_dict=name_mapping_dict
|
|
)
|
|
except KeyError:
|
|
attrs_without_mapping.append(
|
|
f'{model_cls.__qualname__}.{field_name}'
|
|
)
|
|
|
|
attrs_without_mapping.sort()
|
|
|
|
assert not attrs_without_mapping, (
|
|
f'{len(attrs_without_mapping)} attributes without mapping:'
|
|
f' {attrs_without_mapping}'
|
|
)
|
|
|
|
|
|
def test_unused_mappings_in_name_mapping_file(dx_models):
|
|
mapping_dict_keys = set(name_mapping_dict.keys())
|
|
|
|
def exclude_used_keys(
|
|
model_cls: type[sdk_types.BaseModel],
|
|
mapping_dict_keys: set[str],
|
|
):
|
|
for field_name in model_cls.__annotations__.keys():
|
|
used_key = None
|
|
|
|
individual_alias_key = f'{field_name}__{model_cls.__qualname__}'
|
|
if individual_alias_key in mapping_dict_keys:
|
|
used_key = individual_alias_key
|
|
elif field_name in mapping_dict_keys:
|
|
used_key = field_name
|
|
|
|
if used_key and used_key in mapping_dict_keys:
|
|
mapping_dict_keys.remove(used_key)
|
|
|
|
for base_cls in model_cls.__bases__:
|
|
if issubclass(base_cls, sdk_types.BaseModel):
|
|
exclude_used_keys(
|
|
model_cls=base_cls,
|
|
mapping_dict_keys=mapping_dict_keys,
|
|
)
|
|
|
|
for model_cls in dx_models:
|
|
exclude_used_keys(
|
|
model_cls=model_cls,
|
|
mapping_dict_keys=mapping_dict_keys,
|
|
)
|
|
|
|
unused_mapping_dict_keys = sorted(mapping_dict_keys)
|
|
|
|
assert not unused_mapping_dict_keys, (
|
|
f'{len(unused_mapping_dict_keys)} unused keys in mapping file:'
|
|
f' {unused_mapping_dict_keys}.'
|
|
)
|