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

Reply via email to