apify 2.5.0b3__tar.gz → 2.5.0b5__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 (209) hide show
  1. {apify-2.5.0b3 → apify-2.5.0b5}/PKG-INFO +1 -1
  2. {apify-2.5.0b3 → apify-2.5.0b5}/pyproject.toml +6 -6
  3. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/_actor.py +1 -1
  4. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/_configuration.py +15 -2
  5. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/_platform_event_manager.py +3 -3
  6. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/_utils.py +16 -6
  7. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/scrapy/_async_thread.py +1 -1
  8. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/storages/_request_list.py +9 -4
  9. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/test_actor_scrapy.py +2 -1
  10. apify-2.5.0b5/tests/unit/actor/test_configuration.py +21 -0
  11. {apify-2.5.0b3 → apify-2.5.0b5}/uv.lock +215 -214
  12. {apify-2.5.0b3 → apify-2.5.0b5}/website/package-lock.json +467 -418
  13. {apify-2.5.0b3 → apify-2.5.0b5}/website/package.json +1 -1
  14. {apify-2.5.0b3 → apify-2.5.0b5}/.editorconfig +0 -0
  15. {apify-2.5.0b3 → apify-2.5.0b5}/.github/CODEOWNERS +0 -0
  16. {apify-2.5.0b3 → apify-2.5.0b5}/.github/workflows/build_and_deploy_docs.yaml +0 -0
  17. {apify-2.5.0b3 → apify-2.5.0b5}/.github/workflows/check_pr_title.yaml +0 -0
  18. {apify-2.5.0b3 → apify-2.5.0b5}/.github/workflows/pre_release.yaml +0 -0
  19. {apify-2.5.0b3 → apify-2.5.0b5}/.github/workflows/release.yaml +0 -0
  20. {apify-2.5.0b3 → apify-2.5.0b5}/.github/workflows/run_code_checks.yaml +0 -0
  21. {apify-2.5.0b3 → apify-2.5.0b5}/.github/workflows/update_new_issue.yaml +0 -0
  22. {apify-2.5.0b3 → apify-2.5.0b5}/.gitignore +0 -0
  23. {apify-2.5.0b3 → apify-2.5.0b5}/.markdownlint.yaml +0 -0
  24. {apify-2.5.0b3 → apify-2.5.0b5}/.pre-commit-config.yaml +0 -0
  25. {apify-2.5.0b3 → apify-2.5.0b5}/CHANGELOG.md +0 -0
  26. {apify-2.5.0b3 → apify-2.5.0b5}/CONTRIBUTING.md +0 -0
  27. {apify-2.5.0b3 → apify-2.5.0b5}/LICENSE +0 -0
  28. {apify-2.5.0b3 → apify-2.5.0b5}/Makefile +0 -0
  29. {apify-2.5.0b3 → apify-2.5.0b5}/README.md +0 -0
  30. {apify-2.5.0b3 → apify-2.5.0b5}/docs/01_overview/01_introduction.mdx +0 -0
  31. {apify-2.5.0b3 → apify-2.5.0b5}/docs/01_overview/02_running_actors_locally.mdx +0 -0
  32. {apify-2.5.0b3 → apify-2.5.0b5}/docs/01_overview/03_actor_structure.mdx +0 -0
  33. {apify-2.5.0b3 → apify-2.5.0b5}/docs/01_overview/code/01_introduction.py +0 -0
  34. {apify-2.5.0b3 → apify-2.5.0b5}/docs/01_overview/code/actor_structure/__init__.py +0 -0
  35. {apify-2.5.0b3 → apify-2.5.0b5}/docs/01_overview/code/actor_structure/__main__.py +0 -0
  36. {apify-2.5.0b3 → apify-2.5.0b5}/docs/01_overview/code/actor_structure/main.py +0 -0
  37. {apify-2.5.0b3 → apify-2.5.0b5}/docs/01_overview/code/actor_structure/py.typed +0 -0
  38. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/01_beautifulsoup_httpx.mdx +0 -0
  39. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/02_crawlee.mdx +0 -0
  40. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/03_playwright.mdx +0 -0
  41. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/04_selenium.mdx +0 -0
  42. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/05_scrapy.mdx +0 -0
  43. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/code/01_beautifulsoup_httpx.py +0 -0
  44. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/code/02_crawlee_beautifulsoup.py +0 -0
  45. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/code/02_crawlee_playwright.py +0 -0
  46. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/code/03_playwright.py +0 -0
  47. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/code/04_selenium.py +0 -0
  48. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/code/scrapy_project/src/__init__.py +0 -0
  49. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/code/scrapy_project/src/__main__.py +0 -0
  50. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/code/scrapy_project/src/items.py +0 -0
  51. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/code/scrapy_project/src/main.py +0 -0
  52. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/code/scrapy_project/src/py.typed +0 -0
  53. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/code/scrapy_project/src/settings.py +0 -0
  54. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/code/scrapy_project/src/spiders/__init__.py +0 -0
  55. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/code/scrapy_project/src/spiders/py.typed +0 -0
  56. {apify-2.5.0b3 → apify-2.5.0b5}/docs/02_guides/code/scrapy_project/src/spiders/title.py +0 -0
  57. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/01_actor_lifecycle.mdx +0 -0
  58. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/02_actor_input.mdx +0 -0
  59. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/03_storages.mdx +0 -0
  60. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/04_actor_events.mdx +0 -0
  61. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/05_proxy_management.mdx +0 -0
  62. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/06_interacting_with_other_actors.mdx +0 -0
  63. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/07_webhooks.mdx +0 -0
  64. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/08_access_apify_api.mdx +0 -0
  65. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/09_running_webserver.mdx +0 -0
  66. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/10_logging.mdx +0 -0
  67. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/11_configuration.mdx +0 -0
  68. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/12_pay_per_event.mdx +0 -0
  69. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/01_context_manager.py +0 -0
  70. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/01_init_exit.py +0 -0
  71. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/01_reboot.py +0 -0
  72. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/01_status_message.py +0 -0
  73. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/02_input.py +0 -0
  74. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/03_dataset_exports.py +0 -0
  75. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/03_dataset_read_write.py +0 -0
  76. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/03_deleting_storages.py +0 -0
  77. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/03_kvs_iterating.py +0 -0
  78. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/03_kvs_public_url.py +0 -0
  79. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/03_kvs_read_write.py +0 -0
  80. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/03_opening_storages.py +0 -0
  81. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/03_rq.py +0 -0
  82. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/04_actor_events.py +0 -0
  83. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/05_apify_proxy.py +0 -0
  84. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/05_apify_proxy_config.py +0 -0
  85. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/05_custom_proxy.py +0 -0
  86. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/05_custom_proxy_function.py +0 -0
  87. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/05_proxy_actor_input.py +0 -0
  88. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/05_proxy_httpx.py +0 -0
  89. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/05_proxy_rotation.py +0 -0
  90. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/06_interacting_call.py +0 -0
  91. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/06_interacting_call_task.py +0 -0
  92. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/06_interacting_metamorph.py +0 -0
  93. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/06_interacting_start.py +0 -0
  94. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/07_webhook.py +0 -0
  95. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/07_webhook_preventing.py +0 -0
  96. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/08_actor_client.py +0 -0
  97. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/08_actor_new_client.py +0 -0
  98. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/09_webserver.py +0 -0
  99. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/10_log_config.py +0 -0
  100. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/10_logger_usage.py +0 -0
  101. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/11_config.py +0 -0
  102. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/actor_charge.py +0 -0
  103. {apify-2.5.0b3 → apify-2.5.0b5}/docs/03_concepts/code/conditional_actor_charge.py +0 -0
  104. {apify-2.5.0b3 → apify-2.5.0b5}/docs/04_upgrading/upgrading_to_v2.md +0 -0
  105. {apify-2.5.0b3 → apify-2.5.0b5}/docs/pyproject.toml +0 -0
  106. {apify-2.5.0b3 → apify-2.5.0b5}/renovate.json +0 -0
  107. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/__init__.py +0 -0
  108. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/_charging.py +0 -0
  109. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/_consts.py +0 -0
  110. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/_crypto.py +0 -0
  111. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/_models.py +0 -0
  112. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/_proxy_configuration.py +0 -0
  113. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/apify_storage_client/__init__.py +0 -0
  114. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/apify_storage_client/_apify_storage_client.py +0 -0
  115. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/apify_storage_client/_dataset_client.py +0 -0
  116. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/apify_storage_client/_dataset_collection_client.py +0 -0
  117. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/apify_storage_client/_key_value_store_client.py +0 -0
  118. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/apify_storage_client/_key_value_store_collection_client.py +0 -0
  119. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/apify_storage_client/_request_queue_client.py +0 -0
  120. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/apify_storage_client/_request_queue_collection_client.py +0 -0
  121. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/apify_storage_client/py.typed +0 -0
  122. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/log.py +0 -0
  123. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/py.typed +0 -0
  124. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/scrapy/__init__.py +0 -0
  125. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/scrapy/_actor_runner.py +0 -0
  126. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/scrapy/_logging_config.py +0 -0
  127. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/scrapy/extensions/__init__.py +0 -0
  128. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/scrapy/extensions/_httpcache.py +0 -0
  129. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/scrapy/middlewares/__init__.py +0 -0
  130. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/scrapy/middlewares/apify_proxy.py +0 -0
  131. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/scrapy/middlewares/py.typed +0 -0
  132. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/scrapy/pipelines/__init__.py +0 -0
  133. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/scrapy/pipelines/actor_dataset_push.py +0 -0
  134. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/scrapy/pipelines/py.typed +0 -0
  135. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/scrapy/py.typed +0 -0
  136. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/scrapy/requests.py +0 -0
  137. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/scrapy/scheduler.py +0 -0
  138. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/scrapy/utils.py +0 -0
  139. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/storages/__init__.py +0 -0
  140. {apify-2.5.0b3 → apify-2.5.0b5}/src/apify/storages/py.typed +0 -0
  141. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/README.md +0 -0
  142. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/__init__.py +0 -0
  143. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/_utils.py +0 -0
  144. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/actor_source_base/Dockerfile +0 -0
  145. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/actor_source_base/requirements.txt +0 -0
  146. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/actor_source_base/src/__init__.py +0 -0
  147. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/actor_source_base/src/__main__.py +0 -0
  148. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/actor_source_base/src/main.py +0 -0
  149. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/conftest.py +0 -0
  150. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/test_actor_api_helpers.py +0 -0
  151. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/test_actor_charge.py +0 -0
  152. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/test_actor_create_proxy_configuration.py +0 -0
  153. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/test_actor_dataset.py +0 -0
  154. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/test_actor_events.py +0 -0
  155. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/test_actor_key_value_store.py +0 -0
  156. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/test_actor_lifecycle.py +0 -0
  157. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/test_actor_log.py +0 -0
  158. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/test_actor_request_queue.py +0 -0
  159. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/test_fixtures.py +0 -0
  160. {apify-2.5.0b3 → apify-2.5.0b5}/tests/integration/test_request_queue.py +0 -0
  161. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/__init__.py +0 -0
  162. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/actor/__init__.py +0 -0
  163. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/actor/test_actor_create_proxy_configuration.py +0 -0
  164. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/actor/test_actor_dataset.py +0 -0
  165. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/actor/test_actor_env_helpers.py +0 -0
  166. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/actor/test_actor_helpers.py +0 -0
  167. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/actor/test_actor_key_value_store.py +0 -0
  168. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/actor/test_actor_lifecycle.py +0 -0
  169. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/actor/test_actor_log.py +0 -0
  170. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/actor/test_actor_non_default_instance.py +0 -0
  171. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/actor/test_actor_request_queue.py +0 -0
  172. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/actor/test_request_list.py +0 -0
  173. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/conftest.py +0 -0
  174. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/scrapy/__init__.py +0 -0
  175. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/scrapy/extensions/__init__.py +0 -0
  176. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/scrapy/extensions/test_httpcache.py +0 -0
  177. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/scrapy/middlewares/__init__.py +0 -0
  178. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/scrapy/middlewares/test_apify_proxy.py +0 -0
  179. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/scrapy/pipelines/__init__.py +0 -0
  180. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/scrapy/pipelines/test_actor_dataset_push.py +0 -0
  181. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/scrapy/requests/__init__.py +0 -0
  182. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/scrapy/requests/test_to_apify_request.py +0 -0
  183. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/scrapy/requests/test_to_scrapy_request.py +0 -0
  184. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/scrapy/utils/__init__.py +0 -0
  185. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/scrapy/utils/test_apply_apify_settings.py +0 -0
  186. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/scrapy/utils/test_get_basic_auth_header.py +0 -0
  187. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/test_crypto.py +0 -0
  188. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/test_platform_event_manager.py +0 -0
  189. {apify-2.5.0b3 → apify-2.5.0b5}/tests/unit/test_proxy_configuration.py +0 -0
  190. {apify-2.5.0b3 → apify-2.5.0b5}/website/.eslintrc.json +0 -0
  191. {apify-2.5.0b3 → apify-2.5.0b5}/website/babel.config.js +0 -0
  192. {apify-2.5.0b3 → apify-2.5.0b5}/website/build_api_reference.sh +0 -0
  193. {apify-2.5.0b3 → apify-2.5.0b5}/website/docusaurus.config.js +0 -0
  194. {apify-2.5.0b3 → apify-2.5.0b5}/website/generate_module_shortcuts.py +0 -0
  195. {apify-2.5.0b3 → apify-2.5.0b5}/website/sidebars.js +0 -0
  196. {apify-2.5.0b3 → apify-2.5.0b5}/website/src/components/ApiLink.jsx +0 -0
  197. {apify-2.5.0b3 → apify-2.5.0b5}/website/src/components/Gradients.jsx +0 -0
  198. {apify-2.5.0b3 → apify-2.5.0b5}/website/src/components/Highlights.jsx +0 -0
  199. {apify-2.5.0b3 → apify-2.5.0b5}/website/src/components/Highlights.module.css +0 -0
  200. {apify-2.5.0b3 → apify-2.5.0b5}/website/src/components/RunnableCodeBlock.jsx +0 -0
  201. {apify-2.5.0b3 → apify-2.5.0b5}/website/src/components/RunnableCodeBlock.module.css +0 -0
  202. {apify-2.5.0b3 → apify-2.5.0b5}/website/src/css/custom.css +0 -0
  203. {apify-2.5.0b3 → apify-2.5.0b5}/website/src/pages/home_page_example.py +0 -0
  204. {apify-2.5.0b3 → apify-2.5.0b5}/website/src/pages/index.js +0 -0
  205. {apify-2.5.0b3 → apify-2.5.0b5}/website/src/pages/index.module.css +0 -0
  206. {apify-2.5.0b3 → apify-2.5.0b5}/website/static/.nojekyll +0 -0
  207. {apify-2.5.0b3 → apify-2.5.0b5}/website/static/img/docs-og.png +0 -0
  208. {apify-2.5.0b3 → apify-2.5.0b5}/website/tools/docs-prettier.config.js +0 -0
  209. {apify-2.5.0b3 → apify-2.5.0b5}/website/tools/utils/externalLink.js +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apify
