apify 2.7.1b6__tar.gz → 2.7.3__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 (217) hide show
  1. {apify-2.7.1b6 → apify-2.7.3}/.github/workflows/pre_release.yaml +5 -9
  2. {apify-2.7.1b6 → apify-2.7.3}/.github/workflows/release.yaml +4 -8
  3. {apify-2.7.1b6 → apify-2.7.3}/.github/workflows/run_code_checks.yaml +4 -9
  4. {apify-2.7.1b6 → apify-2.7.3}/CHANGELOG.md +9 -212
  5. {apify-2.7.1b6 → apify-2.7.3}/CONTRIBUTING.md +1 -1
  6. {apify-2.7.1b6 → apify-2.7.3}/PKG-INFO +3 -2
  7. {apify-2.7.1b6 → apify-2.7.3}/docs/01_overview/02_running_actors_locally.mdx +1 -1
  8. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/10_logging.mdx +0 -30
  9. {apify-2.7.1b6 → apify-2.7.3}/pyproject.toml +9 -10
  10. {apify-2.7.1b6 → apify-2.7.3}/src/apify/_actor.py +6 -42
  11. {apify-2.7.1b6 → apify-2.7.3}/src/apify/_charging.py +9 -15
  12. {apify-2.7.1b6 → apify-2.7.3}/src/apify/_configuration.py +10 -1
  13. {apify-2.7.1b6 → apify-2.7.3}/src/apify/_crypto.py +6 -0
  14. {apify-2.7.1b6 → apify-2.7.3}/src/apify/_models.py +7 -7
  15. {apify-2.7.1b6 → apify-2.7.3}/src/apify/_platform_event_manager.py +36 -20
  16. {apify-2.7.1b6 → apify-2.7.3}/src/apify/_proxy_configuration.py +5 -2
  17. {apify-2.7.1b6 → apify-2.7.3}/src/apify/_utils.py +2 -17
  18. {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/_apify_storage_client.py +1 -1
  19. {apify-2.7.1b6 → apify-2.7.3}/src/apify/log.py +2 -0
  20. {apify-2.7.1b6 → apify-2.7.3}/src/apify/storages/_request_list.py +3 -3
  21. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/README.md +0 -23
  22. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/actor_source_base/Dockerfile +1 -1
  23. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/actor_source_base/requirements.txt +0 -2
  24. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/conftest.py +2 -2
  25. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_events.py +1 -3
  26. apify-2.7.3/tests/integration/test_request_queue.py +113 -0
  27. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_lifecycle.py +1 -3
  28. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/conftest.py +22 -3
  29. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/test_platform_event_manager.py +1 -4
  30. {apify-2.7.1b6 → apify-2.7.3}/uv.lock +324 -265
  31. apify-2.7.3/website/docusaurus.config.js +145 -0
  32. {apify-2.7.1b6 → apify-2.7.3}/website/package-lock.json +1047 -650
  33. {apify-2.7.1b6 → apify-2.7.3}/website/package.json +6 -6
  34. {apify-2.7.1b6 → apify-2.7.3}/website/src/pages/index.module.css +1 -1
  35. apify-2.7.1b6/docs/03_concepts/code/10_redirect_log.py +0 -15
  36. apify-2.7.1b6/docs/03_concepts/code/10_redirect_log_existing_run.py +0 -24
  37. apify-2.7.1b6/tests/integration/actor_source_base/server.py +0 -101
  38. apify-2.7.1b6/tests/integration/test_crawlers_with_storages.py +0 -111
  39. apify-2.7.1b6/tests/integration/test_request_queue.py +0 -1197
  40. apify-2.7.1b6/website/docusaurus.config.js +0 -277
  41. apify-2.7.1b6/website/static/img/guides/redirected_logs_example.webp +0 -0
  42. {apify-2.7.1b6 → apify-2.7.3}/.editorconfig +0 -0
  43. {apify-2.7.1b6 → apify-2.7.3}/.github/CODEOWNERS +0 -0
  44. {apify-2.7.1b6 → apify-2.7.3}/.github/workflows/build_and_deploy_docs.yaml +0 -0
  45. {apify-2.7.1b6 → apify-2.7.3}/.github/workflows/check_pr_title.yaml +0 -0
  46. {apify-2.7.1b6 → apify-2.7.3}/.github/workflows/update_new_issue.yaml +0 -0
  47. {apify-2.7.1b6 → apify-2.7.3}/.gitignore +0 -0
  48. {apify-2.7.1b6 → apify-2.7.3}/.markdownlint.yaml +0 -0
  49. {apify-2.7.1b6 → apify-2.7.3}/.pre-commit-config.yaml +0 -0
  50. {apify-2.7.1b6 → apify-2.7.3}/LICENSE +0 -0
  51. {apify-2.7.1b6 → apify-2.7.3}/Makefile +0 -0
  52. {apify-2.7.1b6 → apify-2.7.3}/README.md +0 -0
  53. {apify-2.7.1b6 → apify-2.7.3}/docs/01_overview/01_introduction.mdx +0 -0
  54. {apify-2.7.1b6 → apify-2.7.3}/docs/01_overview/03_actor_structure.mdx +0 -0
  55. {apify-2.7.1b6 → apify-2.7.3}/docs/01_overview/code/01_introduction.py +0 -0
  56. {apify-2.7.1b6 → apify-2.7.3}/docs/01_overview/code/actor_structure/__init__.py +0 -0
  57. {apify-2.7.1b6 → apify-2.7.3}/docs/01_overview/code/actor_structure/__main__.py +0 -0
  58. {apify-2.7.1b6 → apify-2.7.3}/docs/01_overview/code/actor_structure/main.py +0 -0
  59. {apify-2.7.1b6 → apify-2.7.3}/docs/01_overview/code/actor_structure/py.typed +0 -0
  60. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/01_beautifulsoup_httpx.mdx +0 -0
  61. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/02_crawlee.mdx +0 -0
  62. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/03_playwright.mdx +0 -0
  63. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/04_selenium.mdx +0 -0
  64. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/05_scrapy.mdx +0 -0
  65. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/01_beautifulsoup_httpx.py +0 -0
  66. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/02_crawlee_beautifulsoup.py +0 -0
  67. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/02_crawlee_playwright.py +0 -0
  68. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/03_playwright.py +0 -0
  69. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/04_selenium.py +0 -0
  70. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/__init__.py +0 -0
  71. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/__main__.py +0 -0
  72. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/items.py +0 -0
  73. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/main.py +0 -0
  74. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/py.typed +0 -0
  75. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/settings.py +0 -0
  76. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/spiders/__init__.py +0 -0
  77. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/spiders/py.typed +0 -0
  78. {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/spiders/title.py +0 -0
  79. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/01_actor_lifecycle.mdx +0 -0
  80. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/02_actor_input.mdx +0 -0
  81. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/03_storages.mdx +0 -0
  82. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/04_actor_events.mdx +0 -0
  83. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/05_proxy_management.mdx +0 -0
  84. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/06_interacting_with_other_actors.mdx +0 -0
  85. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/07_webhooks.mdx +0 -0
  86. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/08_access_apify_api.mdx +0 -0
  87. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/09_running_webserver.mdx +0 -0
  88. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/11_configuration.mdx +0 -0
  89. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/12_pay_per_event.mdx +0 -0
  90. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/01_context_manager.py +0 -0
  91. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/01_init_exit.py +0 -0
  92. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/01_reboot.py +0 -0
  93. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/01_status_message.py +0 -0
  94. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/02_input.py +0 -0
  95. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/03_dataset_exports.py +0 -0
  96. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/03_dataset_read_write.py +0 -0
  97. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/03_deleting_storages.py +0 -0
  98. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/03_kvs_iterating.py +0 -0
  99. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/03_kvs_public_url.py +0 -0
  100. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/03_kvs_read_write.py +0 -0
  101. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/03_opening_storages.py +0 -0
  102. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/03_rq.py +0 -0
  103. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/04_actor_events.py +0 -0
  104. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/05_apify_proxy.py +0 -0
  105. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/05_apify_proxy_config.py +0 -0
  106. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/05_custom_proxy.py +0 -0
  107. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/05_custom_proxy_function.py +0 -0
  108. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/05_proxy_actor_input.py +0 -0
  109. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/05_proxy_httpx.py +0 -0
  110. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/05_proxy_rotation.py +0 -0
  111. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/06_interacting_call.py +0 -0
  112. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/06_interacting_call_task.py +0 -0
  113. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/06_interacting_metamorph.py +0 -0
  114. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/06_interacting_start.py +0 -0
  115. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/07_webhook.py +0 -0
  116. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/07_webhook_preventing.py +0 -0
  117. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/08_actor_client.py +0 -0
  118. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/08_actor_new_client.py +0 -0
  119. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/09_webserver.py +0 -0
  120. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/10_log_config.py +0 -0
  121. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/10_logger_usage.py +0 -0
  122. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/11_config.py +0 -0
  123. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/actor_charge.py +0 -0
  124. {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/conditional_actor_charge.py +0 -0
  125. {apify-2.7.1b6 → apify-2.7.3}/docs/04_upgrading/upgrading_to_v2.md +0 -0
  126. {apify-2.7.1b6 → apify-2.7.3}/docs/pyproject.toml +0 -0
  127. {apify-2.7.1b6 → apify-2.7.3}/renovate.json +0 -0
  128. {apify-2.7.1b6 → apify-2.7.3}/src/apify/__init__.py +0 -0
  129. {apify-2.7.1b6 → apify-2.7.3}/src/apify/_consts.py +0 -0
  130. {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/__init__.py +0 -0
  131. {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/_dataset_client.py +0 -0
  132. {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/_dataset_collection_client.py +0 -0
  133. {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/_key_value_store_client.py +0 -0
  134. {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/_key_value_store_collection_client.py +0 -0
  135. {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/_request_queue_client.py +0 -0
  136. {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/_request_queue_collection_client.py +0 -0
  137. {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/py.typed +0 -0
  138. {apify-2.7.1b6 → apify-2.7.3}/src/apify/py.typed +0 -0
  139. {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/__init__.py +0 -0
  140. {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/_actor_runner.py +0 -0
  141. {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/_async_thread.py +0 -0
  142. {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/_logging_config.py +0 -0
  143. {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/extensions/__init__.py +0 -0
  144. {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/extensions/_httpcache.py +0 -0
  145. {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/middlewares/__init__.py +0 -0
  146. {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/middlewares/apify_proxy.py +0 -0
  147. {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/middlewares/py.typed +0 -0
  148. {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/pipelines/__init__.py +0 -0
  149. {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/pipelines/actor_dataset_push.py +0 -0
  150. {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/pipelines/py.typed +0 -0
  151. {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/py.typed +0 -0
  152. {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/requests.py +0 -0
  153. {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/scheduler.py +0 -0
  154. {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/utils.py +0 -0
  155. {apify-2.7.1b6 → apify-2.7.3}/src/apify/storages/__init__.py +0 -0
  156. {apify-2.7.1b6 → apify-2.7.3}/src/apify/storages/py.typed +0 -0
  157. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/__init__.py +0 -0
  158. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/_utils.py +0 -0
  159. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/actor_source_base/src/__init__.py +0 -0
  160. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/actor_source_base/src/__main__.py +0 -0
  161. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/actor_source_base/src/main.py +0 -0
  162. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_api_helpers.py +0 -0
  163. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_call_timeouts.py +0 -0
  164. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_charge.py +0 -0
  165. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_create_proxy_configuration.py +0 -0
  166. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_dataset.py +0 -0
  167. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_key_value_store.py +0 -0
  168. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_lifecycle.py +0 -0
  169. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_log.py +0 -0
  170. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_request_queue.py +0 -0
  171. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_scrapy.py +0 -0
  172. {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_fixtures.py +0 -0
  173. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/__init__.py +0 -0
  174. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/__init__.py +0 -0
  175. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_create_proxy_configuration.py +0 -0
  176. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_dataset.py +0 -0
  177. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_env_helpers.py +0 -0
  178. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_helpers.py +0 -0
  179. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_key_value_store.py +0 -0
  180. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_log.py +0 -0
  181. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_non_default_instance.py +0 -0
  182. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_request_queue.py +0 -0
  183. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_configuration.py +0 -0
  184. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_request_list.py +0 -0
  185. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/__init__.py +0 -0
  186. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/extensions/__init__.py +0 -0
  187. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/extensions/test_httpcache.py +0 -0
  188. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/middlewares/__init__.py +0 -0
  189. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/middlewares/test_apify_proxy.py +0 -0
  190. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/pipelines/__init__.py +0 -0
  191. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/pipelines/test_actor_dataset_push.py +0 -0
  192. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/requests/__init__.py +0 -0
  193. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/requests/test_to_apify_request.py +0 -0
  194. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/requests/test_to_scrapy_request.py +0 -0
  195. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/utils/__init__.py +0 -0
  196. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/utils/test_apply_apify_settings.py +0 -0
  197. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/utils/test_get_basic_auth_header.py +0 -0
  198. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/test_crypto.py +0 -0
  199. {apify-2.7.1b6 → apify-2.7.3}/tests/unit/test_proxy_configuration.py +0 -0
  200. {apify-2.7.1b6 → apify-2.7.3}/website/.eslintrc.json +0 -0
  201. {apify-2.7.1b6 → apify-2.7.3}/website/babel.config.js +0 -0
  202. {apify-2.7.1b6 → apify-2.7.3}/website/build_api_reference.sh +0 -0
  203. {apify-2.7.1b6 → apify-2.7.3}/website/generate_module_shortcuts.py +0 -0
  204. {apify-2.7.1b6 → apify-2.7.3}/website/sidebars.js +0 -0
  205. {apify-2.7.1b6 → apify-2.7.3}/website/src/components/ApiLink.jsx +0 -0
  206. {apify-2.7.1b6 → apify-2.7.3}/website/src/components/Gradients.jsx +0 -0
  207. {apify-2.7.1b6 → apify-2.7.3}/website/src/components/Highlights.jsx +0 -0
  208. {apify-2.7.1b6 → apify-2.7.3}/website/src/components/Highlights.module.css +0 -0
  209. {apify-2.7.1b6 → apify-2.7.3}/website/src/components/RunnableCodeBlock.jsx +0 -0
  210. {apify-2.7.1b6 → apify-2.7.3}/website/src/components/RunnableCodeBlock.module.css +0 -0
  211. {apify-2.7.1b6 → apify-2.7.3}/website/src/css/custom.css +0 -0
  212. {apify-2.7.1b6 → apify-2.7.3}/website/src/pages/home_page_example.py +0 -0
  213. {apify-2.7.1b6 → apify-2.7.3}/website/src/pages/index.js +0 -0
  214. {apify-2.7.1b6 → apify-2.7.3}/website/static/.nojekyll +0 -0
  215. {apify-2.7.1b6 → apify-2.7.3}/website/static/img/docs-og.png +0 -0
  216. {apify-2.7.1b6 → apify-2.7.3}/website/tools/docs-prettier.config.js +0 -0
  217. {apify-2.7.1b6 → apify-2.7.3}/website/tools/utils/externalLink.js +0 -0
@@ -11,10 +11,6 @@ on:
11
11
  # Or it can be triggered manually.
12
12
  workflow_dispatch:
13
13
 
14
- concurrency:
15
- group: release
16
- cancel-in-progress: false
17
-
18
14
  jobs:
19
15
  release_metadata:
20
16
  if: "!startsWith(github.event.head_commit.message, 'docs') && !startsWith(github.event.head_commit.message, 'ci') && startsWith(github.repository, 'apify/')"
@@ -24,38 +20,38 @@ jobs:
24
20
  version_number: ${{ steps.release_metadata.outputs.version_number }}
25
21
  tag_name: ${{ steps.release_metadata.outputs.tag_name }}
26
22
  changelog: ${{ steps.release_metadata.outputs.changelog }}
23
+ existing_changelog_path: CHANGELOG.md
27
24
  steps:
28
25
  - uses: apify/workflows/git-cliff-release@main
29
26
  id: release_metadata
30
27
  name: Prepare release metadata
31
28
  with:
32
29
  release_type: prerelease
33
- existing_changelog_path: CHANGELOG.md
34
30
 
35
31
  lint_check:
36
32
  name: Lint check
37
33
  uses: apify/workflows/.github/workflows/python_lint_check.yaml@main
38
34
  with:
39
- python-versions: '["3.10", "3.11", "3.12", "3.13"]'
35
+ python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
40
36
 
41
37
  type_check:
42
38
  name: Type check
43
39
  uses: apify/workflows/.github/workflows/python_type_check.yaml@main
44
40
  with:
45
- python-versions: '["3.10", "3.11", "3.12", "3.13"]'
41
+ python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
46
42
 
47
43
  unit_tests:
48
44
  name: Unit tests
49
45
  uses: apify/workflows/.github/workflows/python_unit_tests.yaml@main
50
46
  with:
51
- python-versions: '["3.10", "3.11", "3.12", "3.13"]'
47
+ python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
52
48
 
53
49
  integration_tests:
54
50
  name: Integration tests
55
51
  uses: apify/workflows/.github/workflows/python_integration_tests.yaml@main
56
52
  secrets: inherit
57
53
  with:
58
- python-versions: '["3.10", "3.13"]'
54
+ python-versions: '["3.9", "3.13"]'
59
55
 
60
56
  update_changelog:
61
57
  name: Update changelog
@@ -21,10 +21,6 @@ on:
21
21
  type: string
22
22
  default: ""
23
23
 
24
- concurrency:
25
- group: release
26
- cancel-in-progress: false
27
-
28
24
  jobs:
29
25
  release_metadata:
30
26
  name: Prepare release metadata
@@ -47,26 +43,26 @@ jobs:
47
43
  name: Lint check
48
44
  uses: apify/workflows/.github/workflows/python_lint_check.yaml@main
49
45
  with:
50
- python-versions: '["3.10", "3.11", "3.12", "3.13"]'
46
+ python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
51
47
 
52
48
  type_check:
53
49
  name: Type check
54
50
  uses: apify/workflows/.github/workflows/python_type_check.yaml@main
55
51
  with:
56
- python-versions: '["3.10", "3.11", "3.12", "3.13"]'
52
+ python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
57
53
 
58
54
  unit_tests:
59
55
  name: Unit tests
60
56
  uses: apify/workflows/.github/workflows/python_unit_tests.yaml@main
61
57
  with:
62
- python-versions: '["3.10", "3.11", "3.12", "3.13"]'
58
+ python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
63
59
 
64
60
  integration_tests:
65
61
  name: Integration tests
66
62
  uses: apify/workflows/.github/workflows/python_integration_tests.yaml@main
67
63
  secrets: inherit
68
64
  with:
69
- python-versions: '["3.10", "3.13"]'
65
+ python-versions: '["3.9", "3.13"]'
70
66
 
71
67
  update_changelog:
72
68
  name: Update changelog
@@ -6,29 +6,24 @@ on:
6
6
  # step required for PRs from forks. This prevents their potential exposure.
7
7
  pull_request:
8
8
 
9
- # Trigger for pushing to the master branch is handled by the pre-release workflow.
10
-
11
- # It should also be possible to trigger checks manually
12
- workflow_dispatch:
13
-
14
9
  jobs:
15
10
  lint_check:
16
11
  name: Lint check
17
12
  uses: apify/workflows/.github/workflows/python_lint_check.yaml@main
18
13
  with:
19
- python-versions: '["3.10", "3.11", "3.12", "3.13"]'
14
+ python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
20
15
 
21
16
  type_check:
22
17
  name: Type check
23
18
  uses: apify/workflows/.github/workflows/python_type_check.yaml@main
24
19
  with:
25
- python-versions: '["3.10", "3.11", "3.12", "3.13"]'
20
+ python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
26
21
 
27
22
  unit_tests:
28
23
  name: Unit tests
29
24
  uses: apify/workflows/.github/workflows/python_unit_tests.yaml@main
30
25
  with:
31
- python-versions: '["3.10", "3.11", "3.12", "3.13"]'
26
+ python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
32
27
 
33
28
  docs_check:
34
29
  name: Docs check
@@ -40,4 +35,4 @@ jobs:
40
35
  uses: apify/workflows/.github/workflows/python_integration_tests.yaml@main
41
36
  secrets: inherit
42
37
  with:
43
- python-versions: '["3.10", "3.13"]'
38
+ python-versions: '["3.9", "3.13"]'
@@ -2,44 +2,18 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- <!-- git-cliff-unreleased-start -->
6
- ## 2.7.1 - **not yet released**
5
+ ## [2.7.3](https://github.com/apify/apify-sdk-python/releases/tag/v2.7.3) (2025-08-11)
7
6
 
8
7
  ### 🐛 Bug Fixes
9
8
 
10
- - Restrict apify-shared and apify-client versions ([#523](https://github.com/apify/apify-sdk-python/pull/523)) ([b3ae5a9](https://github.com/apify/apify-sdk-python/commit/b3ae5a972a65454a4998eda59c9fcc3f6b7e8579)) by [@vdusek](https://github.com/vdusek)
11
-
12
-
13
- <!-- git-cliff-unreleased-end -->
14
- ## [2.7.0](https://github.com/apify/apify-sdk-python/releases/tag/v2.7.0) (2025-07-14)
15
-
16
- ### 🚀 Features
17
-
18
- - **crypto:** Decrypt secret objects ([#482](https://github.com/apify/apify-sdk-python/pull/482)) ([ce9daf7](https://github.com/apify/apify-sdk-python/commit/ce9daf7381212b8dc194e8a643e5ca0dedbc0078)) by [@MFori](https://github.com/MFori)
19
-
20
- ### 🐛 Bug Fixes
21
-
22
- - Sync `@docusaurus` theme version [internal] ([#500](https://github.com/apify/apify-sdk-python/pull/500)) ([a7485e7](https://github.com/apify/apify-sdk-python/commit/a7485e7d2276fde464ce862573d5b95e7d4d836a)) by [@katzino](https://github.com/katzino)
23
- - Tagline overlap ([#501](https://github.com/apify/apify-sdk-python/pull/501)) ([bae8340](https://github.com/apify/apify-sdk-python/commit/bae8340c46fea756ea35ea4d591da84c09d478e2)) by [@katzino](https://github.com/katzino)
24
-
25
-
26
- ## [2.7.0](https://github.com/apify/apify-sdk-python/releases/tag/v2.7.0) (2025-07-14)
27
-
28
- ### 🚀 Features
29
-
30
- - **crypto:** Decrypt secret objects ([#482](https://github.com/apify/apify-sdk-python/pull/482)) ([ce9daf7](https://github.com/apify/apify-sdk-python/commit/ce9daf7381212b8dc194e8a643e5ca0dedbc0078)) by [@MFori](https://github.com/MFori)
31
-
32
- ### 🐛 Bug Fixes
33
-
34
- - Sync `@docusaurus` theme version [internal] ([#500](https://github.com/apify/apify-sdk-python/pull/500)) ([a7485e7](https://github.com/apify/apify-sdk-python/commit/a7485e7d2276fde464ce862573d5b95e7d4d836a)) by [@katzino](https://github.com/katzino)
35
- - Tagline overlap ([#501](https://github.com/apify/apify-sdk-python/pull/501)) ([bae8340](https://github.com/apify/apify-sdk-python/commit/bae8340c46fea756ea35ea4d591da84c09d478e2)) by [@katzino](https://github.com/katzino)
9
+ - Expose `APIFY_USER_IS_PAYING` env var to the configuration (#507) ([0de022c](https://github.com/apify/apify-sdk-python/commit/0de022c3435f24c821053c771e7b659433e3fb6e))
36
10
 
37
11
 
38
12
  ## [2.7.2](https://github.com/apify/apify-sdk-python/releases/tag/v2.7.2) (2025-07-30)
39
13
 
40
14
  ### 🐛 Bug Fixes
41
15
 
42
- - Restrict apify-shared and apify-client versions ([#523](https://github.com/apify/apify-sdk-python/pull/523)) ([581ebae](https://github.com/apify/apify-sdk-python/commit/581ebae5752a984a34cbabc02c49945ae392db00)) by [@vdusek](https://github.com/vdusek)
16
+ - Restrict apify-shared and apify-client versions (#523) ([581ebae](https://github.com/apify/apify-sdk-python/commit/581ebae5752a984a34cbabc02c49945ae392db00))
43
17
 
44
18
 
45
19
  ## [2.7.1](https://github.com/apify/apify-sdk-python/releases/tag/v2.7.1) (2025-07-24)
@@ -185,210 +159,33 @@ All notable changes to this project will be documented in this file.
185
159
 
186
160
  - [**breaking**] Preparation for v2 release ([#210](https://github.com/apify/apify-sdk-python/pull/210)) ([2f9dcc5](https://github.com/apify/apify-sdk-python/commit/2f9dcc559414f31e3f4fc87e72417a36494b9c84)) by [@janbuchar](https://github.com/janbuchar), closes [#135](https://github.com/apify/apify-sdk-python/issues/135), [#137](https://github.com/apify/apify-sdk-python/issues/137), [#138](https://github.com/apify/apify-sdk-python/issues/138), [#147](https://github.com/apify/apify-sdk-python/issues/147), [#149](https://github.com/apify/apify-sdk-python/issues/149), [#237](https://github.com/apify/apify-sdk-python/issues/237)
187
161
 
188
- ### Chore
189
-
190
- - [**breaking**] Drop support for Python 3.8
191
-
192
162
 
193
163
  ## [1.7.2](https://github.com/apify/apify-sdk-python/releases/tag/v1.7.2) (2024-07-08)
194
164
 
195
- - Add Actor Standby port
196
-
197
-
198
- ## [1.7.1](https://github.com/apify/apify-sdk-python/releases/tag/v1.7.1) (2024-05-23)
199
-
200
- ### 🐛 Bug Fixes
201
-
202
- - Set a timeout for Actor cleanup
203
-
204
-
205
- ## [1.7.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.7.0) (2024-03-12)
206
-
207
- ### 🚀 Features
208
-
209
- - Add a new way of generating the `uniqueKey` field of the request, aligning it with the Crawlee.
210
-
211
- ### 🐛 Bug Fixes
212
-
213
- - Improve error handling for `to_apify_request` serialization failures
214
- - Scrapy's `Request.dont_filter` works.
215
-
216
-
217
- ## [1.6.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.6.0) (2024-02-23)
218
-
219
- ### 🐛 Bug Fixes
220
-
221
- - Update of Scrapy integration, fixes in `ApifyScheduler`, `to_apify_request` and `apply_apify_settings`.
222
-
223
- ### Chore
224
-
225
- - Remove `ApifyRetryMiddleware` and stay with the Scrapy's default one
226
-
227
-
228
- ## [1.5.5](https://github.com/apify/apify-sdk-python/releases/tag/v1.5.5) (2024-02-01)
229
-
230
- ### 🐛 Bug Fixes
231
-
232
- - Fix conversion of `headers` fields in Apify <--> Scrapy request translation
233
-
234
-
235
- ## [1.5.4](https://github.com/apify/apify-sdk-python/releases/tag/v1.5.4) (2024-01-24)
236
-
237
- ### 🐛 Bug Fixes
238
-
239
- - Fix conversion of `userData` and `headers` fields in Apify <--> Scrapy request translation
240
-
241
-
242
- ## [1.5.3](https://github.com/apify/apify-sdk-python/releases/tag/v1.5.3) (2024-01-23)
243
-
244
165
  ### 🚀 Features
245
166
 
246
- - Add `apply_apify_settings` function to Scrapy subpackage
247
-
248
-
249
- ## [1.5.2](https://github.com/apify/apify-sdk-python/releases/tag/v1.5.2) (2024-01-19)
250
-
251
- ### 🐛 Bug Fixes
252
-
253
- - Add missing import check to `ApifyHttpProxyMiddleware`
254
-
255
- ### Chore
256
-
257
- - Create a new subpackage for Scrapy pipelines
258
- - Remove some noqas thanks to the new Ruff release
259
- - Replace relative imports with absolute imports
260
- - Replace asserts with custom checks in Scrapy subpackage
261
-
167
+ - Add actor standby port ([#220](https://github.com/apify/apify-sdk-python/pull/220)) ([6d0d87d](https://github.com/apify/apify-sdk-python/commit/6d0d87dcaedaf42d8eeb7d23c56f6b102434cbcb)) by [@jirimoravcik](https://github.com/jirimoravcik)
262
168
 
263
- ## [1.5.1](https://github.com/apify/apify-sdk-python/releases/tag/v1.5.1) (2024-01-10)
264
169
 
265
- ### Chore
266
-
267
- - Allowed running integration tests from PRs from forks, after maintainer approval
268
- - Do not close `nested_event_loop` in the `Scheduler.__del__`
269
-
270
-
271
- ## [1.5.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.5.0) (2024-01-03)
272
-
273
- ### 🚀 Features
274
-
275
- - Add `ApifyHttpProxyMiddleware`
276
-
277
-
278
- ## [1.4.1](https://github.com/apify/apify-sdk-python/releases/tag/v1.4.1) (2023-12-21)
279
-
280
- ### 🐛 Bug Fixes
281
-
282
- - Resolve issue in `ApifyRetryMiddleware.process_exception()`, where requests were getting stuck in the request queue
283
-
284
- ### Chore
285
-
286
- - Fix type hint problems for resource clients
287
-
288
-
289
- ## [1.4.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.4.0) (2023-12-05)
290
-
291
- ### Chore
292
-
293
- - Migrate from Autopep8 and Flake8 to Ruff
294
-
295
-
296
- ## [1.3.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.3.0) (2023-11-15)
297
-
298
- ### 🚀 Features
299
-
300
- - Add `scrapy` extra
301
-
302
-
303
- ## [1.2.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.2.0) (2023-10-23)
304
-
305
- ### 🚀 Features
306
-
307
- - Add support for Python 3.12
308
-
309
- ### Chore
310
-
311
- - Fix lint error (E721) in unit tests (for instance checks use `isinstance()`)
312
-
313
-
314
- ## [1.1.5](https://github.com/apify/apify-sdk-python/releases/tag/v1.1.5) (2023-10-03)
315
-
316
- ### 🚀 Features
317
-
318
- - Update the Apify log formatter to contain an option for adding the logger name
319
-
320
- ### Chore
321
-
322
- - Rewrite documentation publication to use Docusaurus
323
- - Remove PR Toolkit workflow
324
-
325
-
326
- ## [1.1.4](https://github.com/apify/apify-sdk-python/releases/tag/v1.1.4) (2023-09-06)
170
+ ## [1.7.1](https://github.com/apify/apify-sdk-python/releases/tag/v1.7.1) (2024-05-23)
327
171
 
328
172
  ### 🐛 Bug Fixes
329
173
 
330
- - Resolve issue with querying request queue head multiple times in parallel
331
-
332
- ### Chore
333
-
334
- - Fix integration tests for Actor logger
335
- - Remove `pytest-randomly` Pytest plugin
336
- - Unpin `apify-client` and `apify-shared` to improve compatibility with their newer versions
337
-
338
-
339
- ## [1.1.3](https://github.com/apify/apify-sdk-python/releases/tag/v1.1.3) (2023-08-25)
340
-
341
- ### Chore
342
-
343
- - Unify indentation in configuration files
344
- - Update the `Actor.reboot` method to use the new reboot endpoint
174
+ - Set a timeout for Actor cleanup ([#206](https://github.com/apify/apify-sdk-python/pull/206)) ([cfed57d](https://github.com/apify/apify-sdk-python/commit/cfed57d6cff4fd15fe4b25578573190d53b9942c)) by [@janbuchar](https://github.com/janbuchar), closes [#200](https://github.com/apify/apify-sdk-python/issues/200)
345
175
 
346
176
 
347
177
  ## [1.1.2](https://github.com/apify/apify-sdk-python/releases/tag/v1.1.2) (2023-08-02)
348
178
 
349
- ### Chore
350
-
351
- - Start importing general constants and utilities from the `apify-shared` library
352
- - Simplify code via `flake8-simplify`
353
- - Start using environment variables with prefix `ACTOR_` instead of some with prefix `APIFY_`
354
- - Pin `apify-client` and `apify-shared` to prevent their implicit updates from breaking SDK
355
-
356
-
357
- ## [1.1.1](https://github.com/apify/apify-sdk-python/releases/tag/v1.1.1) (2023-05-23)
358
-
359
- ### 🐛 Bug Fixes
179
+ ### 🚀 Features
360
180
 
361
- - Relax dependency requirements to improve compatibility with other libraries
181
+ - Use Actor env vars ([#105](https://github.com/apify/apify-sdk-python/pull/105)) ([f0ba351](https://github.com/apify/apify-sdk-python/commit/f0ba35103eb9efbf39ea394d390430c849bf127c)) by [@jirimoravcik](https://github.com/jirimoravcik)
362
182
 
363
183
 
364
184
  ## [1.1.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.1.0) (2023-05-23)
365
185
 
366
186
  ### 🚀 Features
367
187
 
368
- - Add option to add event handlers which accept no arguments
369
- - Add support for `is_terminal` flag in status message update
370
- - Add option to set status message along with `Actor.exit()`
371
-
372
- ### 🐛 Bug Fixes
373
-
374
- - Start enforcing local storage to always use the UTF-8 encoding
375
- - Fix saving key-value store values to local storage with the right extension for a given content type
376
-
377
- ### Chore
378
-
379
- - Switch from `setup.py` to `pyproject.toml` for specifying project setup
380
-
381
-
382
- ## [1.0.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.0.0) (2023-03-13)
383
-
384
- ### 🐛 Bug Fixes
385
-
386
- - Fix `RequestQueue` not loading requests from an existing queue properly
387
-
388
- ### Chore
389
-
390
- - Update to `apify-client` 1.0.0
391
- - Start triggering base Docker image builds when releasing a new version
188
+ - Use test user token from organisation secrets ([#90](https://github.com/apify/apify-sdk-python/pull/90)) ([7826a38](https://github.com/apify/apify-sdk-python/commit/7826a382d7a3c0a1531b3a7bb73369e2801e6fa0)) by [@drobnikj](https://github.com/drobnikj)
392
189
 
393
190
 
394
191
  ## [0.2.0](https://github.com/apify/apify-sdk-python/releases/tag/v0.2.0) (2023-03-06)
@@ -4,7 +4,7 @@ Here you'll find a contributing guide to get started with development.
4
4
 
5
5
  ## Environment
6
6
 
7
- For local development, it is required to have Python 3.10 (or a later version) installed.
7
+ For local development, it is required to have Python 3.9 (or a later version) installed.
8
8
 
9
9
  We use [uv](https://docs.astral.sh/uv/) for project management. Install it and set up your IDE accordingly.
10
10
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apify
3
- Version: 2.7.1b6
3
+ Version: 2.7.3
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
@@ -219,12 +219,13 @@ Classifier: Environment :: Console
219
219
  Classifier: Intended Audience :: Developers
220
220
  Classifier: License :: OSI Approved :: Apache Software License
221
221
  Classifier: Operating System :: OS Independent
222
+ Classifier: Programming Language :: Python :: 3.9
222
223
  Classifier: Programming Language :: Python :: 3.10
223
224
  Classifier: Programming Language :: Python :: 3.11
224
225
  Classifier: Programming Language :: Python :: 3.12
225
226
  Classifier: Programming Language :: Python :: 3.13
226
227
  Classifier: Topic :: Software Development :: Libraries
227
- Requires-Python: >=3.10
228
+ Requires-Python: >=3.9
228
229
  Requires-Dist: apify-client<2.0.0
229
230
  Requires-Dist: apify-shared<2.0.0
230
231
  Requires-Dist: crawlee~=0.6.0
@@ -11,7 +11,7 @@ In this page, you'll learn how to create and run Apify Actors locally on your co
11
11
 
12
12
  ## Requirements
13
13
 
14
- The Apify SDK requires Python version 3.10 or above to run Python Actors locally.
14
+ The Apify SDK requires Python version 3.9 or above to run Python Actors locally.
15
15
 
16
16
  ## Creating your first Actor
17
17
 
@@ -7,8 +7,6 @@ import CodeBlock from '@theme/CodeBlock';
7
7
 
8
8
  import LogConfigExample from '!!raw-loader!./code/10_log_config.py';
9
9
  import LoggerUsageExample from '!!raw-loader!./code/10_logger_usage.py';
10
- import RedirectLog from '!!raw-loader!./code/10_redirect_log.py';
11
- import RedirectLogExistingRun from '!!raw-loader!./code/10_redirect_log_existing_run.py';
12
10
 
13
11
  The Apify SDK is logging useful information through the [`logging`](https://docs.python.org/3/library/logging.html) module from Python's standard library, into the logger with the name `apify`.
14
12
 
@@ -84,31 +82,3 @@ Result:
84
82
  </pre>
85
83
 
86
84
  <!-- markdownlint-enable no-inline-html -->
87
-
88
- ## Redirect logs from other Actor runs
89
-
90
- In some situations, one Actor is going to start one or more other Actors and wait for them to finish and produce some results. In such cases, you might want to redirect the logs and status messages of the started Actors runs back to the parent Actor run, so that you can see the progress of the started Actors' runs in the parent Actor's logs. This guide will show possibilities on how to do it.
91
-
92
- ### Redirecting logs from Actor.call
93
-
94
- Typical use case for log redirection is to call another Actor using the [`Actor.call`](../../reference/class/Actor#call) method. This method has an optional `logger` argument, which is by default set to the `default` literal. This means that the logs of the called Actor will be automatically redirected to the parent Actor's logs with default formatting and filtering. If you set the `logger` argument to `None`, then no log redirection happens. The third option is to pass your own `Logger` instance with the possibility to define your own formatter, filter, and handler. Below you can see those three possible ways of log redirection when starting another Actor run through [`Actor.call`](../../reference/class/Actor#call).
95
-
96
- <CodeBlock className="language-python">
97
- {RedirectLog}
98
- </CodeBlock>
99
-
100
- Each default redirect logger log entry will have a specific format. After the timestamp, it will contain cyan colored text that will contain the redirect information - the other actor's name and the run ID. The rest of the log message will be printed in the same manner as the parent Actor's logger is configured.
101
-
102
- The log redirection can be deep, meaning that if the other actor also starts another actor and is redirecting logs from it, then in the top-level Actor, you can see it as well. See the following example screenshot of the Apify log console when one actor recursively starts itself (there are 2 levels of recursion in the example).
103
-
104
- ![Console with redirected logs](/img/guides/redirected_logs_example.webp 'Example of console with redirected logs from recursively started actor.')
105
-
106
- ### Redirecting logs from already running Actor run
107
-
108
- In some cases, you might want to connect to an already running Actor run and redirect its logs to your current Actor run. This can be done using the [ApifyClient](../../reference/class/Actor#apify_client) and getting the streamed log from a specific Actor run. You can then use it as a context manager, and the log redirection will be active in the context, or you can control the log redirection manually by explicitly calling `start` and `stop` methods.
109
-
110
- You can further decide whether you want to redirect just new logs of the ongoing Actor run, or if you also want to redirect historical logs from that Actor's run, so all logs it has produced since it was started. Both options are shown in the example code below.
111
-
112
- <CodeBlock className="language-python">
113
- {RedirectLogExistingRun}
114
- </CodeBlock>
@@ -4,18 +4,19 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "apify"
7
- version = "2.7.1b6"
7
+ version = "2.7.3"
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" }
11
11
  readme = "README.md"
12
- requires-python = ">=3.10"
12
+ requires-python = ">=3.9"
13
13
  classifiers = [
14
14
  "Development Status :: 5 - Production/Stable",
15
15
  "Environment :: Console",
16
16
  "Intended Audience :: Developers",
17
17
  "License :: OSI Approved :: Apache Software License",
18
18
  "Operating System :: OS Independent",
19
+ "Programming Language :: Python :: 3.9",
19
20
  "Programming Language :: Python :: 3.10",
20
21
  "Programming Language :: Python :: 3.11",
21
22
  "Programming Language :: Python :: 3.12",
@@ -62,14 +63,13 @@ scrapy = ["scrapy>=2.11.0"]
62
63
 
63
64
  [dependency-groups]
64
65
  dev = [
65
- "build~=1.3.0",
66
- "crawlee[parsel]",
66
+ "build~=1.2.0",
67
67
  "dycw-pytest-only>=2.1.1",
68
- "griffe~=1.9.0",
69
- "mypy~=1.17.0",
68
+ "griffe~=1.7.0",
69
+ "mypy~=1.16.0",
70
70
  "pre-commit~=4.2.0",
71
71
  "pydoc-markdown~=4.8.0",
72
- "pytest-asyncio~=1.1.0",
72
+ "pytest-asyncio~=1.0.0",
73
73
  "pytest-cov~=6.2.0",
74
74
  "pytest-timeout>=2.4.0",
75
75
  "pytest-xdist~=3.8.0",
@@ -77,7 +77,6 @@ dev = [
77
77
  "respx~=0.22.0",
78
78
  "ruff~=0.12.0",
79
79
  "setuptools", # setuptools are used by pytest but not explicitly required
80
- "uvicorn[standard]",
81
80
  ]
82
81
 
83
82
  [tool.hatch.build.targets.wheel]
@@ -189,7 +188,7 @@ asyncio_mode = "auto"
189
188
  timeout = 1200
190
189
 
191
190
  [tool.mypy]
192
- python_version = "3.10"
191
+ python_version = "3.9"
193
192
  plugins = ["pydantic.mypy"]
194
193
  files = ["src", "tests", "docs", "website"]
195
194
  check_untyped_defs = true
@@ -216,7 +215,7 @@ module = [
216
215
  ignore_missing_imports = true
217
216
 
218
217
  [tool.basedpyright]
219
- pythonVersion = "3.10"
218
+ pythonVersion = "3.9"
220
219
  typeCheckingMode = "standard"
221
220
  include = ["src", "tests", "docs", "website"]
222
221
 
@@ -5,7 +5,7 @@ import os
5
5
  import sys
6
6
  from contextlib import suppress
7
7
  from datetime import datetime, timedelta, timezone
8
- from typing import TYPE_CHECKING, Any, Literal, TypeVar, cast, overload
8
+ from typing import TYPE_CHECKING, Any, Callable, Literal, TypeVar, cast, overload
9
9
 
10
10
  from lazy_object_proxy import Proxy
11
11
  from more_itertools import flatten
@@ -13,7 +13,7 @@ from pydantic import AliasChoices
13
13
 
14
14
  from apify_client import ApifyClientAsync
15
15
  from apify_shared.consts import ActorEnvVars, ActorExitCodes, ApifyEnvVars
16
- from apify_shared.utils import maybe_extract_enum_member_value
16
+ from apify_shared.utils import ignore_docs, maybe_extract_enum_member_value
17
17
  from crawlee import service_locator
18
18
  from crawlee.events import (
19
19
  Event,
@@ -39,7 +39,6 @@ from apify.storages import Dataset, KeyValueStore, RequestQueue
39
39
 
40
40
  if TYPE_CHECKING:
41
41
  import logging
42
- from collections.abc import Callable
43
42
  from types import TracebackType
44
43
 
45
44
  from typing_extensions import Self
@@ -54,46 +53,9 @@ MainReturnType = TypeVar('MainReturnType')
54
53
 
55
54
 
56
55
  @docs_name('Actor')
57
- @docs_group('Actor')
56
+ @docs_group('Classes')
58
57
  class _ActorType:
59
- """The core class for building Actors on the Apify platform.
60
-
61
- Actors are serverless programs running in the cloud that can perform anything from simple actions
62
- (such as filling out a web form or sending an email) to complex operations (such as crawling an
63
- entire website or removing duplicates from a large dataset). They are packaged as Docker containers
64
- which accept well-defined JSON input, perform an action, and optionally produce well-defined output.
65
-
66
- ### References
67
-
68
- - Apify platform documentation: https://docs.apify.com/platform/actors
69
- - Actor whitepaper: https://whitepaper.actor/
70
-
71
- ### Usage
72
-
73
- ```python
74
- import asyncio
75
-
76
- import httpx
77
- from apify import Actor
78
- from bs4 import BeautifulSoup
79
-
80
-
81
- async def main() -> None:
82
- async with Actor:
83
- actor_input = await Actor.get_input()
84
- async with httpx.AsyncClient() as client:
85
- response = await client.get(actor_input['url'])
86
- soup = BeautifulSoup(response.content, 'html.parser')
87
- data = {
88
- 'url': actor_input['url'],
89
- 'title': soup.title.string if soup.title else None,
90
- }
91
- await Actor.push_data(data)
92
-
93
- if __name__ == '__main__':
94
- asyncio.run(main())
95
- ```
96
- """
58
+ """The class of `Actor`. Only make a new instance if you're absolutely sure you need to."""
97
59
 
98
60
  _is_rebooting = False
99
61
  _is_any_instance_initialized = False
@@ -145,6 +107,7 @@ class _ActorType:
145
107
 
146
108
  self._is_initialized = False
147
109
 
110
+ @ignore_docs
148
111
  async def __aenter__(self) -> Self:
149
112
  """Initialize the Actor.
150
113
 
@@ -156,6 +119,7 @@ class _ActorType:
156
119
  await self.init()
157
120
  return self
158
121
 
122
+ @ignore_docs
159
123
  async def __aexit__(
160
124
  self,
161
125
  _exc_type: type[BaseException] | None,