Subject: [PATCH] gnu: Fix python-aionotify testcases with Python 3.8

From: Lars-Dominik Braun <[email-masked]>
Date: Mon, 13 Jul 2020 17:29:56 +0200

Hi,

python-aionotify’s upstream seems to be dead, so I’m sending a patch that at
least fixes the package with Python 3.8 here in Guix.

Lars

From c0bf6b640a7f91d78b89c4aa86818345c40e44b0 Mon Sep 17 00:00:00 2001
From: Lars-Dominik Braun <[email-masked]>
Date: Mon, 13 Jul 2020 17:25:00 +0200
Subject: [PATCH] gnu: Fix python-aionotify testcases with Python 3.8

* gnu/packages/python-xyz.scm (patches): Add fix.
* gnu/packages/patches/python-aionotify-0.2.0-py3.8.patch: New file.
* gnu/local.mk: Add it.
---
 gnu/local.mk                                  |  1 +
 .../python-aionotify-0.2.0-py3.8.patch        | 48 +++++++++++++++++++
 gnu/packages/python-xyz.scm                   |  4 +-
 3 files changed, 51 insertions(+), 2 deletions(-)
 create mode 100644 gnu/packages/patches/python-aionotify-0.2.0-py3.8.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index ddd024677a..b6d5592ccd 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1437,6 +1437,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-3.8-fix-tests.patch		\
   %D%/packages/patches/python-CVE-2018-14647.patch		\
   %D%/packages/patches/python-aiohttp-3.6.2-no-warning-fail.patch	\
+  %D%/packages/patches/python-aionotify-0.2.0-py3.8.patch	\
   %D%/packages/patches/python-alembic-exceptions-cause.patch	\
   %D%/packages/patches/python-argcomplete-1.11.1-fish31.patch	\
   %D%/packages/patches/python-axolotl-AES-fix.patch		\
diff --git a/gnu/packages/patches/python-aionotify-0.2.0-py3.8.patch b/gnu/packages/patches/python-aionotify-0.2.0-py3.8.patch
new file mode 100644
index 0000000000..ebeef34720
--- /dev/null
+++ b/gnu/packages/patches/python-aionotify-0.2.0-py3.8.patch
@@ -0,0 +1,48 @@
+Compatibility with Python 3.8, see upstream issue
+https://github.com/rbarrois/aionotify/pull/15
+
+diff --git a/setup.py b/setup.py
+index 21a554f..094de64 100755
+--- a/setup.py
++++ b/setup.py
+@@ -40,7 +40,7 @@ setup(
+     setup_requires=[
+     ],
+     tests_require=[
+-        'asynctest',
++        'asynctest; python_version<"3.8"',
+     ],
+     classifiers=[
+         "Development Status :: 4 - Beta",
+diff --git a/tests/test_usage.py b/tests/test_usage.py
+index f156291..0476ff1 100644
+--- a/tests/test_usage.py
++++ b/tests/test_usage.py
+@@ -8,7 +8,11 @@ import os.path
+ import tempfile
+ import unittest
+ 
+-import asynctest
++try:
++    testBase = unittest.IsolatedAsyncioTestCase
++except AttributeError:
++    import asynctest
++    testBase = asynctest.TestCase
+ 
+ import aionotify
+ 
+@@ -25,11 +29,13 @@ if AIODEBUG:
+ TESTDIR = os.environ.get('AIOTESTDIR') or os.path.join(os.path.dirname(__file__), 'testevents')
+ 
+ 
+-class AIONotifyTestCase(asynctest.TestCase):
++class AIONotifyTestCase(testBase):
+     forbid_get_event_loop = True
+     timeout = 3
+ 
+     def setUp(self):
++        if not getattr (self, 'loop', None):
++            self.loop = asyncio.get_event_loop()
+         if AIODEBUG:
+             self.loop.set_debug(True)
+         self.watcher = aionotify.Watcher()
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 6fe2ca0a2e..7739772292 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -19237,9 +19237,9 @@ and cuts down boilerplate code when testing libraries for asyncio.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))))
+        (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))
+       (patches (search-patches "python-aionotify-0.2.0-py3.8.patch"))))
     (build-system python-build-system)
-    (native-inputs `(("python-asynctest" ,python-asynctest)))
     (home-page "https://github.com/rbarrois/aionotify")
     (synopsis "Asyncio-powered inotify library")
     (description
-- 
2.26.2