workers-runtime-sdk 1.9.0__tar.gz → 1.9.1__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 (209) hide show
  1. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/CHANGELOG.md +9 -0
  2. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/PKG-INFO +1 -1
  3. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/pyproject.toml +1 -1
  4. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/_workers_sdk_entropy_import_context.py +1 -0
  5. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/pyproject.toml +7 -2
  6. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/conftest.py +11 -23
  7. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/test_in_workerd.py +6 -15
  8. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/pyproject.toml +3 -1
  9. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/pyproject.toml +3 -1
  10. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/src/worker.py +4 -11
  11. workers_runtime_sdk-1.9.1/tests/web-frameworks-test/flask-tests/pyproject.toml +9 -0
  12. workers_runtime_sdk-1.9.1/tests/workerd-test/asgi/pyproject.toml +9 -0
  13. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/asgi/worker.py +2 -20
  14. workers_runtime_sdk-1.9.1/tests/workerd-test/asgi-ws-disconnect/pyproject.toml +9 -0
  15. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/asgi-ws-disconnect/worker.py +2 -19
  16. workers_runtime_sdk-1.9.1/tests/workerd-test/durable-object/pyproject.toml +8 -0
  17. workers_runtime_sdk-1.9.1/tests/workerd-test/durable-object-abort/pyproject.toml +8 -0
  18. workers_runtime_sdk-1.9.1/tests/workerd-test/durable-object-inheritance/pyproject.toml +8 -0
  19. workers_runtime_sdk-1.9.1/tests/workerd-test/durable-object-websocket/pyproject.toml +8 -0
  20. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/entropy-patches/pyproject.toml +5 -0
  21. workers_runtime_sdk-1.9.1/tests/workerd-test/entropy-patches/tests/test_jsonschema.py +9 -0
  22. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/entropy-patches/worker.py +1 -0
  23. workers_runtime_sdk-1.9.1/tests/workerd-test/http-client/pyproject.toml +8 -0
  24. workers_runtime_sdk-1.9.1/tests/workerd-test/python-rpc/pyproject.toml +8 -0
  25. workers_runtime_sdk-1.9.1/tests/workerd-test/sdk/pyproject.toml +9 -0
  26. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/sdk/worker.py +2 -21
  27. workers_runtime_sdk-1.9.1/tests/workerd-test/wsgi/pyproject.toml +9 -0
  28. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/wsgi/worker.py +2 -20
  29. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/uv.lock +12 -1
  30. workers_runtime_sdk-1.9.0/tests/web-frameworks-test/flask-tests/pyproject.toml +0 -8
  31. workers_runtime_sdk-1.9.0/tests/workerd-test/asgi/pyproject.toml +0 -5
  32. workers_runtime_sdk-1.9.0/tests/workerd-test/asgi-ws-disconnect/pyproject.toml +0 -5
  33. workers_runtime_sdk-1.9.0/tests/workerd-test/durable-object/pyproject.toml +0 -5
  34. workers_runtime_sdk-1.9.0/tests/workerd-test/durable-object-inheritance/pyproject.toml +0 -5
  35. workers_runtime_sdk-1.9.0/tests/workerd-test/durable-object-websocket/pyproject.toml +0 -5
  36. workers_runtime_sdk-1.9.0/tests/workerd-test/http-client/pyproject.toml +0 -5
  37. workers_runtime_sdk-1.9.0/tests/workerd-test/python-rpc/pyproject.toml +0 -5
  38. workers_runtime_sdk-1.9.0/tests/workerd-test/sdk/pyproject.toml +0 -5
  39. workers_runtime_sdk-1.9.0/tests/workerd-test/workflow/pyproject.toml +0 -5
  40. workers_runtime_sdk-1.9.0/tests/workerd-test/wsgi/pyproject.toml +0 -5
  41. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/.gitignore +0 -0
  42. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/AGENTS.md +0 -0
  43. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/README.md +0 -0
  44. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/_cloudflare_compat_flags.pyi +0 -0
  45. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/_pyodide_entrypoint_helper.pyi +0 -0
  46. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/_workers_sdk_package_patches.py +0 -0
  47. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/_workers_sdk_patch_loader.pth +0 -0
  48. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/_workers_sdk_patch_loader.py +0 -0
  49. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/asgi.py +0 -0
  50. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/workers/__init__.py +0 -0
  51. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/workers/asgi.py +0 -0
  52. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/workers/blob.py +0 -0
  53. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/workers/entrypoints.py +0 -0
  54. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/workers/fetch.py +0 -0
  55. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/workers/formdata.py +0 -0
  56. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/workers/py.typed +0 -0
  57. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/workers/request.py +0 -0
  58. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/workers/response.py +0 -0
  59. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/workers/rpc.py +0 -0
  60. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/workers/types.py +0 -0
  61. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/workers/utils.py +0 -0
  62. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/workers/workflows.js +0 -0
  63. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/workers/workflows.py +0 -0
  64. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/src/workers/wsgi.py +0 -0
  65. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/public/data.json +0 -0
  66. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/public/hello.txt +0 -0
  67. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/conftest.py +0 -0
  68. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/test_analytics_engine.py +0 -0
  69. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/test_assets.py +0 -0
  70. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/test_d1.py +0 -0
  71. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/test_do.py +0 -0
  72. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/test_hyperdrive_mysql.py +0 -0
  73. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/test_hyperdrive_postgresql.py +0 -0
  74. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/test_images.py +0 -0
  75. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/test_kv.py +0 -0
  76. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/test_mtls.py +0 -0
  77. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/test_queue.py +0 -0
  78. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/test_r2.py +0 -0
  79. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/test_ratelimit.py +0 -0
  80. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/test_vectorize.py +0 -0
  81. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/test_version_metadata.py +0 -0
  82. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/test_workflow.py +0 -0
  83. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/worker.py +0 -0
  84. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/worker_durable_object.py +0 -0
  85. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/src/worker_workflow.py +0 -0
  86. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/bindings-test/wrangler.jsonc +0 -0
  87. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/test_bindings.py +0 -0
  88. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/test_fastapi.py +0 -0
  89. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/test_flask.py +0 -0
  90. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/test_web_frameworks.py +0 -0
  91. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/_client.py +0 -0
  92. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/conftest.py +0 -0
  93. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/django_app/__init__.py +0 -0
  94. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/django_app/api_urls.py +0 -0
  95. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/django_app/auth_backend.py +0 -0
  96. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/django_app/drf_auth.py +0 -0
  97. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/django_app/drf_serializers.py +0 -0
  98. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/django_app/drf_throttling.py +0 -0
  99. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/django_app/drf_views.py +0 -0
  100. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/django_app/forms.py +0 -0
  101. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/django_app/middleware.py +0 -0
  102. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/django_app/templatetags/__init__.py +0 -0
  103. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/django_app/templatetags/custom_tags.py +0 -0
  104. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/django_app/urls.py +0 -0
  105. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/django_app/views.py +0 -0
  106. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/templates/base.html +0 -0
  107. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/templates/context_test.html +0 -0
  108. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/templates/csrf_form.html +0 -0
  109. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/templates/hello.html +0 -0
  110. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_async_utilities.py +0 -0
  111. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_auth.py +0 -0
  112. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_caching.py +0 -0
  113. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_cors.py +0 -0
  114. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_csrf.py +0 -0
  115. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_drf_auth_permissions.py +0 -0
  116. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_drf_content_negotiation.py +0 -0
  117. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_drf_serializers.py +0 -0
  118. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_drf_throttling.py +0 -0
  119. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_drf_versioning.py +0 -0
  120. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_drf_views.py +0 -0
  121. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_error_handling.py +0 -0
  122. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_file_uploads.py +0 -0
  123. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_forms.py +0 -0
  124. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_middleware.py +0 -0
  125. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_pagination.py +0 -0
  126. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_request_response.py +0 -0
  127. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_sessions.py +0 -0
  128. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_signals.py +0 -0
  129. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_streaming.py +0 -0
  130. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_templates.py +0 -0
  131. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_url_routing.py +0 -0
  132. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/test_views_basic.py +0 -0
  133. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/src/worker.py +0 -0
  134. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/django-async/wrangler.jsonc +0 -0
  135. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/public/data.json +0 -0
  136. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/public/index.html +0 -0
  137. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/public/style.css +0 -0
  138. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/src/_client.py +0 -0
  139. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/src/conftest.py +0 -0
  140. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/src/static/app.css +0 -0
  141. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/src/static/data.json +0 -0
  142. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/src/static/hello.txt +0 -0
  143. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/src/static/index.html +0 -0
  144. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/src/test_assets.py +0 -0
  145. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/src/test_error_handling.py +0 -0
  146. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/src/test_platform_boundaries.py +0 -0
  147. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/src/test_platform_io.py +0 -0
  148. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/src/test_platform_lifecycle.py +0 -0
  149. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/src/test_response_types.py +0 -0
  150. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/src/test_routing.py +0 -0
  151. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/src/test_staticfiles.py +0 -0
  152. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/src/test_sync_handlers.py +0 -0
  153. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/src/test_websocket.py +0 -0
  154. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/fastapi-tests/wrangler.jsonc +0 -0
  155. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/flask-tests/src/test_response.py +0 -0
  156. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/flask-tests/src/worker.py +0 -0
  157. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/web-frameworks-test/flask-tests/wrangler.jsonc +0 -0
  158. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/asgi/asgi.wd-test +0 -0
  159. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/asgi/tests/test_asgi.py +0 -0
  160. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/asgi/wrangler.jsonc +0 -0
  161. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/asgi-ws-disconnect/asgi-ws-disconnect.wd-test +0 -0
  162. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/asgi-ws-disconnect/tests/test_ws_disconnect.py +0 -0
  163. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/asgi-ws-disconnect/wrangler.jsonc +0 -0
  164. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/durable-object/durable-object.wd-test +0 -0
  165. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/durable-object/worker.py +0 -0
  166. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/durable-object/wrangler.jsonc +0 -0
  167. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/durable-object-abort/durable-object-abort.wd-test +0 -0
  168. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/durable-object-abort/worker.py +0 -0
  169. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/durable-object-abort/wrangler.jsonc +0 -0
  170. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/durable-object-inheritance/durable-object-inheritance.wd-test +0 -0
  171. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/durable-object-inheritance/worker.py +0 -0
  172. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/durable-object-inheritance/wrangler.jsonc +0 -0
  173. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/durable-object-websocket/durable-object-websocket.wd-test +0 -0
  174. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/durable-object-websocket/tester.js +0 -0
  175. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/durable-object-websocket/worker.py +0 -0
  176. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/durable-object-websocket/wrangler.jsonc +0 -0
  177. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/entropy-patches/entropy-patches.wd-test +0 -0
  178. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/entropy-patches/tests/test_aiohttp_websocket.py +0 -0
  179. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/entropy-patches/tests/test_langsmith.py +0 -0
  180. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/entropy-patches/tests/test_litestar.py +0 -0
  181. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/entropy-patches/tests/test_mcp.py +0 -0
  182. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/entropy-patches/tests/test_numpy.py +0 -0
  183. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/entropy-patches/tests/test_opentelemetry.py +0 -0
  184. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/entropy-patches/tests/test_pydantic.py +0 -0
  185. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/entropy-patches/tests/test_rust_packages.py +0 -0
  186. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/entropy-patches/tests/test_ssl_avoidance.py +0 -0
  187. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/entropy-patches/wrangler.jsonc +0 -0
  188. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/http-client/http-client.wd-test +0 -0
  189. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/http-client/origin.py +0 -0
  190. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/http-client/tests/test_http_client.py +0 -0
  191. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/http-client/tests/test_urllib_request.py +0 -0
  192. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/http-client/worker.py +0 -0
  193. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/http-client/wrangler.jsonc +0 -0
  194. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/python-rpc/python-rpc.wd-test +0 -0
  195. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/python-rpc/worker.js +0 -0
  196. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/python-rpc/worker.py +0 -0
  197. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/python-rpc/wrangler.jsonc +0 -0
  198. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/sdk/sdk.wd-test +0 -0
  199. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/sdk/server.py +0 -0
  200. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/sdk/tests/test_sdk.py +0 -0
  201. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/sdk/wrangler.jsonc +0 -0
  202. {workers_runtime_sdk-1.9.0/tests/workerd-test/durable-object-abort → workers_runtime_sdk-1.9.1/tests/workerd-test/workflow}/pyproject.toml +0 -0
  203. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/workflow/worker.js +0 -0
  204. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/workflow/worker.py +0 -0
  205. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/workflow/workflow.wd-test +0 -0
  206. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/workflow/wrangler.jsonc +0 -0
  207. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/wsgi/tests/test_wsgi.py +0 -0
  208. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/wsgi/wrangler.jsonc +0 -0
  209. {workers_runtime_sdk-1.9.0 → workers_runtime_sdk-1.9.1}/tests/workerd-test/wsgi/wsgi.wd-test +0 -0
