Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-python-engineio for openSUSE:Factory checked in at 2022-10-08 01:25:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-python-engineio (Old) and /work/SRC/openSUSE:Factory/.python-python-engineio.new.2275 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-python-engineio" Sat Oct 8 01:25:30 2022 rev:4 rq:1008713 version:4.3.4 Changes: -------- --- /work/SRC/openSUSE:Factory/python-python-engineio/python-python-engineio.changes 2022-01-24 23:10:48.842421689 +0100 +++ /work/SRC/openSUSE:Factory/.python-python-engineio.new.2275/python-python-engineio.changes 2022-10-08 01:25:52.170318348 +0200 @@ -1,0 +2,19 @@ +Thu Oct 6 22:22:07 UTC 2022 - Yogalakshmi Arunachalam <yarunacha...@suse.com> + +- Update to version 4.3.4 + * Let companion ASGI app handle lifespan events #287 (commit) + * Use configured request timeout when making a WebSocket connection #286 (commit) (thanks jpfarias!) + +- Update to version 4.3.3 + * Handle ASGI lifespan when running with a secondary ASGI app #284 (commit) (thanks mozartilize!) + * Update deprecated usage of asyncio.wait() #281 (commit) (thanks Ben Beasley!) + * Better handling of queued WebSocket messages in uWSGI #256 (commit) + * Gracefully fail to decode empty packets #269 (commit) + * Only attempt to set an async signal handler once #276 (commit) + +- Update to version 4.3.2 + * Option to use a callable for cors_allowed_origins #264 (commit) + * Close aiohttp session when disconnecting #272 (commit) + * Remove 3.6 and pypy-3.6 builds, add 3.10 and pypy-3.8 (commit) + +------------------------------------------------------------------- Old: ---- python-engineio-4.3.1.tar.gz New: ---- python-engineio-4.3.4.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-python-engineio.spec ++++++ --- /var/tmp/diff_new_pack.Ivh8xR/_old 2022-10-08 01:25:54.862324523 +0200 +++ /var/tmp/diff_new_pack.Ivh8xR/_new 2022-10-08 01:25:54.870324541 +0200 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python3-%{**}} %define skip_python2 1 Name: python-python-engineio -Version: 4.3.1 +Version: 4.3.4 Release: 0 Summary: EngineIO server License: MIT ++++++ python-engineio-4.3.1.tar.gz -> python-engineio-4.3.4.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/.github/workflows/tests.yml new/python-engineio-4.3.4/.github/workflows/tests.yml --- old/python-engineio-4.3.1/.github/workflows/tests.yml 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/.github/workflows/tests.yml 2022-08-03 20:41:12.000000000 +0200 @@ -22,11 +22,11 @@ strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] - python: ['3.6', '3.7', '3.8', '3.9', 'pypy3'] + python: ['3.7', '3.8', '3.9', '3.10', 'pypy-3.8'] exclude: # pypy3 currently fails to run on Windows - os: windows-latest - python: pypy3 + python: pypy-3.8 # the loop fails to close in the Mac version of 3.9 - os: macos-latest python: '3.9' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/.readthedocs.yml new/python-engineio-4.3.4/.readthedocs.yml --- old/python-engineio-4.3.1/.readthedocs.yml 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/.readthedocs.yml 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -python: - version: 3.6 - setup_py_install: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/CHANGES.md new/python-engineio-4.3.4/CHANGES.md --- old/python-engineio-4.3.1/CHANGES.md 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/CHANGES.md 2022-08-03 20:41:12.000000000 +0200 @@ -1,10 +1,29 @@ # python-engineio change log +**Release 4.3.4** - 2022-08-03 + +- Let companion ASGI app handle lifespan events [#287](https://github.com/miguelgrinberg/python-engineio/issues/287) ([commit](https://github.com/miguelgrinberg/python-engineio/commit/1c9001c537fd669a3b0e28d75f707216ec48befa)) +- Use configured request timeout when making a WebSocket connection [#286](https://github.com/miguelgrinberg/python-engineio/issues/286) ([commit](https://github.com/miguelgrinberg/python-engineio/commit/f6df30b841a86f96765c307efa99a7505dd9b4c1)) (thanks **jpfarias**!) + +**Release 4.3.3** - 2022-07-04 + +- Handle ASGI lifespan when running with a secondary ASGI app [#284](https://github.com/miguelgrinberg/python-engineio/issues/284) ([commit](https://github.com/miguelgrinberg/python-engineio/commit/c4a021ee9c4d760bbe4066887ca816fc7c718f98)) (thanks **mozartilize**!) +- Update deprecated usage of `asyncio.wait()` [#281](https://github.com/miguelgrinberg/python-engineio/issues/281) ([commit](https://github.com/miguelgrinberg/python-engineio/commit/d3a23c0936cda2ff3de8c5ae0c834ffef515e8cb)) (thanks **Ben Beasley**!) +- Better handling of queued WebSocket messages in uWSGI [#256](https://github.com/miguelgrinberg/python-engineio/issues/256) ([commit](https://github.com/miguelgrinberg/python-engineio/commit/ec7b3da2e48060e177bf8ad6a9f5fae445207c82)) +- Gracefully fail to decode empty packets [#269](https://github.com/miguelgrinberg/python-engineio/issues/269) ([commit](https://github.com/miguelgrinberg/python-engineio/commit/9c657071f3d42a88fd1615b5edd245a89445ea1b)) +- Only attempt to set an async signal handler once [#276](https://github.com/miguelgrinberg/python-engineio/issues/276) ([commit](https://github.com/miguelgrinberg/python-engineio/commit/6869751aafb6db83d1a53fbd47d3fbfd2a8ae490)) + +**Release 4.3.2** - 2022-04-24 + +- Option to use a callable for `cors_allowed_origins` [#264](https://github.com/miguelgrinberg/python-engineio/issues/264) ([commit](https://github.com/miguelgrinberg/python-engineio/commit/60e8e553e1fc64a5b0dbb846a86c5c0698101a9e)) +- Close aiohttp session when disconnecting [#272](https://github.com/miguelgrinberg/python-engineio/issues/272) ([commit](https://github.com/miguelgrinberg/python-engineio/commit/a9fb317c29d93b98a729df800f124b6b923fc82c)) +- Remove 3.6 and pypy-3.6 builds, add 3.10 and pypy-3.8 ([commit](https://github.com/miguelgrinberg/python-engineio/commit/06480be268852ffc96793ef52213ad598b85fa69)) + **Release 4.3.1** - 2022-01-11 - Fix support for Sanic v21.9.0 and up ([commit](https://github.com/miguelgrinberg/python-engineio/commit/b0157d5a7e35ad83bc33f363b154402838fac83b)) (thanks **13g10n**!) - Include example code in flake8 pass ([commit](https://github.com/miguelgrinberg/python-engineio/commit/776bb86bb560bcd1912350bc24382fe6090c9c84)) -- Remove unused __version__ constant [#262](https://github.com/miguelgrinberg/python-engineio/issues/262) ([commit 1](https://github.com/miguelgrinberg/python-engineio/commit/e882f5949bdd1618d97b0cade18a7e8af8670b41) [commit 2](https://github.com/miguelgrinberg/python-engineio/commit/ed4b1e2b8b18ac5adb2ee9a2ef126a4e5ffee128)) +- Remove unused `__version__` constant [#262](https://github.com/miguelgrinberg/python-engineio/issues/262) ([commit 1](https://github.com/miguelgrinberg/python-engineio/commit/e882f5949bdd1618d97b0cade18a7e8af8670b41) [commit 2](https://github.com/miguelgrinberg/python-engineio/commit/ed4b1e2b8b18ac5adb2ee9a2ef126a4e5ffee128)) **Release 4.3.0** - 2021-10-26 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/examples/client/javascript/package-lock.json new/python-engineio-4.3.4/examples/client/javascript/package-lock.json --- old/python-engineio-4.3.1/examples/client/javascript/package-lock.json 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/examples/client/javascript/package-lock.json 2022-08-03 20:41:12.000000000 +0200 @@ -9,7 +9,7 @@ "version": "0.1.0", "dependencies": { "enchilada": "0.13.0", - "engine.io": "^4.0.0", + "engine.io": "^4.1.2", "engine.io-client": "^4.0.0", "express": "^4.17.1", "smoothie": "1.19.0" @@ -551,17 +551,17 @@ } }, "node_modules/engine.io": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.0.4.tgz", - "integrity": "sha512-4ggUX5pICZU17OTZNFv5+uFE/ZyoK+TIXv2SvxWWX8lwStllQ6Lvvs4lDBqvKpV9EYXNcvlNOcjKChd/mo+8Tw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.1.2.tgz", + "integrity": "sha512-t5z6zjXuVLhXDMiFJPYsPOWEER8B0tIsD3ETgw19S1yg9zryvUfY3Vhtk3Gf4sihw/bQGIqQ//gjvVlu+Ca0bQ==", "dependencies": { "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.4.1", "cors": "~2.8.5", - "debug": "~4.1.0", + "debug": "~4.3.1", "engine.io-parser": "~4.0.0", - "ws": "^7.1.2" + "ws": "~7.4.2" }, "engines": { "node": ">=10.0.0" @@ -627,12 +627,19 @@ } }, "node_modules/engine.io/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dependencies": { - "ms": "^2.1.1" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/engine.io/node_modules/ms": { @@ -652,8 +659,7 @@ "dependencies": { "esprima": "~1.0.4", "estraverse": "~1.5.0", - "esutils": "~1.0.0", - "source-map": "~0.1.30" + "esutils": "~1.0.0" }, "bin": { "escodegen": "bin/escodegen.js", @@ -1810,9 +1816,9 @@ } }, "node_modules/ws": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", - "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "engines": { "node": ">=8.3.0" }, @@ -2333,25 +2339,25 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "engine.io": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.0.4.tgz", - "integrity": "sha512-4ggUX5pICZU17OTZNFv5+uFE/ZyoK+TIXv2SvxWWX8lwStllQ6Lvvs4lDBqvKpV9EYXNcvlNOcjKChd/mo+8Tw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.1.2.tgz", + "integrity": "sha512-t5z6zjXuVLhXDMiFJPYsPOWEER8B0tIsD3ETgw19S1yg9zryvUfY3Vhtk3Gf4sihw/bQGIqQ//gjvVlu+Ca0bQ==", "requires": { "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.4.1", "cors": "~2.8.5", - "debug": "~4.1.0", + "debug": "~4.3.1", "engine.io-parser": "~4.0.0", - "ws": "^7.1.2" + "ws": "~7.4.2" }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "ms": { @@ -3365,9 +3371,9 @@ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" }, "ws": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", - "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "requires": {} }, "xmlhttprequest-ssl": { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/examples/client/javascript/package.json new/python-engineio-4.3.4/examples/client/javascript/package.json --- old/python-engineio-4.3.1/examples/client/javascript/package.json 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/examples/client/javascript/package.json 2022-08-03 20:41:12.000000000 +0200 @@ -3,7 +3,7 @@ "version": "0.1.0", "dependencies": { "enchilada": "0.13.0", - "engine.io": "^4.0.0", + "engine.io": "^4.1.2", "engine.io-client": "^4.0.0", "express": "^4.17.1", "smoothie": "1.19.0" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/examples/server/javascript/package-lock.json new/python-engineio-4.3.4/examples/server/javascript/package-lock.json --- old/python-engineio-4.3.1/examples/server/javascript/package-lock.json 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/examples/server/javascript/package-lock.json 2022-08-03 20:41:12.000000000 +0200 @@ -9,7 +9,7 @@ "version": "0.1.0", "dependencies": { "enchilada": "0.13.0", - "engine.io": "^4.0.0", + "engine.io": "^4.1.2", "engine.io-client": "^4.0.0", "express": "^4.17.1", "smoothie": "1.19.0" @@ -551,17 +551,17 @@ } }, "node_modules/engine.io": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.0.4.tgz", - "integrity": "sha512-4ggUX5pICZU17OTZNFv5+uFE/ZyoK+TIXv2SvxWWX8lwStllQ6Lvvs4lDBqvKpV9EYXNcvlNOcjKChd/mo+8Tw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.1.2.tgz", + "integrity": "sha512-t5z6zjXuVLhXDMiFJPYsPOWEER8B0tIsD3ETgw19S1yg9zryvUfY3Vhtk3Gf4sihw/bQGIqQ//gjvVlu+Ca0bQ==", "dependencies": { "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.4.1", "cors": "~2.8.5", - "debug": "~4.1.0", + "debug": "~4.3.1", "engine.io-parser": "~4.0.0", - "ws": "^7.1.2" + "ws": "~7.4.2" }, "engines": { "node": ">=10.0.0" @@ -627,12 +627,19 @@ } }, "node_modules/engine.io/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "ms": "^2.1.1" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/engine.io/node_modules/ms": { @@ -652,8 +659,7 @@ "dependencies": { "esprima": "~1.0.4", "estraverse": "~1.5.0", - "esutils": "~1.0.0", - "source-map": "~0.1.30" + "esutils": "~1.0.0" }, "bin": { "escodegen": "bin/escodegen.js", @@ -1810,9 +1816,9 @@ } }, "node_modules/ws": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", - "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "engines": { "node": ">=8.3.0" }, @@ -2333,25 +2339,25 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "engine.io": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.0.4.tgz", - "integrity": "sha512-4ggUX5pICZU17OTZNFv5+uFE/ZyoK+TIXv2SvxWWX8lwStllQ6Lvvs4lDBqvKpV9EYXNcvlNOcjKChd/mo+8Tw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.1.2.tgz", + "integrity": "sha512-t5z6zjXuVLhXDMiFJPYsPOWEER8B0tIsD3ETgw19S1yg9zryvUfY3Vhtk3Gf4sihw/bQGIqQ//gjvVlu+Ca0bQ==", "requires": { "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.4.1", "cors": "~2.8.5", - "debug": "~4.1.0", + "debug": "~4.3.1", "engine.io-parser": "~4.0.0", - "ws": "^7.1.2" + "ws": "~7.4.2" }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "ms": { @@ -3365,9 +3371,9 @@ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" }, "ws": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", - "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "requires": {} }, "xmlhttprequest-ssl": { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/examples/server/javascript/package.json new/python-engineio-4.3.4/examples/server/javascript/package.json --- old/python-engineio-4.3.1/examples/server/javascript/package.json 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/examples/server/javascript/package.json 2022-08-03 20:41:12.000000000 +0200 @@ -3,7 +3,7 @@ "version": "0.1.0", "dependencies": { "enchilada": "0.13.0", - "engine.io": "^4.0.0", + "engine.io": "^4.1.2", "engine.io-client": "^4.0.0", "express": "^4.17.1", "smoothie": "1.19.0" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/examples/server/sanic/requirements.txt new/python-engineio-4.3.4/examples/server/sanic/requirements.txt --- old/python-engineio-4.3.1/examples/server/sanic/requirements.txt 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/examples/server/sanic/requirements.txt 2022-08-03 20:41:12.000000000 +0200 @@ -3,6 +3,6 @@ multidict==5.2.0 sanic==21.12.0 sanic-routing==0.7.2 -ujson==5.1.0 +ujson==5.2.0 uvloop==0.16.0 websockets==10.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/setup.cfg new/python-engineio-4.3.4/setup.cfg --- old/python-engineio-4.3.1/setup.cfg 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/setup.cfg 2022-08-03 20:41:12.000000000 +0200 @@ -1,6 +1,6 @@ [metadata] name = python-engineio -version = 4.3.1 +version = 4.3.4 author = Miguel Grinberg author_email = miguel.grinb...@gmail.com description = Engine.IO server and client for Python diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/src/engineio/async_drivers/asgi.py new/python-engineio-4.3.4/src/engineio/async_drivers/asgi.py --- old/python-engineio-4.3.1/src/engineio/async_drivers/asgi.py 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/src/engineio/async_drivers/asgi.py 2022-08-03 20:41:12.000000000 +0200 @@ -59,12 +59,12 @@ else: static_file = get_static_file(scope['path'], self.static_files) \ if scope['type'] == 'http' and self.static_files else None - if static_file and os.path.exists(static_file['filename']): + if scope['type'] == 'lifespan': + await self.lifespan(scope, receive, send) + elif static_file and os.path.exists(static_file['filename']): await self.serve_static_file(static_file, receive, send) elif self.other_asgi_app is not None: await self.other_asgi_app(scope, receive, send) - elif scope['type'] == 'lifespan': - await self.lifespan(receive, send) else: await self.not_found(receive, send) @@ -81,7 +81,13 @@ await send({'type': 'http.response.body', 'body': payload}) - async def lifespan(self, receive, send): + async def lifespan(self, scope, receive, send): + if self.other_asgi_app is not None and self.on_startup is None and \ + self.on_shutdown is None: + # let the other ASGI app handle lifespan events + await self.other_asgi_app(scope, receive, send) + return + while True: event = await receive() if event['type'] == 'lifespan.startup': diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/src/engineio/async_drivers/gevent_uwsgi.py new/python-engineio-4.3.4/src/engineio/async_drivers/gevent_uwsgi.py --- old/python-engineio-4.3.1/src/engineio/async_drivers/gevent_uwsgi.py 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/src/engineio/async_drivers/gevent_uwsgi.py 2022-08-03 20:41:12.000000000 +0200 @@ -26,6 +26,7 @@ def __init__(self, app): self.app = app self._sock = None + self.received_messages = [] def __call__(self, environ, start_response): self._sock = uwsgi.connection_fd() @@ -117,6 +118,9 @@ return None return self._decode_received(msg) else: + if self.received_messages: + return self.received_messages.pop(0) + # we wake up at least every 3 seconds to let uWSGI # do its ping/ponging event_set = self._event.wait(timeout=3) @@ -133,13 +137,19 @@ self._send(msg) # maybe there is something to receive, if not, at least # ensure uWSGI does its ping/ponging - try: - msg = uwsgi.websocket_recv_nb() - except IOError: # connection closed - self._select_greenlet.kill() - return None - if msg: # message available - return self._decode_received(msg) + while True: + try: + msg = uwsgi.websocket_recv_nb() + except IOError: # connection closed + self._select_greenlet.kill() + return None + if msg: # message available + self.received_messages.append( + self._decode_received(msg)) + else: + break + if self.received_messages: + return self.received_messages.pop(0) _async = { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/src/engineio/asyncio_client.py new/python-engineio-4.3.4/src/engineio/asyncio_client.py --- old/python-engineio-4.3.1/src/engineio/asyncio_client.py 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/src/engineio/asyncio_client.py 2022-08-03 20:41:12.000000000 +0200 @@ -95,9 +95,9 @@ try: asyncio.get_event_loop().add_signal_handler( signal.SIGINT, async_signal_handler) - async_signal_handler_set = True except NotImplementedError: # pragma: no cover self.logger.warning('Signal handler is unsupported') + async_signal_handler_set = True if self.state != 'disconnected': raise ValueError('Client is not in a disconnected state') @@ -158,6 +158,8 @@ client.connected_clients.remove(self) except ValueError: # pragma: no cover pass + if self.http and not self.http.closed: # pragma: no cover + await self.http.close() self._reset() def start_background_task(self, target, *args, **kwargs): @@ -302,11 +304,12 @@ ssl_context.verify_mode = ssl.CERT_NONE ws = await self.http.ws_connect( websocket_url + self._get_url_timestamp(), - headers=headers, ssl=ssl_context) + headers=headers, ssl=ssl_context, + timeout=self.request_timeout) else: ws = await self.http.ws_connect( websocket_url + self._get_url_timestamp(), - headers=headers) + headers=headers, timeout=self.request_timeout) except (aiohttp.client_exceptions.WSServerHandshakeError, aiohttp.client_exceptions.ServerConnectionError, aiohttp.client_exceptions.ClientConnectionError): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/src/engineio/asyncio_server.py new/python-engineio-4.3.4/src/engineio/asyncio_server.py --- old/python-engineio-4.3.1/src/engineio/asyncio_server.py 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/src/engineio/asyncio_server.py 2022-08-03 20:41:12.000000000 +0200 @@ -175,7 +175,7 @@ if sid in self.sockets: # pragma: no cover del self.sockets[sid] else: - await asyncio.wait([client.close() + await asyncio.wait([asyncio.create_task(client.close()) for client in self.sockets.values()]) self.sockets = {} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/src/engineio/client.py new/python-engineio-4.3.4/src/engineio/client.py --- old/python-engineio-4.3.1/src/engineio/client.py 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/src/engineio/client.py 2022-08-03 20:41:12.000000000 +0200 @@ -417,7 +417,8 @@ try: ws = websocket.create_connection( websocket_url + self._get_url_timestamp(), header=headers, - cookie=cookies, enable_multithread=True, **extra_options) + cookie=cookies, enable_multithread=True, + timeout=self.request_timeout, **extra_options) except (ConnectionError, IOError, websocket.WebSocketException): if upgrade: self.logger.warning( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/src/engineio/packet.py new/python-engineio-4.3.4/src/engineio/packet.py --- old/python-engineio-4.3.1/src/engineio/packet.py 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/src/engineio/packet.py 2022-08-03 20:41:12.000000000 +0200 @@ -48,6 +48,8 @@ def decode(self, encoded_packet): """Decode a transmitted package.""" self.binary = isinstance(encoded_packet, binary_types) + if not self.binary and len(encoded_packet) == 0: + raise ValueError('Invalid empty packet received') b64 = not self.binary and encoded_packet[0] == 'b' if b64: self.binary = True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/src/engineio/server.py new/python-engineio-4.3.4/src/engineio/server.py --- old/python-engineio-4.3.1/src/engineio/server.py 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/src/engineio/server.py 2022-08-03 20:41:12.000000000 +0200 @@ -697,6 +697,10 @@ allowed_origins = None elif isinstance(self.cors_allowed_origins, str): allowed_origins = [self.cors_allowed_origins] + elif callable(self.cors_allowed_origins): + origin = environ.get('HTTP_ORIGIN') + allowed_origins = [origin] \ + if self.cors_allowed_origins(origin) else [] else: allowed_origins = self.cors_allowed_origins return allowed_origins diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/tests/asyncio/test_async_asgi.py new/python-engineio-4.3.4/tests/asyncio/test_async_asgi.py --- old/python-engineio-4.3.1/tests/asyncio/test_async_asgi.py 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/tests/asyncio/test_async_asgi.py 2022-08-03 20:41:12.000000000 +0200 @@ -54,6 +54,13 @@ _run(app(scope, 'receive', 'send')) other_app.mock.assert_called_once_with(scope, 'receive', 'send') + def test_other_app_lifespan_routing(self): + other_app = AsyncMock() + app = async_asgi.ASGIApp('eio', other_app) + scope = {'type': 'lifespan'} + _run(app(scope, 'receive', 'send')) + other_app.mock.assert_called_once_with(scope, 'receive', 'send') + def test_static_file_routing(self): root_dir = os.path.dirname(__file__) app = async_asgi.ASGIApp( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/tests/asyncio/test_asyncio_client.py new/python-engineio-4.3.4/tests/asyncio/test_asyncio_client.py --- old/python-engineio-4.3.1/tests/asyncio/test_asyncio_client.py 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/tests/asyncio/test_asyncio_client.py 2022-08-03 20:41:12.000000000 +0200 @@ -539,6 +539,7 @@ c.http.ws_connect.mock.assert_called_once_with( 'ws://foo/engine.io/?transport=websocket&EIO=4&t=123.456', headers={'Foo': 'Bar'}, + timeout=5 ) @mock.patch('engineio.client.time.time', return_value=123.456) @@ -553,6 +554,7 @@ c.http.ws_connect.mock.assert_called_once_with( 'ws://foo/engine.io/?transport=websocket&EIO=4&sid=123&t=123.456', headers={}, + timeout=5, ) def test_websocket_connection_no_open_packet(self): @@ -605,6 +607,7 @@ c.http.ws_connect.mock.assert_called_once_with( 'ws://foo/engine.io/?transport=websocket&EIO=4&t=123.456', headers={}, + timeout=5, ) @mock.patch('engineio.client.time.time', return_value=123.456) @@ -677,6 +680,7 @@ c.http.ws_connect.mock.assert_called_once_with( 'ws://foo/engine.io/?transport=websocket&EIO=4&t=123.456', headers={}, + timeout=5, ) @mock.patch('engineio.client.time.time', return_value=123.456) @@ -711,6 +715,7 @@ c.http.ws_connect.mock.assert_called_once_with( 'ws://foo/engine.io/?transport=websocket&EIO=4&t=123.456', headers={}, + timeout=5, ) c.http.cookie_jar.update_cookies.assert_called_once_with( {'key': 'value', 'key2': 'value2', 'key3': '"value3="'} @@ -752,6 +757,7 @@ c.http.ws_connect.mock.assert_called_once_with( 'ws://foo/engine.io/?transport=websocket&EIO=4&t=123.456', headers={'Foo': 'Bar'}, + timeout=5, ) c.http.cookie_jar.update_cookies.assert_called_once_with( {'key3': 'value3'} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/tests/asyncio/test_asyncio_server.py new/python-engineio-4.3.4/tests/asyncio/test_asyncio_server.py --- old/python-engineio-4.3.1/tests/asyncio/test_asyncio_server.py 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/tests/asyncio/test_asyncio_server.py 2022-08-03 20:41:12.000000000 +0200 @@ -405,6 +405,29 @@ assert ('Access-Control-Allow-Origin', 'b') in headers @mock.patch('importlib.import_module') + def test_connect_cors_allowed_origin_with_callable(self, import_module): + def cors(origin): + return origin == 'a' + + environ = { + 'REQUEST_METHOD': 'GET', + 'QUERY_STRING': '', + 'HTTP_ORIGIN': 'a' + } + a = self.get_async_mock(environ) + import_module.side_effect = [a] + + s = asyncio_server.AsyncServer(cors_allowed_origins=cors) + _run(s.handle_request('request')) + assert a._async['make_response'].call_args[0][0] == '200 OK' + headers = a._async['make_response'].call_args[0][1] + assert ('Access-Control-Allow-Origin', 'a') in headers + + environ['HTTP_ORIGIN'] = 'b' + _run(s.handle_request('request')) + assert a._async['make_response'].call_args[0][0] == '400 BAD REQUEST' + + @mock.patch('importlib.import_module') def test_connect_cors_not_allowed_origin(self, import_module): a = self.get_async_mock( {'REQUEST_METHOD': 'GET', 'QUERY_STRING': '', 'HTTP_ORIGIN': 'c'} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/tests/common/test_client.py new/python-engineio-4.3.4/tests/common/test_client.py --- old/python-engineio-4.3.1/tests/common/test_client.py 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/tests/common/test_client.py 2022-08-03 20:41:12.000000000 +0200 @@ -558,6 +558,7 @@ header={'Foo': 'Bar'}, cookie=None, enable_multithread=True, + timeout=5 ) @mock.patch('engineio.client.time.time', return_value=123.456) @@ -578,6 +579,7 @@ header={'Foo': 'Bar'}, cookie=None, enable_multithread=True, + timeout=5 ) @mock.patch('engineio.client.time.time', return_value=123.456) @@ -596,6 +598,7 @@ header={}, cookie=None, enable_multithread=True, + timeout=5 ) @mock.patch('engineio.client.websocket.create_connection') @@ -644,6 +647,7 @@ 'header': {}, 'cookie': None, 'enable_multithread': True, + 'timeout': 5, } @mock.patch('engineio.client.websocket.create_connection') @@ -685,6 +689,7 @@ 'header': {}, 'cookie': None, 'enable_multithread': True, + 'timeout': 5, 'sslopt': {'cert_reqs': ssl.CERT_NONE}, } @@ -722,6 +727,7 @@ 'header': {}, 'cookie': 'key=value; key2=value2', 'enable_multithread': True, + 'timeout': 5, } @mock.patch('engineio.client.websocket.create_connection') @@ -758,6 +764,7 @@ 'header': {'Foo': 'bar'}, 'cookie': 'key=value', 'enable_multithread': True, + 'timeout': 5, } @mock.patch('engineio.client.websocket.create_connection') @@ -799,6 +806,7 @@ assert create_connection.call_args[1] == { 'header': {}, 'enable_multithread': True, + 'timeout': 5, 'cookie': 'key=value; key2=value2; key3=value3', } @@ -831,6 +839,7 @@ 'header': {'Authorization': 'Basic Zm9vOmJhcg=='}, 'cookie': '', 'enable_multithread': True, + 'timeout': 5, } @mock.patch('engineio.client.websocket.create_connection') @@ -863,6 +872,7 @@ 'header': {}, 'cookie': '', 'enable_multithread': True, + 'timeout': 5, } @mock.patch('engineio.client.websocket.create_connection') @@ -895,6 +905,7 @@ 'header': {}, 'cookie': '', 'enable_multithread': True, + 'timeout': 5, } @mock.patch('engineio.client.websocket.create_connection') @@ -934,6 +945,7 @@ 'header': {}, 'cookie': '', 'enable_multithread': True, + 'timeout': 5, } @mock.patch('engineio.client.websocket.create_connection') @@ -994,6 +1006,7 @@ 'header': {}, 'cookie': '', 'enable_multithread': True, + 'timeout': 5, } if results: expected_results.update({ @@ -1033,6 +1046,7 @@ 'header': {}, 'cookie': '', 'enable_multithread': True, + 'timeout': 5, } @mock.patch('engineio.client.websocket.create_connection') @@ -1066,6 +1080,7 @@ 'header': {}, 'cookie': '', 'enable_multithread': True, + 'timeout': 5, } @mock.patch('engineio.client.websocket.create_connection') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/tests/common/test_packet.py new/python-engineio-4.3.4/tests/common/test_packet.py --- old/python-engineio-4.3.1/tests/common/test_packet.py 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/tests/common/test_packet.py 2022-08-03 20:41:12.000000000 +0200 @@ -130,3 +130,7 @@ def test_binary_non_message_packet(self): with pytest.raises(ValueError): packet.Packet(packet.NOOP, b'\x01\x02\x03') + + def test_decode_invalid_empty_text_packet(self): + with pytest.raises(ValueError): + packet.Packet(encoded_packet='') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/tests/common/test_server.py new/python-engineio-4.3.4/tests/common/test_server.py --- old/python-engineio-4.3.1/tests/common/test_server.py 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/tests/common/test_server.py 2022-08-03 20:41:12.000000000 +0200 @@ -586,6 +586,26 @@ headers = start_response.call_args[0][1] assert ('Access-Control-Allow-Origin', 'b') in headers + def test_connect_cors_allowed_origin_with_callable(self): + def cors(origin): + return origin == 'a' + + s = server.Server(cors_allowed_origins=cors) + environ = { + 'REQUEST_METHOD': 'GET', + 'QUERY_STRING': 'EIO=4', + 'HTTP_ORIGIN': 'a', + } + start_response = mock.MagicMock() + s.handle_request(environ, start_response) + assert start_response.call_args[0][0] == '200 OK' + headers = start_response.call_args[0][1] + assert ('Access-Control-Allow-Origin', 'a') in headers + + environ['HTTP_ORIGIN'] = 'b' + s.handle_request(environ, start_response) + assert start_response.call_args[0][0] == '400 BAD REQUEST' + def test_connect_cors_not_allowed_origin(self): s = server.Server(cors_allowed_origins=['a', 'b']) environ = { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-engineio-4.3.1/tox.ini new/python-engineio-4.3.4/tox.ini --- old/python-engineio-4.3.1/tox.ini 2022-01-11 13:15:01.000000000 +0100 +++ new/python-engineio-4.3.4/tox.ini 2022-08-03 20:41:12.000000000 +0200 @@ -1,5 +1,5 @@ [tox] -envlist=flake8,py36,py37,py38,py39,pypy3,docs +envlist=flake8,py37,py38,py39,py310,pypy3,docs skip_missing_interpreters=True [gh-actions] @@ -8,7 +8,8 @@ 3.7: py37 3.8: py38 3.9: py39 - pypy3: pypy3 + 3.10: py310 + pypy-3: pypy3 [testenv] commands=