3
- Version: 2.5.0b3
3
+ Version: 2.5.0b5
4
4
  Summary: Apify SDK for Python
5
5
  Project-URL: Homepage, https://docs.apify.com/sdk/python/
6
6
  Project-URL: Apify homepage, https://apify.com
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "apify"
7
- version = "2.5.0b3"
7
+ version = "2.5.0b5"
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" }
@@ -63,14 +63,14 @@ dev = [
63
63
  "mypy~=1.15.0",
64
64
  "pre-commit~=4.2.0",
65
65
  "pydoc-markdown~=4.8.0",
66
- "pytest-asyncio~=0.25.0",
66
+ "pytest-asyncio~=0.26.0",
67
67
  "pytest-cov~=6.0.0",
68
68
  "pytest-only~=2.1.0",
69
69
  "pytest-xdist~=3.6.0",
70
70
  "pytest~=8.3.0",
71
71
  "respx~=0.22.0",
72
72
  "ruff~=0.11.0",
73
- "setuptools~=77.0.1", # setuptools are used by pytest but not explicitly required
73
+ "setuptools~=78.1.0", # setuptools are used by pytest but not explicitly required
74
74
  ]
75
75
 
76
76
  [tool.hatch.build.targets.wheel]
@@ -91,6 +91,9 @@ ignore = [
91
91
  "D100", # Missing docstring in public module
92
92
  "D104", # Missing docstring in public package
93
93
  "D107", # Missing docstring in `__init__`
94
+ "D203", # One blank line required before class docstring
95
+ "D213", # Multi-line docstring summary should start at the second line
96
+ "D413", # Missing blank line after last section
94
97
  "EM", # flake8-errmsg
95
98
  "G004", # Logging statement uses f-string
96
99
  "ISC001", # This rule may cause conflicts when used with the formatter
@@ -162,9 +165,6 @@ runtime-evaluated-base-classes = [
162
165
  [tool.ruff.lint.flake8-builtins]
163
166
  builtins-ignorelist = ["id"]
164
167
 
165
- [tool.ruff.lint.pydocstyle]
166
- convention = "google"
167
-
168
168
  [tool.ruff.lint.isort]
169
169
  known-local-folder = ["apify"]
170
170
  known-first-party = ["apify_client", "apify_shared", "crawlee"]
@@ -1138,7 +1138,7 @@ class _ActorType:
1138
1138
  return proxy_configuration
1139
1139
 
1140
1140
  def _get_default_exit_process(self) -> bool:
1141
- """Returns False for IPython, Pytest, and Scrapy environments, True otherwise."""
1141
+ """Return False for IPython, Pytest, and Scrapy environments, True otherwise."""
1142
1142
  if is_running_in_ipython():
1143
1143
  self.log.debug('Running in IPython, setting default `exit_process` to False.')
1144
1144
  return False
@@ -5,8 +5,8 @@ from decimal import Decimal
5
5
  from logging import getLogger
6
6
  from typing import Annotated, Any
7
7
 
8
- from pydantic import AliasChoices, BeforeValidator, Field
9
- from typing_extensions import deprecated
8
+ from pydantic import AliasChoices, BeforeValidator, Field, model_validator
9
+ from typing_extensions import Self, deprecated
10
10
 
11
11
  from crawlee._utils.models import timedelta_ms
12
12
  from crawlee._utils.urls import validate_http_url
@@ -365,6 +365,19 @@ class Configuration(CrawleeConfiguration):
365
365
  ),
366
366
  ] = None
