On Thu 21/01/2021 14:46, Stuart Henderson wrote: > On 2021/01/18 02:52, Daniel Dickman wrote: > > Below diff updates py-tornado to the latest version which is now > > python3-only. > > > > This update is needed so jupyter-notebook can be updated to the latest > > version. > > This broke www/apertium-apy; > > AttributeError: module 'tornado.web' has no attribute 'asynchronous' > > https://github.com/apertium/apertium-apy/pull/169
sthen@ found that www/apertium has been broken because of a recent py-tornado update. A fix is available [0], which - at least - fixes the build issue. 'make test' fails two tests (see attachment), one of which is related to tornado. I'm not sure if these failures are new. Comments/OK? [0] https://github.com/apertium/apertium-apy/pull/149 diff --git Makefile Makefile index 83769d98e18..933d60fef78 100644 --- Makefile +++ Makefile @@ -5,7 +5,7 @@ COMMENT = apertium text translation API in Python DISTNAME = apertium-apy-${MODPY_EGG_VERSION} MODPY_EGG_VERSION = 0.11.6 -REVISION = 0 +REVISION = 1 CATEGORIES = www diff --git patches/patch-apertium_apy_gateway_py patches/patch-apertium_apy_gateway_py new file mode 100644 index 00000000000..f125693caa4 --- /dev/null +++ patches/patch-apertium_apy_gateway_py @@ -0,0 +1,43 @@ +$OpenBSD$ + +tornado6 deprecated web.asynchronous; use gen.coroutine. Taken from +https://github.com/apertium/apertium-apy/pull/149 + +Index: apertium_apy/gateway.py +--- apertium_apy/gateway.py.orig ++++ apertium_apy/gateway.py +@@ -14,6 +14,7 @@ from collections import OrderedDict + import tornado + import tornado.httpclient + import tornado.httpserver ++import tornado.gen + import tornado.web + from tornado.options import enable_pretty_logging # type: ignore + from tornado.web import RequestHandler +@@ -42,7 +43,7 @@ class RedirectRequestHandler(RequestHandler): + def initialize(self, balancer): + self.balancer = balancer + +- @tornado.web.asynchronous ++ @tornado.gen.coroutine + def get(self): + path = self.request.path + mode, lang_pair, per_word_modes = [None] * 3 +@@ -106,7 +107,7 @@ class RedirectRequestHandler(RequestHandler): + self.set_header(hname, hvalue) + self.finish() + +- @tornado.web.asynchronous ++ @tornado.gen.coroutine + def post(self): + self.get() + +@@ -120,7 +121,7 @@ class ListRequestHandler(apy.BaseHandler): + if callbacks: + self.callback = callbacks[0] + +- @tornado.web.asynchronous ++ @tornado.gen.coroutine + def get(self): + logging.info('Overriding list call: %s %s', self.request.path, self.get_arguments('q')) + if self.request.path != '/listPairs' and self.request.path != '/list': diff --git patches/patch-apertium_apy_handlers_base_py patches/patch-apertium_apy_handlers_base_py new file mode 100644 index 00000000000..98bc3dc00ca --- /dev/null +++ patches/patch-apertium_apy_handlers_base_py @@ -0,0 +1,28 @@ +$OpenBSD$ + +tornado6 deprecated web.asynchronous; use gen.coroutine. Taken from +https://github.com/apertium/apertium-apy/pull/149 + +Index: apertium_apy/handlers/base.py +--- apertium_apy/handlers/base.py.orig ++++ apertium_apy/handlers/base.py +@@ -5,6 +5,7 @@ import sys + from datetime import datetime + + import tornado ++import tornado.gen + import tornado.web + from tornado.escape import utf8 + from tornado.locks import Semaphore +@@ -180,9 +181,9 @@ class BaseHandler(tornado.web.RequestHandler): + self.set_header('Access-Control-Allow-Methods', 'GET,POST,OPTIONS') + self.set_header('Access-Control-Allow-Headers', 'accept, cache-control, origin, x-requested-with, x-file-name, content-type') + +- @tornado.web.asynchronous ++ @tornado.gen.coroutine + def post(self): +- self.get() ++ yield self.get() + + def options(self): + self.set_status(204) diff --git patches/patch-apertium_apy_handlers_list_modes_py patches/patch-apertium_apy_handlers_list_modes_py new file mode 100644 index 00000000000..30d4782687a --- /dev/null +++ patches/patch-apertium_apy_handlers_list_modes_py @@ -0,0 +1,22 @@ +$OpenBSD$ + +tornado6 deprecated web.asynchronous; use gen.coroutine. Taken from +https://github.com/apertium/apertium-apy/pull/149 + +Index: apertium_apy/handlers/list_modes.py +--- apertium_apy/handlers/list_modes.py.orig ++++ apertium_apy/handlers/list_modes.py +@@ -1,11 +1,11 @@ +-import tornado.web ++import tornado.gen + + from apertium_apy.handlers.base import BaseHandler + from apertium_apy.utils import to_alpha2_code + + + class ListHandler(BaseHandler): +- @tornado.web.asynchronous ++ @tornado.gen.coroutine + def get(self): + query = self.get_argument('q', default='pairs') + diff --git patches/patch-apertium_apy_handlers_stats_py patches/patch-apertium_apy_handlers_stats_py new file mode 100644 index 00000000000..a8affc16feb --- /dev/null +++ patches/patch-apertium_apy_handlers_stats_py @@ -0,0 +1,23 @@ +$OpenBSD$ + +tornado6 deprecated web.asynchronous; use gen.coroutine. Taken from +https://github.com/apertium/apertium-apy/pull/149 + +Index: apertium_apy/handlers/stats.py +--- apertium_apy/handlers/stats.py.orig ++++ apertium_apy/handlers/stats.py +@@ -1,12 +1,12 @@ + from datetime import datetime, timedelta + +-import tornado.web ++import tornado.gen + + from apertium_apy.handlers.base import BaseHandler + + + class StatsHandler(BaseHandler): +- @tornado.web.asynchronous ++ @tornado.gen.coroutine + def get(self): + num_requests = self.get_argument('requests', 1000) + try: diff --git patches/patch-setup_py patches/patch-setup_py new file mode 100644 index 00000000000..6a6f9e35c68 --- /dev/null +++ patches/patch-setup_py @@ -0,0 +1,14 @@ +$OpenBSD$ + +Index: setup.py +--- setup.py.orig ++++ setup.py +@@ -52,7 +52,7 @@ setup( + 'Programming Language :: Python :: 3 :: Only', + ], + python_requires='>=3.5', +- install_requires=['tornado>=4.2,<6'], ++ install_requires=['tornado>=4.2,<7'], + extras_require={ + 'spelling': ['apertium-streamparser'], + 'suggestions': ['requests'],
running test WARNING: Testing via this command is deprecated and will be removed in a future version. Users looking for a generic test entry point independent of test runner are encouraged to use tox. running egg_info writing apertium_apy.egg-info/PKG-INFO writing dependency_links to apertium_apy.egg-info/dependency_links.txt writing entry points to apertium_apy.egg-info/entry_points.txt writing requirements to apertium_apy.egg-info/requires.txt writing top-level names to apertium_apy.egg-info/top_level.txt reading manifest file 'apertium_apy.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' writing manifest file 'apertium_apy.egg-info/SOURCES.txt' running build_ext [I 210121 18:56:46 apy:119] 0 pair modes found [I 210121 18:56:46 apy:119] 0 analyzer modes found [I 210121 18:56:46 apy:119] 0 generator modes found [I 210121 18:56:46 apy:119] 0 tagger modes found [I 210121 18:56:46 apy:119] 0 spell modes found [I 210121 18:56:46 apy:119] 0 tokenise modes found gateway (unittest.loader._FailedTest) ... ERROR ERROR ====================================================================== ERROR: gateway (unittest.loader._FailedTest) ---------------------------------------------------------------------- ImportError: Failed to import test module: gateway Traceback (most recent call last): File "/usr/local/lib/python3.8/unittest/loader.py", line 154, in loadTestsFromName module = __import__(module_name) File "/tmp/ports/pobj/apertium-apy-0.11.6/apertium-apy-0.11.6/apertium_apy/gateway.py", line 19, in <module> from tornado.options import enable_pretty_logging # type: ignore ImportError: cannot import name 'enable_pretty_logging' from 'tornado.options' (/usr/local/lib/python3.8/site-packages/tornado/options.py) ====================================================================== ERROR: setUpModule (tests.test) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/ports/pobj/apertium-apy-0.11.6/apertium-apy-0.11.6/tests/test.py", line 45, in setUpModule server_handle = subprocess.Popen(coverage_cli_args + [os.path.join(base_path, 'servlet.py')] + cli_args) # TODO: print only on error? File "/usr/local/lib/python3.8/subprocess.py", line 854, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, File "/usr/local/lib/python3.8/subprocess.py", line 1702, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'coverage' ---------------------------------------------------------------------- Ran 1 test in 0.010s FAILED (errors=2) Test failed: <unittest.runner.TextTestResult run=1 errors=2 failures=0> error: Test failed: <unittest.runner.TextTestResult run=1 errors=2 failures=0> *** Error 1 in . (/usr/ports/lang/python/python.port.mk:257 'do-test': @cd /tmp/ports/pobj/apertium-apy-0.11.6/apertium-apy-0.11.6 && /usr/b...)