| | |
| | | from dataclasses import dataclass |
| | | import re |
| | | |
| | | |
| | | @dataclass |
| | | class RegisterTables: |
| | | """Registry system for classes.""" |
| | | |
| | | model_classes = {} |
| | | frontend_classes = {} |
| | | specaug_classes = {} |
| | |
| | | |
| | | def register(self, register_tables_key: str, key: str = None) -> callable: |
| | | """Decorator to register a class.""" |
| | | |
| | | def decorator(target_class): |
| | | if not hasattr(self, register_tables_key): |
| | | setattr(self, register_tables_key, {}) |
| | | logging.info(f"New registry table added: {register_tables_key}") |
| | | logging.debug(f"New registry table added: {register_tables_key}") |
| | | |
| | | registry = getattr(self, register_tables_key) |
| | | registry_key = key if key is not None else target_class.__name__ |
| | | |
| | | if registry_key in registry: |
| | | raise ValueError(f"Key {registry_key} already exists in {register_tables_key}") |
| | | logging.debug( |
| | | f"Key {registry_key} already exists in {register_tables_key}, re-register" |
| | | ) |
| | | |
| | | registry[registry_key] = target_class |
| | | |
| | |
| | | |
| | | return decorator |
| | | |
| | | |
| | | tables = RegisterTables() |