aboutsummaryrefslogtreecommitdiffstats
path: root/lang/python/src/errors.py
diff options
context:
space:
mode:
authorAlon Bar-Lev <[email protected]>2017-04-05 16:47:08 +0000
committerJustus Winter <[email protected]>2017-04-07 10:12:20 +0000
commit49195c487e6c923f7137f092b982e7d833d98de6 (patch)
tree5be39ddc018fcba7771e0c77ca0ae607e7435d66 /lang/python/src/errors.py
parentpython: Fix vpath builds, fix distcheck. (diff)
downloadgpgme-49195c487e6c923f7137f092b982e7d833d98de6.tar.gz
gpgme-49195c487e6c923f7137f092b982e7d833d98de6.zip
python: simplify build, some fixups
* lang/python/gpg/version.py.in: Rename to lang/python/version.py.in. configure.ac: Generate version.py.in in lang/python. * lang/python/MANIFEST.in: Include version.py explicitly. * lang/python/gpg: Rename to 'src'. * lang/python/Makefile.am: Do not copy source files, do not use absolute directories, support lib64 in uninstall, clean also dist directory, use symlink for gpg src. * lang/python/setup.py.in: Use builddir, copy sources into builddir, copy version.py into module. -- Simplify build to symlink the gpg sources into builddir instead of copying. This requires handling of version.py as generated file. In addition apply some cleanups: Drop the absolution pathes, clean the dist directory as well, support lib64 for sitelib at uninstall. Signed-off-by: Alon Bar-Lev <[email protected]>
Diffstat (limited to 'lang/python/src/errors.py')
-rw-r--r--lang/python/src/errors.py128
1 files changed, 128 insertions, 0 deletions
diff --git a/lang/python/src/errors.py b/lang/python/src/errors.py
new file mode 100644
index 00000000..1ce139e8
--- /dev/null
+++ b/lang/python/src/errors.py
@@ -0,0 +1,128 @@
+# Copyright (C) 2004 Igor Belyi <[email protected]>
+# Copyright (C) 2002 John Goerzen <[email protected]>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+from __future__ import absolute_import, print_function, unicode_literals
+del absolute_import, print_function, unicode_literals
+
+from . import gpgme
+from . import util
+
+# To appease static analysis tools, we define some constants here.
+# They are overwritten with the proper values by process_constants.
+NO_ERROR = None
+EOF = None
+
+util.process_constants('GPG_ERR_', globals())
+del util
+
+class GpgError(Exception):
+ pass
+
+class GPGMEError(GpgError):
+ def __init__(self, error = None, message = None):
+ self.error = error
+ self.message = message
+
+ @classmethod
+ def fromSyserror(cls):
+ return cls(gpgme.gpgme_err_code_from_syserror())
+
+ def getstring(self):
+ message = "%s: %s" % (gpgme.gpgme_strsource(self.error),
+ gpgme.gpgme_strerror(self.error))
+ if self.message != None:
+ message = "%s: %s" % (self.message, message)
+ return message
+
+ def getcode(self):
+ return gpgme.gpgme_err_code(self.error)
+
+ def getsource(self):
+ return gpgme.gpgme_err_source(self.error)
+
+ def __str__(self):
+ return self.getstring()
+
+def errorcheck(retval, extradata = None):
+ if retval:
+ raise GPGMEError(retval, extradata)
+
+class KeyNotFound(GPGMEError, KeyError):
+ """Raised if a key was not found
+
+ GPGME indicates this condition with EOF, which is not very
+ idiomatic. We raise this error that is both a GPGMEError
+ indicating EOF, and a KeyError.
+
+ """
+ def __init__(self, keystr):
+ self.keystr = keystr
+ GPGMEError.__init__(self, EOF)
+ def __str__(self):
+ return self.keystr
+
+# These errors are raised in the idiomatic interface code.
+
+class EncryptionError(GpgError):
+ pass
+
+class InvalidRecipients(EncryptionError):
+ def __init__(self, recipients):
+ self.recipients = recipients
+ def __str__(self):
+ return ", ".join("{}: {}".format(r.fpr,
+ gpgme.gpgme_strerror(r.reason))
+ for r in self.recipients)
+
+class DeryptionError(GpgError):
+ pass
+
+class UnsupportedAlgorithm(DeryptionError):
+ def __init__(self, algorithm):
+ self.algorithm = algorithm
+ def __str__(self):
+ return self.algorithm
+
+class SigningError(GpgError):
+ pass
+
+class InvalidSigners(SigningError):
+ def __init__(self, signers):
+ self.signers = signers
+ def __str__(self):
+ return ", ".join("{}: {}".format(s.fpr,
+ gpgme.gpgme_strerror(s.reason))
+ for s in self.signers)
+
+class VerificationError(GpgError):
+ pass
+
+class BadSignatures(VerificationError):
+ def __init__(self, result):
+ self.result = result
+ def __str__(self):
+ return ", ".join("{}: {}".format(s.fpr,
+ gpgme.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)