import importlib import re from functools import lru_cache from typing import Type, TypeVar, Optional from actions.config.config import Config from actions.env.env_config_loader import EnvConfigLoader # Genérico para garantir que o retorno respeite o Protocolo T = TypeVar("T") class ServiceFactory: def __init__(self, package: str, table: str): # Instancia o loader com o prefixo correto env = EnvConfigLoader(".env") # Ex: "packages.v1" self.base_root = "packages.v1" self.package = package self.table = table # Carrega config apenas uma vez self.app_config = Config.get("app.json") # Define a UF da aplicação self.current_state = env.ORIUS_CLIENT_STATE @lru_cache(maxsize=32) def make(self, class_name: str, interface: Type[T]) -> T: """ Instancia um serviço dinamicamente com comportamento de Autoload. """ # 1. Converte CamelCase para snake_case (Autoload style) # Ex: TAtoIndexService -> t_ato_index_service module_name = re.sub(r"(?