workers-runtime-sdk 1.6.7__tar.gz → 1.6.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/CHANGELOG.md +18 -0
  2. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/PKG-INFO +1 -1
  3. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/pyproject.toml +1 -1
  4. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/asgi.py +11 -1
  5. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/workers/wsgi.py +9 -1
  6. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/pyproject.toml +3 -1
  7. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/asgi-ws-disconnect/tests/test_ws_disconnect.py +43 -0
  8. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/asgi-ws-disconnect/worker.py +35 -1
  9. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/uv.lock +1 -1
  10. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/.gitignore +0 -0
  11. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/AGENTS.md +0 -0
  12. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/README.md +0 -0
  13. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/_cloudflare_compat_flags.pyi +0 -0
  14. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/_pyodide_entrypoint_helper.pyi +0 -0
  15. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/_workers_sdk_entropy_import_context.pth +0 -0
  16. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/_workers_sdk_entropy_import_context.py +0 -0
  17. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/_workers_sdk_entropy_import_context_loader.py +0 -0
  18. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/workers/__init__.py +0 -0
  19. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/workers/blob.py +0 -0
  20. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/workers/entrypoints.py +0 -0
  21. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/workers/fetch.py +0 -0
  22. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/workers/formdata.py +0 -0
  23. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/workers/py.typed +0 -0
  24. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/workers/request.py +0 -0
  25. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/workers/response.py +0 -0
  26. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/workers/rpc.py +0 -0
  27. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/workers/types.py +0 -0
  28. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/workers/utils.py +0 -0
  29. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/src/workers/workflows.py +0 -0
  30. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/public/data.json +0 -0
  31. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/public/hello.txt +0 -0
  32. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/pyproject.toml +0 -0
  33. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/src/conftest.py +0 -0
  34. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/src/test_analytics_engine.py +0 -0
  35. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/src/test_assets.py +0 -0
  36. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/src/test_d1.py +0 -0
  37. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/src/test_do.py +0 -0
  38. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/src/test_images.py +0 -0
  39. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/src/test_kv.py +0 -0
  40. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/src/test_mtls.py +0 -0
  41. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/src/test_queue.py +0 -0
  42. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/src/test_r2.py +0 -0
  43. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/src/test_ratelimit.py +0 -0
  44. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/src/test_vectorize.py +0 -0
  45. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/src/test_version_metadata.py +0 -0
  46. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/src/test_workflow.py +0 -0
  47. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/src/worker.py +0 -0
  48. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/src/worker_durable_object.py +0 -0
  49. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/src/worker_workflow.py +0 -0
  50. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/bindings-test/wrangler.jsonc +0 -0
  51. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/conftest.py +0 -0
  52. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/test_bindings.py +0 -0
  53. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/test_fastapi.py +0 -0
  54. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/test_in_workerd.py +0 -0
  55. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/test_web_frameworks.py +0 -0
  56. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/_client.py +0 -0
  57. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/conftest.py +0 -0
  58. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/django_app/__init__.py +0 -0
  59. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/django_app/api_urls.py +0 -0
  60. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/django_app/auth_backend.py +0 -0
  61. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/django_app/drf_auth.py +0 -0
  62. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/django_app/drf_serializers.py +0 -0
  63. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/django_app/drf_throttling.py +0 -0
  64. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/django_app/drf_views.py +0 -0
  65. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/django_app/forms.py +0 -0
  66. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/django_app/middleware.py +0 -0
  67. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/django_app/templatetags/__init__.py +0 -0
  68. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/django_app/templatetags/custom_tags.py +0 -0
  69. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/django_app/urls.py +0 -0
  70. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/django_app/views.py +0 -0
  71. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/templates/base.html +0 -0
  72. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/templates/context_test.html +0 -0
  73. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/templates/csrf_form.html +0 -0
  74. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/templates/hello.html +0 -0
  75. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_async_utilities.py +0 -0
  76. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_auth.py +0 -0
  77. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_caching.py +0 -0
  78. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_cors.py +0 -0
  79. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_csrf.py +0 -0
  80. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_drf_auth_permissions.py +0 -0
  81. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_drf_content_negotiation.py +0 -0
  82. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_drf_serializers.py +0 -0
  83. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_drf_throttling.py +0 -0
  84. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_drf_versioning.py +0 -0
  85. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_drf_views.py +0 -0
  86. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_error_handling.py +0 -0
  87. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_file_uploads.py +0 -0
  88. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_forms.py +0 -0
  89. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_middleware.py +0 -0
  90. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_pagination.py +0 -0
  91. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_request_response.py +0 -0
  92. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_sessions.py +0 -0
  93. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_signals.py +0 -0
  94. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_streaming.py +0 -0
  95. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_templates.py +0 -0
  96. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_url_routing.py +0 -0
  97. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/test_views_basic.py +0 -0
  98. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/src/worker.py +0 -0
  99. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/django-async/wrangler.jsonc +0 -0
  100. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/fastapi-tests/public/data.json +0 -0
  101. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/fastapi-tests/public/index.html +0 -0
  102. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/fastapi-tests/public/style.css +0 -0
  103. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/fastapi-tests/pyproject.toml +0 -0
  104. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/fastapi-tests/src/_client.py +0 -0
  105. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/fastapi-tests/src/conftest.py +0 -0
  106. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/fastapi-tests/src/test_assets.py +0 -0
  107. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/fastapi-tests/src/worker.py +0 -0
  108. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/web-frameworks-test/fastapi-tests/wrangler.jsonc +0 -0
  109. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/asgi/asgi.wd-test +0 -0
  110. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/asgi/pyproject.toml +0 -0
  111. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/asgi/tests/test_asgi.py +0 -0
  112. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/asgi/worker.py +0 -0
  113. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/asgi/wrangler.jsonc +0 -0
  114. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/asgi-ws-disconnect/asgi-ws-disconnect.wd-test +0 -0
  115. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/asgi-ws-disconnect/pyproject.toml +0 -0
  116. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/asgi-ws-disconnect/wrangler.jsonc +0 -0
  117. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/durable-object/durable-object.wd-test +0 -0
  118. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/durable-object/pyproject.toml +0 -0
  119. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/durable-object/worker.py +0 -0
  120. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/durable-object/wrangler.jsonc +0 -0
  121. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/durable-object-abort/durable-object-abort.wd-test +0 -0
  122. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/durable-object-abort/pyproject.toml +0 -0
  123. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/durable-object-abort/worker.py +0 -0
  124. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/durable-object-abort/wrangler.jsonc +0 -0
  125. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/durable-object-inheritance/durable-object-inheritance.wd-test +0 -0
  126. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/durable-object-inheritance/pyproject.toml +0 -0
  127. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/durable-object-inheritance/worker.py +0 -0
  128. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/durable-object-inheritance/wrangler.jsonc +0 -0
  129. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/durable-object-websocket/durable-object-websocket.wd-test +0 -0
  130. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/durable-object-websocket/pyproject.toml +0 -0
  131. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/durable-object-websocket/tester.js +0 -0
  132. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/durable-object-websocket/worker.py +0 -0
  133. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/durable-object-websocket/wrangler.jsonc +0 -0
  134. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/entropy-patches/entropy-patches.wd-test +0 -0
  135. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/entropy-patches/pyproject.toml +0 -0
  136. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/entropy-patches/tests/test_aiohttp_websocket.py +0 -0
  137. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/entropy-patches/tests/test_langsmith.py +0 -0
  138. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/entropy-patches/tests/test_numpy.py +0 -0
  139. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/entropy-patches/tests/test_pydantic.py +0 -0
  140. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/entropy-patches/tests/test_rust_packages.py +0 -0
  141. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/entropy-patches/tests/test_ssl_avoidance.py +0 -0
  142. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/entropy-patches/worker.py +0 -0
  143. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/entropy-patches/wrangler.jsonc +0 -0
  144. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/python-rpc/pyproject.toml +0 -0
  145. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/python-rpc/python-rpc.wd-test +0 -0
  146. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/python-rpc/worker.js +0 -0
  147. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/python-rpc/worker.py +0 -0
  148. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/python-rpc/wrangler.jsonc +0 -0
  149. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/sdk/pyproject.toml +0 -0
  150. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/sdk/sdk.wd-test +0 -0
  151. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/sdk/server.py +0 -0
  152. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/sdk/tests/test_sdk.py +0 -0
  153. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/sdk/worker.py +0 -0
  154. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/sdk/wrangler.jsonc +0 -0
  155. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/wsgi/pyproject.toml +0 -0
  156. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/wsgi/worker.py +0 -0
  157. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/wsgi/wrangler.jsonc +0 -0
  158. {workers_runtime_sdk-1.6.7 → workers_runtime_sdk-1.6.9}/tests/workerd-test/wsgi/wsgi.wd-test +0 -0
