Hello community,

here is the log from the commit of package python-txaio for openSUSE:Factory 
checked in at 2020-03-27 22:02:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-txaio (Old)
 and      /work/SRC/openSUSE:Factory/.python-txaio.new.3160 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-txaio"

Fri Mar 27 22:02:38 2020 rev:8 rq:789103 version:20.3.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-txaio/python-txaio.changes        
2020-03-25 23:47:31.776064513 +0100
+++ /work/SRC/openSUSE:Factory/.python-txaio.new.3160/python-txaio.changes      
2020-03-27 22:02:49.206985498 +0100
@@ -1,0 +2,21 @@
+Fri Mar 27 15:24:16 UTC 2020 - Matej Cepl <[email protected]>
+
+- Remove pytest4.patch as it is included upstream
+- Switch off python2 builds.
+
+-------------------------------------------------------------------
+Wed Mar 25 14:49:27 UTC 2020 - [email protected]
+
+- version update to 20.3.1
+  - MISC: Remove python2 support
+  - NEW: support import-time framework selection
+
+-------------------------------------------------------------------
+Wed Feb  5 13:11:01 UTC 2020 - Ondřej Súkup <[email protected]>
+
+- update to 20.1.1
+- drop pytest4.patch
+ * new: moved time_ns and perf_counter_ns helper functions here
+ * drop support for python 3.4 and older
+
+-------------------------------------------------------------------

Old:
----
  pytest4.patch
  txaio-18.8.1.tar.gz

New:
----
  txaio-20.3.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-txaio.spec ++++++
--- /var/tmp/diff_new_pack.Hbnctj/_old  2020-03-27 22:02:53.010987711 +0100
+++ /var/tmp/diff_new_pack.Hbnctj/_new  2020-03-27 22:02:53.010987711 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-txaio
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,15 +17,15 @@
 
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
+%define skip_python2 1
 Name:           python-txaio
-Version:        18.8.1
+Version:        20.3.1
 Release:        0
 Summary:        WebSocket and WAMP in Python for Twisted and asyncio
 License:        MIT
 Group:          Development/Languages/Python
 URL:            https://github.com/crossbario/txaio
 Source:         
https://files.pythonhosted.org/packages/source/t/txaio/txaio-%{version}.tar.gz
-Patch0:         pytest4.patch
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros

++++++ txaio-18.8.1.tar.gz -> txaio-20.3.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/PKG-INFO new/txaio-20.3.1/PKG-INFO
--- old/txaio-18.8.1/PKG-INFO   2018-08-31 12:06:05.000000000 +0200
+++ new/txaio-20.3.1/PKG-INFO   2020-03-22 21:14:04.671030800 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: txaio
-Version: 18.8.1
+Version: 20.3.1
 Summary: Compatibility API between asyncio/Twisted/Trollius
 Home-page: https://github.com/crossbario/txaio
 Author: Crossbar.io Technologies GmbH
@@ -30,19 +30,12 @@
         Platform support
         ----------------
         
-        **txaio** runs on CPython 2.7/3.3+ and PyPy 2/3, on top of Twisted or 
asyncio. Specifically, **txaio** is tested on the following platforms:
+        **txaio** runs on CPython 3.5+ and PyPy 3, on top of *Twisted* or 
*asyncio*. Specifically, **txaio** is tested on the following platforms:
         
-        **Python 2:**
+        * CPython 3.5, 3.7 and 3.8 on Twisted 18.7, 19.10, trunk and on 
asyncio (stdlib)
+        * PyPy 3 on Twisted 18.7, 19.10, trunk and on asyncio (stdlib)
         
-        * CPython 2.7 on Twisted 12.1, 13.2, 15.4, 16.5, trunk and on Trollius 
2.0
-        * PyPy 2 on Twisted 12.1, 13.2, 15.4, 16.5, trunk and on Trollius 2.0
-        
-        **Python 3:**
-        
-        * CPython 3.4 on Twisted 15.4, 16.5, trunk and on asyncio (stdlib)
-        * CPython 3.5 on Twisted 15.4, 16.5, trunk and on asyncio (stdlib)
-        * CPython 3.6 on Twisted 15.4, 16.5, trunk and on asyncio (stdlib)
-        * PyPy 3 on Twisted 15.4, 16.5, trunk and on asyncio (stdlib)
+        > Note: txaio up to version 18.8.1 also supported Python 2.7 and 
Python 3.4. Beginning with release v20.1.1, txaio only supports Python 3.5+.
         
         
         How it works
@@ -97,19 +90,17 @@
 Classifier: Intended Audience :: Developers
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.3
-Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Software Development :: Libraries
 Classifier: Topic :: Software Development :: Libraries :: Application 
Frameworks
-Provides-Extra: asyncio
-Provides-Extra: twisted
+Requires-Python: >=3.5
 Provides-Extra: all
+Provides-Extra: asyncio
 Provides-Extra: dev
+Provides-Extra: twisted
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/README.rst new/txaio-20.3.1/README.rst
--- old/txaio-18.8.1/README.rst 2018-08-01 21:55:55.000000000 +0200
+++ new/txaio-20.3.1/README.rst 2020-01-21 18:42:32.000000000 +0100
@@ -22,19 +22,12 @@
 Platform support
 ----------------
 
-**txaio** runs on CPython 2.7/3.3+ and PyPy 2/3, on top of Twisted or asyncio. 
Specifically, **txaio** is tested on the following platforms:
+**txaio** runs on CPython 3.5+ and PyPy 3, on top of *Twisted* or *asyncio*. 
Specifically, **txaio** is tested on the following platforms:
 
-**Python 2:**
+* CPython 3.5, 3.7 and 3.8 on Twisted 18.7, 19.10, trunk and on asyncio 
(stdlib)
+* PyPy 3 on Twisted 18.7, 19.10, trunk and on asyncio (stdlib)
 
