Source code for dfvfs.encoding.manager

# -*- coding: utf-8 -*-
"""The encoding manager."""


[docs] class EncodingManager(object): """Encoding manager.""" _decoders = {}
[docs] @classmethod def DeregisterDecoder(cls, decoder): """Deregisters a decoder for a specific encoding method. Args: decoder (type): decoder class. Raises: KeyError: if the corresponding decoder is not set. """ encoding_method = decoder.ENCODING_METHOD.lower() if encoding_method not in cls._decoders: raise KeyError( f'Decoder for encoding method: {decoder.ENCODING_METHOD:s} not set.') del cls._decoders[encoding_method]
[docs] @classmethod def GetDecoder(cls, encoding_method): """Retrieves the decoder object for a specific encoding method. Args: encoding_method (str): encoding method identifier. Returns: Decoder: decoder or None if the encoding method does not exists. """ encoding_method = encoding_method.lower() decoder = cls._decoders.get(encoding_method, None) if not decoder: return None return decoder()
[docs] @classmethod def RegisterDecoder(cls, decoder): """Registers a decoder for a specific encoding method. Args: decoder (type): decoder class. Raises: KeyError: if the corresponding decoder is already set. """ encoding_method = decoder.ENCODING_METHOD.lower() if encoding_method in cls._decoders: raise KeyError(( f'Decoder for encoding method: {decoder.ENCODING_METHOD:s} already ' f'set.')) cls._decoders[encoding_method] = decoder
[docs] @classmethod def RegisterDecoders(cls, decoders): """Registers decoders. The decoders are identified based on their lower case encoding method. Args: decoders (list[type]): decoder classes. Raises: KeyError: if decoders is already set for the corresponding encoding method. """ for decoder in decoders: cls.RegisterDecoder(decoder)