Código fonte para asyncworker.types.registry

from typing import Any, Dict, Optional, Tuple, Type

from asyncworker.typing import get_args, get_origin


[documentos]class RegistryItem: def __init__( self, type: Type, value: Any, type_args: Optional[Tuple] = None ) -> None: self.type = type self.value = value self.type_args = type_args
[documentos]class TypesRegistry: def __init__(self): self._data: Dict[Tuple, RegistryItem] = {} self._by_name: Dict[str, RegistryItem] = {}
[documentos] def set( self, obj: Any, type_definition: Optional[Type] = None, param_name: Optional[str] = None, ) -> None: has_type_args = get_args(type_definition) origin = get_origin(obj) or obj.__class__ registry_item = RegistryItem( type=origin, value=obj, type_args=has_type_args ) self._data[(origin, has_type_args)] = registry_item if param_name: self._by_name[param_name] = registry_item
[documentos] def get( self, _type: Type, param_name: Optional[str] = None, type_args=None ) -> Optional[Any]: origin = get_origin(_type) or _type _type_args = type_args or get_args(_type) if param_name: try: item = self._by_name[param_name] if (item.type, item.type_args) == (origin, _type_args): return item.value except KeyError: return None try: return self._data[(origin, get_args(_type))].value except KeyError: return None