-* CPython 2.7 on Twisted 12.1, 13.2, 15.4, 16.5, trunk and on Trollius 2.0
-* PyPy 2 on Twisted 12.1, 13.2, 15.4, 16.5, trunk and on Trollius 2.0
-
-**Python 3:**
-
-* CPython 3.4 on Twisted 15.4, 16.5, trunk and on asyncio (stdlib)
-* CPython 3.5 on Twisted 15.4, 16.5, trunk and on asyncio (stdlib)
-* CPython 3.6 on Twisted 15.4, 16.5, trunk and on asyncio (stdlib)
-* PyPy 3 on Twisted 15.4, 16.5, trunk and on asyncio (stdlib)
+> Note: txaio up to version 18.8.1 also supported Python 2.7 and Python 3.4. 
Beginning with release v20.1.1, txaio only supports Python 3.5+.
 
 
 How it works
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/docs/conf.py 
new/txaio-20.3.1/docs/conf.py
--- old/txaio-18.8.1/docs/conf.py       2018-08-01 21:55:55.000000000 +0200
+++ new/txaio-20.3.1/docs/conf.py       2020-01-21 18:42:32.000000000 +0100
@@ -94,13 +94,13 @@
 master_doc = 'contents'
 
 # General information about the project.
-project = u'txaio'
-author = u'Crossbar.io Project'
-this_year = u'{0}'.format(time.strftime('%Y'))
-if this_year != u'2015':
-    copyright = u'2015-{0}, Crossbar.io Technologies GmbH'.format(this_year)
+project = 'txaio'
+author = 'Crossbar.io Project'
+this_year = '{0}'.format(time.strftime('%Y'))
+if this_year != '2015':
+    copyright = '2015-{0}, Crossbar.io Technologies GmbH'.format(this_year)
 else:
-    copyright = u'2015, Crossbar.io Technologies GmbH'
+    copyright = '2015, Crossbar.io Technologies GmbH'
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/docs/index.rst 
new/txaio-20.3.1/docs/index.rst
--- old/txaio-18.8.1/docs/index.rst     2018-08-01 21:55:55.000000000 +0200
+++ new/txaio-20.3.1/docs/index.rst     2020-01-21 18:42:32.000000000 +0100
@@ -22,19 +22,12 @@
 Platform support
 ----------------
 
-**txaio** runs on CPython 2.7/3.3+ and PyPy 2/3, on top of Twisted or asyncio. 
Specifically, **txaio** is tested on the following platforms:
+**txaio** runs on CPython 3.5+ and PyPy 3, on top of *Twisted* or *asyncio*. 
Specifically, **txaio** is tested on the following platforms:
 
-**Python 2:**
+* CPython 3.5, 3.7 and 3.8 on Twisted 18.7, 19.10, trunk and on asyncio 
(stdlib)
+* PyPy 3 on Twisted 18.7, 19.10, trunk and on asyncio (stdlib)
 
-* CPython 2.7 on Twisted 12.1, 13.2, 15.4, 16.5, trunk and on Trollius 2.0
-* PyPy 2 on Twisted 12.1, 13.2, 15.4, 16.5, trunk and on Trollius 2.0
-
-**Python 3:**
-
-* CPython 3.4 on Twisted 15.4, 16.5, trunk and on asyncio (stdlib)
-* CPython 3.5 on Twisted 15.4, 16.5, trunk and on asyncio (stdlib)
-* CPython 3.6 on Twisted 15.4, 16.5, trunk and on asyncio (stdlib)
-* PyPy 3 on Twisted 15.4, 16.5, trunk and on asyncio (stdlib)
+> Note: txaio up to version 18.8.1 also supported Python 2.7 and Python 3.4. 
Beginning with release v20.1.1, txaio only supports Python 3.5+.
 
 
 How it works
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/docs/releases.rst 
new/txaio-20.3.1/docs/releases.rst
--- old/txaio-18.8.1/docs/releases.rst  2018-08-31 12:05:20.000000000 +0200
+++ new/txaio-20.3.1/docs/releases.rst  2020-03-22 21:06:20.000000000 +0100
@@ -1,15 +1,22 @@
 txio releases
 =============
 
-master
+20.3.1
 ------
 
-- ...
+- MISC: Remove python2 support
+- NEW: support import-time framework selection
 
+20.1.1
+------
+
+- IMPORTANT: beginning release v20.1.1, we only support Python 3.5 or later
+- new: moved ``time_ns`` and ``perf_counter_ns`` helper functions here
 
 18.8.1
 ------
 
+* IMPORTANT: release v18.8.1 is the last release supporting Python 2. We will 
support Python 3.5 and later beginning with release v20.1.1.
 - add API to support cancellation; this means passing a 1-argument
   callable to ``create_future`` and ``txaio.cancel`` to actually
   cancel a future
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/examples/basic.py 
new/txaio-20.3.1/examples/basic.py
--- old/txaio-18.8.1/examples/basic.py  2018-08-01 21:55:55.000000000 +0200
+++ new/txaio-20.3.1/examples/basic.py  2020-01-21 18:42:32.000000000 +0100
@@ -24,7 +24,6 @@
 #
 ###############################################################################
 
-from __future__ import print_function
 import txaio
 txaio.use_twisted()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/examples/log_interop_stdlib.py 
new/txaio-20.3.1/examples/log_interop_stdlib.py
--- old/txaio-18.8.1/examples/log_interop_stdlib.py     2018-08-01 
21:55:55.000000000 +0200
+++ new/txaio-20.3.1/examples/log_interop_stdlib.py     2020-01-21 
18:42:32.000000000 +0100
@@ -24,7 +24,6 @@
 #
 ###############################################################################
 
-from __future__ import print_function
 import sys
 import logging
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/examples/log_interop_twisted.py 
new/txaio-20.3.1/examples/log_interop_twisted.py
--- old/txaio-18.8.1/examples/log_interop_twisted.py    2018-08-01 
21:55:55.000000000 +0200
+++ new/txaio-20.3.1/examples/log_interop_twisted.py    2020-01-21 
18:42:32.000000000 +0100
@@ -24,7 +24,6 @@
 #
 ###############################################################################
 