367
367
 
368
+ @model_validator(mode='after')
369
+ def disable_browser_sandbox_on_platform(self) -> Self:
370
+ """Disable the browser sandbox mode when running on the Apify platform.
371
+
372
+ Running in environment where `is_at_home` is True does not benefit from browser sandbox as it is already running
373
+ in a container. It can be on the contrary undesired as the process in the container might be running as root and
374
+ this will crash chromium that was started with browser sandbox mode.
375
+ """
376
+ if self.is_at_home and not self.disable_browser_sandbox:
377
+ self.disable_browser_sandbox = True
378
+ logger.warning('Actor is running on the Apify platform, `disable_browser_sandbox` was changed to True.')
379
+ return self
380
+
368
381
  @classmethod
369
382
  def get_global_configuration(cls) -> Configuration:
370
383
  """Retrieve the global instance of the configuration.
@@ -48,11 +48,11 @@ class SystemInfoEventData(BaseModel):
48
48
  is_cpu_overloaded: Annotated[bool, Field(alias='isCpuOverloaded')]
49
49
  created_at: Annotated[datetime, Field(alias='createdAt')]
50
50
 
51
- def to_crawlee_format(self) -> EventSystemInfoData:
51
+ def to_crawlee_format(self, dedicated_cpus: float) -> EventSystemInfoData:
52
52
  return EventSystemInfoData.model_validate(
53
53
  {
54
54
  'cpu_info': {
55
- 'used_ratio': self.cpu_current_usage / 100,
55
+ 'used_ratio': (self.cpu_current_usage / 100) / dedicated_cpus,
56
56
  'created_at': self.created_at,
57
57
  },
58
58
  'memory_info': {
@@ -218,7 +218,7 @@ class PlatformEventManager(EventManager):
218
218
  event=parsed_message.name,
219
219
  event_data=parsed_message.data
220
220
  if not isinstance(parsed_message.data, SystemInfoEventData)
221
- else parsed_message.data.to_crawlee_format(),
221
+ else parsed_message.data.to_crawlee_format(self._config.dedicated_cpus or 1),
222
222
  )
223
223
 
224
224
  if parsed_message.name == Event.MIGRATING:
@@ -31,10 +31,16 @@ GroupName = Literal['Classes', 'Abstract classes', 'Interfaces', 'Data structure
31
31
 
32
32
 
33
33
  def docs_group(group_name: GroupName) -> Callable: # noqa: ARG001
34
- """Decorator to mark symbols for rendering and grouping in documentation.
34
+ """Mark a symbol for rendering and grouping in documentation.
35
35
 
36
- This decorator is used purely for documentation purposes and does not alter the behavior
36
+ This decorator is used solely for documentation purposes and does not modify the behavior
37
37
  of the decorated callable.
38
+
39
+ Args:
40
+ group_name: The documentation group to which the symbol belongs.
41
+
42
+ Returns:
43
+ The original callable without modification.
38
44
  """