@@ -2,6 +2,24 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v1.6.9 (2026-08-10)
6
+
7
+ ### Bug Fixes
8
+
9
+ - **runtime-sdk**: Deliver binary WebSocket frames as ASGI `bytes`
10
+ ([#164](https://github.com/cloudflare/workers-py/pull/164),
11
+ [`44ca368`](https://github.com/cloudflare/workers-py/commit/44ca36818367af23ffd0c76f5d2dc7588219b340))
12
+
13
+
14
+ ## v1.6.8 (2026-08-05)
15
+
16
+ ### Bug Fixes
17
+
18
+ - **runtime-sdk**: Do not include HTTP body for null body status codes
19
+ ([#162](https://github.com/cloudflare/workers-py/pull/162),
20
+ [`693d594`](https://github.com/cloudflare/workers-py/commit/693d5945fd6531beb0d9d2fd3c97bf7ee2c8f1f3))
21
+
22
+
5
23
  ## v1.6.7 (2026-08-05)
6
24
 
7
25
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: workers-runtime-sdk
3
- Version: 1.6.7
3
+ Version: 1.6.9
4
4
  Summary: Python SDK for Cloudflare Workers
5
5
  Project-URL: Homepage, https://github.com/cloudflare/workers-py
6
6
  Project-URL: Bug Tracker, https://github.com/cloudflare/workers-py/issues
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "workers-runtime-sdk"
7
- version = "1.6.7"
7
+ version = "1.6.9"
8
8
  description = "Python SDK for Cloudflare Workers"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -294,6 +294,9 @@ async def process_websocket(app: Any, req: "Request | js.Request") -> js.Respons
294
294
 
295
295
  client, server = WebSocketPair.new().object_values()
296
296
  server.accept()
297
+ # Binary frames otherwise arrive as Blob (observed under wrangler dev),
298
+ # which cannot be read synchronously in the message callback.
299
+ server.binaryType = "arraybuffer"
297
300
  queue = Queue()
298
301
 
299
302
  def onopen(evt):
@@ -312,7 +315,14 @@ async def process_websocket(app: Any, req: "Request | js.Request") -> js.Respons
312
315
  queue.put_nowait(msg)
313
316
 
314
317
  def onmessage(evt):
315
- msg = {"type": "websocket.receive", "text": evt.data}
318
+ data = evt.data
319
+ if isinstance(data, str):
320
+ msg = {"type": "websocket.receive", "text": data}
321
+ else:
322
+ # Binary frames arrive as an ArrayBuffer; the ASGI spec requires
323
+ # them under "bytes" (frameworks like Starlette dispatch on which
324
+ # key is present, so labeling them "text" breaks receive_bytes()).
325
+ msg = {"type": "websocket.receive", "bytes": data.to_bytes()}
316
326
  queue.put_nowait(msg)
317
327
 
318
328
  server.onopen = onopen
@@ -10,6 +10,7 @@ import js
10
10
  from workers import Context, Request
11
11
 
12
12
  logger = logging.getLogger("wsgi")
13
+ NULL_BODY_STATUSES = frozenset({101, 103, 204, 205, 304})
13
14
 
14
15
 
15
16
  def _wsgi_native_string(value: str) -> str:
@@ -230,7 +231,8 @@ def _make_streaming_response(
230
231
 
231
232
  # WSGI status is e.g. "200 OK"; split into code + reason phrase.
232
233
  code_str, _, reason = status.partition(" ")
233
- options: dict[str, Any] = {"status": int(code_str)}
234
+ code = int(code_str)
235
+ options: dict[str, Any] = {"status": code}
234
236
  if reason:
235
237
  options["statusText"] = reason
236
238
 
@@ -240,6 +242,12 @@ def _make_streaming_response(
240
242
  js_headers.append(key, value)
241
243
  options["headers"] = js_headers
242
244
 
245
+ if code in NULL_BODY_STATUSES:
246
+ # 101/103/204/205/304 must not carry a body per the Fetch spec.
247
+ # https://fetch.spec.whatwg.org/#null-body-status
248
+ on_close()
249
+ return Response.new(None, **options)
250
+
243
251
  proxies: list[Any] = []
244
252
  done = False
245
253
 
@@ -3,7 +3,9 @@ name = "django-async-test"
3
3
  version = "0.1.0"
4
4
  requires-python = ">=3.12"
5
5
  dependencies = [
6
- "django",
6
+ # https://github.com/django/django/pull/21438/changes#r3399119797
7
+ # Remove this constraint when drf releases a version that supports Django 6.1
8
+ "django<6.1",
7
9
  "djangorestframework",
8
10
  "django-cors-headers",
9
11
  "pytest",
@@ -1,4 +1,5 @@
1
1
  import asyncio
2
+ import contextlib
2
3
 
3
4
  import pytest
4
5
  from pyodide.ffi import create_proxy, to_js
@@ -70,3 +71,45 @@ async def test_client_close_reaches_app_as_disconnect():
70
71
  return
71
72
  await asyncio.sleep(0.2)
72
73
  pytest.fail("the app never observed the client's disconnect")
74
+
75
+
76
+ @contextlib.asynccontextmanager
77
+ async def _ws_session(path):
78
+ """Accepted client socket, always closed again.
79
+
80
+ A test that raises before closing leaves the app awaiting receive(), and
81
+ the runtime keeps the request alive for that task, so the whole worker
82
+ invocation hangs instead of reporting the failure.
83
+ """
84
+ response = await _ws_connect(path)
85
+ ws = response.webSocket
86
+ assert ws is not None
87
+ ws.accept()
88
+ # Without this the payload arrives as a Blob, which cannot be read
89
+ # synchronously in the message callback.
90
+ ws.binaryType = "arraybuffer"
91
+ try:
92
+ yield ws
93
+ finally:
94
+ ws.close()
95
+
96
+
97
+ @pytest.mark.asyncio
98
+ async def test_text_frame_arrives_as_asgi_text():
99
+ async with _ws_session("/ws-echo") as ws:
100
+ message = _listen(ws, "message")
101
+ ws.send("hello")
102
+ evt = await asyncio.wait_for(message, TIMEOUT_S)
103
+ assert evt.data == "text=hello"
104
+
105
+
106
+ @pytest.mark.asyncio
107
+ async def test_binary_frame_arrives_as_asgi_bytes():
108
+ async with _ws_session("/ws-echo") as ws:
109
+ message = _listen(ws, "message")
110
+ payload = b"\x00\x01binary"
111
+ ws.send(to_js(payload))
112
+ evt = await asyncio.wait_for(message, TIMEOUT_S)
113
+ data = evt.data
114
+ assert not isinstance(data, str), f"delivered to the app as text: {data!r}"
115
+ assert data.to_bytes() == b"bytes=" + payload
@@ -1,6 +1,7 @@
1
1
  import asyncio
2
2
  import os
3
3
  import sys
4
+ from urllib.parse import urlsplit
4
5
 
5
6
  import pytest
6
7
  from pyodide.webloop import WebLoop
@@ -49,13 +50,46 @@ class WSWatchApp:
49
50
  return
50
51
 
51
52
 
53
+ class WSEchoApp:
54
+ """Accepts and echoes each frame back tagged with the ASGI key it arrived
55
+ under ("bytes=" / "text=" prefix), so tests can detect frames delivered
56
+ under the wrong key (an untagged echo would bounce a mislabeled frame
57
+ opaquely and pass anyway)."""
58
+
59
+ async def __call__(self, scope, receive, send):
60
+ if scope["type"] == "lifespan":
61
+ await _drain_lifespan(receive, send)
62
+ return
63
+ message = await receive()
64
+ assert message["type"] == "websocket.connect"
65
+ await send({"type": "websocket.accept"})
66
+ while True:
67
+ message = await receive()
68
+ if message["type"] == "websocket.disconnect":
69
+ return
70
+ if message.get("bytes") is not None:
71
+ await send(
72
+ {"type": "websocket.send", "bytes": b"bytes=" + message["bytes"]}
73
+ )
74
+ else:
75
+ text = message.get("text")
76
+ # text is always str once frames are labeled correctly; repr()
77
+ # keeps a regression readable instead of timing out on a
78
+ # TypeError inside the app.
79
+ reply = "text=" + (text if isinstance(text, str) else repr(text))
80
+ await send({"type": "websocket.send", "text": reply})
81
+
82
+
52
83
  ws_app = WSWatchApp()
84
+ echo_app = WSEchoApp()
53
85
 
54
86
 
55
87
  class Default(WorkerEntrypoint):
56
88
  async def fetch(self, request):
57
89
  if (request.headers.get("upgrade") or "").lower() == "websocket":
58
- return await asgi.websocket(ws_app, request)
90
+ path = urlsplit(request.url).path
91
+ app = echo_app if path == "/ws-echo" else ws_app
92
+ return await asgi.websocket(app, request)
59
93
  import json
60
94
 
61
95
  from workers import Response
@@ -345,7 +345,7 @@ wheels = [
345
345
 
346
346
  [[package]]
347
347
  name = "workers-runtime-sdk"
348
- version = "1.6.7"
348
+ version = "1.6.9"
349
349
  source = { editable = "." }
350
350
 
351
351
  [package.dev-dependencies]