-from __future__ import print_function
 import sys
 import txaio
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/examples/multiloop.py 
new/txaio-20.3.1/examples/multiloop.py
--- old/txaio-18.8.1/examples/multiloop.py      2018-08-01 21:55:55.000000000 
+0200
+++ new/txaio-20.3.1/examples/multiloop.py      2020-01-21 18:42:32.000000000 
+0100
@@ -24,7 +24,6 @@
 #
 ###############################################################################
 
-from __future__ import print_function
 
 # This example only works with asyncio
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/setup.py new/txaio-20.3.1/setup.py
--- old/txaio-18.8.1/setup.py   2018-08-31 12:05:20.000000000 +0200
+++ new/txaio-20.3.1/setup.py   2020-01-21 18:42:32.000000000 +0100
@@ -24,15 +24,12 @@
 #
 ###############################################################################
 
-from __future__ import absolute_import
 
 import sys
 import platform
 from setuptools import setup
 
 CPY = platform.python_implementation() == 'CPython'
-PY3 = sys.version_info >= (3,)
-PY33 = (3, 3) <= sys.version_info < (3, 4)
 
 with open('txaio/_version.py') as f:
     exec(f.read())  # defines __version__
@@ -48,23 +45,9 @@
     'twisted>=12.1.0',                  # MIT
 ]
 
-# asyncio dependencies
+# asyncio dependencies: Python 3.5+ has asyncio builtin
 #
-if PY3:
-    if PY33:
-        # "Tulip"
-        extras_require_asyncio = [
-            "asyncio>=3.4.3"            # Apache 2.0
-        ]
-    else:
-        # Python 3.4+ has asyncio builtin
-        extras_require_asyncio = []
-else:
-    # backport of asyncio for Python 2
-    extras_require_asyncio = [
-        "trollius>=2.0",                # Apache 2.0
-        "futures>=3.0.3"                # BSD license
-    ]
+extras_require_asyncio = []
 
 # development dependencies
 #
@@ -97,9 +80,7 @@
     author_email='[email protected]',
     url='https://github.com/crossbario/txaio',
     platforms=('Any'),
-    install_requires=[
-        'six'
-    ],
+    python_requires='>=3.5',
     extras_require={
         'twisted': extras_require_twisted,
         'asyncio': extras_require_asyncio,
@@ -129,14 +110,11 @@
         "Intended Audience :: Developers",
         "Operating System :: OS Independent",
         "Programming Language :: Python",
-        "Programming Language :: Python :: 2",
-        "Programming Language :: Python :: 2.7",
         "Programming Language :: Python :: 3",
-        "Programming Language :: Python :: 3.3",
-        "Programming Language :: Python :: 3.4",
         "Programming Language :: Python :: 3.5",
         "Programming Language :: Python :: 3.6",
         "Programming Language :: Python :: 3.7",
+        "Programming Language :: Python :: 3.8",
         "Programming Language :: Python :: Implementation :: CPython",
         "Programming Language :: Python :: Implementation :: PyPy",
         "Topic :: Software Development :: Libraries",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/test/_asyncio_test_utils.py 
new/txaio-20.3.1/test/_asyncio_test_utils.py
--- old/txaio-18.8.1/test/_asyncio_test_utils.py        2018-08-31 
12:05:20.000000000 +0200
+++ new/txaio-20.3.1/test/_asyncio_test_utils.py        2020-01-21 
18:42:32.000000000 +0100
@@ -55,15 +55,15 @@
     'caIssuers': ('http://testca.pythontest.net/testca/pycacert.cer',),
     'crlDistributionPoints': 
('http://testca.pythontest.net/testca/revocation.crl',),
     'issuer': ((('countryName', 'XY'),),
-            (('organizationName', 'Python Software Foundation CA'),),
-            (('commonName', 'our-ca-server'),)),
+               (('organizationName', 'Python Software Foundation CA'),),
+               (('commonName', 'our-ca-server'),)),
     'notAfter': 'Jul  7 14:23:16 2028 GMT',
     'notBefore': 'Aug 29 14:23:16 2018 GMT',
     'serialNumber': 'CB2D80995A69525C',
     'subject': ((('countryName', 'XY'),),
-             (('localityName', 'Castle Anthrax'),),
-             (('organizationName', 'Python Software Foundation'),),
-             (('commonName', 'localhost'),)),
+                (('localityName', 'Castle Anthrax'),),
+                (('organizationName', 'Python Software Foundation'),),
+                (('commonName', 'localhost'),)),
     'subjectAltName': (('DNS', 'localhost'),),
     'version': 3
 }
@@ -212,7 +212,6 @@
             self.server_name = '127.0.0.1'
             self.server_port = 80
 
-
     class UnixWSGIServer(UnixHTTPServer, WSGIServer):
 
         request_timeout = 2
@@ -232,22 +231,18 @@
             # to get the tests going
             return request, ('127.0.0.1', '')
 
-
     class SilentUnixWSGIServer(UnixWSGIServer):
 
         def handle_error(self, request, client_address):
             pass
 
-
     class UnixSSLWSGIServer(SSLWSGIServerMixin, SilentUnixWSGIServer):
         pass
 
-
     def gen_unix_socket_path():
         with tempfile.NamedTemporaryFile() as file:
             return file.name
 
-
     @contextlib.contextmanager
     def unix_socket_path():
         path = gen_unix_socket_path()
@@ -259,7 +254,6 @@
             except OSError:
                 pass
 
-
     @contextlib.contextmanager
     def run_test_unix_server(*, use_ssl=False):
         with unix_socket_path() as path:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/test/conftest.py 
new/txaio-20.3.1/test/conftest.py
--- old/txaio-18.8.1/test/conftest.py   2018-08-01 21:55:55.000000000 +0200
+++ new/txaio-20.3.1/test/conftest.py   2020-01-10 21:26:31.000000000 +0100
@@ -25,9 +25,9 @@
 
     try:
         if request.param == 'twisted':
-            return framework_tx()
+            return _notfixture_framework_tx()
         elif request.param == 'asyncio':
-            return framework_aio()
+            return _notfixture_framework_aio()
     except ImportError:
         pytest.skip()
 
