diff options
Diffstat (limited to 'lang/python/pyme/errors.py')
| -rw-r--r-- | lang/python/pyme/errors.py | 59 | 
1 files changed, 57 insertions, 2 deletions
diff --git a/lang/python/pyme/errors.py b/lang/python/pyme/errors.py index f96877b6..0194931c 100644 --- a/lang/python/pyme/errors.py +++ b/lang/python/pyme/errors.py @@ -20,7 +20,10 @@ from . import util  util.process_constants('GPG_ERR_', globals()) -class GPGMEError(Exception): +class PymeError(Exception): +    pass + +class GPGMEError(PymeError):      def __init__(self, error = None, message = None):          self.error = error          self.message = message @@ -43,8 +46,60 @@ class GPGMEError(Exception):          return pygpgme.gpgme_err_source(self.error)      def __str__(self): -        return "%s (%d,%d)"%(self.getstring(), self.getsource(), self.getcode()) +        return self.getstring()  def errorcheck(retval, extradata = None):      if retval:          raise GPGMEError(retval, extradata) + +# These errors are raised in the idiomatic interface code. + +class EncryptionError(PymeError): +    pass + +class InvalidRecipients(EncryptionError): +    def __init__(self, recipients): +        self.recipients = recipients +    def __str__(self): +        return ", ".join("{}: {}".format(r.fpr, +                                         pygpgme.gpgme_strerror(r.reason)) +                         for r in self.recipients) + +class DeryptionError(PymeError): +    pass + +class UnsupportedAlgorithm(DeryptionError): +    def __init__(self, algorithm): +        self.algorithm = algorithm +    def __str__(self): +        return self.algorithm + +class SigningError(PymeError): +    pass + +class InvalidSigners(SigningError): +    def __init__(self, signers): +        self.signers = signers +    def __str__(self): +        return ", ".join("{}: {}".format(s.fpr, +                                         pygpgme.gpgme_strerror(s.reason)) +                         for s in self.signers) + +class VerificationError(PymeError): +    pass + +class BadSignatures(VerificationError): +    def __init__(self, result): +        self.result = result +    def __str__(self): +        return ", ".join("{}: {}".format(s.fpr, +                                         pygpgme.gpgme_strerror(s.status)) +                         for s in self.result.signatures +                         if s.status != NO_ERROR) + +class MissingSignatures(VerificationError): +    def __init__(self, result, missing): +        self.result = result +        self.missing = missing +    def __str__(self): +        return ", ".join(k.subkeys[0].fpr for k in self.missing)  | 