39
45
 
40
46
  def wrapper(func: Callable) -> Callable:
@@ -44,12 +50,16 @@ def docs_group(group_name: GroupName) -> Callable: # noqa: ARG001
44
50
 
45
51
 
46
52
  def docs_name(symbol_name: str) -> Callable: # noqa: ARG001
47
- """Decorator for renaming symbols in documentation.
53
+ """Rename a symbol for documentation rendering.
48
54
 
49
- This changes the rendered name of the symbol only in the rendered web documentation.
55
+ This decorator modifies only the displayed name of the symbol in the generated documentation
56
+ and does not affect its runtime behavior.
50
57
 
51
- This decorator is used purely for documentation purposes and does not alter the behavior
52
- of the decorated callable.
58
+ Args:
59
+ symbol_name: The name to be used in the documentation.
60
+
61
+ Returns:
62
+ The original callable without modification.
53
63
  """
54
64
 
55
65
  def wrapper(func: Callable) -> Callable:
@@ -113,7 +113,7 @@ class AsyncThread:
113
113
  await asyncio.gather(*tasks, return_exceptions=True)
114
114
 
115
115
  def _force_exit_event_loop(self) -> None:
116
- """Forcefully shut down the event loop and its thread."""
116
+ """Shut down the event loop and its thread forcefully."""
117
117
  try:
118
118
  logger.info('Forced shutdown of the event loop and its thread...')
119
119
  self._eventloop.call_soon_threadsafe(self._eventloop.stop)
@@ -51,7 +51,7 @@ class RequestList(CrawleeRequestList):
51
51
  request_list_sources_input: list[dict[str, Any]] | None = None,
52
52
  http_client: HttpClient | None = None,
53
53
  ) -> RequestList:
54
- """Creates RequestList from Actor input requestListSources.
54
+ """Initialize a new instance from request list source input.
55
55
 
56
56
  Args:
57
57
  name: Name of the returned RequestList.
@@ -108,9 +108,10 @@ class RequestList(CrawleeRequestList):
108
108
 
109
109
  @staticmethod
110
110
  async def _fetch_requests_from_url(
111
- remote_url_requests_inputs: list[_RequestsFromUrlInput], http_client: HttpClient
111
+ remote_url_requests_inputs: list[_RequestsFromUrlInput],
112
+ http_client: HttpClient,
112
113
  ) -> list[Request]:
113
- """Crete list of requests from url.
114
+ """Create list of requests from url.
114
115
 
115
116
  Send GET requests to urls defined in each requests_from_url of remote_url_requests_inputs. Run extracting
116
117
  callback on each response body and use URL_NO_COMMAS_REGEX regex to find all links. Create list of Requests from
@@ -119,7 +120,11 @@ class RequestList(CrawleeRequestList):
119
120
  created_requests: list[Request] = []
120
121
 
121
122
  def create_requests_from_response(request_input: _RequestsFromUrlInput, task: Task) -> None:
122
- """Callback to scrape response body with regexp and create Requests from matches."""
123
+ """Extract links from response body and use them to create `Request` objects.
124
+
125
+ Use the regular expression to find all matching links in the response body, then create `Request`
126
+ objects from these links and the provided input attributes.
127
+ """
123
128
  matches = re.finditer(URL_NO_COMMAS_REGEX, task.result().read().decode('utf-8'))
124
129
  created_requests.extend(
125
130
  [
@@ -41,7 +41,8 @@ async def test_actor_scrapy_title_spider(
41
41
 
42
42
  items = await actor.last_run().dataset().list_items()
43
43
 
44
- assert items.count >= 10
44
+ # CLOSESPIDER_PAGECOUNT is set to 10 in the spider settings.
45
+ assert items.count >= 9
45
46
 
46
47
  for item in items.items:
47
48
  assert 'url' in item
@@ -0,0 +1,21 @@
1
+ import pytest
2
+
3
+ from apify import Configuration
4
+
5
+
6
+ @pytest.mark.parametrize(
7
+ ('is_at_home', 'disable_browser_sandbox_in', 'disable_browser_sandbox_out'),
8
+ [
9
+ (False, False, False),
10
+ (False, True, True),
11
+ (True, False, True),
12
+ (True, True, True),
13
+ ],
14
+ )
15
+ def test_disable_browser_sandbox(
16
+ *, is_at_home: bool, disable_browser_sandbox_in: bool, disable_browser_sandbox_out: bool
17
+ ) -> None:
18
+ assert (
19
+ Configuration(is_at_home=is_at_home, disable_browser_sandbox=disable_browser_sandbox_in).disable_browser_sandbox
20
+ == disable_browser_sandbox_out
21
+ )