aboutsummaryrefslogtreecommitdiffstats
path: root/lang/python/doc/texinfo/gpgme-python-howto.texi
diff options
context:
space:
mode:
Diffstat (limited to 'lang/python/doc/texinfo/gpgme-python-howto.texi')
-rw-r--r--lang/python/doc/texinfo/gpgme-python-howto.texi103
1 files changed, 94 insertions, 9 deletions
diff --git a/lang/python/doc/texinfo/gpgme-python-howto.texi b/lang/python/doc/texinfo/gpgme-python-howto.texi
index 4f10bc5b..3ac26d69 100644
--- a/lang/python/doc/texinfo/gpgme-python-howto.texi
+++ b/lang/python/doc/texinfo/gpgme-python-howto.texi
@@ -149,6 +149,7 @@ Miscellaneous extras and work-arounds
* Group lines::
* Keyserver access for Python::
+* GPGME version checking::
Keyserver access for Python
@@ -170,14 +171,14 @@ Copyright and Licensing
@item Version:
@tab 0.1.4
@item GPGME Version:
-@tab 1.12.0
+@tab 1.12.1
@item Author:
@tab @uref{https://gnupg.org/people/index.html#sec-1-5, Ben McGinnes} <ben@@gnupg.org>
@item Author GPG Key:
@tab DB4724E6FA4286C92B4E55C4321E4E2373590E5D
@item Language:
@tab Australian English, British English
-@item xml:lang:
+@item Language codes:
@tab en-AU, en-GB, en
@end multitable
@@ -2887,6 +2888,7 @@ especially true of the first of these, dealing with @ref{Group lines, , group li
@menu
* Group lines::
* Keyserver access for Python::
+* GPGME version checking::
@end menu
@node Group lines
@@ -3005,6 +3007,93 @@ HOWTO and the corresponding executable version of that example is
available in the @samp{lang/python/examples/howto} directory as normal; the
executable version is the @samp{import-keys-hkp.py} file.
+@node GPGME version checking
+@section GPGME version checking
+
+For various reasons it may be necessary to check which version of
+GPGME the bindings have been built against; including whether a
+minimum required version of GPGME is in use.
+
+For the most part the @samp{gpg.version.versionstr} and
+@samp{gpg.version.versionlist} methods have been quite sufficient. The
+former returns the same string as @samp{gpgme-config --version}, while the
+latter returns the major, minor and patch values in a list.
+
+To check if the installed bindings have actually been built against
+the current installed libgpgme version, this check can be performed:
+
+@example
+import gpg
+import subprocess
+import sys
+
+gpgme_version_call = subprocess.Popen(["gpgme-config", "--version"],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+gpgme_version_str = gpgme_version_call.communicate()
+
+if sys.version_info[0] == 2:
+ gpgme_version = gpgme_version_str[0].strip()
+elif sys.version_info[0] >= 3:
+ gpgme_version = gpgme_version_str[0].decode().strip()
+else:
+ gpgme_version = None
+
+if gpgme_version is not None:
+ if gpgme_version == gpg.version.versionstr:
+ print("The GPGME Python bindings match libgpgme.")
+ else:
+ print("The GPGME Python bindings do NOT match libgpgme.")
+else:
+ print("Upgrade Python and reinstall the GPGME Python bindings.")
+@end example
+
+For many developers, however, the preferred checking means checking
+for a minimum version or point release. This is now readily available
+via the @samp{gpg.version.versionintlist} method (added in version
+@samp{1.12.1-beta79}). It is also now possible to easily check whether the
+installed GPGME Python bindings were built from a development or beta
+branch of the GPGME source code.
+
+The following code demonstrates how both of those methods may be used:
+
+@example
+import gpg
+
+try:
+ if gpg.version.is_beta is True:
+ print("The installed GPGME Python bindings were built from beta code.")
+ else:
+ print("The installed GPGME Python bindings are a released version.")
+except Exception as e:
+ print(e)
+
+try:
+ if gpg.version.versionintlist[0] == 1:
+ if gpg.version.versionintlist[1] == 12:
+ if gpg.version.versionintlist[2] == 1:
+ print("This is the minimum version for using versionintlist.")
+ elif gpg.version.versionintlist[2] > 1:
+ print("The versionintlist method is available.")
+ else:
+ pass
+ elif gpg.version.versionintlist[1] > 12:
+ print("The versionintlist method is available.")
+ else:
+ pass
+ elif gpg.version.versionintlist[0] > 1:
+ print("The versionintlist method is available.")
+ else:
+ pass
+except Exception as e:
+ print(e)
+@end example
+
+The points where @samp{pass} is used in the above example will most likely
+also produce an @samp{Exception} error since those results should only
+occur in versions which do not have the @samp{gpgme.version.is_beta} and
+@samp{gpgme.version.versionintlist} methods available.
+
@node Copyright and Licensing
@chapter Copyright and Licensing
@@ -3044,10 +3133,6 @@ from the author at any of the following URLs:
@uref{https://files.au.adversary.org/crypto/gpgme-python-howto.rst, GPGME Python Bindings HOWTO draft (reST file AWS S3 SSL)}
@item
@uref{http://files.au.adversary.org/crypto/gpgme-python-howto.rst, GPGME Python Bindings HOWTO draft (reST file AWS S3 no SSL)}
-@item
-@uref{https://files.au.adversary.org/crypto/gpgme-python-howto.xml, GPGME Python Bindings HOWTO draft (Docbook 4.2 AWS S3 SSL)}
-@item
-@uref{http://files.au.adversary.org/crypto/gpgme-python-howto.xml, GPGME Python Bindings HOWTO draft (Docbook 4.2 AWS S3 no SSL)}
@end itemize
All of these draft versions except for one have been generated from
@@ -3060,8 +3145,8 @@ using the latest version of Pandoc from the Org mode source file using
either of the following two commands:
@example
-pandoc -f org -t rst -o gpgme-python-howto.rst gpgme-python-howto.org
-pandoc -f org -t rst -o gpgme-python-howto.rst gpgme-python-howto
+pandoc -f org -t rst+smart -o gpgme-python-howto.rst gpgme-python-howto.org
+pandoc -f org -t rst+smart -o gpgme-python-howto.rst gpgme-python-howto
@end example
In addition to these there is a significantly less frequently updated
@@ -3089,4 +3174,4 @@ WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.
-@bye
+@bye \ No newline at end of file