From ebd8734ad705afa4edc409787a00d4968d25e018 Mon Sep 17 00:00:00 2001 From: Ben McGinnes Date: Wed, 6 May 2015 03:09:44 +1000 Subject: Python 3 port of PyME * The entirety of the Python 3 port of PyME up to commit 2145348ec54c6027f2ea20f695de0277e2871405 * The old commit log has been saved as lang/py3-pyme/docs/old-commits.log * Can be viewed as a normal (separate) git repository at https://github.com/adversary-org/pyme3 * Utilising the submodule feature of git was deliberately skipped on humanitarian grounds (in order to prevent pain and suffering on the part of anyone having to manage this repository). --- lang/py3-pyme/pyme/util.py | 72 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 lang/py3-pyme/pyme/util.py (limited to 'lang/py3-pyme/pyme/util.py') diff --git a/lang/py3-pyme/pyme/util.py b/lang/py3-pyme/pyme/util.py new file mode 100644 index 00000000..c5f02a96 --- /dev/null +++ b/lang/py3-pyme/pyme/util.py @@ -0,0 +1,72 @@ +# $Id$ +# Copyright (C) 2004,2008 Igor Belyi +# Copyright (C) 2002 John Goerzen +# +# 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 . import pygpgme +from .errors import errorcheck + +def process_constants(starttext, dict): + """Called by the constant libraries to load up the appropriate constants + from the C library.""" + index = len(starttext) + for identifier in dir(pygpgme): + if not identifier.startswith(starttext): + continue + name = identifier[index:] + dict[name] = getattr(pygpgme, identifier) + +class GpgmeWrapper(object): + """Base class all Pyme wrappers for GPGME functionality. Not to be + instantiated directly.""" + def __repr__(self): + return '' % \ + (__name__, self.__class__.__name__, + self.wrapped) + + def __str__(self): + return repr(self) + + def __hash__(self): + return hash(repr(self.wrapped)) + + def __eq__(self, other): + if other == None: + return False + else: + return repr(self.wrapped) == repr(other.wrapped) + + def _getctype(self): + raise NotImplementedException + + def __getattr__(self, name): + """On-the-fly function generation.""" + if name[0] == '_' or self._getnameprepend() == None: + return None + name = self._getnameprepend() + name + if self._errorcheck(name): + def _funcwrap(*args, **kwargs): + args = [self.wrapped] + list(args) + return errorcheck(getattr(pygpgme, name)(*args, **kwargs), + "Invocation of " + name) + else: + def _funcwrap(*args, **kwargs): + args = [self.wrapped] + list(args) + return getattr(pygpgme, name)(*args, **kwargs) + + _funcwrap.__doc__ = getattr(getattr(pygpgme, name), "__doc__") + return _funcwrap + -- cgit v1.2.3