""" Errors used in several tools to avoid duplication .. codeauthor:: Intra2net AG <info@intra2net.com> """ class CryptoErrorBase(ValueError): """Base class for crypto-based exceptions.""" pass class CryptoLibNotImported(CryptoErrorBase, ImportError): """Exception thrown if msoffcrypto is needed but could not be imported.""" def __init__(self): super(CryptoLibNotImported, self).__init__( 'msoffcrypto-tools is not installed. Please run "pip install msoffcrypto-tool" or see https://github.com/nolze/msoffcrypto-tool') class UnsupportedEncryptionError(CryptoErrorBase): """Exception thrown if file is encrypted and cannot deal with it.""" def __init__(self, filename=None): super(UnsupportedEncryptionError, self).__init__( 'Office file {}is encrypted, not yet supported' .format('' if filename is None else filename + ' ')) class WrongEncryptionPassword(CryptoErrorBase): """Exception thrown if encryption could be handled but passwords wrong.""" def __init__(self, filename=None): super(WrongEncryptionPassword, self).__init__( 'Given passwords could not decrypt office file{}, use option -p to specify the password' .format('' if filename is None else ' ' + filename)) class MaxCryptoNestingReached(CryptoErrorBase): """ Exception thrown if decryption is too deeply layered. (...or decrypt code creates inf loop) """ def __init__(self, n_layers, filename=None): super(MaxCryptoNestingReached, self).__init__( 'Encountered more than {} layers of encryption for office file{}' .format(n_layers, '' if filename is None else ' ' + filename))
Memory