@@ -2,6 +2,15 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v1.9.1 (2026-09-29)
6
+
7
+ ### Bug Fixes
8
+
9
+ - **runtime-sdk**: Add rpds to rust package entropy context
10
+ ([#277](https://github.com/cloudflare/workers-py/pull/277),
11
+ [`a097b7c`](https://github.com/cloudflare/workers-py/commit/a097b7c5d2e5bba17f34d46abb6e39039d4673d4))
12
+
13
+
5
14
  ## v1.9.0 (2026-09-18)
6
15
 
7
16
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: workers-runtime-sdk
3
- Version: 1.9.0
3
+ Version: 1.9.1
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.9.0"
7
+ version = "1.9.1"
8
8
  description = "Python SDK for Cloudflare Workers"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -49,6 +49,7 @@ class STATE:
49
49
  @register_create_patch("tiktoken._tiktoken")
50
50
  @register_exec_patch("cryptography.exceptions")
51
51
  @register_exec_patch("jiter")
52
+ @register_exec_patch("rpds")
52
53
  @register_exec_patch("uuid_utils._uuid_utils")
53
54
  @contextmanager
54
55
  def rust_package_context(module):
@@ -7,13 +7,18 @@ dependencies = [
7
7
  "pytest-asyncio<1.2.0",
8
8
  # These are for hyperdrive tests
9
9
  "pg8000",
10
- "pymysql",
10
+ # There is a regression in upstream pymysql.
11
+ # Remove when the following PR is merged and released.
12
+ # https://github.com/PyMySQL/PyMySQL/pull/1275
13
+ "pymysql<=1.2.0",
11
14
  "aiomysql",
12
15
  "psycopg[binary]; python_version >= '3.14'",
13
16
  "asyncpg; python_version >= '3.14'",
14
17
  "cryptography",
15
18
  "testlib",
19
+ "workers-runtime-sdk",
16
20
  ]
17
21
 
18
22
  [tool.uv.sources]
19
- testlib = { path = "../testlib/dist/testlib-0.0.0-py3-none-any.whl" }
23
+ testlib = { path = "../packages/testlib" }
24
+ workers-runtime-sdk = { path = "../packages/runtime-sdk" }
@@ -2,7 +2,6 @@
2
2
 
3
3
  import os
4
4
  import shutil
5
- import subprocess
6
5
  from collections.abc import Generator
7
6
  from pathlib import Path
8
7
  from typing import Any
@@ -12,6 +11,8 @@ from testlib.host import (
12
11
  COMPAT_CONFIGS,
13
12
  CompatConfig,
14
13
  configure_compatibility,
14
+ link_packages,
15
+ pywrangler_sync,
15
16
  )
16
17
  from testlib.host import (
17
18
  dev_server as run_dev_server,
@@ -21,9 +22,6 @@ from testlib.host import (
21
22
  )
22
23
 
23
24
  TEST_DIR: Path = Path(__file__).parent
24
- WORKERS_PY: Path = TEST_DIR.parent.parent / "cli"
25
- WORKERS_RUNTIME_SDK: Path = TEST_DIR.parent / "src"
26
- TESTLIB: Path = TEST_DIR.parent.parent / "testlib"
27
25
 
28
26
  DEV_STARTUP_TIMEOUT: int = 120
29
27
  OPT_IN_MARKERS: tuple[str, ...] = ("hyperdrive",)
@@ -43,11 +41,6 @@ def pytest_collection_modifyitems(
43
41
  item.add_marker(skip)
44
42
 
45
43
 
46
- @pytest.fixture(scope="session", autouse=True)
47
- def build_testlib():
48
- subprocess.run(["uv", "build"], cwd=TESTLIB, check=True)
49
-
50
-
51
44
  @pytest.fixture(
52
45
  scope="module",
53
46
  params=COMPAT_CONFIGS,
@@ -74,32 +67,27 @@ def dev_server(
74
67
  worker_project_dir: Path,
75
68
  compat_config: CompatConfig,
76
69
  ) -> Generator[str]:
77
- """Start a pywrangler dev server on a free port and yield its base URL."""
70
+ """Start a pywrangler dev server on a free port and yield its base URL.
71
+
72
+ The project is copied next to a ``packages`` symlink so that its
73
+ ``../packages/...`` sources resolve and ``sync`` vendors the working-tree
74
+ testlib and runtime-sdk.
75
+ """
78
76
  tmp_path = tmp_path_factory.mktemp(f"{worker_project_dir.name}_dev")
79
77
  target = tmp_path / worker_project_dir.name
80
78
  shutil.copytree(worker_project_dir, target, ignore=shutil.ignore_patterns(".venv"))
81
- shutil.copytree(TESTLIB, tmp_path / "testlib")
79
+ link_packages(tmp_path)
82
80
  env = os.environ | {"_PYODIDE_EXTRA_MOUNTS": str(tmp_path)}
83
81
 
84
82
  wrangler_jsonc = target / "wrangler.jsonc"
85
83
  configure_compatibility(wrangler_jsonc, compat_config)
86
84
 
87
- pywrangler_cmd = ["uv", "run", "--no-project", "--with", WORKERS_PY, "pywrangler"]
88
-
89
- subprocess.run(
90
- [*pywrangler_cmd, "sync"],
91
- cwd=target,
92
- check=True,
93
- env=env,
94
- )
95
-
96
- shutil.copytree(WORKERS_RUNTIME_SDK, target / "python_modules", dirs_exist_ok=True)
85
+ pywrangler_sync(target, env)
97
86
 
98
87
  with run_dev_server(
99
88
  target,
100
89
  tmp_path,
101
90
  env,
102
- pywrangler_cmd,
103
91
  startup_timeout=DEV_STARTUP_TIMEOUT,
104
92
  readiness_path="/health",
105
93
  require_success=True,
@@ -113,4 +101,4 @@ def register_in_worker_suites(
113
101
  src_dir: Path,
114
102
  marks: dict[str, pytest.MarkDecorator] | None = None,
115
103
  ) -> None:
116
- register_testlib_suites(namespace, src_dir, marks=marks, class_name=str.upper)
104
+ register_testlib_suites(namespace, src_dir, marks=marks)
@@ -8,12 +8,12 @@ from conftest import (
8
8
  COMPAT_CONFIGS,
9
9
  CompatConfig,
10
10
  configure_compatibility,
11
+ link_packages,
12
+ pywrangler_sync,
11
13
  )
12
14
 
13
15
  TEST_DIR = Path(__file__).parent
14
16
  WORKERD_TESTS = TEST_DIR / "workerd-test"
15
- WORKERS_PY = TEST_DIR.parent.parent / "cli"
16
- WORKERS_RUNTIME_SDK = TEST_DIR.parent / "src"
17
17
  DISK_SERVICE_NAME = "TEST_TMPDIR"
18
18
 
19
19
 
@@ -123,23 +123,14 @@ def test_in_workerd( # noqa: PLR0913, PLR0917 (too-many-arguments)
123
123
  target = tmp_path / test_dir.name
124
124
  disk_service_dir = target / DISK_SERVICE_NAME
125
125
  shutil.copytree(test_dir, target, ignore=shutil.ignore_patterns(".venv"))
126
+ # Makes the project's `../packages/{runtime-sdk,testlib}` sources resolve
127
+ # so `sync` vendors the working-tree SDK and testlib.
128
+ link_packages(tmp_path)
126
129
  disk_service_dir.mkdir(exist_ok=True)
127
130
 
128
131
  configure_compatibility(target / "wrangler.jsonc", compat_config)
129
132
 
130
- pywrangler_cmd = ["uv", "run", "--no-project", "--with", WORKERS_PY, "pywrangler"]
131
-
132
- subprocess.run(
133
- [*pywrangler_cmd, "sync"],
134
- cwd=target,
135
- check=True,
136
- env=os.environ | {"_PYODIDE_EXTRA_MOUNTS": str(tmp_path)},
137
- )
138
-
139
- # Copy runtime-sdk to the python modules as well
140
- # FIXME: remove this and pass runtime-sdk as a dependency explicitly after
141
- # https://github.com/cloudflare/workers-py/pull/81 is merged
142
- shutil.copytree(WORKERS_RUNTIME_SDK, target / "python_modules", dirs_exist_ok=True)
133
+ pywrangler_sync(target, os.environ | {"_PYODIDE_EXTRA_MOUNTS": str(tmp_path)})
143
134
 
144
135
  modules = embed(target / "python_modules", target, level=1) + embed(
145
136
  target / "tests", target, level=1
@@ -11,7 +11,9 @@ dependencies = [
11
11
  "pytest",
12
12
  "pytest-asyncio<1.2.0",
13
13
  "testlib",
14
+ "workers-runtime-sdk",
14
15
  ]
15
16
 
16
17
  [tool.uv.sources]
17
- testlib = { path = "../testlib/dist/testlib-0.0.0-py3-none-any.whl" }
18
+ testlib = { path = "../packages/testlib" }
19
+ workers-runtime-sdk = { path = "../packages/runtime-sdk" }
@@ -8,7 +8,9 @@ dependencies = [
8
8
  "pytest",
9
9
  "pytest-asyncio<1.2.0",
10
10
  "testlib",
11
+ "workers-runtime-sdk",
11
12
  ]
12
13
 
13
14
  [tool.uv.sources]
14
- testlib = { path = "../testlib/dist/testlib-0.0.0-py3-none-any.whl" }
15
+ testlib = { path = "../packages/testlib" }
16
+ workers-runtime-sdk = { path = "../packages/runtime-sdk" }
@@ -30,21 +30,12 @@ from fastapi.responses import (
30
30
  from fastapi.responses import Response as FastAPIResponse
31
31
  from fastapi.staticfiles import StaticFiles
32
32
  from pydantic import BaseModel
33
- from pyodide.webloop import WebLoop
34
33
  from starlette.background import BackgroundTask
35
34
  from starlette.middleware.gzip import GZipMiddleware
36
- from testlib.entrypoint import TestRunner
35
+ from testlib.entrypoint import RunSuiteRequest, TestRunner
37
36
 
38
37
  import asgi
39
38
 
40
-
41
- async def _noop(*args):
42
- pass
43
-
44
-
45
- WebLoop.shutdown_asyncgens = _noop
46
- WebLoop.shutdown_default_executor = _noop
47
-
48
39
  STATIC_DIR = Path(__file__).parent / "static"
49
40
 
50
41
 
@@ -603,7 +594,9 @@ class FastAPIAppPlugin:
603
594
  @app.get("/run-tests/{suite_name:path}")
604
595
  async def run_suite(suite_name: str, request: Request):
605
596
  runner = TestRunner(request.scope["env"], extra_plugins=[FastAPIAppPlugin()])
606
- result = runner.run_suite(suite_name)
597
+ result = runner.run_suite(
598
+ suite_name, RunSuiteRequest.from_query_params(request.query_params)
599
+ )
607
600
  return JSONResponse(result.payload, status_code=result.status)
608
601
 
609
602
 
@@ -0,0 +1,9 @@
1
+ [project]
2
+ name = "flask-tests"
3
+ version = "0.1.0"
4
+ requires-python = ">=3.12"
5
+ dependencies = ["flask", "pytest", "testlib", "workers-runtime-sdk"]
6
+
7
+ [tool.uv.sources]
8
+ testlib = { path = "../packages/testlib" }
9
+ workers-runtime-sdk = { path = "../packages/runtime-sdk" }
@@ -0,0 +1,9 @@
1
+ [project]
2
+ name = "test"
3
+ version = "0.0.0"
4
+ requires-python = ">=3.12"
5
+ dependencies = ["pytest", "pytest-asyncio<1.2.0", "testlib", "workers-runtime-sdk"]
6
+
7
+ [tool.uv.sources]
8
+ testlib = { path = "../packages/testlib" }
9
+ workers-runtime-sdk = { path = "../packages/runtime-sdk" }
@@ -1,28 +1,10 @@
1
- import asyncio
2
1
  import os
3
- import sys
4
2
 
5
- import pytest
6
- from pyodide.webloop import WebLoop
3
+ from testlib.entrypoint import run_pytest
7
4
 
8
5
  import asgi
9
6
  from workers import WorkerEntrypoint
10
7
 
11
-
12
- async def noop(*args):
13
- pass
14
-
15
-
16
- # pytest-asyncio relies on these but in Pyodide < 0.29 WebLoop does not implement them
17
- WebLoop.shutdown_asyncgens = noop
18
- WebLoop.shutdown_default_executor = noop
19
-
20
- # Pyodide 0.26.0a2's _cancel_all_tasks calls task.exception() on pending tasks,
21
- # which raises InvalidStateError under Pyodide's WebLoop.
22
- if sys.version_info < (3, 13):
23
- asyncio.runners._cancel_all_tasks = lambda loop: None # type: ignore[attr-defined]
24
-
25
-
26
8
  # ---------------------------------------------------------------------------
27
9
  # ASGI apps
28
10
  # ---------------------------------------------------------------------------
@@ -291,4 +273,4 @@ class Default(WorkerEntrypoint):
291
273
  async def test(self):
292
274
  os.chdir("/session/metadata/tests")
293
275
  args = [".", "-vv"]
294
- assert pytest.main(args) == 0
276
+ run_pytest(args)
@@ -0,0 +1,9 @@
1
+ [project]
2
+ name = "test"
3
+ version = "0.0.0"
4
+ requires-python = ">=3.12"
5
+ dependencies = ["pytest", "pytest-asyncio<1.2.0", "testlib", "workers-runtime-sdk"]
6
+
7
+ [tool.uv.sources]
8
+ testlib = { path = "../packages/testlib" }
9
+ workers-runtime-sdk = { path = "../packages/runtime-sdk" }
@@ -1,29 +1,12 @@
1
- import asyncio
2
1
  import os
3
- import sys
4
2
  from urllib.parse import urlsplit
5
3
 
6
- import pytest
7
- from pyodide.webloop import WebLoop
4
+ from testlib.entrypoint import run_pytest
8
5
 
9
6
  import asgi
10
7
  from workers import WorkerEntrypoint
11
8
 
12
9
 
13
- async def _noop(*args):
14
- pass
15
-
16
-
17
- # pytest-asyncio relies on these but in Pyodide < 0.29 WebLoop does not implement them
18
- WebLoop.shutdown_asyncgens = _noop
19
- WebLoop.shutdown_default_executor = _noop
20
-
21
- # Pyodide 0.26.0a2's _cancel_all_tasks calls task.exception() on pending tasks,
22
- # which raises InvalidStateError under Pyodide's WebLoop.
23
- if sys.version_info < (3, 13):
24
- asyncio.runners._cancel_all_tasks = lambda loop: None # type: ignore[attr-defined]
25
-
26
-
27
10
  async def _drain_lifespan(receive, send):
28
11
  message = await receive()
29
12
  if message["type"] == "lifespan.startup":
@@ -180,4 +163,4 @@ class Default(WorkerEntrypoint):
180
163
  async def test(self):
181
164
  os.chdir("/session/metadata/tests")
182
165
  args = [".", "-vv"]
183
- assert pytest.main(args) == 0
166
+ run_pytest(args)
@@ -0,0 +1,8 @@
1
+ [project]
2
+ name = "test"
3
+ version = "0.0.0"
4
+ requires-python = ">=3.12"
5
+ dependencies = ["workers-runtime-sdk"]
6
+
7
+ [tool.uv.sources]
8
+ workers-runtime-sdk = { path = "../packages/runtime-sdk" }
@@ -0,0 +1,8 @@
1
+ [project]
2
+ name = "test"
3
+ version = "0.0.0"
4
+ requires-python = ">=3.12"
5
+ dependencies = ["workers-runtime-sdk"]
6
+
7
+ [tool.uv.sources]
8
+ workers-runtime-sdk = { path = "../packages/runtime-sdk" }
@@ -0,0 +1,8 @@
1
+ [project]
2
+ name = "test"
3
+ version = "0.0.0"
4
+ requires-python = ">=3.12"
5
+ dependencies = ["workers-runtime-sdk"]
6
+
7
+ [tool.uv.sources]
8
+ workers-runtime-sdk = { path = "../packages/runtime-sdk" }
@@ -0,0 +1,8 @@
1
+ [project]
2
+ name = "test"
3
+ version = "0.0.0"
4
+ requires-python = ">=3.12"
5
+ dependencies = ["workers-runtime-sdk"]
6
+
7
+ [tool.uv.sources]
8
+ workers-runtime-sdk = { path = "../packages/runtime-sdk" }
@@ -19,5 +19,10 @@ dependencies = [
19
19
  # "openai",
20
20
  "litestar",
21
21
  "opentelemetry-api",
22
+ "jsonschema",
22
23
  "mcp; python_version >= '3.14'",
24
+ "workers-runtime-sdk",
23
25
  ]
26
+
27
+ [tool.uv.sources]
28
+ workers-runtime-sdk = { path = "../packages/runtime-sdk" }
@@ -0,0 +1,9 @@
1
+ # ruff: noqa: F401
2
+ # jsonschema -> referencing -> rpds (a Rust extension) seeds a HashMap at import.
3
+ import jsonschema
4
+ import rpds
5
+
6
+
7
+ def test_import():
8
+ # make sure this file is collected by pytest
9
+ pass
@@ -2,6 +2,7 @@
2
2
  # a snapshot.
3
3
  from tests import ( # noqa: F401
4
4
  test_aiohttp_websocket,
5
+ test_jsonschema,
5
6
  test_langsmith,
6
7
  test_litestar,
7
8
  test_mcp,
@@ -0,0 +1,8 @@
1
+ [project]
2
+ name = "http-client-compatibility-test"
3
+ version = "0.0.0"
4
+ requires-python = ">=3.14"
5
+ dependencies = ["pytest", "workers-runtime-sdk"]
6
+
7
+ [tool.uv.sources]
8
+ workers-runtime-sdk = { path = "../packages/runtime-sdk" }
@@ -0,0 +1,8 @@
1
+ [project]
2
+ name = "test"
3
+ version = "0.0.0"
4
+ requires-python = ">=3.12"
5
+ dependencies = ["workers-runtime-sdk"]
6
+
7
+ [tool.uv.sources]
8
+ workers-runtime-sdk = { path = "../packages/runtime-sdk" }
@@ -0,0 +1,9 @@
1
+ [project]
2
+ name = "test"
3
+ version = "0.0.0"
4
+ requires-python = ">=3.12"
5
+ dependencies = ["pytest", "pytest-asyncio<1.2.0", "testlib", "workers-runtime-sdk"]
6
+
7
+ [tool.uv.sources]
8
+ testlib = { path = "../packages/testlib" }
9
+ workers-runtime-sdk = { path = "../packages/runtime-sdk" }
@@ -5,34 +5,15 @@
5
5
  # behaviour doesn't need to strictly be held consistent. In fact it uses the JS fetch, so it's not
6
6
  # going to follow the SDK at all.
7
7
 
8
- import asyncio
9
8
  import os
10
- import sys
11
9
  from functools import wraps
12
10
 
13
- import pytest
14
- from pyodide.webloop import WebLoop
11
+ from testlib.entrypoint import run_pytest
15
12
 
16
13
  from workers import (
17
14
  WorkerEntrypoint,
18
15
  )
19
16
 
20
-
21
- async def noop(*args):
22
- pass
23
-
24
-
25
- # pytest-asyncio relies on these but in Pyodide < 0.29 WebLoop does not implement them
26
- WebLoop.shutdown_asyncgens = noop
27
- WebLoop.shutdown_default_executor = noop
28
-
29
- # Pyodide 0.26.0a2's _cancel_all_tasks calls task.exception() on pending tasks,
30
- # which raises InvalidStateError under Pyodide's WebLoop.
31
- # Ignore this error to prevent pytest-asyncio from crashing.
32
- if sys.version_info < (3, 13):
33
- asyncio.runners._cancel_all_tasks = lambda loop: None # type: ignore[attr-defined]
34
-
35
-
36
17
  RESPONSE_HANDLER = None
37
18
 
38
19
 
@@ -68,4 +49,4 @@ class Default(WorkerEntrypoint):
68
49
  args = [".", "-vv"]
69
50
  if self.env.color:
70
51
  args.append("--color=yes")
71
- assert pytest.main(args) == 0
52
+ run_pytest(args)
@@ -0,0 +1,9 @@
1
+ [project]
2
+ name = "test"
3
+ version = "0.0.0"
4
+ requires-python = ">=3.12"
5
+ dependencies = ["pytest", "pytest-asyncio<1.2.0", "testlib", "workers-runtime-sdk"]
6
+
7
+ [tool.uv.sources]
8
+ testlib = { path = "../packages/testlib" }
9
+ workers-runtime-sdk = { path = "../packages/runtime-sdk" }
@@ -1,29 +1,11 @@
1
1
  import asyncio
2
2
  import os
3
- import sys
4
3
 
5
- import pytest
6
4
  from pyodide.ffi import run_sync
7
- from pyodide.webloop import WebLoop
5
+ from testlib.entrypoint import run_pytest
8
6
 
9
7
  from workers import WorkerEntrypoint, wsgi
10
8
 
11
-
12
- async def noop(*args):
13
- pass
14
-
15
-
16
- # pytest-asyncio relies on these but in Pyodide < 0.29 WebLoop does not implement them
17
- WebLoop.shutdown_asyncgens = noop
18
- WebLoop.shutdown_default_executor = noop
19
-
20
- # Pyodide 0.26.0a2's _cancel_all_tasks calls task.exception() on pending tasks,
21
- # which raises InvalidStateError under Pyodide's WebLoop.
22
- # Ignore this error to prevent pytest-asyncio from crashing.
23
- if sys.version_info < (3, 13):
24
- asyncio.runners._cancel_all_tasks = lambda loop: None # type: ignore[attr-defined]
25
-
26
-
27
9
  # ---------------------------------------------------------------------------
28
10
  # WSGI apps
29
11
  # ---------------------------------------------------------------------------
@@ -140,4 +122,4 @@ class Default(WorkerEntrypoint):
140
122
  args = [".", "-vv"]
141
123
  if self.env.color:
142
124
  args.append("--color=yes")
143
- assert pytest.main(args) == 0
125
+ run_pytest(args)
@@ -269,6 +269,15 @@ wheels = [
269
269
  { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" },
270
270
  ]
271
271
 
272
+ [[package]]
273
+ name = "pyodide-tblib"
274
+ version = "3.2.3"
275
+ source = { registry = "https://pypi.org/simple" }
276
+ sdist = { url = "https://files.pythonhosted.org/packages/4e/8a/e30340e31040c9349dfbe059123e7a0276595cacb854f0b613183b27aa4d/pyodide_tblib-3.2.3.tar.gz", hash = "sha256:e731c3a8e5fe800ebb990eaa16a48237e6894d46a2291fafdcb854a291e2f6d0", size = 47990, upload-time = "2026-09-18T16:38:15.207Z" }
277
+ wheels = [
278
+ { url = "https://files.pythonhosted.org/packages/65/12/d91be04a60cd7349cc86358e0915dcfe5edbfcf83875c458e220756872b5/pyodide_tblib-3.2.3-py3-none-any.whl", hash = "sha256:2960f305fe3ef1f5fed9ff098c959104af144627a53033a469183200e50d7ea0", size = 15861, upload-time = "2026-09-18T16:38:13.86Z" },
279
+ ]
280
+
272
281
  [[package]]
273
282
  name = "pytest"
274
283
  version = "9.0.2"
@@ -330,6 +339,7 @@ name = "testlib"
330
339
  version = "0.0.0"
331
340
  source = { editable = "../testlib" }
332
341
  dependencies = [
342
+ { name = "pyodide-tblib" },
333
343
  { name = "pytest" },
334
344
  ]
335
345
 
@@ -340,6 +350,7 @@ host = [
340
350
 
341
351
  [package.metadata]
342
352
  requires-dist = [
353
+ { name = "pyodide-tblib", specifier = ">=3.2.3" },
343
354
  { name = "pytest" },
344
355
  { name = "requests", marker = "extra == 'host'" },
345
356
  ]
@@ -365,7 +376,7 @@ wheels = [
365
376
 
366
377
  [[package]]
367
378
  name = "workers-runtime-sdk"
368
- version = "1.9.0"
379
+ version = "1.9.1"
369
380
  source = { editable = "." }
370
381
 
371
382
  [package.dev-dependencies]
@@ -1,8 +0,0 @@
1
- [project]
2
- name = "flask-tests"
3
- version = "0.1.0"
4
- requires-python = ">=3.12"
5
- dependencies = ["flask", "pytest", "testlib"]
6
-
7
- [tool.uv.sources]
8
- testlib = { path = "../testlib/dist/testlib-0.0.0-py3-none-any.whl" }
@@ -1,5 +0,0 @@
1
- [project]
2
- name = "test"
3
- version = "0.0.0"
4
- requires-python = ">=3.12"
5
- dependencies = ["pytest", "pytest-asyncio<1.2.0"]
@@ -1,5 +0,0 @@
1
- [project]
2
- name = "test"
3
- version = "0.0.0"
4
- requires-python = ">=3.12"
5
- dependencies = ["pytest", "pytest-asyncio<1.2.0"]
@@ -1,5 +0,0 @@
1
- [project]
2
- name = "test"
3
- version = "0.0.0"
4
- requires-python = ">=3.12"
5
- dependencies = []
@@ -1,5 +0,0 @@
1
- [project]
2
- name = "test"
3
- version = "0.0.0"
4
- requires-python = ">=3.12"
5
- dependencies = []
@@ -1,5 +0,0 @@
1
- [project]
2
- name = "test"
3
- version = "0.0.0"
4
- requires-python = ">=3.12"
5
- dependencies = []
@@ -1,5 +0,0 @@
1
- [project]
2
- name = "http-client-compatibility-test"
3
- version = "0.0.0"
4
- requires-python = ">=3.14"
5
- dependencies = ["pytest"]
@@ -1,5 +0,0 @@
1
- [project]
2
- name = "test"
3
- version = "0.0.0"
4
- requires-python = ">=3.12"
5
- dependencies = []
@@ -1,5 +0,0 @@
1
- [project]
2
- name = "test"
3
- version = "0.0.0"
4
- requires-python = ">=3.12"
5
- dependencies = ["pytest", "pytest-asyncio<1.2.0"]