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}.'
 | 
						|
    )
 |