@@ -43,6 +43,10 @@
 
 @pytest.fixture
 def framework_tx():
+    return _notfixture_framework_tx()
+
+
+def _notfixture_framework_tx():
     try:
         import txaio
         from txaio import tx
@@ -56,6 +60,10 @@
 
 @pytest.fixture
 def framework_aio():
+    return _notfixture_framework_aio()
+
+
+def _notfixture_framework_aio():
     try:
         import txaio
         from txaio import aio
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/test/test_legacy_logging.py 
new/txaio-20.3.1/test/test_legacy_logging.py
--- old/txaio-18.8.1/test/test_legacy_logging.py        2018-08-01 
21:55:55.000000000 +0200
+++ new/txaio-20.3.1/test/test_legacy_logging.py        2020-01-21 
18:42:32.000000000 +0100
@@ -24,7 +24,6 @@
 #
 ###############################################################################
 
-from __future__ import print_function
 
 import txaio
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/test/test_logging.py 
new/txaio-20.3.1/test/test_logging.py
--- old/txaio-18.8.1/test/test_logging.py       2018-08-01 21:55:55.000000000 
+0200
+++ new/txaio-20.3.1/test/test_logging.py       2020-01-21 18:42:32.000000000 
+0100
@@ -24,13 +24,11 @@
 #
 ###############################################################################
 
-from __future__ import print_function
 
 from collections import namedtuple
 from io import BytesIO, StringIO
 
 import os
-import six
 import pytest
 import txaio
 
@@ -79,7 +77,7 @@
     """
     logger = txaio.make_logger()
 
-    txaio.add_log_categories({"TX100": u"{adjective} {nouns[2]}"})
+    txaio.add_log_categories({"TX100": "{adjective} {nouns[2]}"})
 
     # do something a little fancy, with attribute access etc.
     logger.critical(
@@ -100,8 +98,8 @@
     """
     logger = txaio.make_logger()
 
-    txaio.add_log_categories({"TX100": u"{adjective} {nouns[2]}"})
-    txaio.add_log_categories({"TX100": u"{adjective} {nouns[1]}"})
+    txaio.add_log_categories({"TX100": "{adjective} {nouns[2]}"})
+    txaio.add_log_categories({"TX100": "{adjective} {nouns[1]}"})
 
     # do something a little fancy, with attribute access etc.
     logger.critical(
@@ -291,7 +289,7 @@
     from twisted.logger import Logger
     from txaio.tx import _LogObserver
 
-    out = six.StringIO()
+    out = StringIO()
     observer = _LogObserver(out)
     logger = Logger(observer=observer)
 
@@ -344,7 +342,7 @@
     })
 
     output = out_file.getvalue()
-    assert u"hi: hello" in output
+    assert "hi: hello" in output
 
 
 def test_aiolog_write_binary(handler, framework_aio):
@@ -384,4 +382,4 @@
     }))
 
     output = out_file.getvalue()
-    assert u"hi: hello" in output
+    assert "hi: hello" in output
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/test/test_util.py 
new/txaio-20.3.1/test/test_util.py
--- old/txaio-18.8.1/test/test_util.py  1970-01-01 01:00:00.000000000 +0100
+++ new/txaio-20.3.1/test/test_util.py  2020-01-21 18:42:32.000000000 +0100
@@ -0,0 +1,37 @@
+###############################################################################
+#
+# The MIT License (MIT)
+#
+# Copyright (c) Crossbar.io Technologies GmbH
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+###############################################################################
+
+import txaio
+
+
+def test_time_ns(framework):
+    now = txaio.time_ns()
+    assert now > 0
+
+
+def test_perf_counter_ns(framework):
+    now = txaio.perf_counter_ns()
+    assert now > 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/tox.ini new/txaio-20.3.1/tox.ini
--- old/txaio-18.8.1/tox.ini    2018-08-31 12:05:20.000000000 +0200
+++ new/txaio-20.3.1/tox.ini    2020-01-21 18:42:32.000000000 +0100
@@ -3,35 +3,24 @@
     flake8
 
     # CPython
-    py27-{tw154,tw165,tw187,twtrunk,asyncio}
-    py34-{tw154,tw165,tw187,twtrunk,asyncio}
-    py35-{tw154,tw165,tw187,twtrunk,asyncio}
-    py36-{tw154,tw165,tw187,twtrunk,asyncio}
-    py37-{tw154,tw165,tw187,twtrunk,asyncio}
+    py35-{tw187,tw1910,twtrunk,asyncio}
+    py37-{tw165,tw187,tw1910,twtrunk,asyncio}
+    py38-{tw165,tw187,tw1910,twtrunk,asyncio}
 
     # PyPy
-    pypy-{tw154,tw165,tw187,twtrunk,asyncio}
-    pypy3-{tw154,tw165,tw187,twtrunk,asyncio}
+    pypy3-{tw187,tw1910,twtrunk,asyncio}
 
 [testenv]
 deps =
-    six
     mock
-    pytest
-    coverage==4.0
+    pytest==4.6.9
+    coverage==4.5.4
 
     ; twisted dependencies
-    tw154: twisted==15.4.0
-    tw165: twisted==16.5.0
     tw187: twisted==18.7.0
+    tw1910: twisted==19.10.0
     twtrunk: https://github.com/twisted/twisted/archive/trunk.zip
-    {tw154,tw165,tw187,twtrunk}: pytest-twisted
-
-    ; asyncio dependencies
-    py26-asyncio: trollius>=2.0
-    py26-asyncio: ordereddict
-    py27-asyncio: trollius>=2.0
-    pypy-asyncio: trollius>=2.0
+    {tw187,tw1910,twtrunk}: pytest-twisted==1.10
 
 changedir=test
 
@@ -44,7 +33,6 @@
 # -s: show output immediately
 # -v: one line per test, instead of one dot
 
-
 [testenv:flake8]
 deps =
     flake8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/txaio/__init__.py 
