CoolFace
Apppublic

fmatituy/selectospromanager

sourceHugging Faceupdated 6mo agoView on Hugging Face
0likes
registry.py124 linesDownload Raw Back to modules
1from core.logger import logger
2from core.events import event_bus
3
4class ModuleRegistry:
5    """
6    Service Locator for Selectos modules.
7    Auto-registers all ERP features (sst, proyectos, etc.).
8    """
9    def __init__(self):
10        self._modules = {}
11        self.logger = logger
12        self.event_bus = event_bus
13
14    def register(self, module_name: str, register_func: callable):
15        """
16        Registers a module into the registry to be accessible anywhere.
17        """
18        self._modules[module_name] = register_func
19        self.logger.info(f"MÓDULO REGISTRADO: {module_name}")
20
21    def load_all(self, static_path: str):
22        """
23        Automated load of ERP routes and subsystems.
24        """
25        self.logger.info("CARGANDO KERNEL DEL ERP...")
26        
27        # 1. Registro de Módulos Base (Refactores iniciales)
28        try:
29            from modules.auth_pages import register_auth_pages
30            from modules.api_endpoints import register_api_endpoints
31            from modules.pages.home import register_home_pages
32            from modules.pages.dashboards import register_dashboard_pages
33            from services.notifications import NotificationService # CAPA 4
34            
35            # Inicializar servicios de infraestructura
36            self.notifier = NotificationService()
37            
38            register_auth_pages()
39            register_api_endpoints(static_path)
40            register_home_pages()
41            register_dashboard_pages()
42            
43            self.logger.info("Rutas core del sistema instaladas.")
44        except Exception as e:
45            print(f"!!! CRITICAL REGISTRY ERROR: {e}")
46            self.logger.error(f"Falla en registro core: {str(e)}")
47
48        # 2. Carga dinámica de sub-módulos legados (Import-based)
49        # Aquí agrupamos los imports actuales para centralizar responsabilidades
50        try:
51            
52            # --- Módulo SST (Agrupado en el futuro en sub-dominio) ---
53            import pkgutil
54            import importlib
55            import modules.sst
56            
57            for _, module_name, _ in pkgutil.iter_modules(modules.sst.__path__):
58                try:
59                    importlib.import_module(f"modules.sst.{module_name}")
60                    self.logger.debug(f"Página/Módulo SST cargado: {module_name}")
61                except Exception as mod_err:
62                    self.logger.error(f"Fallo al cargar página/módulo SST ({module_name}): {mod_err}")
63
64            # --- Módulo Personal (NUEVO) ---
65            import modules.personal
66            self.logger.info(f"Cargando submódulos de Personal desde: {modules.personal.__path__}")
67            for _, module_name, _ in pkgutil.iter_modules(modules.personal.__path__):
68                try:
69                    importlib.import_module(f"modules.personal.{module_name}")
70                    self.logger.info(f"Página Personal cargada: {module_name}")
71                except Exception as mod_err:
72                    self.logger.error(f"Fallo al cargar página personal ({module_name}): {mod_err}")
73            
74            # --- Módulo Proyectos ---
75            import modules.proyectos
76            for _, module_name, _ in pkgutil.iter_modules(modules.proyectos.__path__):
77                try:
78                    importlib.import_module(f"modules.proyectos.{module_name}")
79                    self.logger.debug(f"Submódulo Proyectos cargado: {module_name}")
80                except Exception as mod_err:
81                    self.logger.error(f"Fallo al cargar submódulo proyectos ({module_name}): {mod_err}")
82            
83            # Registrar páginas de proyectos (Páginas principales)
84            try:
85                from modules.pages.proyectos import register_proyectos_pages
86                register_proyectos_pages()
87            except Exception as e:
88                self.logger.error(f"Error cargando páginas de proyectos: {e}")
89
90            # --- Módulo Inventario ---
91            import modules.inventario
92            for _, module_name, _ in pkgutil.iter_modules(modules.inventario.__path__):
93                try:
94                    importlib.import_module(f"modules.inventario.{module_name}")
95                    self.logger.debug(f"Submódulo Inventario cargado: {module_name}")
96                except Exception as mod_err:
97                    self.logger.error(f"Fallo al cargar submódulo inventario ({module_name}): {mod_err}")
98            
99            # Registrar páginas de inventario (Páginas principales)
100            try:
101                from modules.pages.inventario import register_inventario_pages
102                register_inventario_pages()
103            except Exception as e:
104                self.logger.error(f"Error cargando páginas de inventario: {e}")
105                
106            # --- Módulo CRM Corporativo (NUEVO) ---
107            import modules.crm
108            for _, module_name, _ in pkgutil.iter_modules(modules.crm.__path__):
109                try:
110                    importlib.import_module(f"modules.crm.{module_name}")
111                    self.logger.info(f"Submódulo CRM Corporativo cargado: {module_name}")
112                except Exception as mod_err:
113                    self.logger.error(f"Fallo al cargar submódulo CRM ({module_name}): {mod_err}")
114            
115            self.logger.info("Ecosistema de módulos (SST, Personal, Proyectos, Inventario, CRM) sincronizado.")
116        except Exception as e:
117            self.logger.error(f"Error cargando módulos secundarios: {str(e)}")
118
119# Instancia Global
120registry = ModuleRegistry()
121
122def register_all_routes(static_path):
123    registry.load_all(static_path)
124