Hello community, here is the log from the commit of package python3-websockets for openSUSE:Factory checked in at 2017-07-07 10:17:41 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python3-websockets (Old) and /work/SRC/openSUSE:Factory/.python3-websockets.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python3-websockets" Fri Jul 7 10:17:41 2017 rev:9 rq:508511 version:3.3 Changes: -------- --- /work/SRC/openSUSE:Factory/python3-websockets/python3-websockets.changes 2016-09-08 17:39:19.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.python3-websockets.new/python3-websockets.changes 2017-07-07 10:17:43.180192447 +0200 @@ -1,0 +2,12 @@ +Tue Apr 4 06:57:32 UTC 2017 - mschnit...@suse.com + +Release 3.3 (boo#1047446) + +* Reduced noise in logs caused by connection resets. +* Avoided crashing on concurrent writes on slow connections. + +Add enforce_utf8_encoding.patch: + * Enforces utf-8 encoding in order to make the package build. + See: https://github.com/aaugustin/websockets/pull/171 + +------------------------------------------------------------------- Old: ---- websockets-3.2.tar.gz New: ---- enforce_utf8_encoding.patch websockets-3.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python3-websockets.spec ++++++ --- /var/tmp/diff_new_pack.bVd5PR/_old 2017-07-07 10:17:44.040070780 +0200 +++ /var/tmp/diff_new_pack.bVd5PR/_new 2017-07-07 10:17:44.044070214 +0200 @@ -1,7 +1,7 @@ # # spec file for package python3-websockets # -# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: python3-websockets -Version: 3.2 +Version: 3.3 Release: 0 Summary: An implementation of the WebSocket Protocol (RFC 6455) License: BSD-3-Clause @@ -29,6 +29,8 @@ Requires: python3 >= 3.4 BuildArch: noarch +Patch0: enforce_utf8_encoding.patch + %description python3-websockets is a library for developing WebSocket servers and clients in Python. It implements RFC 6455 with a focus on correctness and simplicity. @@ -45,6 +47,7 @@ %prep %setup -q -n websockets-%{version} +%patch0 %build python3 setup.py build @@ -54,7 +57,7 @@ %files %defattr(-,root,root,-) -%doc LICENSE README +%doc LICENSE README.rst %{python3_sitelib}/* %changelog ++++++ enforce_utf8_encoding.patch ++++++ Index: setup.py =================================================================== --- setup.py 2017-03-29 15:47:49.000000000 +0200 +++ setup.py.new 2017-07-06 08:59:13.552338153 +0200 @@ -7,7 +7,7 @@ description = "An implementation of the WebSocket Protocol (RFC 6455)" -with open(os.path.join(root_dir, 'README.rst')) as f: +with open(os.path.join(root_dir, 'README.rst'), encoding="utf-8") as f: long_description = f.read() with open(os.path.join(root_dir, 'websockets', 'version.py')) as f: ++++++ websockets-3.2.tar.gz -> websockets-3.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/websockets-3.2/PKG-INFO new/websockets-3.3/PKG-INFO --- old/websockets-3.2/PKG-INFO 2016-08-17 23:23:04.000000000 +0200 +++ new/websockets-3.3/PKG-INFO 2017-03-29 15:48:14.000000000 +0200 @@ -1,13 +1,15 @@ Metadata-Version: 1.1 Name: websockets -Version: 3.2 +Version: 3.3 Summary: An implementation of the WebSocket Protocol (RFC 6455) Home-page: https://github.com/aaugustin/websockets Author: Aymeric Augustin Author-email: aymeric.augus...@m4x.org License: BSD -Download-URL: https://pypi.python.org/pypi/websockets -Description: ``websockets`` is a library for developing WebSocket servers_ and clients_ in +Description: WebSockets + ========== + + ``websockets`` is a library for developing WebSocket servers_ and clients_ in Python. It implements `RFC 6455`_ with a focus on correctness and simplicity. It passes the `Autobahn Testsuite`_. @@ -33,7 +35,7 @@ .. _issue: https://github.com/aaugustin/websockets/issues/new .. _pull request: https://github.com/aaugustin/websockets/compare/ -Platform: all +Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: Web Environment Classifier: Intended Audience :: Developers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/websockets-3.2/README new/websockets-3.3/README --- old/websockets-3.2/README 2016-05-19 22:24:01.000000000 +0200 +++ new/websockets-3.3/README 1970-01-01 01:00:00.000000000 +0100 @@ -1,28 +0,0 @@ -WebSockets -========== - -``websockets`` is a library for developing WebSocket servers_ and clients_ in -Python. It implements `RFC 6455`_ with a focus on correctness and simplicity. -It passes the `Autobahn Testsuite`_. - -Built on top of Python's asynchronous I/O support introduced in `PEP 3156`_, -it provides an API based on coroutines, making it easy to write highly -concurrent applications. - -Installation is as simple as ``pip install websockets``. It requires Python ≥ -3.4 or Python 3.3 with the ``asyncio`` module, which is available with ``pip -install asyncio``. - -Documentation is available on `Read the Docs`_. - -Bug reports, patches and suggestions welcome! Just open an issue_ or send a -`pull request`_. - -.. _servers: https://github.com/aaugustin/websockets/blob/master/example/server.py -.. _clients: https://github.com/aaugustin/websockets/blob/master/example/client.py -.. _RFC 6455: http://tools.ietf.org/html/rfc6455 -.. _Autobahn Testsuite: https://github.com/aaugustin/websockets/blob/master/compliance/README.rst -.. _PEP 3156: http://www.python.org/dev/peps/pep-3156/ -.. _Read the Docs: https://websockets.readthedocs.io/ -.. _issue: https://github.com/aaugustin/websockets/issues/new -.. _pull request: https://github.com/aaugustin/websockets/compare/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/websockets-3.2/README.rst new/websockets-3.3/README.rst --- old/websockets-3.2/README.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/websockets-3.3/README.rst 2016-05-19 22:24:01.000000000 +0200 @@ -0,0 +1,28 @@ +WebSockets +========== + +``websockets`` is a library for developing WebSocket servers_ and clients_ in +Python. It implements `RFC 6455`_ with a focus on correctness and simplicity. +It passes the `Autobahn Testsuite`_. + +Built on top of Python's asynchronous I/O support introduced in `PEP 3156`_, +it provides an API based on coroutines, making it easy to write highly +concurrent applications. + +Installation is as simple as ``pip install websockets``. It requires Python ≥ +3.4 or Python 3.3 with the ``asyncio`` module, which is available with ``pip +install asyncio``. + +Documentation is available on `Read the Docs`_. + +Bug reports, patches and suggestions welcome! Just open an issue_ or send a +`pull request`_. + +.. _servers: https://github.com/aaugustin/websockets/blob/master/example/server.py +.. _clients: https://github.com/aaugustin/websockets/blob/master/example/client.py +.. _RFC 6455: http://tools.ietf.org/html/rfc6455 +.. _Autobahn Testsuite: https://github.com/aaugustin/websockets/blob/master/compliance/README.rst +.. _PEP 3156: http://www.python.org/dev/peps/pep-3156/ +.. _Read the Docs: https://websockets.readthedocs.io/ +.. _issue: https://github.com/aaugustin/websockets/issues/new +.. _pull request: https://github.com/aaugustin/websockets/compare/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/websockets-3.2/setup.cfg new/websockets-3.3/setup.cfg --- old/websockets-3.2/setup.cfg 2016-08-17 23:23:04.000000000 +0200 +++ new/websockets-3.3/setup.cfg 2017-03-29 15:48:14.000000000 +0200 @@ -2,14 +2,14 @@ python-tag = py33.py34.py35 [flake8] -ignore = E731,F403 +ignore = E731,F403,F405 [isort] known_standard_library = asyncio lines_after_imports = 2 [egg_info] -tag_date = 0 tag_build = +tag_date = 0 tag_svn_revision = 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/websockets-3.2/setup.py new/websockets-3.3/setup.py --- old/websockets-3.2/setup.py 2016-05-15 20:12:47.000000000 +0200 +++ new/websockets-3.3/setup.py 2016-09-03 19:15:18.000000000 +0200 @@ -1,25 +1,16 @@ -import os +import os.path import sys import setuptools - -# Avoid polluting the .tar.gz with ._* files under Mac OS X -os.putenv('COPYFILE_DISABLE', 'true') - -root = os.path.dirname(__file__) - -# Prevent distutils from complaining that a standard file wasn't found -README = os.path.join(root, 'README') -if not os.path.exists(README): - os.symlink(README + '.rst', README) +root_dir = os.path.abspath(os.path.dirname(__file__)) description = "An implementation of the WebSocket Protocol (RFC 6455)" -with open(os.path.join(root, 'README'), encoding='utf-8') as f: - long_description = '\n\n'.join(f.read().split('\n\n')[1:]) +with open(os.path.join(root_dir, 'README.rst')) as f: + long_description = f.read() -with open(os.path.join(root, 'websockets', 'version.py'), encoding='utf-8') as f: +with open(os.path.join(root_dir, 'websockets', 'version.py')) as f: exec(f.read()) py_version = sys.version_info[:2] @@ -28,34 +19,33 @@ raise Exception("websockets requires Python >= 3.3.") packages = ['websockets'] + if py_version >= (3, 5): packages.append('websockets/py35') setuptools.setup( name='websockets', version=version, - author='Aymeric Augustin', - author_email='aymeric.augus...@m4x.org', - url='https://github.com/aaugustin/websockets', description=description, long_description=long_description, - download_url='https://pypi.python.org/pypi/websockets', + url='https://github.com/aaugustin/websockets', + author='Aymeric Augustin', + author_email='aymeric.augus...@m4x.org', + license='BSD', + classifiers=[ + 'Development Status :: 5 - Production/Stable', + 'Environment :: Web Environment', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: BSD License', + 'Operating System :: OS Independent', + 'Programming Language :: Python', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + ], packages=packages, extras_require={ ':python_version=="3.3"': ['asyncio'], }, - classifiers=[ - "Development Status :: 5 - Production/Stable", - "Environment :: Web Environment", - "Intended Audience :: Developers", - "License :: OSI Approved :: BSD License", - "Operating System :: OS Independent", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.3", - "Programming Language :: Python :: 3.4", - "Programming Language :: Python :: 3.5", - ], - platforms='all', - license='BSD' ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/websockets-3.2/websockets/http.py new/websockets-3.3/websockets/http.py --- old/websockets-3.2/websockets/http.py 2016-05-15 20:44:26.000000000 +0200 +++ new/websockets-3.3/websockets/http.py 2017-03-29 15:45:27.000000000 +0200 @@ -63,7 +63,7 @@ """ status_line, headers = yield from read_message(stream) - version, status, reason = status_line[:-2].decode().split(None, 2) + version, status, reason = status_line[:-2].decode().split(" ", 2) if version != 'HTTP/1.1': raise ValueError("Unsupported HTTP version") return int(status), headers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/websockets-3.2/websockets/protocol.py new/websockets-3.3/websockets/protocol.py --- old/websockets-3.2/websockets/protocol.py 2016-08-17 16:03:53.000000000 +0200 +++ new/websockets-3.3/websockets/protocol.py 2017-03-29 15:45:27.000000000 +0200 @@ -124,6 +124,7 @@ self.reader = None self.writer = None + self._drain_lock = asyncio.Lock(loop=loop) self.request_headers = None self.raw_request_headers = None @@ -562,8 +563,12 @@ yield try: - # Handle flow control automatically. - yield from self.writer.drain() + # drain() cannot be called concurrently by multiple coroutines: + # http://bugs.python.org/issue29930. Remove this lock when no + # version of Python where this bugs exists is supported anymore. + with (yield from self._drain_lock): + # Handle flow control automatically. + yield from self.writer.drain() except ConnectionError: # Terminate the connection if the socket died. yield from self.fail_connection(1006) Binary files old/websockets-3.2/websockets/py35/__pycache__/__init__.cpython-36.pyc and new/websockets-3.3/websockets/py35/__pycache__/__init__.cpython-36.pyc differ Binary files old/websockets-3.2/websockets/py35/__pycache__/client.cpython-35.pyc and new/websockets-3.3/websockets/py35/__pycache__/client.cpython-35.pyc differ Binary files old/websockets-3.2/websockets/py35/__pycache__/client.cpython-36.pyc and new/websockets-3.3/websockets/py35/__pycache__/client.cpython-36.pyc differ Binary files old/websockets-3.2/websockets/py35/__pycache__/client_server.cpython-35.pyc and new/websockets-3.3/websockets/py35/__pycache__/client_server.cpython-35.pyc differ Binary files old/websockets-3.2/websockets/py35/__pycache__/client_server.cpython-36.pyc and new/websockets-3.3/websockets/py35/__pycache__/client_server.cpython-36.pyc differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/websockets-3.2/websockets/server.py new/websockets-3.3/websockets/server.py --- old/websockets-3.2/websockets/server.py 2016-08-17 23:17:39.000000000 +0200 +++ new/websockets-3.3/websockets/server.py 2017-03-29 15:45:27.000000000 +0200 @@ -62,6 +62,9 @@ path = yield from self.handshake( origins=self.origins, subprotocols=self.subprotocols, extra_headers=self.extra_headers) + except ConnectionError as exc: + logger.info('Connection error during opening handshake', exc_info=True) + raise except Exception as exc: if self._is_server_shutting_down(exc): response = ('HTTP/1.1 503 Service Unavailable\r\n\r\n' @@ -89,6 +92,11 @@ try: yield from self.close() + except ConnectionError as exc: + if self._is_server_shutting_down(exc): + pass + logger.info('Connection error in closing handshake', exc_info=True) + raise except Exception as exc: if self._is_server_shutting_down(exc): pass @@ -195,7 +203,8 @@ return path - def select_subprotocol(self, client_protos, server_protos): + @staticmethod + def select_subprotocol(client_protos, server_protos): """ Pick a subprotocol among those offered by the client. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/websockets-3.2/websockets/test_client_server.py new/websockets-3.3/websockets/test_client_server.py --- old/websockets-3.2/websockets/test_client_server.py 2016-08-17 23:13:29.000000000 +0200 +++ new/websockets-3.3/websockets/test_client_server.py 2017-01-15 16:56:40.000000000 +0100 @@ -234,8 +234,7 @@ self.stop_client() self.stop_server() - @unittest.mock.patch.object( - WebSocketServerProtocol, 'select_subprotocol', autospec=True) + @unittest.mock.patch.object(WebSocketServerProtocol, 'select_subprotocol') def test_subprotocol_error(self, _select_subprotocol): _select_subprotocol.return_value = 'superchat' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/websockets-3.2/websockets/test_protocol.py new/websockets-3.3/websockets/test_protocol.py --- old/websockets-3.2/websockets/test_protocol.py 2016-08-17 16:03:53.000000000 +0200 +++ new/websockets-3.3/websockets/test_protocol.py 2017-01-15 12:54:15.000000000 +0100 @@ -258,7 +258,7 @@ self.run_loop_once() # The connection is established. self.assertEqual(self.protocol.local_address, ('host', 4312)) - get_extra_info.assert_called_once_with('sockname', None) + get_extra_info.assert_called_with('sockname', None) def test_remote_address(self): get_extra_info = unittest.mock.Mock(return_value=('host', 4312)) @@ -268,7 +268,7 @@ self.run_loop_once() # The connection is established. self.assertEqual(self.protocol.remote_address, ('host', 4312)) - get_extra_info.assert_called_once_with('peername', None) + get_extra_info.assert_called_with('peername', None) def test_open(self): self.assertTrue(self.protocol.open) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/websockets-3.2/websockets/version.py new/websockets-3.3/websockets/version.py --- old/websockets-3.2/websockets/version.py 2016-08-17 23:22:42.000000000 +0200 +++ new/websockets-3.3/websockets/version.py 2017-03-29 15:47:43.000000000 +0200 @@ -1 +1 @@ -version = '3.2' +version = '3.3' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/websockets-3.2/websockets.egg-info/PKG-INFO new/websockets-3.3/websockets.egg-info/PKG-INFO --- old/websockets-3.2/websockets.egg-info/PKG-INFO 2016-08-17 23:23:02.000000000 +0200 +++ new/websockets-3.3/websockets.egg-info/PKG-INFO 2017-03-29 15:48:14.000000000 +0200 @@ -1,13 +1,15 @@ Metadata-Version: 1.1 Name: websockets -Version: 3.2 +Version: 3.3 Summary: An implementation of the WebSocket Protocol (RFC 6455) Home-page: https://github.com/aaugustin/websockets Author: Aymeric Augustin Author-email: aymeric.augus...@m4x.org License: BSD -Download-URL: https://pypi.python.org/pypi/websockets -Description: ``websockets`` is a library for developing WebSocket servers_ and clients_ in +Description: WebSockets + ========== + + ``websockets`` is a library for developing WebSocket servers_ and clients_ in Python. It implements `RFC 6455`_ with a focus on correctness and simplicity. It passes the `Autobahn Testsuite`_. @@ -33,7 +35,7 @@ .. _issue: https://github.com/aaugustin/websockets/issues/new .. _pull request: https://github.com/aaugustin/websockets/compare/ -Platform: all +Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: Web Environment Classifier: Intended Audience :: Developers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/websockets-3.2/websockets.egg-info/SOURCES.txt new/websockets-3.3/websockets.egg-info/SOURCES.txt --- old/websockets-3.2/websockets.egg-info/SOURCES.txt 2016-08-17 23:23:03.000000000 +0200 +++ new/websockets-3.3/websockets.egg-info/SOURCES.txt 2017-03-29 15:48:14.000000000 +0200 @@ -1,6 +1,6 @@ LICENSE MANIFEST.in -README +README.rst setup.cfg setup.py websockets/__init__.py @@ -31,5 +31,8 @@ websockets/py35/__pycache__/__init__.cpython-33.pyc websockets/py35/__pycache__/__init__.cpython-34.pyc websockets/py35/__pycache__/__init__.cpython-35.pyc +websockets/py35/__pycache__/__init__.cpython-36.pyc websockets/py35/__pycache__/client.cpython-35.pyc -websockets/py35/__pycache__/client_server.cpython-35.pyc \ No newline at end of file +websockets/py35/__pycache__/client.cpython-36.pyc +websockets/py35/__pycache__/client_server.cpython-35.pyc +websockets/py35/__pycache__/client_server.cpython-36.pyc \ No newline at end of file