diff options
Diffstat (limited to '')
| -rw-r--r-- | lang/python/pyme/core.py | 78 | ||||
| -rw-r--r-- | lang/python/pyme/util.py | 78 | 
2 files changed, 77 insertions, 79 deletions
| diff --git a/lang/python/pyme/core.py b/lang/python/pyme/core.py index f15444be..aca5ec2d 100644 --- a/lang/python/pyme/core.py +++ b/lang/python/pyme/core.py @@ -22,7 +22,83 @@  from . import pygpgme  from .errors import errorcheck, GPGMEError  from . import errors -from .util import GpgmeWrapper + +class GpgmeWrapper(object): +    """Base class all Pyme wrappers for GPGME functionality.  Not to be +    instantiated directly.""" + +    def __init__(self, wrapped): +        self._callback_excinfo = None +        self.wrapped = wrapped + +    def __repr__(self): +        return '<instance of %s.%s with GPG object at %s>' % \ +               (__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): +        """Must be implemented by child classes. + +        Must return the name of the c type.""" +        raise NotImplementedError() + +    def _getnameprepend(self): +        """Must be implemented by child classes. + +        Must return the prefix of all c functions mapped to methods of +        this class.""" +        raise NotImplementedError() + +    def _errorcheck(self, name): +        """Must be implemented by child classes. + +        This function must return a trueish value for all c functions +        returning gpgme_error_t.""" +        raise NotImplementedError() + +    def __getattr__(self, key): +        """On-the-fly function generation.""" +        if key[0] == '_' or self._getnameprepend() == None: +            return None +        name = self._getnameprepend() + key +        func = getattr(pygpgme, name) + +        if self._errorcheck(name): +            def _funcwrap(slf, *args, **kwargs): +                result = func(slf.wrapped, *args, **kwargs) +                if slf._callback_excinfo: +                    pygpgme.pygpgme_raise_callback_exception(slf) +                return errorcheck(result, "Invocation of " + name) +        else: +            def _funcwrap(slf, *args, **kwargs): +                result = func(slf.wrapped, *args, **kwargs) +                if slf._callback_excinfo: +                    pygpgme.pygpgme_raise_callback_exception(slf) +                return result + +        _funcwrap.__doc__ = getattr(func, "__doc__") + +        # Monkey-patch the class. +        setattr(self.__class__, key, _funcwrap) + +        # Bind the method to 'self'. +        def wrapper(*args, **kwargs): +            return _funcwrap(self, *args, **kwargs) +        _funcwrap.__doc__ = getattr(func, "__doc__") + +        return wrapper  class Context(GpgmeWrapper):      """From the GPGME C documentation: diff --git a/lang/python/pyme/util.py b/lang/python/pyme/util.py index b54cd4dc..d52cd1f9 100644 --- a/lang/python/pyme/util.py +++ b/lang/python/pyme/util.py @@ -17,7 +17,6 @@  #    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 @@ -28,80 +27,3 @@ def process_constants(starttext, dict):              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 __init__(self, wrapped): -        self._callback_excinfo = None -        self.wrapped = wrapped - -    def __repr__(self): -        return '<instance of %s.%s with GPG object at %s>' % \ -               (__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): -        """Must be implemented by child classes. - -        Must return the name of the c type.""" -        raise NotImplementedError() - -    def _getnameprepend(self): -        """Must be implemented by child classes. - -        Must return the prefix of all c functions mapped to methods of -        this class.""" -        raise NotImplementedError() - -    def _errorcheck(self, name): -        """Must be implemented by child classes. - -        This function must return a trueish value for all c functions -        returning gpgme_error_t.""" -        raise NotImplementedError() - -    def __getattr__(self, key): -        """On-the-fly function generation.""" -        if key[0] == '_' or self._getnameprepend() == None: -            return None -        name = self._getnameprepend() + key -        func = getattr(pygpgme, name) - -        if self._errorcheck(name): -            def _funcwrap(slf, *args, **kwargs): -                result = func(slf.wrapped, *args, **kwargs) -                if slf._callback_excinfo: -                    pygpgme.pygpgme_raise_callback_exception(slf) -                return errorcheck(result, "Invocation of " + name) -        else: -            def _funcwrap(slf, *args, **kwargs): -                result = func(slf.wrapped, *args, **kwargs) -                if slf._callback_excinfo: -                    pygpgme.pygpgme_raise_callback_exception(slf) -                return result - -        _funcwrap.__doc__ = getattr(func, "__doc__") - -        # Monkey-patch the class. -        setattr(self.__class__, key, _funcwrap) - -        # Bind the method to 'self'. -        def wrapper(*args, **kwargs): -            return _funcwrap(self, *args, **kwargs) -        _funcwrap.__doc__ = getattr(func, "__doc__") - -        return wrapper | 
