########################################################################### # # Copyright (c) 2021-2024 Diality Inc. - All Rights Reserved. # # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN # WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. # # @file defs_base.py # # @author (last) Zoltan Miskolci # @date (last) 28-Jan-2026 # @author (original) Zoltan Miskolci # @date (original) 28-Jan-2026 # ############################################################################ from enum import auto from ..utils.base import DialinEnum class Defs_Base: def __init__(self): self.update_enums() def __getattr__(self, name) -> DialinEnum: if name in self._properties: enum = getattr(self, self._properties[name])() setattr(self, name, enum) return enum raise AttributeError(name) def create_members(self, enum_dict: dict) -> dict: members = {} for enum_member in enum_dict: members[enum_member] = auto() return members def from_str(self, cls, label: str): for enum_member in cls.__members__.values(): # If the string matching with the enum's name if label.lower() == enum_member.name.lower(): return enum_member # If the string matching with the enum's state without the 'mode_' text elif label.lower() == enum_member.name.lower().replace('mode_', ''): return enum_member # If it's in the string list provided for the enum elif label.lower() in cls._str_list[enum_member.name]: return enum_member # Replace _ with ' ' and check the list again elif label.lower().replace('_', ' ') in cls._str_list[enum_member.name]: return enum_member # If the enum is the NUM_ collector, then return stop as after that only aliases are present elif enum_member.name.lower().startswith('num_'): return None return False def update_enums(self) -> None: for prop_name in self._properties: # Cleans the cached value self.__dict__.pop(prop_name, None) # Reinitializing the enum as it's not in the cache self.__getattr__(prop_name)