new/txaio-20.3.1/txaio/__init__.py
--- old/txaio-18.8.1/txaio/__init__.py  2018-08-31 09:04:36.000000000 +0200
+++ new/txaio-20.3.1/txaio/__init__.py  2020-02-04 18:37:55.000000000 +0100
@@ -24,7 +24,6 @@
 #
 ###############################################################################
 
-from __future__ import absolute_import
 
 from txaio._version import __version__
 from txaio.interfaces import IFailedFuture, ILogger
@@ -33,7 +32,7 @@
 
 # This is the API
 # see tx.py for Twisted implementation
-# see aio.py for asyncio/trollius implementation
+# see aio.py for asyncio implementation
 
 
 class _Config(object):
@@ -97,6 +96,8 @@
     'ILogger',                  # API for logging
 
     'sleep',                    # little helper for inline sleeping
+    'time_ns',                  # helper: current time (UTC) in ns
+    'perf_counter_ns',          # helper: current performance counter in ns
 )
 
 
@@ -136,8 +137,7 @@
     for method_name in __all__:
         if method_name in ['use_twisted', 'use_asyncio']:
             continue
-        setattr(txaio, method_name,
-                getattr(module, method_name))
+        setattr(txaio, method_name, getattr(module, method_name))
 
 
 # use the "un-framework", which is neither asyncio nor twisted and
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/txaio/_common.py 
new/txaio-20.3.1/txaio/_common.py
--- old/txaio-18.8.1/txaio/_common.py   2018-08-01 21:55:55.000000000 +0200
+++ new/txaio-20.3.1/txaio/_common.py   2020-02-04 18:37:55.000000000 +0100
@@ -1,3 +1,28 @@
+###############################################################################
+#
+# The MIT License (MIT)
+#
+# Copyright (c) Crossbar.io Technologies GmbH
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+###############################################################################
 
 import math
 from txaio.interfaces import IBatchedTimer
@@ -99,9 +124,9 @@
             else:
                 # done all calls; make sure there were no errors
                 if len(errors):
-                    msg = u"Error(s) processing call_later bucket:\n"
+                    msg = "Error(s) processing call_later bucket:\n"
                     for e in errors:
-                        msg += u"{}\n".format(e)
+                        msg += "{}\n".format(e)
                     raise RuntimeError(msg)
         # ceil()ing because we want the number of chunks, and a
         # partial chunk is still a chunk
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/txaio/_iotype.py 
new/txaio-20.3.1/txaio/_iotype.py
--- old/txaio-18.8.1/txaio/_iotype.py   2018-08-01 21:55:55.000000000 +0200
+++ new/txaio-20.3.1/txaio/_iotype.py   2020-01-21 18:42:32.000000000 +0100
@@ -24,15 +24,6 @@
 #
 ###############################################################################
 
-from __future__ import absolute_import, division
-
-from six import PY3, PY2
-
-if PY3:
-    unicode = str
-else:
-    unicode = unicode
-
 
 def guess_stream_needs_encoding(fileobj, default=True):
     """
@@ -55,7 +46,7 @@
 
         if t is bytes:
             return True
-        elif t is unicode:
+        elif t is str:
             return False
 
     except Exception:
@@ -64,9 +55,6 @@
     try:
         mode = fileobj.mode
 
-        if PY2 and mode == "w":
-            mode = "wb"
-
         if "b" in mode:
             return True
         else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/txaio/_unframework.py 
new/txaio-20.3.1/txaio/_unframework.py
--- old/txaio-18.8.1/txaio/_unframework.py      2018-08-31 09:04:36.000000000 
+0200
+++ new/txaio-20.3.1/txaio/_unframework.py      2020-01-21 18:42:32.000000000 
+0100
@@ -30,7 +30,6 @@
 explicitly by calling .use_twisted() or .use_asyncio()
 """
 
-from __future__ import absolute_import, division, print_function
 from txaio import _Config
 
 using_twisted = False
@@ -79,3 +78,5 @@
 ILogger = _throw_usage_error
 
 sleep = _throw_usage_error
+time_ns = _throw_usage_error
+perf_counter_ns = _throw_usage_error
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/txaio/_util.py 
new/txaio-20.3.1/txaio/_util.py
--- old/txaio-18.8.1/txaio/_util.py     1970-01-01 01:00:00.000000000 +0100
+++ new/txaio-20.3.1/txaio/_util.py     2020-01-21 18:42:32.000000000 +0100
@@ -0,0 +1,48 @@
+###############################################################################
+#
+# The MIT License (MIT)
+#
+# Copyright (c) Crossbar.io Technologies GmbH
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+###############################################################################
+
+import sys
+import time
+
+
+if sys.version_info >= (3, 7):
+
+    time_ns = time.time_ns
+    perf_counter_ns = time.perf_counter_ns
+
+else:
+
+    def time_ns():
+        """
+        Shim for standard library time.time_ns for Python < 3.7.
+        """
+        return int(time.time() * 1000000000.)
+
+    def perf_counter_ns():
+        """
+        Shim for standard library time.perf_counter for Python < 3.7.
+        """
+        return int(time.perf_counter() * 1000000000.)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/txaio/_version.py 
new/txaio-20.3.1/txaio/_version.py
--- old/txaio-18.8.1/txaio/_version.py  2018-08-31 12:05:20.000000000 +0200
+++ new/txaio-20.3.1/txaio/_version.py  2020-03-22 21:06:20.000000000 +0100
@@ -1 +1,27 @@
-__version__ = u'18.8.1'
+###############################################################################
+#
+# The MIT License (MIT)
+#
+# Copyright (c) Crossbar.io Technologies GmbH
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+###############################################################################
+
+__version__ = '20.3.1'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/txaio/aio.py 
new/txaio-20.3.1/txaio/aio.py
--- old/txaio-18.8.1/txaio/aio.py       2018-08-31 09:04:36.000000000 +0200
+++ new/txaio-20.3.1/txaio/aio.py       2020-03-22 21:06:20.000000000 +0100
@@ -24,8 +24,15 @@
 #
 ###############################################################################
 
