Decorator to register a class.
(self, register_tables_key: str, key: str = None)
| 47 | print("\n") |
| 48 | |
| 49 | def register(self, register_tables_key: str, key: str = None) -> callable: |
| 50 | """Decorator to register a class.""" |
| 51 | |
| 52 | def decorator(target_class): |
| 53 | """Decorator. |
| 54 | |
| 55 | Args: |
| 56 | target_class: TODO. |
| 57 | """ |
| 58 | if not hasattr(self, register_tables_key): |
| 59 | setattr(self, register_tables_key, {}) |
| 60 | logging.debug(f"New registry table added: {register_tables_key}") |
| 61 | |
| 62 | registry = getattr(self, register_tables_key) |
| 63 | registry_key = key if key is not None else target_class.__name__ |
| 64 | |
| 65 | if registry_key in registry: |
| 66 | logging.debug( |
| 67 | f"Key {registry_key} already exists in {register_tables_key}, re-register" |
| 68 | ) |
| 69 | |
| 70 | registry[registry_key] = target_class |
| 71 | |
| 72 | register_tables_key_meta = register_tables_key + "_meta" |
| 73 | if not hasattr(self, register_tables_key_meta): |
| 74 | setattr(self, register_tables_key_meta, {}) |
| 75 | registry_meta = getattr(self, register_tables_key_meta) |
| 76 | |
| 77 | class_file = inspect.getfile(target_class) |
| 78 | class_line = inspect.getsourcelines(target_class)[1] |
| 79 | pattern = r"^.+/funasr/" |
| 80 | class_file = re.sub(pattern, "funasr/", class_file) |
| 81 | meta_data = [ |
| 82 | registry_key, |
| 83 | target_class.__name__, |
| 84 | f"{class_file}:{class_line}", |
| 85 | ] |
| 86 | registry_meta[registry_key] = meta_data |
| 87 | return target_class |
| 88 | |
| 89 | return decorator |
| 90 | |
| 91 | |
| 92 | tables = RegisterTables() |
no outgoing calls
no test coverage detected