| | |
| | from mmengine.utils import is_list_of |
| | from .base import BaseFileHandler |
| | from .json_handler import JsonHandler |
| | from .pickle_handler import PickleHandler |
| | from .yaml_handler import YamlHandler |
| |
|
| | file_handlers = { |
| | 'json': JsonHandler(), |
| | 'yaml': YamlHandler(), |
| | 'yml': YamlHandler(), |
| | 'pickle': PickleHandler(), |
| | 'pkl': PickleHandler(), |
| | } |
| |
|
| |
|
| | def _register_handler(handler, file_formats): |
| | """Register a handler for some file extensions. |
| | |
| | Args: |
| | handler (:obj:`BaseFileHandler`): Handler to be registered. |
| | file_formats (str or list[str]): File formats to be handled by this |
| | handler. |
| | """ |
| | if not isinstance(handler, BaseFileHandler): |
| | raise TypeError( |
| | f'handler must be a child of BaseFileHandler, not {type(handler)}') |
| | if isinstance(file_formats, str): |
| | file_formats = [file_formats] |
| | if not is_list_of(file_formats, str): |
| | raise TypeError('file_formats must be a str or a list of str') |
| | for ext in file_formats: |
| | file_handlers[ext] = handler |
| |
|
| |
|
| | def register_handler(file_formats, **kwargs): |
| |
|
| | def wrap(cls): |
| | _register_handler(cls(**kwargs), file_formats) |
| | return cls |
| |
|
| | return wrap |
| |
|