apify 3.0.2b6__tar.gz → 3.0.2b7__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.

Potentially problematic release.


This version of apify might be problematic. Click here for more details.

Files changed (245) hide show
  1. {apify-3.0.2b6 → apify-3.0.2b7}/CHANGELOG.md +1 -0
  2. {apify-3.0.2b6 → apify-3.0.2b7}/PKG-INFO +1 -1
  3. {apify-3.0.2b6 → apify-3.0.2b7}/pyproject.toml +1 -1
  4. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storage_clients/_apify/_request_queue_client.py +5 -5
  5. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storage_clients/_apify/_request_queue_shared_client.py +9 -13
  6. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storage_clients/_apify/_request_queue_single_client.py +31 -21
  7. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/test_request_queue.py +31 -2
  8. {apify-3.0.2b6 → apify-3.0.2b7}/uv.lock +1 -1
  9. {apify-3.0.2b6 → apify-3.0.2b7}/.editorconfig +0 -0
  10. {apify-3.0.2b6 → apify-3.0.2b7}/.github/CODEOWNERS +0 -0
  11. {apify-3.0.2b6 → apify-3.0.2b7}/.github/workflows/build_and_deploy_docs.yaml +0 -0
  12. {apify-3.0.2b6 → apify-3.0.2b7}/.github/workflows/check_pr_title.yaml +0 -0
  13. {apify-3.0.2b6 → apify-3.0.2b7}/.github/workflows/pre_release.yaml +0 -0
  14. {apify-3.0.2b6 → apify-3.0.2b7}/.github/workflows/release.yaml +0 -0
  15. {apify-3.0.2b6 → apify-3.0.2b7}/.github/workflows/run_code_checks.yaml +0 -0
  16. {apify-3.0.2b6 → apify-3.0.2b7}/.github/workflows/update_new_issue.yaml +0 -0
  17. {apify-3.0.2b6 → apify-3.0.2b7}/.gitignore +0 -0
  18. {apify-3.0.2b6 → apify-3.0.2b7}/.markdownlint.yaml +0 -0
  19. {apify-3.0.2b6 → apify-3.0.2b7}/.pre-commit-config.yaml +0 -0
  20. {apify-3.0.2b6 → apify-3.0.2b7}/CONTRIBUTING.md +0 -0
  21. {apify-3.0.2b6 → apify-3.0.2b7}/LICENSE +0 -0
  22. {apify-3.0.2b6 → apify-3.0.2b7}/Makefile +0 -0
  23. {apify-3.0.2b6 → apify-3.0.2b7}/README.md +0 -0
  24. {apify-3.0.2b6 → apify-3.0.2b7}/docs/01_overview/01_introduction.mdx +0 -0
  25. {apify-3.0.2b6 → apify-3.0.2b7}/docs/01_overview/02_running_actors_locally.mdx +0 -0
  26. {apify-3.0.2b6 → apify-3.0.2b7}/docs/01_overview/03_actor_structure.mdx +0 -0
  27. {apify-3.0.2b6 → apify-3.0.2b7}/docs/01_overview/code/01_introduction.py +0 -0
  28. {apify-3.0.2b6 → apify-3.0.2b7}/docs/01_overview/code/actor_structure/__init__.py +0 -0
  29. {apify-3.0.2b6 → apify-3.0.2b7}/docs/01_overview/code/actor_structure/__main__.py +0 -0
  30. {apify-3.0.2b6 → apify-3.0.2b7}/docs/01_overview/code/actor_structure/main.py +0 -0
  31. {apify-3.0.2b6 → apify-3.0.2b7}/docs/01_overview/code/actor_structure/py.typed +0 -0
  32. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/01_actor_lifecycle.mdx +0 -0
  33. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/02_actor_input.mdx +0 -0
  34. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/03_storages.mdx +0 -0
  35. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/04_actor_events.mdx +0 -0
  36. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/05_proxy_management.mdx +0 -0
  37. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/06_interacting_with_other_actors.mdx +0 -0
  38. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/07_webhooks.mdx +0 -0
  39. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/08_access_apify_api.mdx +0 -0
  40. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/09_running_webserver.mdx +0 -0
  41. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/10_logging.mdx +0 -0
  42. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/11_configuration.mdx +0 -0
  43. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/12_pay_per_event.mdx +0 -0
  44. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/01_class_context.py +0 -0
  45. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/01_class_manual.py +0 -0
  46. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/01_context_manager.py +0 -0
  47. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/01_error_handling_context.py +0 -0
  48. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/01_error_handling_manual.py +0 -0
  49. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/01_init_exit.py +0 -0
  50. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/01_instance_context.py +0 -0
  51. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/01_instance_manual.py +0 -0
  52. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/01_reboot.py +0 -0
  53. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/01_status_message.py +0 -0
  54. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/02_input.py +0 -0
  55. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/03_dataset_exports.py +0 -0
  56. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/03_dataset_read_write.py +0 -0
  57. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/03_deleting_storages.py +0 -0
  58. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/03_kvs_iterating.py +0 -0
  59. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/03_kvs_public_url.py +0 -0
  60. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/03_kvs_read_write.py +0 -0
  61. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/03_opening_storages.py +0 -0
  62. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/03_rq.py +0 -0
  63. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/04_actor_events.py +0 -0
  64. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/05_apify_proxy.py +0 -0
  65. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/05_apify_proxy_config.py +0 -0
  66. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/05_custom_proxy.py +0 -0
  67. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/05_custom_proxy_function.py +0 -0
  68. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/05_proxy_actor_input.py +0 -0
  69. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/05_proxy_httpx.py +0 -0
  70. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/05_proxy_rotation.py +0 -0
  71. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/06_interacting_call.py +0 -0
  72. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/06_interacting_call_task.py +0 -0
  73. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/06_interacting_metamorph.py +0 -0
  74. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/06_interacting_start.py +0 -0
  75. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/07_webhook.py +0 -0
  76. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/07_webhook_preventing.py +0 -0
  77. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/08_actor_client.py +0 -0
  78. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/08_actor_new_client.py +0 -0
  79. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/09_webserver.py +0 -0
  80. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/10_log_config.py +0 -0
  81. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/10_logger_usage.py +0 -0
  82. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/10_redirect_log.py +0 -0
  83. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/10_redirect_log_existing_run.py +0 -0
  84. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/11_config.py +0 -0
  85. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/actor_charge.py +0 -0
  86. {apify-3.0.2b6 → apify-3.0.2b7}/docs/02_concepts/code/conditional_actor_charge.py +0 -0
  87. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/01_beautifulsoup_httpx.mdx +0 -0
  88. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/02_parsel_impit.mdx +0 -0
  89. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/03_playwright.mdx +0 -0
  90. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/04_selenium.mdx +0 -0
  91. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/05_crawlee.mdx +0 -0
  92. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/06_scrapy.mdx +0 -0
  93. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/code/01_beautifulsoup_httpx.py +0 -0
  94. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/code/02_parsel_impit.py +0 -0
  95. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/code/03_playwright.py +0 -0
  96. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/code/04_selenium.py +0 -0
  97. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/code/05_crawlee_beautifulsoup.py +0 -0
  98. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/code/05_crawlee_parsel.py +0 -0
  99. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/code/05_crawlee_playwright.py +0 -0
  100. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/code/scrapy_project/src/__init__.py +0 -0
  101. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/code/scrapy_project/src/__main__.py +0 -0
  102. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/code/scrapy_project/src/items.py +0 -0
  103. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/code/scrapy_project/src/main.py +0 -0
  104. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/code/scrapy_project/src/py.typed +0 -0
  105. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/code/scrapy_project/src/settings.py +0 -0
  106. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/code/scrapy_project/src/spiders/__init__.py +0 -0
  107. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/code/scrapy_project/src/spiders/py.typed +0 -0
  108. {apify-3.0.2b6 → apify-3.0.2b7}/docs/03_guides/code/scrapy_project/src/spiders/title.py +0 -0
  109. {apify-3.0.2b6 → apify-3.0.2b7}/docs/04_upgrading/upgrading_to_v2.md +0 -0
  110. {apify-3.0.2b6 → apify-3.0.2b7}/docs/04_upgrading/upgrading_to_v3.md +0 -0
  111. {apify-3.0.2b6 → apify-3.0.2b7}/docs/pyproject.toml +0 -0
  112. {apify-3.0.2b6 → apify-3.0.2b7}/renovate.json +0 -0
  113. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/__init__.py +0 -0
  114. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/_actor.py +0 -0
  115. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/_charging.py +0 -0
  116. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/_configuration.py +0 -0
  117. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/_consts.py +0 -0
  118. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/_crypto.py +0 -0
  119. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/_models.py +0 -0
  120. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/_proxy_configuration.py +0 -0
  121. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/_utils.py +0 -0
  122. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/events/__init__.py +0 -0
  123. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/events/_apify_event_manager.py +0 -0
  124. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/events/_types.py +0 -0
  125. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/events/py.typed +0 -0
  126. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/log.py +0 -0
  127. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/py.typed +0 -0
  128. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/request_loaders/__init__.py +0 -0
  129. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/request_loaders/_apify_request_list.py +0 -0
  130. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/request_loaders/py.typed +0 -0
  131. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/scrapy/__init__.py +0 -0
  132. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/scrapy/_actor_runner.py +0 -0
  133. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/scrapy/_async_thread.py +0 -0
  134. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/scrapy/_logging_config.py +0 -0
  135. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/scrapy/extensions/__init__.py +0 -0
  136. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/scrapy/extensions/_httpcache.py +0 -0
  137. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/scrapy/middlewares/__init__.py +0 -0
  138. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/scrapy/middlewares/apify_proxy.py +0 -0
  139. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/scrapy/middlewares/py.typed +0 -0
  140. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/scrapy/pipelines/__init__.py +0 -0
  141. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/scrapy/pipelines/actor_dataset_push.py +0 -0
  142. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/scrapy/pipelines/py.typed +0 -0
  143. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/scrapy/py.typed +0 -0
  144. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/scrapy/requests.py +0 -0
  145. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/scrapy/scheduler.py +0 -0
  146. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/scrapy/utils.py +0 -0
  147. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storage_clients/__init__.py +0 -0
  148. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storage_clients/_apify/__init__.py +0 -0
  149. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storage_clients/_apify/_dataset_client.py +0 -0
  150. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storage_clients/_apify/_key_value_store_client.py +0 -0
  151. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storage_clients/_apify/_models.py +0 -0
  152. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storage_clients/_apify/_storage_client.py +0 -0
  153. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storage_clients/_apify/_utils.py +0 -0
  154. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storage_clients/_apify/py.typed +0 -0
  155. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storage_clients/_file_system/__init__.py +0 -0
  156. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storage_clients/_file_system/_key_value_store_client.py +0 -0
  157. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storage_clients/_file_system/_storage_client.py +0 -0
  158. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storage_clients/_smart_apify/__init__.py +0 -0
  159. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storage_clients/_smart_apify/_storage_client.py +0 -0
  160. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storage_clients/py.typed +0 -0
  161. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storages/__init__.py +0 -0
  162. {apify-3.0.2b6 → apify-3.0.2b7}/src/apify/storages/py.typed +0 -0
  163. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/README.md +0 -0
  164. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/__init__.py +0 -0
  165. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/_utils.py +0 -0
  166. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/actor_source_base/Dockerfile +0 -0
  167. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/actor_source_base/requirements.txt +0 -0
  168. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/actor_source_base/server.py +0 -0
  169. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/actor_source_base/src/__init__.py +0 -0
  170. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/actor_source_base/src/__main__.py +0 -0
  171. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/actor_source_base/src/main.py +0 -0
  172. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/conftest.py +0 -0
  173. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/test_actor_api_helpers.py +0 -0
  174. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/test_actor_call_timeouts.py +0 -0
  175. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/test_actor_charge.py +0 -0
  176. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/test_actor_create_proxy_configuration.py +0 -0
  177. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/test_actor_dataset.py +0 -0
  178. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/test_actor_events.py +0 -0
  179. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/test_actor_key_value_store.py +0 -0
  180. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/test_actor_lifecycle.py +0 -0
  181. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/test_actor_log.py +0 -0
  182. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/test_actor_request_queue.py +0 -0
  183. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/test_actor_scrapy.py +0 -0
  184. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/test_apify_storages.py +0 -0
  185. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/test_crawlers_with_storages.py +0 -0
  186. {apify-3.0.2b6 → apify-3.0.2b7}/tests/integration/test_fixtures.py +0 -0
  187. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/__init__.py +0 -0
  188. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/actor/__init__.py +0 -0
  189. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/actor/test_actor_create_proxy_configuration.py +0 -0
  190. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/actor/test_actor_dataset.py +0 -0
  191. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/actor/test_actor_env_helpers.py +0 -0
  192. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/actor/test_actor_helpers.py +0 -0
  193. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/actor/test_actor_key_value_store.py +0 -0
  194. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/actor/test_actor_lifecycle.py +0 -0
  195. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/actor/test_actor_log.py +0 -0
  196. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/actor/test_actor_non_default_instance.py +0 -0
  197. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/actor/test_actor_request_queue.py +0 -0
  198. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/actor/test_configuration.py +0 -0
  199. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/actor/test_request_list.py +0 -0
  200. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/conftest.py +0 -0
  201. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/events/__init__.py +0 -0
  202. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/events/test_apify_event_manager.py +0 -0
  203. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/scrapy/__init__.py +0 -0
  204. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/scrapy/extensions/__init__.py +0 -0
  205. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/scrapy/extensions/test_httpcache.py +0 -0
  206. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/scrapy/middlewares/__init__.py +0 -0
  207. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/scrapy/middlewares/test_apify_proxy.py +0 -0
  208. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/scrapy/pipelines/__init__.py +0 -0
  209. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/scrapy/pipelines/test_actor_dataset_push.py +0 -0
  210. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/scrapy/requests/__init__.py +0 -0
  211. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/scrapy/requests/test_to_apify_request.py +0 -0
  212. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/scrapy/requests/test_to_scrapy_request.py +0 -0
  213. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/scrapy/utils/__init__.py +0 -0
  214. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/scrapy/utils/test_apply_apify_settings.py +0 -0
  215. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/scrapy/utils/test_get_basic_auth_header.py +0 -0
  216. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/storage_clients/__init__.py +0 -0
  217. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/storage_clients/test_apify_request_queue_client.py +0 -0
  218. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/storage_clients/test_file_system.py +0 -0
  219. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/test_apify_storages.py +0 -0
  220. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/test_crypto.py +0 -0
  221. {apify-3.0.2b6 → apify-3.0.2b7}/tests/unit/test_proxy_configuration.py +0 -0
  222. {apify-3.0.2b6 → apify-3.0.2b7}/website/.eslintrc.json +0 -0
  223. {apify-3.0.2b6 → apify-3.0.2b7}/website/babel.config.js +0 -0
  224. {apify-3.0.2b6 → apify-3.0.2b7}/website/build_api_reference.sh +0 -0
  225. {apify-3.0.2b6 → apify-3.0.2b7}/website/docusaurus.config.js +0 -0
  226. {apify-3.0.2b6 → apify-3.0.2b7}/website/generate_module_shortcuts.py +0 -0
  227. {apify-3.0.2b6 → apify-3.0.2b7}/website/package-lock.json +0 -0
  228. {apify-3.0.2b6 → apify-3.0.2b7}/website/package.json +0 -0
  229. {apify-3.0.2b6 → apify-3.0.2b7}/website/sidebars.js +0 -0
  230. {apify-3.0.2b6 → apify-3.0.2b7}/website/src/components/ApiLink.jsx +0 -0
  231. {apify-3.0.2b6 → apify-3.0.2b7}/website/src/components/Gradients.jsx +0 -0
  232. {apify-3.0.2b6 → apify-3.0.2b7}/website/src/components/Highlights.jsx +0 -0
  233. {apify-3.0.2b6 → apify-3.0.2b7}/website/src/components/Highlights.module.css +0 -0
  234. {apify-3.0.2b6 → apify-3.0.2b7}/website/src/components/RunnableCodeBlock.jsx +0 -0
  235. {apify-3.0.2b6 → apify-3.0.2b7}/website/src/components/RunnableCodeBlock.module.css +0 -0
  236. {apify-3.0.2b6 → apify-3.0.2b7}/website/src/css/custom.css +0 -0
  237. {apify-3.0.2b6 → apify-3.0.2b7}/website/src/pages/home_page_example.py +0 -0
  238. {apify-3.0.2b6 → apify-3.0.2b7}/website/src/pages/index.js +0 -0
  239. {apify-3.0.2b6 → apify-3.0.2b7}/website/src/pages/index.module.css +0 -0
  240. {apify-3.0.2b6 → apify-3.0.2b7}/website/src/theme/DocItem/Content/index.js +0 -0
  241. {apify-3.0.2b6 → apify-3.0.2b7}/website/static/.nojekyll +0 -0
  242. {apify-3.0.2b6 → apify-3.0.2b7}/website/static/img/docs-og.png +0 -0
  243. {apify-3.0.2b6 → apify-3.0.2b7}/website/static/img/guides/redirected_logs_example.webp +0 -0
  244. {apify-3.0.2b6 → apify-3.0.2b7}/website/tools/docs-prettier.config.js +0 -0
  245. {apify-3.0.2b6 → apify-3.0.2b7}/website/tools/utils/externalLink.js +0 -0
