python: Improve the documentation.
* lang/python/Makefile.am: Copy the README file. * lang/python/README: Rename, convert to org, and update. * lang/python/pyme/__init__.py: Move license out of the docstring, update docstring. * lang/python/pyme/core.py: Add and update docstrings. Signed-off-by: Justus Winter <justus@g10code.com>
This commit is contained in:
parent
7eef399d89
commit
5492853d7b
@ -16,16 +16,21 @@
|
|||||||
# You should have received a copy of the GNU Lesser General Public
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# License along with this program; if not, see <http://www.gnu.org/licenses/>.
|
# License along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
EXTRA_DIST = README.rst
|
EXTRA_DIST = README
|
||||||
SUBDIRS = tests
|
SUBDIRS = tests
|
||||||
|
|
||||||
|
COPY_FILES = \
|
||||||
|
$(srcdir)/README \
|
||||||
|
$(srcdir)/pyme \
|
||||||
|
$(srcdir)/helpers.c $(srcdir)/helpers.h
|
||||||
|
|
||||||
# Cleanup gpgme.h from deprecated functions and typedefs.
|
# Cleanup gpgme.h from deprecated functions and typedefs.
|
||||||
gpgme.h: ../../src/gpgme.h $(srcdir)/gpgme-h-clean.py
|
gpgme.h: ../../src/gpgme.h $(srcdir)/gpgme-h-clean.py
|
||||||
$(PYTHON) $(srcdir)/gpgme-h-clean.py $< >$@
|
$(PYTHON) $(srcdir)/gpgme-h-clean.py $< >$@
|
||||||
|
|
||||||
# For VPATH builds we need to copy some files because Python's
|
# For VPATH builds we need to copy some files because Python's
|
||||||
# distutils are not VPATH-aware.
|
# distutils are not VPATH-aware.
|
||||||
copystamp: $(srcdir)/pyme $(srcdir)/helpers.c $(srcdir)/helpers.h
|
copystamp: $(COPY_FILES)
|
||||||
if test "$(srcdir)" != "$(builddir)" ; then cp -r $^ . ; fi
|
if test "$(srcdir)" != "$(builddir)" ; then cp -r $^ . ; fi
|
||||||
touch $@
|
touch $@
|
||||||
|
|
||||||
|
57
lang/python/README
Normal file
57
lang/python/README
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
PyME - GPGME for Python emacs, please switch to -*- org -*- mode
|
||||||
|
=======================
|
||||||
|
|
||||||
|
PyMe is a python interface to the GPGME library:
|
||||||
|
https://www.gnupg.org/related_software/gpgme/
|
||||||
|
|
||||||
|
PyMe uses SWIG to create wrapper functions with automatic type
|
||||||
|
conversions. This way most of the functions and types are converted
|
||||||
|
from C into Python 3 automatically by SWIG, reducing the maintenance
|
||||||
|
cost of the binginds.
|
||||||
|
|
||||||
|
* Authors
|
||||||
|
|
||||||
|
PyME has been created by John Goerzen, and maintained, developed, and
|
||||||
|
cherished by Igor Belyi, Martin Albrecht, Ben McGinnes, and everyone
|
||||||
|
who contributed to it in any way.
|
||||||
|
|
||||||
|
In 2016 we merged a port of PyME to into the GPGME repository, and
|
||||||
|
development will continue there. Please see the VCS history for the
|
||||||
|
list of contributors, and if you do find bugs, or want to contribute,
|
||||||
|
please get in touch and help maintain PyME.
|
||||||
|
|
||||||
|
Please see the section 'History' further down this document for
|
||||||
|
references to previous versions.
|
||||||
|
|
||||||
|
* Mailing List
|
||||||
|
|
||||||
|
For general discussion and help see the gnupg-users mailing list:
|
||||||
|
https://lists.gnupg.org/mailman/listinfo/gnupg-users
|
||||||
|
|
||||||
|
For development see the gnupg-devel mailing list:
|
||||||
|
https://lists.gnupg.org/mailman/listinfo/gnupg-devel
|
||||||
|
|
||||||
|
* Bugs
|
||||||
|
|
||||||
|
Please report bugs using our bug tracker using the category 'gpgme',
|
||||||
|
and topic 'python':
|
||||||
|
https://bugs.gnupg.org/gnupg/
|
||||||
|
|
||||||
|
* History
|
||||||
|
|
||||||
|
- The bindings have been merged into the GPGME repository in 2016.
|
||||||
|
|
||||||
|
- The latest version of PyME for Python 3.2 and above (as of
|
||||||
|
May, 2015) is v0.9.1.
|
||||||
|
https://git.gnupg.org/gpgme.git/lang/py3-pyme
|
||||||
|
|
||||||
|
- The latest version of PyME for Python 2.6 and 2.7 (as of this
|
||||||
|
writing) is v0.9.0. https://bitbucket.org/malb/pyme
|
||||||
|
|
||||||
|
- A previous version of PyME v0.8.0 can be found on sourceforge:
|
||||||
|
http://pyme.sourceforge.net/
|
||||||
|
|
||||||
|
- A previous version of PyME v0.5.1 which works with GPGME v0.3.15
|
||||||
|
can be found on John Goerzen's PyMe page:
|
||||||
|
http://quux.org/devel/pyme/
|
||||||
|
http://www.complete.org/JohnGoerzen
|
@ -1,48 +0,0 @@
|
|||||||
====
|
|
||||||
PyME
|
|
||||||
====
|
|
||||||
|
|
||||||
PyMe is a python interface to the `GPGME
|
|
||||||
<https://www.gnupg.org/related_software/gpgme/>`_ library.
|
|
||||||
|
|
||||||
PyMe's development model is a `GPGME
|
|
||||||
<https://www.gnupg.org/related_software/gpgme/>`_ + Python 3 + `SWIG
|
|
||||||
<http://www.swig.org/>`_ combination which means that most of the functions and
|
|
||||||
types are converted from C into Python 3 automatically by SWIG. In short, to be
|
|
||||||
able to use PyMe you need to be `familiar with GPGME
|
|
||||||
<https://www.gnupg.org/documentation/manuals/gpgme/>`_.
|
|
||||||
|
|
||||||
|
|
||||||
-------
|
|
||||||
Authors
|
|
||||||
-------
|
|
||||||
|
|
||||||
* John Goerzen, `Complete.Org <http://www.complete.org/JohnGoerzen>`_, 2002.
|
|
||||||
* Igor Belyi, `PyME 0.8 <http://pyme.sourceforge.net/>`_, 2004-2008.
|
|
||||||
* Martin Albrecht, `PyME 0.9+ <https://bitbucket.org/malb/pyme>`_, 2014 to present.
|
|
||||||
* Ben McGinnes, `PyME Python 3 Port <https://git.gnupg.org/gpgme.git/lang/py3-pyme>`_, 2015 to present.
|
|
||||||
|
|
||||||
|
|
||||||
------------
|
|
||||||
Mailing List
|
|
||||||
------------
|
|
||||||
|
|
||||||
PyME's support and development `mailing list
|
|
||||||
<http://sourceforge.net/p/pyme/mailman/pyme-help/>`_ is hosted by sourceforge.
|
|
||||||
|
|
||||||
|
|
||||||
-------
|
|
||||||
History
|
|
||||||
-------
|
|
||||||
|
|
||||||
* The latest version of PyME for Python 3.2 and above (as of May, 2015) is v0.9.1.
|
|
||||||
https://git.gnupg.org/gpgme.git/lang/py3-pyme
|
|
||||||
|
|
||||||
* The latest version of PyME for Python 2.6 and 2.7 (as of this writing) is v0.9.0.
|
|
||||||
https://bitbucket.org/malb/pyme
|
|
||||||
|
|
||||||
* A previous version of PyME v0.8.0 can be found on sourceforge:
|
|
||||||
http://pyme.sourceforge.net/
|
|
||||||
|
|
||||||
* A previous version of PyME v0.5.1 which works with GPGME v0.3.15 can be found
|
|
||||||
on John Goerzen's PyMe page: http://quux.org/devel/pyme/
|
|
@ -1,36 +1,38 @@
|
|||||||
"""
|
# Copyright (C) 2016 g10 Code GmbH
|
||||||
Pyme: GPGME Interface for Python
|
# Copyright (C) 2004 Igor Belyi <belyi@users.sourceforge.net>
|
||||||
Copyright (C) 2004 Igor Belyi <belyi@users.sourceforge.net>
|
# Copyright (C) 2002 John Goerzen <jgoerzen@complete.org>
|
||||||
Copyright (C) 2002 John Goerzen <jgoerzen@complete.org>
|
#
|
||||||
|
# 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
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
"""Pyme: GPGME Interface for Python
|
||||||
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
|
|
||||||
|
|
||||||
Welcome to PyME, the GPGME Interface for Python. "Pyme", when prounced,
|
Welcome to PyME, the GPGME Interface for Python. "Pyme", when prounced,
|
||||||
rhymes with "Pine".
|
rhymes with "Pine".
|
||||||
|
|
||||||
The latest release of this package may be obtained from
|
The latest release of this package may be obtained from
|
||||||
|
https://www.gnupg.org
|
||||||
|
|
||||||
|
Previous releases of this package for Python 2 can be obtained from
|
||||||
http://pyme.sourceforge.net
|
http://pyme.sourceforge.net
|
||||||
Previous releases of this package can be obtained from
|
|
||||||
http://quux.org/devel/pyme/
|
|
||||||
|
|
||||||
FEATURES
|
FEATURES
|
||||||
--------
|
--------
|
||||||
|
|
||||||
* Feature-rich, full implementation of the GPGME library. Supports
|
* Feature-rich, full implementation of the GPGME library. Supports
|
||||||
all GPGME features except interactive editing (coming soon).
|
all GPGME features. Callback functions may be written in pure
|
||||||
Callback functions may be written in pure Python.
|
Python. Exceptions raised in callbacks are properly propagated.
|
||||||
|
|
||||||
* Ability to sign, encrypt, decrypt, and verify data.
|
* Ability to sign, encrypt, decrypt, and verify data.
|
||||||
|
|
||||||
@ -50,9 +52,7 @@ defined here -- they correspond directly to certain object types in GPGME
|
|||||||
for C. For instance, the following C code:
|
for C. For instance, the following C code:
|
||||||
|
|
||||||
gpgme_ctx_t context;
|
gpgme_ctx_t context;
|
||||||
|
|
||||||
gpgme_new(&context);
|
gpgme_new(&context);
|
||||||
|
|
||||||
...
|
...
|
||||||
gpgme_op_encrypt(context, recp, 1, plain, cipher);
|
gpgme_op_encrypt(context, recp, 1, plain, cipher);
|
||||||
|
|
||||||
@ -130,8 +130,6 @@ Version information: pyme.version
|
|||||||
Utilities: pyme.util
|
Utilities: pyme.util
|
||||||
|
|
||||||
Base classes are documented at pyme.core.
|
Base classes are documented at pyme.core.
|
||||||
Classes of pyme.util usually are not instantiated by users
|
|
||||||
directly but return by methods of base classes.
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
# Copyright (C) 2016 g10 Code GmbH
|
||||||
# Copyright (C) 2004,2008 Igor Belyi <belyi@users.sourceforge.net>
|
# Copyright (C) 2004,2008 Igor Belyi <belyi@users.sourceforge.net>
|
||||||
# Copyright (C) 2002 John Goerzen <jgoerzen@complete.org>
|
# Copyright (C) 2002 John Goerzen <jgoerzen@complete.org>
|
||||||
#
|
#
|
||||||
@ -15,14 +16,25 @@
|
|||||||
# License along with this library; if not, write to the Free Software
|
# License along with this library; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
"""Core functionality
|
||||||
|
|
||||||
|
Core functionality of GPGME wrapped in a object-oriented fashion.
|
||||||
|
Provides the 'Context' class for performing cryptographic operations,
|
||||||
|
and the 'Data' class describing buffers of data.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
import weakref
|
import weakref
|
||||||
from . import pygpgme
|
from . import pygpgme
|
||||||
from .errors import errorcheck, GPGMEError
|
from .errors import errorcheck, GPGMEError
|
||||||
from . import errors
|
from . import errors
|
||||||
|
|
||||||
class GpgmeWrapper(object):
|
class GpgmeWrapper(object):
|
||||||
"""Base class all Pyme wrappers for GPGME functionality. Not to be
|
"""Base wrapper class
|
||||||
instantiated directly."""
|
|
||||||
|
Not to be instantiated directly.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self, wrapped):
|
def __init__(self, wrapped):
|
||||||
self._callback_excinfo = None
|
self._callback_excinfo = None
|
||||||
@ -66,7 +78,7 @@ class GpgmeWrapper(object):
|
|||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
def __getattr__(self, key):
|
def __getattr__(self, key):
|
||||||
"""On-the-fly function generation."""
|
"""On-the-fly generation of wrapper methods."""
|
||||||
if key[0] == '_' or self._getnameprepend() == None:
|
if key[0] == '_' or self._getnameprepend() == None:
|
||||||
return None
|
return None
|
||||||
name = self._getnameprepend() + key
|
name = self._getnameprepend() + key
|
||||||
@ -98,15 +110,17 @@ class GpgmeWrapper(object):
|
|||||||
return wrapper
|
return wrapper
|
||||||
|
|
||||||
class Context(GpgmeWrapper):
|
class Context(GpgmeWrapper):
|
||||||
"""From the GPGME C documentation:
|
"""Context for cryptographic operations
|
||||||
|
|
||||||
* All cryptographic operations in GPGME are performed within a
|
All cryptographic operations in GPGME are performed within a
|
||||||
* context, which contains the internal state of the operation as well as
|
context, which contains the internal state of the operation as
|
||||||
* configuration parameters. By using several contexts you can run
|
well as configuration parameters. By using several contexts you
|
||||||
* several cryptographic operations in parallel, with different
|
can run several cryptographic operations in parallel, with
|
||||||
* configuration.
|
different configuration.
|
||||||
|
|
||||||
Thus, this is the place that you will usually start."""
|
Access to a context must be synchronized.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
def _getctype(self):
|
def _getctype(self):
|
||||||
return 'gpgme_ctx_t'
|
return 'gpgme_ctx_t'
|
||||||
@ -348,18 +362,21 @@ class Context(GpgmeWrapper):
|
|||||||
errorcheck(result)
|
errorcheck(result)
|
||||||
|
|
||||||
class Data(GpgmeWrapper):
|
class Data(GpgmeWrapper):
|
||||||
"""From the GPGME C manual:
|
"""Data buffer
|
||||||
|
|
||||||
* A lot of data has to be exchanged between the user and the crypto
|
A lot of data has to be exchanged between the user and the crypto
|
||||||
* engine, like plaintext messages, ciphertext, signatures and information
|
engine, like plaintext messages, ciphertext, signatures and
|
||||||
* about the keys. The technical details about exchanging the data
|
information about the keys. The technical details about
|
||||||
* information are completely abstracted by GPGME. The user provides and
|
exchanging the data information are completely abstracted by
|
||||||
* receives the data via `gpgme_data_t' objects, regardless of the
|
GPGME. The user provides and receives the data via `gpgme_data_t'
|
||||||
* communication protocol between GPGME and the crypto engine in use.
|
objects, regardless of the communication protocol between GPGME
|
||||||
|
and the crypto engine in use.
|
||||||
|
|
||||||
This Data class is the implementation of the GpgmeData objects.
|
This Data class is the implementation of the GpgmeData objects.
|
||||||
|
|
||||||
Please see the information about __init__ for instantiation."""
|
Please see the information about __init__ for instantiation.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
def _getctype(self):
|
def _getctype(self):
|
||||||
return 'gpgme_data_t'
|
return 'gpgme_data_t'
|
||||||
@ -393,15 +410,31 @@ class Data(GpgmeWrapper):
|
|||||||
|
|
||||||
(read_cb, write_cb, seek_cb, release_cb[, hook])
|
(read_cb, write_cb, seek_cb, release_cb[, hook])
|
||||||
|
|
||||||
where func is a callback function taking two arguments (count,
|
where the first four items are functions implementing reading,
|
||||||
hook) and returning a string of read data, or None on EOF.
|
writing, seeking the data, and releasing any resources once
|
||||||
This will supply the read() method for the system.
|
the data object is deallocated. The functions must match the
|
||||||
|
following prototypes:
|
||||||
|
|
||||||
|
def read(amount, hook=None):
|
||||||
|
return <a b"bytes" object>
|
||||||
|
|
||||||
|
def write(data, hook=None):
|
||||||
|
return <the number of bytes written>
|
||||||
|
|
||||||
|
def seek(offset, whence, hook=None):
|
||||||
|
return <the new file position>
|
||||||
|
|
||||||
|
def release(hook=None):
|
||||||
|
<return value and exceptions are ignored>
|
||||||
|
|
||||||
|
The functions may be bound methods. In that case, you can
|
||||||
|
simply use the 'self' reference instead of using a hook.
|
||||||
|
|
||||||
If file is specified without any other arguments, then
|
If file is specified without any other arguments, then
|
||||||
it must be a filename, and the object will be initialized from
|
it must be a filename, and the object will be initialized from
|
||||||
that file.
|
that file.
|
||||||
|
|
||||||
Any other use will result in undefined or erroneous behavior."""
|
"""
|
||||||
super().__init__(None)
|
super().__init__(None)
|
||||||
self.data_cbs = None
|
self.data_cbs = None
|
||||||
|
|
||||||
@ -488,9 +521,10 @@ class Data(GpgmeWrapper):
|
|||||||
"""This wraps the GPGME gpgme_data_new_from_filepart() function.
|
"""This wraps the GPGME gpgme_data_new_from_filepart() function.
|
||||||
The argument "file" may be:
|
The argument "file" may be:
|
||||||
|
|
||||||
1. a string specifying a file name, or
|
* a string specifying a file name, or
|
||||||
3. a a file-like object. supporting the fileno() call and the mode
|
* a file-like object supporting the fileno() and the mode attribute.
|
||||||
attribute."""
|
|
||||||
|
"""
|
||||||
|
|
||||||
tmp = pygpgme.new_gpgme_data_t_p()
|
tmp = pygpgme.new_gpgme_data_t_p()
|
||||||
filename = None
|
filename = None
|
||||||
|
Loading…
Reference in New Issue
Block a user