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 2026-05-26 16:34:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-python-engineio (Old)
and /work/SRC/openSUSE:Factory/.python-python-engineio.new.2084 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-python-engineio"
Tue May 26 16:34:17 2026 rev:15 rq:1355108 version:4.13.2
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-python-engineio/python-python-engineio.changes
2026-03-04 21:08:43.469143096 +0100
+++
/work/SRC/openSUSE:Factory/.python-python-engineio.new.2084/python-python-engineio.changes
2026-05-26 16:34:29.453136126 +0200
@@ -1,0 +2,7 @@
+Mon May 25 20:15:30 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 4.13.2:
+ * Prevent unnecessary resource allocations #441 (commit)
+ * Add zizmor to CI builds #437 (commit)
+
+-------------------------------------------------------------------
Old:
----
python-engineio-4.13.1.tar.gz
New:
----
python-engineio-4.13.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-python-engineio.spec ++++++
--- /var/tmp/diff_new_pack.ISuqH2/_old 2026-05-26 16:34:30.133164260 +0200
+++ /var/tmp/diff_new_pack.ISuqH2/_new 2026-05-26 16:34:30.137164426 +0200
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-python-engineio
-Version: 4.13.1
+Version: 4.13.2
Release: 0
Summary: EngineIO server
License: MIT
++++++ python-engineio-4.13.1.tar.gz -> python-engineio-4.13.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-engineio-4.13.1/.github/workflows/tests.yml
new/python-engineio-4.13.2/.github/workflows/tests.yml
--- old/python-engineio-4.13.1/.github/workflows/tests.yml 2026-02-07
00:36:03.000000000 +0100
+++ new/python-engineio-4.13.2/.github/workflows/tests.yml 2026-05-21
23:44:51.000000000 +0200
@@ -6,15 +6,22 @@
pull_request:
branches:
- main
+
+permissions: {}
+
jobs:
lint:
name: lint
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-python@v3
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #
v6.0.2
+ with:
+ persist-credentials: false
+ - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 #
v6.2.0
+ with:
+ python-version: 3.14
- run: python -m pip install --upgrade pip wheel
- - run: pip install tox tox-gh-actions
+ - run: pip install tox
- run: tox -eflake8
- run: tox -edocs
tests:
@@ -26,24 +33,43 @@
fail-fast: false
runs-on: ${{ matrix.os }}
steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-python@v3
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #
v6.0.2
+ with:
+ persist-credentials: false
+ - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 #
v6.2.0
with:
python-version: ${{ matrix.python }}
- run: python -m pip install --upgrade pip wheel
- - run: pip install tox tox-gh-actions
- - run: tox
+ - run: pip install tox
+ - run: tox -epy
coverage:
name: coverage
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-python@v3
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #
v6.0.2
+ with:
+ persist-credentials: false
+ - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 #
v6.2.0
+ with:
+ python-version: 3.14
- run: python -m pip install --upgrade pip wheel
- - run: pip install tox tox-gh-actions
- - run: tox
- - uses: codecov/codecov-action@v3
+ - run: pip install tox
+ - run: tox -epy
+ - uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2
# v6.0.0
with:
files: ./coverage.xml
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}
+ zizmor:
+ name: zizmor
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ actions: read
+ steps:
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #
v6.0.2
+ with:
+ persist-credentials: false
+ - uses:
zizmorcore/zizmor-action@b1d7e1fb5de872772f31590499237e7cce841e8e # v0.5.3
+ with:
+ advanced-security: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-engineio-4.13.1/CHANGES.md
new/python-engineio-4.13.2/CHANGES.md
--- old/python-engineio-4.13.1/CHANGES.md 2026-02-07 00:36:03.000000000
+0100
+++ new/python-engineio-4.13.2/CHANGES.md 2026-05-21 23:44:51.000000000
+0200
@@ -1,5 +1,10 @@
# python-engineio change log
+**Release 4.13.2** - 2026-05-21
+
+- Prevent unnecessary resource allocations
[#441](https://github.com/miguelgrinberg/python-engineio/issues/441)
([commit](https://github.com/miguelgrinberg/python-engineio/commit/ceeeb5eae3ce070f4c5e313ea9a1f91307fe5e2b))
+- Add zizmor to CI builds
[#437](https://github.com/miguelgrinberg/python-engineio/issues/437)
([commit](https://github.com/miguelgrinberg/python-engineio/commit/68eb36aecd623d1b84386a39be76f6e5f7fdd5c1))
+
**Release 4.13.1** - 2026-02-06
- Document that a process can have only one custom JSON module
([commit](https://github.com/miguelgrinberg/python-engineio/commit/119ec1ee1f486035e837625161eea10183b9c52b))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-engineio-4.13.1/examples/client/javascript/package-lock.json
new/python-engineio-4.13.2/examples/client/javascript/package-lock.json
--- old/python-engineio-4.13.1/examples/client/javascript/package-lock.json
2026-02-07 00:36:03.000000000 +0100
+++ new/python-engineio-4.13.2/examples/client/javascript/package-lock.json
2026-05-21 23:44:51.000000000 +0200
@@ -127,22 +127,22 @@
}
},
"node_modules/body-parser": {
- "version": "1.20.3",
- "resolved":
"https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
- "integrity":
"sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
+ "version": "1.20.5",
+ "resolved":
"https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz",
+ "integrity":
"sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==",
"dependencies": {
- "bytes": "3.1.2",
+ "bytes": "~3.1.2",
"content-type": "~1.0.5",
"debug": "2.6.9",
"depd": "2.0.0",
- "destroy": "1.2.0",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "on-finished": "2.4.1",
- "qs": "6.13.0",
- "raw-body": "2.5.2",
+ "destroy": "~1.2.0",
+ "http-errors": "~2.0.1",
+ "iconv-lite": "~0.4.24",
+ "on-finished": "~2.4.1",
+ "qs": "~6.15.1",
+ "raw-body": "~2.5.3",
"type-is": "~1.6.18",
- "unpipe": "1.0.0"
+ "unpipe": "~1.0.0"
},
"engines": {
"node": ">= 0.8",
@@ -157,11 +157,52 @@
"ms": "2.0.0"
}
},
+ "node_modules/body-parser/node_modules/http-errors": {
+ "version": "2.0.1",
+ "resolved":
"https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+ "integrity":
"sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
+ "dependencies": {
+ "depd": "~2.0.0",
+ "inherits": "~2.0.4",
+ "setprototypeof": "~1.2.0",
+ "statuses": "~2.0.2",
+ "toidentifier": "~1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
"node_modules/body-parser/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity":
"sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
+ "node_modules/body-parser/node_modules/qs": {
+ "version": "6.15.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz",
+ "integrity":
"sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==",
+ "dependencies": {
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/body-parser/node_modules/statuses": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity":
"sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/browser-pack": {
"version": "2.0.1",
"resolved":
"https://registry.npmjs.org/browser-pack/-/browser-pack-2.0.1.tgz",
@@ -892,20 +933,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
- "node_modules/express/node_modules/qs": {
- "version": "6.14.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
- "integrity":
"sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
- "dependencies": {
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/filewatcher": {
"version": "3.0.0",
"resolved":
"https://registry.npmjs.org/filewatcher/-/filewatcher-3.0.0.tgz",
@@ -1434,9 +1461,9 @@
}
},
"node_modules/path-to-regexp": {
- "version": "0.1.12",
- "resolved":
"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
- "integrity":
"sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="
+ "version": "0.1.13",
+ "resolved":
"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
+ "integrity":
"sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA=="
},
"node_modules/process": {
"version": "0.7.0",
@@ -1468,11 +1495,11 @@
]
},
"node_modules/qs": {
- "version": "6.13.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
- "integrity":
"sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "version": "6.14.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
+ "integrity":
"sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
"dependencies": {
- "side-channel": "^1.0.6"
+ "side-channel": "^1.1.0"
},
"engines": {
"node": ">=0.6"
@@ -1506,17 +1533,44 @@
}
},
"node_modules/raw-body": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
- "integrity":
"sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz",
+ "integrity":
"sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==",
+ "dependencies": {
+ "bytes": "~3.1.2",
+ "http-errors": "~2.0.1",
+ "iconv-lite": "~0.4.24",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/raw-body/node_modules/http-errors": {
+ "version": "2.0.1",
+ "resolved":
"https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+ "integrity":
"sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
"dependencies": {
- "bytes": "3.1.2",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
+ "depd": "~2.0.0",
+ "inherits": "~2.0.4",
+ "setprototypeof": "~1.2.0",
+ "statuses": "~2.0.2",
+ "toidentifier": "~1.0.1"
},
"engines": {
"node": ">= 0.8"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/raw-body/node_modules/statuses": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity":
"sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
+ "engines": {
+ "node": ">= 0.8"
}
},
"node_modules/readable-stream": {
@@ -2227,22 +2281,22 @@
"integrity":
"sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
},
"body-parser": {
- "version": "1.20.3",
- "resolved":
"https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
- "integrity":
"sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
+ "version": "1.20.5",
+ "resolved":
"https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz",
+ "integrity":
"sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==",
"requires": {
- "bytes": "3.1.2",
+ "bytes": "~3.1.2",
"content-type": "~1.0.5",
"debug": "2.6.9",
"depd": "2.0.0",
- "destroy": "1.2.0",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "on-finished": "2.4.1",
- "qs": "6.13.0",
- "raw-body": "2.5.2",
+ "destroy": "~1.2.0",
+ "http-errors": "~2.0.1",
+ "iconv-lite": "~0.4.24",
+ "on-finished": "~2.4.1",
+ "qs": "~6.15.1",
+ "raw-body": "~2.5.3",
"type-is": "~1.6.18",
- "unpipe": "1.0.0"
+ "unpipe": "~1.0.0"
},
"dependencies": {
"debug": {
@@ -2253,10 +2307,35 @@
"ms": "2.0.0"
}
},
+ "http-errors": {
+ "version": "2.0.1",
+ "resolved":
"https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+ "integrity":
"sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
+ "requires": {
+ "depd": "~2.0.0",
+ "inherits": "~2.0.4",
+ "setprototypeof": "~1.2.0",
+ "statuses": "~2.0.2",
+ "toidentifier": "~1.0.1"
+ }
+ },
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity":
"sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "qs": {
+ "version": "6.15.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz",
+ "integrity":
"sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==",
+ "requires": {
+ "side-channel": "^1.1.0"
+ }
+ },
+ "statuses": {
+ "version": "2.0.2",
+ "resolved":
"https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity":
"sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="
}
}
},
@@ -2848,14 +2927,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "qs": {
- "version": "6.14.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
- "integrity":
"sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
- "requires": {
- "side-channel": "^1.1.0"
- }
}
}
},
@@ -3266,9 +3337,9 @@
"integrity": "sha1-tVhdfDxGPYmqAGDYZhHPGv1hfio="
},
"path-to-regexp": {
- "version": "0.1.12",
- "resolved":
"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
- "integrity":
"sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="
+ "version": "0.1.13",
+ "resolved":
"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
+ "integrity":
"sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA=="
},
"process": {
"version": "0.7.0",
@@ -3290,11 +3361,11 @@
"integrity": "sha1-VACKyXKux0F13vnLpt9/qdORh0A="
},
"qs": {
- "version": "6.13.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
- "integrity":
"sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "version": "6.14.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
+ "integrity":
"sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
"requires": {
- "side-channel": "^1.0.6"
+ "side-channel": "^1.1.0"
}
},
"querystring": {
@@ -3313,14 +3384,33 @@
"integrity":
"sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"raw-body": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
- "integrity":
"sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
- "requires": {
- "bytes": "3.1.2",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz",
+ "integrity":
"sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==",
+ "requires": {
+ "bytes": "~3.1.2",
+ "http-errors": "~2.0.1",
+ "iconv-lite": "~0.4.24",
+ "unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "http-errors": {
+ "version": "2.0.1",
+ "resolved":
"https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+ "integrity":
"sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
+ "requires": {
+ "depd": "~2.0.0",
+ "inherits": "~2.0.4",
+ "setprototypeof": "~1.2.0",
+ "statuses": "~2.0.2",
+ "toidentifier": "~1.0.1"
+ }
+ },
+ "statuses": {
+ "version": "2.0.2",
+ "resolved":
"https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity":
"sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="
+ }
}
},
"readable-stream": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-engineio-4.13.1/examples/server/aiohttp/requirements.txt
new/python-engineio-4.13.2/examples/server/aiohttp/requirements.txt
--- old/python-engineio-4.13.1/examples/server/aiohttp/requirements.txt
2026-02-07 00:36:03.000000000 +0100
+++ new/python-engineio-4.13.2/examples/server/aiohttp/requirements.txt
2026-05-21 23:44:51.000000000 +0200
@@ -1,4 +1,4 @@
-aiohttp==3.13.3
+aiohttp==3.13.4
async-timeout==1.1.0
chardet==2.3.0
multidict==2.1.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-engineio-4.13.1/examples/server/javascript/package-lock.json
new/python-engineio-4.13.2/examples/server/javascript/package-lock.json
--- old/python-engineio-4.13.1/examples/server/javascript/package-lock.json
2026-02-07 00:36:03.000000000 +0100
+++ new/python-engineio-4.13.2/examples/server/javascript/package-lock.json
2026-05-21 23:44:51.000000000 +0200
@@ -127,22 +127,22 @@
}
},
"node_modules/body-parser": {
- "version": "1.20.3",
- "resolved":
"https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
- "integrity":
"sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
+ "version": "1.20.5",
+ "resolved":
"https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz",
+ "integrity":
"sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==",
"dependencies": {
- "bytes": "3.1.2",
+ "bytes": "~3.1.2",
"content-type": "~1.0.5",
"debug": "2.6.9",
"depd": "2.0.0",
- "destroy": "1.2.0",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "on-finished": "2.4.1",
- "qs": "6.13.0",
- "raw-body": "2.5.2",
+ "destroy": "~1.2.0",
+ "http-errors": "~2.0.1",
+ "iconv-lite": "~0.4.24",
+ "on-finished": "~2.4.1",
+ "qs": "~6.15.1",
+ "raw-body": "~2.5.3",
"type-is": "~1.6.18",
- "unpipe": "1.0.0"
+ "unpipe": "~1.0.0"
},
"engines": {
"node": ">= 0.8",
@@ -157,11 +157,52 @@
"ms": "2.0.0"
}
},
+ "node_modules/body-parser/node_modules/http-errors": {
+ "version": "2.0.1",
+ "resolved":
"https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+ "integrity":
"sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
+ "dependencies": {
+ "depd": "~2.0.0",
+ "inherits": "~2.0.4",
+ "setprototypeof": "~1.2.0",
+ "statuses": "~2.0.2",
+ "toidentifier": "~1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
"node_modules/body-parser/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity":
"sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
+ "node_modules/body-parser/node_modules/qs": {
+ "version": "6.15.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz",
+ "integrity":
"sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==",
+ "dependencies": {
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/body-parser/node_modules/statuses": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity":
"sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/browser-pack": {
"version": "2.0.1",
"resolved":
"https://registry.npmjs.org/browser-pack/-/browser-pack-2.0.1.tgz",
@@ -892,20 +933,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
- "node_modules/express/node_modules/qs": {
- "version": "6.14.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
- "integrity":
"sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
- "dependencies": {
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/filewatcher": {
"version": "3.0.0",
"resolved":
"https://registry.npmjs.org/filewatcher/-/filewatcher-3.0.0.tgz",
@@ -1468,11 +1495,11 @@
]
},
"node_modules/qs": {
- "version": "6.13.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
- "integrity":
"sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "version": "6.14.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
+ "integrity":
"sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
"dependencies": {
- "side-channel": "^1.0.6"
+ "side-channel": "^1.1.0"
},
"engines": {
"node": ">=0.6"
@@ -1506,17 +1533,44 @@
}
},
"node_modules/raw-body": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
- "integrity":
"sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz",
+ "integrity":
"sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==",
+ "dependencies": {
+ "bytes": "~3.1.2",
+ "http-errors": "~2.0.1",
+ "iconv-lite": "~0.4.24",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/raw-body/node_modules/http-errors": {
+ "version": "2.0.1",
+ "resolved":
"https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+ "integrity":
"sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
"dependencies": {
- "bytes": "3.1.2",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
+ "depd": "~2.0.0",
+ "inherits": "~2.0.4",
+ "setprototypeof": "~1.2.0",
+ "statuses": "~2.0.2",
+ "toidentifier": "~1.0.1"
},
"engines": {
"node": ">= 0.8"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/raw-body/node_modules/statuses": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity":
"sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
+ "engines": {
+ "node": ">= 0.8"
}
},
"node_modules/readable-stream": {
@@ -2227,22 +2281,22 @@
"integrity":
"sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
},
"body-parser": {
- "version": "1.20.3",
- "resolved":
"https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
- "integrity":
"sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
+ "version": "1.20.5",
+ "resolved":
"https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz",
+ "integrity":
"sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==",
"requires": {
- "bytes": "3.1.2",
+ "bytes": "~3.1.2",
"content-type": "~1.0.5",
"debug": "2.6.9",
"depd": "2.0.0",
- "destroy": "1.2.0",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "on-finished": "2.4.1",
- "qs": "6.13.0",
- "raw-body": "2.5.2",
+ "destroy": "~1.2.0",
+ "http-errors": "~2.0.1",
+ "iconv-lite": "~0.4.24",
+ "on-finished": "~2.4.1",
+ "qs": "~6.15.1",
+ "raw-body": "~2.5.3",
"type-is": "~1.6.18",
- "unpipe": "1.0.0"
+ "unpipe": "~1.0.0"
},
"dependencies": {
"debug": {
@@ -2253,10 +2307,35 @@
"ms": "2.0.0"
}
},
+ "http-errors": {
+ "version": "2.0.1",
+ "resolved":
"https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+ "integrity":
"sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
+ "requires": {
+ "depd": "~2.0.0",
+ "inherits": "~2.0.4",
+ "setprototypeof": "~1.2.0",
+ "statuses": "~2.0.2",
+ "toidentifier": "~1.0.1"
+ }
+ },
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity":
"sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "qs": {
+ "version": "6.15.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz",
+ "integrity":
"sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==",
+ "requires": {
+ "side-channel": "^1.1.0"
+ }
+ },
+ "statuses": {
+ "version": "2.0.2",
+ "resolved":
"https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity":
"sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="
}
}
},
@@ -2848,14 +2927,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "qs": {
- "version": "6.14.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
- "integrity":
"sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
- "requires": {
- "side-channel": "^1.1.0"
- }
}
}
},
@@ -3290,11 +3361,11 @@
"integrity": "sha1-VACKyXKux0F13vnLpt9/qdORh0A="
},
"qs": {
- "version": "6.13.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
- "integrity":
"sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "version": "6.14.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
+ "integrity":
"sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
"requires": {
- "side-channel": "^1.0.6"
+ "side-channel": "^1.1.0"
}
},
"querystring": {
@@ -3313,14 +3384,33 @@
"integrity":
"sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"raw-body": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
- "integrity":
"sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
- "requires": {
- "bytes": "3.1.2",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz",
+ "integrity":
"sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==",
+ "requires": {
+ "bytes": "~3.1.2",
+ "http-errors": "~2.0.1",
+ "iconv-lite": "~0.4.24",
+ "unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "http-errors": {
+ "version": "2.0.1",
+ "resolved":
"https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+ "integrity":
"sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
+ "requires": {
+ "depd": "~2.0.0",
+ "inherits": "~2.0.4",
+ "setprototypeof": "~1.2.0",
+ "statuses": "~2.0.2",
+ "toidentifier": "~1.0.1"
+ }
+ },
+ "statuses": {
+ "version": "2.0.2",
+ "resolved":
"https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity":
"sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="
+ }
}
},
"readable-stream": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-engineio-4.13.1/examples/server/sanic/requirements.txt
new/python-engineio-4.13.2/examples/server/sanic/requirements.txt
--- old/python-engineio-4.13.1/examples/server/sanic/requirements.txt
2026-02-07 00:36:03.000000000 +0100
+++ new/python-engineio-4.13.2/examples/server/sanic/requirements.txt
2026-05-21 23:44:51.000000000 +0200
@@ -3,6 +3,6 @@
multidict==5.2.0
sanic==21.12.2
sanic-routing==0.7.2
-ujson==5.4.0
+ujson==5.12.1
uvloop==0.16.0
websockets==10.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-engineio-4.13.1/examples/server/tornado/requirements.txt
new/python-engineio-4.13.2/examples/server/tornado/requirements.txt
--- old/python-engineio-4.13.1/examples/server/tornado/requirements.txt
2026-02-07 00:36:03.000000000 +0100
+++ new/python-engineio-4.13.2/examples/server/tornado/requirements.txt
2026-05-21 23:44:51.000000000 +0200
@@ -1,3 +1,3 @@
-tornado==6.5.1
+tornado==6.5.5
python-engineio
six==1.10.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-engineio-4.13.1/pyproject.toml
new/python-engineio-4.13.2/pyproject.toml
--- old/python-engineio-4.13.1/pyproject.toml 2026-02-07 00:36:03.000000000
+0100
+++ new/python-engineio-4.13.2/pyproject.toml 2026-05-21 23:44:51.000000000
+0200
@@ -1,6 +1,6 @@
[project]
name = "python-engineio"
-version = "4.13.1"
+version = "4.13.2"
license = {text = "MIT"}
authors = [{name = "Miguel Grinberg", email = "[email protected]"}]
description = "Engine.IO server and client for Python"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-engineio-4.13.1/src/engineio/async_drivers/aiohttp.py
new/python-engineio-4.13.2/src/engineio/async_drivers/aiohttp.py
--- old/python-engineio-4.13.1/src/engineio/async_drivers/aiohttp.py
2026-02-07 00:36:03.000000000 +0100
+++ new/python-engineio-4.13.2/src/engineio/async_drivers/aiohttp.py
2026-05-21 23:44:51.000000000 +0200
@@ -79,11 +79,13 @@
"""
def __init__(self, handler, server):
self.handler = handler
+ self.server = server
self._sock = None
async def __call__(self, environ):
request = environ['aiohttp.request']
- self._sock = WebSocketResponse(max_msg_size=0)
+ self._sock = WebSocketResponse(
+ max_msg_size=self.server.max_http_buffer_size)
await self._sock.prepare(request)
self.environ = environ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-engineio-4.13.1/src/engineio/async_drivers/asgi.py
new/python-engineio-4.13.2/src/engineio/async_drivers/asgi.py
--- old/python-engineio-4.13.1/src/engineio/async_drivers/asgi.py
2026-02-07 00:36:03.000000000 +0100
+++ new/python-engineio-4.13.2/src/engineio/async_drivers/asgi.py
2026-05-21 23:44:51.000000000 +0200
@@ -136,10 +136,18 @@
async def translate_request(scope, receive, send):
class AwaitablePayload: # pragma: no cover
- def __init__(self, payload):
- self.payload = payload or b''
+ def __init__(self, event):
+ self.event = event
+ self.payload = None
async def read(self, length=None):
+ if self.payload is None and event['type'] == 'http.request':
+ # read payload from http request
+ self.payload = self.event.get('body') or b''
+ while self.event.get('more_body'):
+ self.event = await receive()
+ if self.event['type'] == 'http.request':
+ self.payload += self.event.get('body') or b''
if length is None:
r = self.payload
self.payload = b''
@@ -149,16 +157,7 @@
return r
event = await receive()
- payload = b''
- if event['type'] == 'http.request':
- payload += event.get('body') or b''
- while event.get('more_body'):
- event = await receive()
- if event['type'] == 'http.request':
- payload += event.get('body') or b''
- elif event['type'] == 'websocket.connect':
- pass
- else:
+ if event['type'] not in ['http.request', 'websocket.connect']:
return {}
raw_uri = scope['path']
@@ -171,7 +170,7 @@
else:
raw_uri += '?' + query_string
environ = {
- 'wsgi.input': AwaitablePayload(payload),
+ 'wsgi.input': AwaitablePayload(event),
'wsgi.errors': sys.stderr,
'wsgi.version': (1, 0),
'wsgi.async': True,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-engineio-4.13.1/src/engineio/async_server.py
new/python-engineio-4.13.2/src/engineio/async_server.py
--- old/python-engineio-4.13.1/src/engineio/async_server.py 2026-02-07
00:36:03.000000000 +0100
+++ new/python-engineio-4.13.2/src/engineio/async_server.py 2026-05-21
23:44:51.000000000 +0200
@@ -462,7 +462,6 @@
'maxPayload': self.max_http_buffer_size,
})
await s.send(pkt)
- s.schedule_ping()
ret = await self._trigger_event('connect', sid, environ,
run_async=False)
@@ -471,6 +470,8 @@
self.logger.warning('Application rejected connection')
return self._unauthorized(ret or None)
+ s.schedule_ping()
+
if transport == 'websocket':
ret = await s.handle_get_request(environ)
if s.closed and sid in self.sockets:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-engineio-4.13.1/src/engineio/async_socket.py
new/python-engineio-4.13.2/src/engineio/async_socket.py
--- old/python-engineio-4.13.1/src/engineio/async_socket.py 2026-02-07
00:36:03.000000000 +0100
+++ new/python-engineio-4.13.2/src/engineio/async_socket.py 2026-05-21
23:44:51.000000000 +0200
@@ -128,10 +128,12 @@
await self.queue.join()
def schedule_ping(self):
- self.server.start_background_task(self._send_ping)
+ # only schedule a new ping if the previous ping wait cycle completed
+ if self.last_ping:
+ self.last_ping = None
+ self.server.start_background_task(self._send_ping)
async def _send_ping(self):
- self.last_ping = None
await asyncio.sleep(self.server.ping_interval)
if not self.closing and not self.closed:
self.last_ping = time.time()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-engineio-4.13.1/src/engineio/base_socket.py
new/python-engineio-4.13.2/src/engineio/base_socket.py
--- old/python-engineio-4.13.1/src/engineio/base_socket.py 2026-02-07
00:36:03.000000000 +0100
+++ new/python-engineio-4.13.2/src/engineio/base_socket.py 2026-05-21
23:44:51.000000000 +0200
@@ -1,3 +1,6 @@
+import time
+
+
class BaseSocket:
upgrade_protocols = ['websocket']
@@ -5,7 +8,7 @@
self.server = server
self.sid = sid
self.queue = self.server.create_queue()
- self.last_ping = None
+ self.last_ping = time.time()
self.connected = False
self.upgrading = False
self.upgraded = False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-engineio-4.13.1/src/engineio/server.py
new/python-engineio-4.13.2/src/engineio/server.py
--- old/python-engineio-4.13.1/src/engineio/server.py 2026-02-07
00:36:03.000000000 +0100
+++ new/python-engineio-4.13.2/src/engineio/server.py 2026-05-21
23:44:51.000000000 +0200
@@ -401,7 +401,6 @@
'maxPayload': self.max_http_buffer_size,
})
s.send(pkt)
- s.schedule_ping()
# NOTE: some sections below are marked as "no cover" to workaround
# what seems to be a bug in the coverage package. All the lines below
@@ -413,6 +412,8 @@
self.logger.warning('Application rejected connection')
return self._unauthorized(ret or None)
+ s.schedule_ping()
+
if transport == 'websocket': # pragma: no cover
ret = s.handle_get_request(environ, start_response)
if s.closed and sid in self.sockets:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-engineio-4.13.1/src/engineio/socket.py
new/python-engineio-4.13.2/src/engineio/socket.py
--- old/python-engineio-4.13.1/src/engineio/socket.py 2026-02-07
00:36:03.000000000 +0100
+++ new/python-engineio-4.13.2/src/engineio/socket.py 2026-05-21
23:44:51.000000000 +0200
@@ -130,10 +130,12 @@
self.queue.join()
def schedule_ping(self):
- self.server.start_background_task(self._send_ping)
+ # only schedule a new ping if the previous ping wait cycle completed
+ if self.last_ping:
+ self.last_ping = None
+ self.server.start_background_task(self._send_ping)
def _send_ping(self):
- self.last_ping = None
self.server.sleep(self.server.ping_interval)
if not self.closing and not self.closed:
self.last_ping = time.time()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-engineio-4.13.1/tests/async/test_socket.py
new/python-engineio-4.13.2/tests/async/test_socket.py
--- old/python-engineio-4.13.1/tests/async/test_socket.py 2026-02-07
00:36:03.000000000 +0100
+++ new/python-engineio-4.13.2/tests/async/test_socket.py 2026-05-21
23:44:51.000000000 +0200
@@ -95,14 +95,30 @@
s = async_socket.AsyncSocket(mock_server, 'sid')
s.send = mock.AsyncMock()
- async def schedule_ping():
+ async def schedule_ping_and_sleep():
s.schedule_ping()
await asyncio.sleep(0.05)
- await schedule_ping()
+ await schedule_ping_and_sleep()
assert s.last_ping is not None
assert s.send.await_args_list[0][0][0].encode() == '2'
+ async def test_schedule_ping_twice(self):
+ mock_server = self._get_mock_server()
+ mock_server.ping_interval = 0.01
+ s = async_socket.AsyncSocket(mock_server, 'sid')
+ s.send = mock.AsyncMock()
+
+ async def schedule_ping_and_sleep():
+ s.schedule_ping()
+ await asyncio.sleep(0.05)
+
+ s.schedule_ping()
+ assert s.last_ping is None
+ await schedule_ping_and_sleep()
+ assert s.last_ping is not None
+ assert s.send.await_count == 1
+
async def test_schedule_ping_closed_socket(self):
mock_server = self._get_mock_server()
mock_server.ping_interval = 0.01
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-engineio-4.13.1/tests/common/test_socket.py
new/python-engineio-4.13.2/tests/common/test_socket.py
--- old/python-engineio-4.13.1/tests/common/test_socket.py 2026-02-07
00:36:03.000000000 +0100
+++ new/python-engineio-4.13.2/tests/common/test_socket.py 2026-05-21
23:44:51.000000000 +0200
@@ -21,6 +21,7 @@
mock_server.ping_interval_grace_period = 0.001
mock_server.async_handlers = True
mock_server.max_http_buffer_size = 128
+ mock_server.sleep = time.sleep
try:
import queue
@@ -104,6 +105,19 @@
assert s.last_ping is not None
assert s.send.call_args_list[0][0][0].encode() == '2'
+ def test_schedule_ping_twice(self):
+ mock_server = self._get_mock_server()
+ mock_server.ping_interval = 0.1
+ s = socket.Socket(mock_server, 'sid')
+ s.send = mock.MagicMock()
+ s.schedule_ping()
+ assert s.last_ping is None
+ time.sleep(0.01)
+ s.schedule_ping()
+ time.sleep(0.1)
+ assert s.last_ping is not None
+ assert s.send.call_count == 1
+
def test_schedule_ping_closed_socket(self):
mock_server = self._get_mock_server()
mock_server.ping_interval = 0.01
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-engineio-4.13.1/tox.ini
new/python-engineio-4.13.2/tox.ini
--- old/python-engineio-4.13.1/tox.ini 2026-02-07 00:36:03.000000000 +0100
+++ new/python-engineio-4.13.2/tox.ini 2026-05-21 23:44:51.000000000 +0200
@@ -1,16 +1,3 @@
-[tox]
-envlist=flake8,py310,py311,py312,py313,py314,pypy3,docs
-skip_missing_interpreters=True
-
-[gh-actions]
-python =
- 3.10: py310
- 3.11: py311
- 3.12: py312
- 3.13: py313
- 3.14: py314
- pypy-3: pypy3
-
[testenv]
commands=
pip install -e .
@@ -24,8 +11,6 @@
requests
websocket-client
-[testenv:pypy3]
-
[testenv:flake8]
deps=
flake8