@@ -9,6 +9,7 @@ All notable changes to this project will be documented in this file.
9
9
 
10
10
  - Handle None result in single consumer request queue client ([#623](https://github.com/apify/apify-sdk-python/pull/623)) ([451284a](https://github.com/apify/apify-sdk-python/commit/451284a5c633bc5613bd1e9060df286a1c20b259)) by [@janbuchar](https://github.com/janbuchar), closes [#1472](https://github.com/apify/apify-sdk-python/issues/1472)
11
11
  - Unify Actor context manager with init & exit methods ([#600](https://github.com/apify/apify-sdk-python/pull/600)) ([6b0d084](https://github.com/apify/apify-sdk-python/commit/6b0d0842ae66a3a206bbb682a3e5f81ad552f029)) by [@vdusek](https://github.com/vdusek), closes [#598](https://github.com/apify/apify-sdk-python/issues/598)
12
+ - Handle truncated `unique_key` in `list_head` by fetching full request data ([#631](https://github.com/apify/apify-sdk-python/pull/631)) ([4238086](https://github.com/apify/apify-sdk-python/commit/423808678d9155a84a266bf50bb09f1a56466174)) by [@vdusek](https://github.com/vdusek), closes [#627](https://github.com/apify/apify-sdk-python/issues/627)
12
13
 
13
14
 
14
15
  <!-- git-cliff-unreleased-end -->
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apify
3
- Version: 3.0.2b6
3
+ Version: 3.0.2b7
4
4
  Summary: Apify SDK for Python
5
5
  Project-URL: Apify Homepage, https://apify.com
6
6
  Project-URL: Changelog, https://docs.apify.com/sdk/python/docs/changelog
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "apify"
7
- version = "3.0.2b6"
7
+ version = "3.0.2b7"
8
8
  description = "Apify SDK for Python"
9
9
  authors = [{ name = "Apify Technologies s.r.o.", email = "support@apify.com" }]
10
10
  license = { file = "LICENSE" }
@@ -12,8 +12,8 @@ from crawlee.storage_clients.models import AddRequestsResponse, ProcessedRequest
12
12
  from crawlee.storages import RequestQueue
13
13
 
14
14
  from ._models import ApifyRequestQueueMetadata, RequestQueueStats
15
- from ._request_queue_shared_client import _ApifyRequestQueueSharedClient
16
- from ._request_queue_single_client import _ApifyRequestQueueSingleClient
15
+ from ._request_queue_shared_client import ApifyRequestQueueSharedClient
16
+ from ._request_queue_single_client import ApifyRequestQueueSingleClient
17
17
  from ._utils import AliasResolver
18
18
 
19
19
  if TYPE_CHECKING:
@@ -47,14 +47,14 @@ class ApifyRequestQueueClient(RequestQueueClient):
47
47
  self._api_client = api_client
48
48
  """The Apify request queue client for API operations."""
49
49
 
50
- self._implementation: _ApifyRequestQueueSingleClient | _ApifyRequestQueueSharedClient
50
+ self._implementation: ApifyRequestQueueSingleClient | ApifyRequestQueueSharedClient
51
51
  """Internal implementation used to communicate with the Apify platform based Request Queue."""
52
52
  if access == 'single':
53
- self._implementation = _ApifyRequestQueueSingleClient(
53
+ self._implementation = ApifyRequestQueueSingleClient(
54
54
  api_client=self._api_client, metadata=metadata, cache_size=self._MAX_CACHED_REQUESTS
55
55
  )
56
56
  elif access == 'shared':
57
- self._implementation = _ApifyRequestQueueSharedClient(
57
+ self._implementation = ApifyRequestQueueSharedClient(
58
58
  api_client=self._api_client,
59
59
  metadata=metadata,
60
60
  cache_size=self._MAX_CACHED_REQUESTS,
@@ -23,7 +23,7 @@ if TYPE_CHECKING:
23
23
  logger = getLogger(__name__)
24
24
 
25
25
 
26
- class _ApifyRequestQueueSharedClient:
26
+ class ApifyRequestQueueSharedClient:
27
27
  """An Apify platform implementation of the request queue client.
28
28
 
29
29
  This implementation supports multiple producers and multiple consumers scenario.
@@ -106,23 +106,19 @@ class _ApifyRequestQueueSharedClient:
106
106
  # It could have been handled by another client in the meantime, so cached information about
107
107
  # `request.was_already_handled` is not reliable.
108
108
  already_present_requests.append(
109
- ProcessedRequest.model_validate(
110
- {
111
- 'uniqueKey': request.unique_key,
112
- 'wasAlreadyPresent': True,
113
- 'wasAlreadyHandled': request.was_already_handled,
114
- }
109
+ ProcessedRequest(
110
+ unique_key=request.unique_key,
111
+ was_already_present=True,
112
+ was_already_handled=request.was_already_handled,
115
113
  )
116
114
  )
117
115
 
118
116
  else:
119
117
  # Add new request to the cache.
120
- processed_request = ProcessedRequest.model_validate(
121
- {
122
- 'uniqueKey': request.unique_key,
123
- 'wasAlreadyPresent': True,
124
- 'wasAlreadyHandled': request.was_already_handled,
125
- }
118
+ processed_request = ProcessedRequest(
119
+ unique_key=request.unique_key,
120
+ was_already_present=True,
121
+ was_already_handled=request.was_already_handled,
126
122
  )
127
123
  self._cache_request(
128
124
  request.unique_key,
@@ -21,7 +21,7 @@ if TYPE_CHECKING:
21
21
  logger = getLogger(__name__)
22
22
 
23
23
 
24
- class _ApifyRequestQueueSingleClient:
24
+ class ApifyRequestQueueSingleClient:
25
25
  """An Apify platform implementation of the request queue client with limited capability.
26
26
 
27
27
  This client is designed to use as little resources as possible, but has to be used in constrained context.
@@ -108,23 +108,19 @@ class _ApifyRequestQueueSingleClient:
108
108
  # Check if request is known to be already handled (it has to be present as well.)
109
109
  if request.unique_key in self._requests_already_handled:
110
110
  already_present_requests.append(
111
- ProcessedRequest.model_validate(
112
- {
113
- 'uniqueKey': request.unique_key,
114
- 'wasAlreadyPresent': True,
115
- 'wasAlreadyHandled': True,
116
- }
111
+ ProcessedRequest(
112
+ unique_key=request.unique_key,
113
+ was_already_present=True,
114
+ was_already_handled=True,
117
115
  )
118
116
  )
119
117
  # Check if request is known to be already present, but unhandled
120
118
  elif self._requests_cache.get(request.unique_key):
121
119
  already_present_requests.append(
122
- ProcessedRequest.model_validate(
123
- {
124
- 'uniqueKey': request.unique_key,
125
- 'wasAlreadyPresent': True,
126
- 'wasAlreadyHandled': request.was_already_handled,
127
- }
120
+ ProcessedRequest(
121
+ unique_key=request.unique_key,
122
+ was_already_present=True,
123
+ was_already_handled=request.was_already_handled,
128
124
  )
129
125
  )
130
126
  else:
@@ -158,8 +154,9 @@ class _ApifyRequestQueueSingleClient:
158
154
  self._requests_cache.pop(unprocessed_request.unique_key, None)
159
155
 
160
156
  else:
161
- api_response = AddRequestsResponse.model_validate(
162
- {'unprocessedRequests': [], 'processedRequests': already_present_requests}
157
+ api_response = AddRequestsResponse(
158
+ unprocessed_requests=[],
159
+ processed_requests=already_present_requests,
163
160
  )
164
161
 
165
162
  # Update assumed total count for newly added requests.
@@ -236,11 +233,20 @@ class _ApifyRequestQueueSingleClient:
236
233
 
237
234
  # Update the cached data
238
235
  for request_data in response.get('items', []):
236
+ # Due to https://github.com/apify/apify-core/blob/v0.1377.0/src/api/src/lib/request_queues/request_queue.ts#L53,
237
+ # the list_head endpoint may return truncated fields for long requests (e.g., long URLs or unique keys).
238
+ # If truncation is detected, fetch the full request data by its ID from the API.
239
+ # This is a temporary workaround - the caching will be refactored to use request IDs instead of unique keys.
240
+ # See https://github.com/apify/apify-sdk-python/issues/630 for details.
241
+ if '[truncated]' in request_data['uniqueKey'] or '[truncated]' in request_data['url']:
242
+ request_data = await self._api_client.get_request(request_id=request_data['id']) # noqa: PLW2901
243
+
239
244
  request = Request.model_validate(request_data)
240
245
 
241
246
  if request.unique_key in self._requests_in_progress:
242
247
  # Ignore requests that are already in progress, we will not process them again.
243
248
  continue
249
+
244
250
  if request.was_already_handled:
245
251
  # Do not cache fully handled requests, we do not need them. Just cache their unique_key.
246
252
  self._requests_already_handled.add(request.unique_key)
@@ -248,16 +254,20 @@ class _ApifyRequestQueueSingleClient:
248
254
  # Only fetch the request if we do not know it yet.
249
255
  if request.unique_key not in self._requests_cache:
250
256
  request_id = unique_key_to_request_id(request.unique_key)
251
- complete_request_data = await self._api_client.get_request(request_id)
252
257
 
253
- if complete_request_data is not None:
254
- request = Request.model_validate(complete_request_data)
255
- self._requests_cache[request.unique_key] = request
256
- else:
258
+ if request_data is not None and request_id != request_data['id']:
257
259
  logger.warning(
258
- f'Could not fetch request data for unique_key=`{request.unique_key}` (id=`{request_id}`)'
260
+ f'Request ID mismatch: {request_id} != {request_data["id"]}, '
261
+ 'this may cause unexpected behavior.'
259
262
  )
260
263
 
264
+ # See https://github.com/apify/apify-sdk-python/issues/630 for details.
265
+ if '[truncated]' not in request.unique_key:
266
+ request_data = await self._api_client.get_request(request_id=request_id) # noqa: PLW2901
267
+ request = Request.model_validate(request_data)
268
+
269
+ self._requests_cache[request.unique_key] = request
270
+
261
271
  # Add new requests to the end of the head, unless already present in head
262
272
  if request.unique_key not in self._head_requests:
263
273
  self._head_requests.appendleft(request.unique_key)
@@ -7,12 +7,14 @@ from typing import TYPE_CHECKING, Literal, cast
7
7
  import pytest
8
8
 
9
9
  from apify_shared.consts import ApifyEnvVars
10
- from crawlee import Request, service_locator
10
+ from crawlee import service_locator
11
11
  from crawlee.crawlers import BasicCrawler
12
12
 
13
13
  from ._utils import generate_unique_resource_name
14
- from apify import Actor
14
+ from apify import Actor, Request
15
15
  from apify.storage_clients import ApifyStorageClient
16
+ from apify.storage_clients._apify._request_queue_shared_client import ApifyRequestQueueSharedClient
17
+ from apify.storage_clients._apify._utils import unique_key_to_request_id
16
18
  from apify.storages import RequestQueue
17
19
 
18
20
  if TYPE_CHECKING:
@@ -1189,3 +1191,30 @@ async def test_request_queue_has_stats(request_queue_apify: RequestQueue) -> Non
1189
1191
  assert hasattr(metadata, 'stats')
1190
1192
  apify_metadata = cast('ApifyRequestQueueMetadata', metadata)
1191
1193
  assert apify_metadata.stats.write_count == add_request_count
1194
+
1195
+
1196
+ async def test_rq_long_url(request_queue_apify: RequestQueue) -> None:
1197
+ # TODO: Remove the skip when issue #630 is resolved.
1198
+ if isinstance(request_queue_apify._client._implementation, ApifyRequestQueueSharedClient): # type: ignore[attr-defined]
1199
+ pytest.skip('Skipping for the "shared" request queue - unskip after issue #630 is resolved.')
1200
+
1201
+ url = 'https://portal.isoss.gov.cz/irj/portal/anonymous/mvrest?path=/eosm-public-offer&officeLabels=%7B%7D&page=1&pageSize=100000&sortColumn=zdatzvsm&sortOrder=-1'
1202
+
1203
+ req = Request.from_url(
1204
+ url=url,
1205
+ use_extended_unique_key=True,
1206
+ always_enqueue=True,
1207
+ )
1208
+
1209
+ request_id = unique_key_to_request_id(req.unique_key)
1210
+
1211
+ processed_request = await request_queue_apify.add_request(req)
1212
+ assert processed_request.id == request_id
1213
+
1214
+ request_obtained = await request_queue_apify.fetch_next_request()
1215
+ assert request_obtained is not None
1216
+
1217
+ await request_queue_apify.mark_request_as_handled(request_obtained)
1218
+
1219
+ is_finished = await request_queue_apify.is_finished()
1220
+ assert is_finished
@@ -28,7 +28,7 @@ wheels = [
28
28
 
29
29
  [[package]]
30
30
  name = "apify"
31
- version = "3.0.2b6"
31
+ version = "3.0.2b7"
32
32
  source = { editable = "." }
33
33
  dependencies = [
34
34
  { name = "apify-client" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes