Package: python-inotifyx Severity: important Tags: patch Dear Maintainer,
I've updated inotifyx to build a python3 package (tested with python3.5 on debian stretch). Thanks, Brian -- System Information: Debian Release: 8.7 APT prefers stable-updates APT policy: (500, 'stable-updates'), (500, 'stable') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 3.16.0-4-amd64 (SMP w/4 CPU cores) Locale: LANG=en_GB.utf8, LC_CTYPE=en_GB.utf8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system)
>From a0cf60121148f3ceb19ac68803418137955a012c Mon Sep 17 00:00:00 2001 From: Brian Russell <[email protected]> Date: Mon, 27 Feb 2017 12:21:15 +0000 Subject: [PATCH 2/4] update C binding for python3 Update the module init for python3. This is required for version 3.5 onwards. --- inotifyx/binding.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/inotifyx/binding.c b/inotifyx/binding.c index 95082ce..ef0094a 100644 --- a/inotifyx/binding.c +++ b/inotifyx/binding.c @@ -44,6 +44,9 @@ #define EVENT_SIZE (sizeof (struct inotify_event)) #define BUF_LEN (1024 * (EVENT_SIZE + 16)) +#if PY_MAJOR_VERSION >= 3 +#define IS_PY3 +#endif static PyObject * inotifyx_init(PyObject *self, PyObject *args) { int fd; @@ -262,7 +265,25 @@ static PyMethodDef InotifyMethods[] = { {NULL, NULL, 0, NULL} }; +#ifdef IS_PY3 +static struct PyModuleDef inotifybinding = +{ + PyModuleDef_HEAD_INIT, + "inotifyx.binding", + ( + "Low-level interface to inotify. Do not use this module directly.\n" + "Instead, use the inotifyx module." + ), + -1, + InotifyMethods +}; + +PyMODINIT_FUNC PyInit_binding(void) { + PyObject *module = PyModule_Create(&inotifybinding); + if (module == NULL) + return NULL; +#else PyMODINIT_FUNC initbinding(void) { PyObject* module = Py_InitModule3( "inotifyx.binding", @@ -275,6 +296,7 @@ PyMODINIT_FUNC initbinding(void) { if (module == NULL) return; +#endif PyModule_AddIntConstant(module, "IN_ACCESS", IN_ACCESS); PyModule_AddIntConstant(module, "IN_MODIFY", IN_MODIFY); @@ -299,4 +321,7 @@ PyMODINIT_FUNC initbinding(void) { PyModule_AddIntConstant(module, "IN_ISDIR", IN_ISDIR); PyModule_AddIntConstant(module, "IN_ONESHOT", IN_ONESHOT); PyModule_AddIntConstant(module, "IN_ALL_EVENTS", IN_ALL_EVENTS); +#ifdef IS_PY3 + return module; +#endif } -- 2.1.4
>From d2ffb3aa85fba9c288c892c3a2268647e5fa88ac Mon Sep 17 00:00:00 2001 From: Luca Boccassi <[email protected]> Date: Fri, 24 Feb 2017 17:38:58 +0000 Subject: [PATCH 4/4] Add initial python3 support Build and package for both python2 and python3. --- debian/control | 25 ++++++++++++++++++++++++- debian/rules | 2 +- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/debian/control b/debian/control index cf17152..bf4414e 100644 --- a/debian/control +++ b/debian/control @@ -3,9 +3,10 @@ Section: python Priority: optional Maintainer: Ritesh Raj Sarraf <[email protected]> Uploaders: Debian Python Modules Team <[email protected]> -Build-Depends: debhelper (>= 9), python-all-dev (>= 2.6.6-3~), dh-python +Build-Depends: debhelper (>= 9), python-all-dev (>= 2.6.6-3~), python3-all-dev, dh-python Standards-Version: 3.9.2 X-Python-Version: >= 2.7 +X-Python3-Version: >= 3.2 Vcs-Git: https://anonscm.debian.org/git/python-modules/packages/inotifyx.git Vcs-Browser: https://anonscm.debian.org/cgit/python-modules/packages/inotifyx.git Homepage: http://www.alittletooquiet.net/software/inotifyx/ @@ -31,3 +32,25 @@ Description: simple Python binding to the Linux inotify * The API provided by pyinotify seems to change in incompatible ways on a fairly regular basis and with little justification. inotifyx has a simple API that will change rarely, if ever. + +Package: python3-inotifyx +Architecture: any +Depends: ${python3:Depends}, ${shlibs:Depends}, ${misc:Depends} +Provides: ${python3:Provides} +X-Python3-Version: >= 3.2 +Description: simple Python binding to the Linux inotify + inotifyx is a Python extension providing access to the Linux + inotify file system event notification API. It is primarily + written in C but has some Python window dressing + . + inotifyx exists as an alternative to the much known pyinotify bindings + . + Reasons you might choose inotifyx over pyinotify + * inotifyx is a C extension and does not use ctypes, making it + faster and less prone to subtle breakage due to changes in the inotify API + * inotifyx is a much thinner wrapper around inotify. pyinotify is more + complicated. It does provide features that inotifyx does not, but many of + them are not needed by most applications + * The API provided by pyinotify seems to change in incompatible ways on a + fairly regular basis and with little justification. inotifyx has a simple + API that will change rarely, if ever. diff --git a/debian/rules b/debian/rules index 32b1ae2..36fc8eb 100755 --- a/debian/rules +++ b/debian/rules @@ -9,4 +9,4 @@ get-orig-source: uscan --force-download --rename --download-version=$(PKG_VER) --destdir=. %: - dh $@ --with python2 --buildsystem=pybuild + dh $@ --with python2,python3 --buildsystem=pybuild -- 2.1.4
>From 1f0197385d4f9848aa3a128865466ccb062c7a72 Mon Sep 17 00:00:00 2001 From: Luca Boccassi <[email protected]> Date: Fri, 24 Feb 2017 17:37:13 +0000 Subject: [PATCH 3/4] Convert to dh-python2 and debhelper 9 format In order to support both python2 and python3 builds out of the box we need to modernize the packaging a bit. Use debhelper 9 and dh-python2 and set the build system to pybuilder with distutils. The resulting package is the same as the previous one. --- debian/compat | 2 +- debian/control | 4 +++- debian/rules | 63 ++++------------------------------------------------------ 3 files changed, 8 insertions(+), 61 deletions(-) diff --git a/debian/compat b/debian/compat index 7f8f011..ec63514 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -7 +9 diff --git a/debian/control b/debian/control index c59966c..cf17152 100644 --- a/debian/control +++ b/debian/control @@ -3,8 +3,9 @@ Section: python Priority: optional Maintainer: Ritesh Raj Sarraf <[email protected]> Uploaders: Debian Python Modules Team <[email protected]> -Build-Depends: debhelper (>= 7), python-all-dev (>= 2.6.6-3~) +Build-Depends: debhelper (>= 9), python-all-dev (>= 2.6.6-3~), dh-python Standards-Version: 3.9.2 +X-Python-Version: >= 2.7 Vcs-Git: https://anonscm.debian.org/git/python-modules/packages/inotifyx.git Vcs-Browser: https://anonscm.debian.org/cgit/python-modules/packages/inotifyx.git Homepage: http://www.alittletooquiet.net/software/inotifyx/ @@ -12,6 +13,7 @@ Homepage: http://www.alittletooquiet.net/software/inotifyx/ Package: python-inotifyx Architecture: any Depends: ${python:Depends}, ${shlibs:Depends}, ${misc:Depends} +X-Python-Version: >= 2. Provides: ${python:Provides} Description: simple Python binding to the Linux inotify inotifyx is a Python extension providing access to the Linux diff --git a/debian/rules b/debian/rules index 9786d05..32b1ae2 100755 --- a/debian/rules +++ b/debian/rules @@ -1,67 +1,12 @@ #!/usr/bin/make -f -PKG_NAME=inotifyx PKG_VER=$(shell dpkg-parsechangelog | sed -rne 's,^Version: ([^-]+).*,\1,p') -PYVERS=$(shell pyversions -vr) - --include /usr/share/python/python.mk +export PYBUILD_NAME = inotifyx +export PYBUILD_SYSTEM = distutils get-orig-source: uscan --force-download --rename --download-version=$(PKG_VER) --destdir=. -build: build-arch build-indep - -build-arch: $(PYVERS:%=build-python%) - touch $@ - -build-indep: $(PYVERS:%=build-python%) - touch $@ - -build-python%: - dh_testdir - python$* setup.py build - touch $@ - -clean: $(PYVERS:%=clean-python%) - touch $@ - -clean-python%: - dh_testdir - dh_testroot - - python$* setup.py clean --all - [ ! -e html ] || rm -rf html - [ ! -f setuplib.pyc ] || rm -rf setuplib.pyc - - dh_clean - -install: $(PYVERS:%=install-python%) - touch $@ - -install-python%: build - dh_testdir - dh_testroot - dh_installdirs - - python$* setup.py install --root $(CURDIR)/debian/python-inotifyx ${py_setup_install_args} - -binary-indep: build install - -binary-arch: build install - dh_testdir - dh_testroot - dh_installdocs - dh_installchangelogs NEWS - dh_python2 - dh_compress - dh_fixperms - dh_strip - dh_installdeb - dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install get-orig-source +%: + dh $@ --with python2 --buildsystem=pybuild -- 2.1.4
>From 6273caed4b42acad700560d30ddad1daf382dde5 Mon Sep 17 00:00:00 2001 From: Brian Russell <[email protected]> Date: Fri, 24 Feb 2017 17:01:41 +0000 Subject: [PATCH 1/4] python3 compatibility Automated 2to3 changes plus manual fixup to make the code python3 compatible. --- inotifyx/__init__.py | 6 +++--- setup.py | 4 ++-- setuplib.py | 12 ++++++------ tests/__init__.py | 2 +- tests/manager.py | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/inotifyx/__init__.py b/inotifyx/__init__.py index df10385..fcfaa04 100644 --- a/inotifyx/__init__.py +++ b/inotifyx/__init__.py @@ -95,7 +95,7 @@ class InotifyEvent(object): ''' parts = [] - for name, value in constants.items(): + for name, value in list(constants.items()): if self.mask & value: parts.append(name) if parts: @@ -124,7 +124,7 @@ if __name__ == '__main__': import sys if len(sys.argv) == 1: - print >>sys.stderr, 'usage: inotify path [path ...]' + sys.stderr.write('usage: inotify path [path ...]') sys.exit(1) paths = sys.argv[1:] @@ -146,7 +146,7 @@ if __name__ == '__main__': parts = [event.get_mask_description()] if event.name: parts.append(event.name) - print '%s: %s' % (path, ' '.join(parts)) + print('%s: %s' % (path, ' '.join(parts))) except KeyboardInterrupt: pass diff --git a/setup.py b/setup.py index 5564aba..bbd64c1 100755 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ # Author: Forest Bond <[email protected]> # This file is in the public domain. -import os, sys, commands +import os, sys, subprocess from distutils.core import Extension @@ -22,7 +22,7 @@ def get_version(release_file): finally: f.close() except (IOError, OSError): - status, output = commands.getstatusoutput('bzr revno') + status, output = subprocess.getstatusoutput('bzr revno') if status == 0: return 'bzr%s' % output.strip() return 'unknown' diff --git a/setuplib.py b/setuplib.py index cbfd67b..bbd6c74 100644 --- a/setuplib.py +++ b/setuplib.py @@ -1,7 +1,7 @@ # Author: Forest Bond <[email protected]> # This file is in the public domain. -from __future__ import with_statement + import os, sys, shutil from tempfile import mkdtemp @@ -216,8 +216,8 @@ class _DistinfoMixin: def _prepare_distinfo_string(self, value): if isinstance(value, str): - value = unicode(value) - return unicode(repr(value)).encode('utf-8') + value = str(value) + return str(repr(value)).encode('utf-8') def _write_distinfo_module(self, outfile, distinfo = (), imports = ()): distinfo = list(distinfo) @@ -236,7 +236,7 @@ class _DistinfoMixin: log.info(' %s = %s', k, v) if not self.dry_run: - with open(outfile, 'wb') as f: + with open(outfile, 'w') as f: f.write('# coding: utf-8\n') f.write('\n') for modname in imports: @@ -359,8 +359,8 @@ class install_data(_install_data): def _gen_data_files(self, base_dir, data_files): for arg in data_files: - print arg - if isinstance(arg, basestring): + print(arg) + if isinstance(arg, str): yield (base_dir, [arg]) else: subdir, filenames = arg diff --git a/tests/__init__.py b/tests/__init__.py index 4c2d77e..3537ebb 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -46,4 +46,4 @@ def main(**kwargs): def print_names(test_names = None): from tests.manager import manager - print '\n'.join(manager.get_names(test_names)) + print('\n'.join(manager.get_names(test_names))) diff --git a/tests/manager.py b/tests/manager.py index 804ec12..a05f156 100644 --- a/tests/manager.py +++ b/tests/manager.py @@ -77,7 +77,7 @@ class TestManager(object): import coverage as _coverage if int(_coverage.__version__.split('.')[0]) < 3: - print >>sys.stderr, ( + sys.stderr.write( 'warning: coverage versions < 3 ' 'are known to produce imperfect results' ) @@ -94,7 +94,7 @@ class TestManager(object): for test in self.tests: if self.should_run_test(test, test_names): if print_only: - print test.id() + print(test.id()) else: suite.addTest(test) -- 2.1.4