-from __future__ import absolute_import, print_function
-
+import asyncio
+from asyncio import iscoroutine
+from asyncio import Future
+try:
+    from types import AsyncGeneratorType
+except ImportError:
+    class AsyncGeneratorType:
+        pass
+import io
 import os
 import sys
 import time
@@ -40,55 +47,9 @@
 from txaio.interfaces import IFailedFuture, ILogger, log_levels
 from txaio._iotype import guess_stream_needs_encoding
 from txaio._common import _BatchedTimer
+from txaio import _util
 from txaio import _Config
 
-import six
-
-try:
-    import asyncio
-    from asyncio import iscoroutine
-    from asyncio import Future
-
-except ImportError:
-    # Trollius >= 0.3 was renamed
-    # noinspection PyUnresolvedReferences
-    import trollius as asyncio
-    from trollius import iscoroutine
-    from trollius import Future
-
-try:
-    from types import AsyncGeneratorType  # python 3.5+
-except ImportError:
-    class AsyncGeneratorType(object):
-        pass
-
-
-def _create_future_of_loop(loop):
-    return loop.create_future()
-
-
-def _create_future_directly(loop=None):
-    return Future(loop=loop)
-
-
-def _create_task_of_loop(res, loop):
-    return loop.create_task(res)
-
-
-def _create_task_directly(res, loop=None):
-    return asyncio.Task(res, loop=loop)
-
-
-if sys.version_info >= (3, 4, 2):
-    _create_task = _create_task_of_loop
-    if sys.version_info >= (3, 5, 2):
-        _create_future = _create_future_of_loop
-    else:
-        _create_future = _create_future_directly
-else:
-    _create_task = _create_task_directly
-    _create_future = _create_future_directly
-
 
 config = _Config()
 
@@ -237,7 +198,7 @@
         if isinstance(record.args, dict):
             fmt = record.args.get(
                 'log_format',
-                record.args.get('log_message', u'')
+                record.args.get('log_message', '')
             )
             message = fmt.format(**record.args)
             dt = datetime.fromtimestamp(record.args.get('log_time', 0))
@@ -248,7 +209,7 @@
                 for line in traceback.format_exception(*record.exc_info):
                     message = message + line
             dt = datetime.fromtimestamp(record.created)
-        msg = u'{0} {1}{2}'.format(
+        msg = '{0} {1}{2}'.format(
             dt.strftime("%Y-%m-%dT%H:%M:%S%z"),
             message,
             os.linesep
@@ -358,12 +319,12 @@
         returns a unicode error-message
         """
         try:
-            return u'{0}: {1}'.format(
+            return '{0}: {1}'.format(
                 fail._value.__class__.__name__,
                 str(fail._value),
             )
         except Exception:
-            return u'Failed to produce failure message for "{0}"'.format(fail)
+            return 'Failed to produce failure message for "{0}"'.format(fail)
 
     def failure_traceback(self, fail):
         """
@@ -378,7 +339,7 @@
         returns a string
         """
         try:
-            f = six.StringIO()
+            f = io.StringIO()
             traceback.print_exception(
                 fail._type,
                 fail.value,
@@ -387,13 +348,13 @@
             )
             return f.getvalue()
         except Exception:
-            return u"Failed to format failure traceback for '{0}'".format(fail)
+            return "Failed to format failure traceback for '{0}'".format(fail)
 
     def create_future(self, result=_unspecified, error=_unspecified, 
canceller=_unspecified):
         if result is not _unspecified and error is not _unspecified:
             raise ValueError("Cannot have both result and error.")
 
-        f = _create_future(loop=self._config.loop)
+        f = self._config.loop.create_future()
         if result is not _unspecified:
             resolve(f, result)
         elif error is not _unspecified:
@@ -430,7 +391,7 @@
             if isinstance(res, Future):
                 return res
             elif iscoroutine(res):
-                return _create_task(res, loop=self._config.loop)
+                return self._config.loop.create_task(res)
             elif isinstance(res, AsyncGeneratorType):
                 raise RuntimeError(
                     "as_future() received an async generator function; does "
@@ -571,3 +532,5 @@
 add_callbacks = _default_api.add_callbacks
 gather = _default_api.gather
 sleep = _default_api.sleep
+time_ns = _util.time_ns
+perf_counter_ns = _util.perf_counter_ns
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/txaio/interfaces.py 
new/txaio-20.3.1/txaio/interfaces.py
--- old/txaio-18.8.1/txaio/interfaces.py        2018-08-01 21:55:55.000000000 
+0200
+++ new/txaio-20.3.1/txaio/interfaces.py        2020-02-04 18:37:55.000000000 
+0100
@@ -24,10 +24,7 @@
 #
 ###############################################################################
 
-from __future__ import absolute_import
-
 import abc
-import six
 
 #: all the log-levels that txaio recognizes
 log_levels = [
@@ -41,8 +38,7 @@
 ]
 
 
[email protected]_metaclass(abc.ABCMeta)
-class IBatchedTimer(object):
+class IBatchedTimer(abc.ABC):
     """
     Objects created by :met:`txaio.make_batched_timer` implement this
     interface.
@@ -81,8 +77,7 @@
         """
 
 
[email protected]_metaclass(abc.ABCMeta)
-class ILogger(object):
+class ILogger(abc.ABC):
     """
     This defines the methods you can call on the object returned from
     :meth:`txaio.make_logger` -- although the actual object may have
@@ -156,8 +151,7 @@
         "log a trace-level message"
 
 
[email protected]_metaclass(abc.ABCMeta)
-class IFailedFuture(object):
+class IFailedFuture(abc.ABC):
     """
     This defines the interface for a common object encapsulating a
     failure from either an asyncio task/coroutine or a Twisted
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/txaio/testutil.py 
new/txaio-20.3.1/txaio/testutil.py
--- old/txaio-18.8.1/txaio/testutil.py  2018-08-01 21:55:55.000000000 +0200
+++ new/txaio-20.3.1/txaio/testutil.py  2020-02-04 18:37:55.000000000 +0100
@@ -24,8 +24,6 @@
 #
 ###############################################################################
 
-from __future__ import absolute_import
-
 import txaio
 from contextlib import contextmanager
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/txaio/tx.py new/txaio-20.3.1/txaio/tx.py
--- old/txaio-18.8.1/txaio/tx.py        2018-08-31 09:04:36.000000000 +0200
+++ new/txaio-20.3.1/txaio/tx.py        2020-02-04 18:37:55.000000000 +0100
@@ -24,8 +24,7 @@
 #
 ###############################################################################
 
-from __future__ import absolute_import, division, print_function
-
+import io
 import os
 import sys
 import weakref
@@ -44,17 +43,12 @@
 from txaio._iotype import guess_stream_needs_encoding
 from txaio import _Config
 from txaio._common import _BatchedTimer
+from txaio import _util
+from twisted.logger import Logger as _Logger, formatEvent, ILogObserver
+from twisted.logger import globalLogBeginner, formatTime, LogLevel
 
-import six
-
-PY3_CORO = False
-if six.PY3:
-    try:
-        from twisted.internet.defer import ensureDeferred
-        from asyncio import iscoroutinefunction
-        PY3_CORO = True
-    except ImportError:
-        pass
+from twisted.internet.defer import ensureDeferred
+from asyncio import iscoroutinefunction
 
 using_twisted = True
 using_asyncio = False
@@ -76,59 +70,7 @@
 _categories = {}
 
 IFailedFuture.register(Failure)
-
-_NEW_LOGGER = False
-try:
-    # Twisted 15+
-    from twisted.logger import Logger as _Logger, formatEvent, ILogObserver
-    from twisted.logger import globalLogBeginner, formatTime, LogLevel
-    ILogger.register(_Logger)
-    _NEW_LOGGER = True
-
-except ImportError:
-    # we still support Twisted 12 and 13, which doesn't have new-logger
-    from zope.interface import Interface
-    from datetime import datetime
-    import time
-
-    # provide our own simple versions of what Twisted new-logger does
-
-    class ILogObserver(Interface):
-        pass
-
-    def formatTime(t):  # noqa
-        dt = datetime.fromtimestamp(t)
-        return six.u(dt.strftime("%Y-%m-%dT%H:%M:%S%z"))
-
-    def formatEvent(event):  # noqa
-        msg = event['log_format']
-        return msg.format(**event)
-
-    class LogLevel:
-        critical = 'critical'
-        error = 'error'
-        warn = 'warn'
-        info = 'info'
-        debug = 'debug'
-        trace = 'trace'
-
-        @classmethod
-        def lookupByName(cls, name):  # noqa
-            return getattr(cls, name)
-
-    class _Logger(ILogger):
-        def __init__(self, **kwargs):
-            self.namespace = kwargs.get('namespace', None)
-
-        def emit(self, level, format='', **kwargs):
-            kwargs['log_time'] = time.time()
-            kwargs['log_level'] = level
-            kwargs['log_format'] = format
-            kwargs['log_namespace'] = self.namespace
-            # NOTE: the other loggers are ignoring any log messages
-            # before start_logging() as well
-            if _observer:
-                _observer(kwargs)
+ILogger.register(_Logger)
 
 
 def _no_op(*args, **kwargs):
@@ -306,7 +248,7 @@
         # "Unhandled error in Deferred" -- perhaps this is a Twisted
         # bug?
         if event['log_format'] is None:
-            msg = u'{0} {1}{2}'.format(
+            msg = '{0} {1}{2}'.format(
                 formatTime(event["log_time"]),
                 failure_format_traceback(event['log_failure']),
                 os.linesep,
@@ -318,7 +260,7 @@
             # although Logger will already have filtered out unwanted
             # levels, bare Logger instances from Twisted code won't have.
             if 'log_level' in event and 
self._acceptable_level(event['log_level']):
-                msg = u'{0} {1}{2}'.format(
+                msg = '{0} {1}{2}'.format(
                     formatTime(event["log_time"]),
                     formatEvent(event),
                     os.linesep,
@@ -354,15 +296,10 @@
     if out:
         _observer = _LogObserver(out)
 
-    if _NEW_LOGGER:
-        _observers = []
-        if _observer:
-            _observers.append(_observer)
-        globalLogBeginner.beginLoggingTo(_observers)
-    else:
-        assert out, "out needs to be given a value if using Twisteds before 
15.2"
-        from twisted.python import log
-        log.startLogging(out)
+    _observers = []
+    if _observer:
+        _observers.append(_observer)
+    globalLogBeginner.beginLoggingTo(_observers)
 
 
 _unspecified = object()
@@ -379,7 +316,7 @@
         returns a unicode error-message
         """
         try:
-            return u'{0}: {1}'.format(
+            return '{0}: {1}'.format(
                 fail.value.__class__.__name__,
                 fail.getErrorMessage(),
             )
@@ -399,11 +336,11 @@
         returns a string
         """
         try:
-            f = six.StringIO()
+            f = io.StringIO()
             fail.printTraceback(file=f)
             return f.getvalue()
         except Exception:
-            return u"Failed to format failure traceback for '{0}'".format(fail)
+            return "Failed to format failure traceback for '{0}'".format(fail)
 
     def create_future(self, result=_unspecified, error=_unspecified, 
canceller=None):
         if result is not _unspecified and error is not _unspecified:
@@ -424,7 +361,7 @@
 
     def as_future(self, fun, *args, **kwargs):
         # Twisted doesn't automagically deal with coroutines on Py3
-        if PY3_CORO and iscoroutinefunction(fun):
+        if iscoroutinefunction(fun):
             return ensureDeferred(fun(*args, **kwargs))
         return maybeDeferred(fun, *args, **kwargs)
 
@@ -587,3 +524,5 @@
 add_callbacks = _default_api.add_callbacks
 gather = _default_api.gather
 sleep = _default_api.sleep
+time_ns = _util.time_ns
+perf_counter_ns = _util.perf_counter_ns
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/txaio/with_asyncio.py 
new/txaio-20.3.1/txaio/with_asyncio.py
--- old/txaio-18.8.1/txaio/with_asyncio.py      1970-01-01 01:00:00.000000000 
+0100
+++ new/txaio-20.3.1/txaio/with_asyncio.py      2020-02-04 18:37:55.000000000 
+0100
@@ -0,0 +1,29 @@
+###############################################################################
+#
+# The MIT License (MIT)
+#
+# Copyright (c) Crossbar.io Technologies GmbH
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+###############################################################################
+
+import txaio
+
+txaio.use_asyncio()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/txaio/with_twisted.py 
new/txaio-20.3.1/txaio/with_twisted.py
--- old/txaio-18.8.1/txaio/with_twisted.py      1970-01-01 01:00:00.000000000 
+0100
+++ new/txaio-20.3.1/txaio/with_twisted.py      2020-02-04 18:37:55.000000000 
+0100
@@ -0,0 +1,29 @@
+###############################################################################
+#
+# The MIT License (MIT)
+#
+# Copyright (c) Crossbar.io Technologies GmbH
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+###############################################################################
+
+import txaio
+
+txaio.use_twisted()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/txaio.egg-info/PKG-INFO 
new/txaio-20.3.1/txaio.egg-info/PKG-INFO
--- old/txaio-18.8.1/txaio.egg-info/PKG-INFO    2018-08-31 12:06:05.000000000 
+0200
+++ new/txaio-20.3.1/txaio.egg-info/PKG-INFO    2020-03-22 21:14:04.000000000 
+0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: txaio
-Version: 18.8.1
+Version: 20.3.1
 Summary: Compatibility API between asyncio/Twisted/Trollius
 Home-page: https://github.com/crossbario/txaio
 Author: Crossbar.io Technologies GmbH
@@ -30,19 +30,12 @@
         Platform support
         ----------------
         
-        **txaio** runs on CPython 2.7/3.3+ and PyPy 2/3, on top of Twisted or 
asyncio. Specifically, **txaio** is tested on the following platforms:
+        **txaio** runs on CPython 3.5+ and PyPy 3, on top of *Twisted* or 
*asyncio*. Specifically, **txaio** is tested on the following platforms:
         
-        **Python 2:**
+        * CPython 3.5, 3.7 and 3.8 on Twisted 18.7, 19.10, trunk and on 
asyncio (stdlib)
+        * PyPy 3 on Twisted 18.7, 19.10, trunk and on asyncio (stdlib)
         
-        * CPython 2.7 on Twisted 12.1, 13.2, 15.4, 16.5, trunk and on Trollius 
2.0
-        * PyPy 2 on Twisted 12.1, 13.2, 15.4, 16.5, trunk and on Trollius 2.0
-        
-        **Python 3:**
-        
-        * CPython 3.4 on Twisted 15.4, 16.5, trunk and on asyncio (stdlib)
-        * CPython 3.5 on Twisted 15.4, 16.5, trunk and on asyncio (stdlib)
-        * CPython 3.6 on Twisted 15.4, 16.5, trunk and on asyncio (stdlib)
-        * PyPy 3 on Twisted 15.4, 16.5, trunk and on asyncio (stdlib)
+        > Note: txaio up to version 18.8.1 also supported Python 2.7 and 
Python 3.4. Beginning with release v20.1.1, txaio only supports Python 3.5+.
         
         
         How it works
@@ -97,19 +90,17 @@
 Classifier: Intended Audience :: Developers
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.3
-Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Software Development :: Libraries
 Classifier: Topic :: Software Development :: Libraries :: Application 
Frameworks
-Provides-Extra: asyncio
-Provides-Extra: twisted
+Requires-Python: >=3.5
 Provides-Extra: all
+Provides-Extra: asyncio
 Provides-Extra: dev
+Provides-Extra: twisted
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/txaio.egg-info/SOURCES.txt 
new/txaio-20.3.1/txaio.egg-info/SOURCES.txt
--- old/txaio-18.8.1/txaio.egg-info/SOURCES.txt 2018-08-31 12:06:05.000000000 
+0200
+++ new/txaio-20.3.1/txaio.egg-info/SOURCES.txt 2020-03-22 21:14:04.000000000 
+0100
@@ -33,16 +33,20 @@
 test/test_legacy_logging.py
 test/test_logging.py
 test/test_packaging.py
+test/test_util.py
 test/util.py
 txaio/__init__.py
 txaio/_common.py
 txaio/_iotype.py
 txaio/_unframework.py
+txaio/_util.py
 txaio/_version.py
 txaio/aio.py
 txaio/interfaces.py
 txaio/testutil.py
 txaio/tx.py
+txaio/with_asyncio.py
+txaio/with_twisted.py
 txaio.egg-info/PKG-INFO
 txaio.egg-info/SOURCES.txt
 txaio.egg-info/dependency_links.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txaio-18.8.1/txaio.egg-info/requires.txt 
new/txaio-20.3.1/txaio.egg-info/requires.txt
--- old/txaio-18.8.1/txaio.egg-info/requires.txt        2018-08-31 
12:06:05.000000000 +0200
+++ new/txaio-20.3.1/txaio.egg-info/requires.txt        2020-03-22 
21:14:04.000000000 +0100
@@ -1,24 +1,23 @@
-six
 
 [all]
-zope.interface>=3.6
 twisted>=12.1.0
+zope.interface>=3.6
 
 [asyncio]
 
 [dev]
-wheel
-pytest>=2.6.4
-pytest-cov>=1.8.1
+mock==1.3.0
 pep8>=1.6.2
-sphinx>=1.2.3
 pyenchant>=1.6.6
-sphinxcontrib-spelling>=2.1.2
+pytest-cov>=1.8.1
+pytest>=2.6.4
+sphinx>=1.2.3
 sphinx_rtd_theme>=0.1.9
+sphinxcontrib-spelling>=2.1.2
 tox>=2.1.1
-mock==1.3.0
 twine>=1.6.5
+wheel
 
 [twisted]
-zope.interface>=3.6
 twisted>=12.1.0
+zope.interface>=3.6


Reply via email to