apify 2.5.1b10__tar.gz → 2.5.1b11__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 (210) hide show
  1. {apify-2.5.1b10 → apify-2.5.1b11}/CHANGELOG.md +4 -0
  2. {apify-2.5.1b10 → apify-2.5.1b11}/PKG-INFO +1 -1
  3. {apify-2.5.1b10 → apify-2.5.1b11}/pyproject.toml +1 -1
  4. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/_actor.py +39 -7
  5. apify-2.5.1b11/tests/integration/test_actor_call_timeouts.py +105 -0
  6. {apify-2.5.1b10 → apify-2.5.1b11}/website/package-lock.json +3 -3
  7. {apify-2.5.1b10 → apify-2.5.1b11}/.editorconfig +0 -0
  8. {apify-2.5.1b10 → apify-2.5.1b11}/.github/CODEOWNERS +0 -0
  9. {apify-2.5.1b10 → apify-2.5.1b11}/.github/workflows/build_and_deploy_docs.yaml +0 -0
  10. {apify-2.5.1b10 → apify-2.5.1b11}/.github/workflows/check_pr_title.yaml +0 -0
  11. {apify-2.5.1b10 → apify-2.5.1b11}/.github/workflows/pre_release.yaml +0 -0
  12. {apify-2.5.1b10 → apify-2.5.1b11}/.github/workflows/release.yaml +0 -0
  13. {apify-2.5.1b10 → apify-2.5.1b11}/.github/workflows/run_code_checks.yaml +0 -0
  14. {apify-2.5.1b10 → apify-2.5.1b11}/.github/workflows/update_new_issue.yaml +0 -0
  15. {apify-2.5.1b10 → apify-2.5.1b11}/.gitignore +0 -0
  16. {apify-2.5.1b10 → apify-2.5.1b11}/.markdownlint.yaml +0 -0
  17. {apify-2.5.1b10 → apify-2.5.1b11}/.pre-commit-config.yaml +0 -0
  18. {apify-2.5.1b10 → apify-2.5.1b11}/CONTRIBUTING.md +0 -0
  19. {apify-2.5.1b10 → apify-2.5.1b11}/LICENSE +0 -0
  20. {apify-2.5.1b10 → apify-2.5.1b11}/Makefile +0 -0
  21. {apify-2.5.1b10 → apify-2.5.1b11}/README.md +0 -0
  22. {apify-2.5.1b10 → apify-2.5.1b11}/docs/01_overview/01_introduction.mdx +0 -0
  23. {apify-2.5.1b10 → apify-2.5.1b11}/docs/01_overview/02_running_actors_locally.mdx +0 -0
  24. {apify-2.5.1b10 → apify-2.5.1b11}/docs/01_overview/03_actor_structure.mdx +0 -0
  25. {apify-2.5.1b10 → apify-2.5.1b11}/docs/01_overview/code/01_introduction.py +0 -0
  26. {apify-2.5.1b10 → apify-2.5.1b11}/docs/01_overview/code/actor_structure/__init__.py +0 -0
  27. {apify-2.5.1b10 → apify-2.5.1b11}/docs/01_overview/code/actor_structure/__main__.py +0 -0
  28. {apify-2.5.1b10 → apify-2.5.1b11}/docs/01_overview/code/actor_structure/main.py +0 -0
  29. {apify-2.5.1b10 → apify-2.5.1b11}/docs/01_overview/code/actor_structure/py.typed +0 -0
  30. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/01_beautifulsoup_httpx.mdx +0 -0
  31. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/02_crawlee.mdx +0 -0
  32. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/03_playwright.mdx +0 -0
  33. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/04_selenium.mdx +0 -0
  34. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/05_scrapy.mdx +0 -0
  35. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/code/01_beautifulsoup_httpx.py +0 -0
  36. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/code/02_crawlee_beautifulsoup.py +0 -0
  37. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/code/02_crawlee_playwright.py +0 -0
  38. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/code/03_playwright.py +0 -0
  39. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/code/04_selenium.py +0 -0
  40. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/code/scrapy_project/src/__init__.py +0 -0
  41. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/code/scrapy_project/src/__main__.py +0 -0
  42. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/code/scrapy_project/src/items.py +0 -0
  43. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/code/scrapy_project/src/main.py +0 -0
  44. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/code/scrapy_project/src/py.typed +0 -0
  45. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/code/scrapy_project/src/settings.py +0 -0
  46. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/code/scrapy_project/src/spiders/__init__.py +0 -0
  47. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/code/scrapy_project/src/spiders/py.typed +0 -0
  48. {apify-2.5.1b10 → apify-2.5.1b11}/docs/02_guides/code/scrapy_project/src/spiders/title.py +0 -0
  49. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/01_actor_lifecycle.mdx +0 -0
  50. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/02_actor_input.mdx +0 -0
  51. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/03_storages.mdx +0 -0
  52. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/04_actor_events.mdx +0 -0
  53. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/05_proxy_management.mdx +0 -0
  54. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/06_interacting_with_other_actors.mdx +0 -0
  55. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/07_webhooks.mdx +0 -0
  56. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/08_access_apify_api.mdx +0 -0
  57. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/09_running_webserver.mdx +0 -0
  58. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/10_logging.mdx +0 -0
  59. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/11_configuration.mdx +0 -0
  60. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/12_pay_per_event.mdx +0 -0
  61. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/01_context_manager.py +0 -0
  62. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/01_init_exit.py +0 -0
  63. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/01_reboot.py +0 -0
  64. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/01_status_message.py +0 -0
  65. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/02_input.py +0 -0
  66. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/03_dataset_exports.py +0 -0
  67. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/03_dataset_read_write.py +0 -0
  68. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/03_deleting_storages.py +0 -0
  69. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/03_kvs_iterating.py +0 -0
  70. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/03_kvs_public_url.py +0 -0
  71. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/03_kvs_read_write.py +0 -0
  72. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/03_opening_storages.py +0 -0
  73. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/03_rq.py +0 -0
  74. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/04_actor_events.py +0 -0
  75. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/05_apify_proxy.py +0 -0
  76. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/05_apify_proxy_config.py +0 -0
  77. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/05_custom_proxy.py +0 -0
  78. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/05_custom_proxy_function.py +0 -0
  79. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/05_proxy_actor_input.py +0 -0
  80. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/05_proxy_httpx.py +0 -0
  81. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/05_proxy_rotation.py +0 -0
  82. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/06_interacting_call.py +0 -0
  83. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/06_interacting_call_task.py +0 -0
  84. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/06_interacting_metamorph.py +0 -0
  85. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/06_interacting_start.py +0 -0
  86. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/07_webhook.py +0 -0
  87. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/07_webhook_preventing.py +0 -0
  88. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/08_actor_client.py +0 -0
  89. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/08_actor_new_client.py +0 -0
  90. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/09_webserver.py +0 -0
  91. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/10_log_config.py +0 -0
  92. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/10_logger_usage.py +0 -0
  93. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/11_config.py +0 -0
  94. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/actor_charge.py +0 -0
  95. {apify-2.5.1b10 → apify-2.5.1b11}/docs/03_concepts/code/conditional_actor_charge.py +0 -0
  96. {apify-2.5.1b10 → apify-2.5.1b11}/docs/04_upgrading/upgrading_to_v2.md +0 -0
  97. {apify-2.5.1b10 → apify-2.5.1b11}/docs/pyproject.toml +0 -0
  98. {apify-2.5.1b10 → apify-2.5.1b11}/renovate.json +0 -0
  99. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/__init__.py +0 -0
  100. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/_charging.py +0 -0
  101. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/_configuration.py +0 -0
  102. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/_consts.py +0 -0
  103. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/_crypto.py +0 -0
  104. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/_models.py +0 -0
  105. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/_platform_event_manager.py +0 -0
  106. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/_proxy_configuration.py +0 -0
  107. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/_utils.py +0 -0
  108. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/apify_storage_client/__init__.py +0 -0
  109. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/apify_storage_client/_apify_storage_client.py +0 -0
  110. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/apify_storage_client/_dataset_client.py +0 -0
  111. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/apify_storage_client/_dataset_collection_client.py +0 -0
  112. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/apify_storage_client/_key_value_store_client.py +0 -0
  113. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/apify_storage_client/_key_value_store_collection_client.py +0 -0
  114. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/apify_storage_client/_request_queue_client.py +0 -0
  115. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/apify_storage_client/_request_queue_collection_client.py +0 -0
  116. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/apify_storage_client/py.typed +0 -0
  117. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/log.py +0 -0
  118. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/py.typed +0 -0
  119. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/scrapy/__init__.py +0 -0
  120. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/scrapy/_actor_runner.py +0 -0
  121. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/scrapy/_async_thread.py +0 -0
  122. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/scrapy/_logging_config.py +0 -0
  123. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/scrapy/extensions/__init__.py +0 -0
  124. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/scrapy/extensions/_httpcache.py +0 -0
  125. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/scrapy/middlewares/__init__.py +0 -0
  126. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/scrapy/middlewares/apify_proxy.py +0 -0
  127. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/scrapy/middlewares/py.typed +0 -0
  128. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/scrapy/pipelines/__init__.py +0 -0
  129. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/scrapy/pipelines/actor_dataset_push.py +0 -0
  130. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/scrapy/pipelines/py.typed +0 -0
  131. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/scrapy/py.typed +0 -0
  132. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/scrapy/requests.py +0 -0
  133. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/scrapy/scheduler.py +0 -0
  134. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/scrapy/utils.py +0 -0
  135. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/storages/__init__.py +0 -0
  136. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/storages/_request_list.py +0 -0
  137. {apify-2.5.1b10 → apify-2.5.1b11}/src/apify/storages/py.typed +0 -0
  138. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/README.md +0 -0
  139. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/__init__.py +0 -0
  140. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/_utils.py +0 -0
  141. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/actor_source_base/Dockerfile +0 -0
  142. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/actor_source_base/requirements.txt +0 -0
  143. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/actor_source_base/src/__init__.py +0 -0
  144. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/actor_source_base/src/__main__.py +0 -0
  145. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/actor_source_base/src/main.py +0 -0
  146. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/conftest.py +0 -0
  147. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/test_actor_api_helpers.py +0 -0
  148. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/test_actor_charge.py +0 -0
  149. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/test_actor_create_proxy_configuration.py +0 -0
  150. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/test_actor_dataset.py +0 -0
  151. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/test_actor_events.py +0 -0
  152. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/test_actor_key_value_store.py +0 -0
  153. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/test_actor_lifecycle.py +0 -0
  154. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/test_actor_log.py +0 -0
  155. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/test_actor_request_queue.py +0 -0
  156. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/test_actor_scrapy.py +0 -0
  157. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/test_fixtures.py +0 -0
  158. {apify-2.5.1b10 → apify-2.5.1b11}/tests/integration/test_request_queue.py +0 -0
  159. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/__init__.py +0 -0
  160. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/actor/__init__.py +0 -0
  161. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/actor/test_actor_create_proxy_configuration.py +0 -0
  162. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/actor/test_actor_dataset.py +0 -0
  163. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/actor/test_actor_env_helpers.py +0 -0
  164. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/actor/test_actor_helpers.py +0 -0
  165. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/actor/test_actor_key_value_store.py +0 -0
  166. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/actor/test_actor_lifecycle.py +0 -0
  167. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/actor/test_actor_log.py +0 -0
  168. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/actor/test_actor_non_default_instance.py +0 -0
  169. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/actor/test_actor_request_queue.py +0 -0
  170. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/actor/test_configuration.py +0 -0
  171. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/actor/test_request_list.py +0 -0
  172. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/conftest.py +0 -0
  173. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/scrapy/__init__.py +0 -0
  174. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/scrapy/extensions/__init__.py +0 -0
  175. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/scrapy/extensions/test_httpcache.py +0 -0
  176. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/scrapy/middlewares/__init__.py +0 -0
  177. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/scrapy/middlewares/test_apify_proxy.py +0 -0
  178. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/scrapy/pipelines/__init__.py +0 -0
  179. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/scrapy/pipelines/test_actor_dataset_push.py +0 -0
  180. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/scrapy/requests/__init__.py +0 -0
  181. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/scrapy/requests/test_to_apify_request.py +0 -0
  182. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/scrapy/requests/test_to_scrapy_request.py +0 -0
  183. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/scrapy/utils/__init__.py +0 -0
  184. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/scrapy/utils/test_apply_apify_settings.py +0 -0
  185. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/scrapy/utils/test_get_basic_auth_header.py +0 -0
  186. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/test_crypto.py +0 -0
  187. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/test_platform_event_manager.py +0 -0
  188. {apify-2.5.1b10 → apify-2.5.1b11}/tests/unit/test_proxy_configuration.py +0 -0
  189. {apify-2.5.1b10 → apify-2.5.1b11}/uv.lock +0 -0
  190. {apify-2.5.1b10 → apify-2.5.1b11}/website/.eslintrc.json +0 -0
  191. {apify-2.5.1b10 → apify-2.5.1b11}/website/babel.config.js +0 -0
  192. {apify-2.5.1b10 → apify-2.5.1b11}/website/build_api_reference.sh +0 -0
  193. {apify-2.5.1b10 → apify-2.5.1b11}/website/docusaurus.config.js +0 -0
  194. {apify-2.5.1b10 → apify-2.5.1b11}/website/generate_module_shortcuts.py +0 -0
  195. {apify-2.5.1b10 → apify-2.5.1b11}/website/package.json +0 -0
  196. {apify-2.5.1b10 → apify-2.5.1b11}/website/sidebars.js +0 -0
  197. {apify-2.5.1b10 → apify-2.5.1b11}/website/src/components/ApiLink.jsx +0 -0
  198. {apify-2.5.1b10 → apify-2.5.1b11}/website/src/components/Gradients.jsx +0 -0
  199. {apify-2.5.1b10 → apify-2.5.1b11}/website/src/components/Highlights.jsx +0 -0
  200. {apify-2.5.1b10 → apify-2.5.1b11}/website/src/components/Highlights.module.css +0 -0
  201. {apify-2.5.1b10 → apify-2.5.1b11}/website/src/components/RunnableCodeBlock.jsx +0 -0
  202. {apify-2.5.1b10 → apify-2.5.1b11}/website/src/components/RunnableCodeBlock.module.css +0 -0
  203. {apify-2.5.1b10 → apify-2.5.1b11}/website/src/css/custom.css +0 -0
  204. {apify-2.5.1b10 → apify-2.5.1b11}/website/src/pages/home_page_example.py +0 -0
  205. {apify-2.5.1b10 → apify-2.5.1b11}/website/src/pages/index.js +0 -0
  206. {apify-2.5.1b10 → apify-2.5.1b11}/website/src/pages/index.module.css +0 -0
  207. {apify-2.5.1b10 → apify-2.5.1b11}/website/static/.nojekyll +0 -0
  208. {apify-2.5.1b10 → apify-2.5.1b11}/website/static/img/docs-og.png +0 -0
  209. {apify-2.5.1b10 → apify-2.5.1b11}/website/tools/docs-prettier.config.js +0 -0
  210. {apify-2.5.1b10 → apify-2.5.1b11}/website/tools/utils/externalLink.js +0 -0
@@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
5
5
  <!-- git-cliff-unreleased-start -->
6
6
  ## 2.5.1 - **not yet released**
7
7
 
8
+ ### 🚀 Features
9
+
10
+ - Add `RemainingTime` option for `timeout` argument of `Actor.call` and `Actor.start` ([#473](https://github.com/apify/apify-sdk-python/pull/473)) ([ba7f757](https://github.com/apify/apify-sdk-python/commit/ba7f757a82661a5a181d9bd767950d09557409f9)) by [@Pijukatel](https://github.com/Pijukatel), closes [#472](https://github.com/apify/apify-sdk-python/issues/472)
11
+
8
12
  ### 🐛 Bug Fixes
9
13
 
10
14
  - Fix duplicate logs from apify logger in Scrapy integration ([#457](https://github.com/apify/apify-sdk-python/pull/457)) ([2745ee6](https://github.com/apify/apify-sdk-python/commit/2745ee6529deecb4f2838c764b9bb3fb6606762b)) by [@vdusek](https://github.com/vdusek), closes [#391](https://github.com/apify/apify-sdk-python/issues/391)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apify
3
- Version: 2.5.1b10
3
+ Version: 2.5.1b11
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.1b10"
7
+ version = "2.5.1b11"
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" }
@@ -4,7 +4,7 @@ import asyncio
4
4
  import os
5
5
  import sys
6
6
  from contextlib import suppress
7
- from datetime import timedelta
7
+ from datetime import datetime, timedelta, timezone
8
8
  from typing import TYPE_CHECKING, Any, Callable, Literal, TypeVar, cast, overload
9
9
 
10
10
  from lazy_object_proxy import Proxy
@@ -693,7 +693,7 @@ class _ActorType:
693
693
  content_type: str | None = None,
694
694
  build: str | None = None,
695
695
  memory_mbytes: int | None = None,
696
- timeout: timedelta | None = None,
696
+ timeout: timedelta | None | Literal['RemainingTime'] = None,
697
697
  wait_for_finish: int | None = None,
698
698
  webhooks: list[Webhook] | None = None,
699
699
  ) -> ActorRun:
@@ -711,7 +711,8 @@ class _ActorType:
711
711
  memory_mbytes: Memory limit for the run, in megabytes. By default, the run uses a memory limit specified
712
712
  in the default run configuration for the Actor.
713
713
  timeout: Optional timeout for the run, in seconds. By default, the run uses timeout specified in
714
- the default run configuration for the Actor.
714
+ the default run configuration for the Actor. Using `RemainingTime` will set timeout of the other Actor
715
+ to the time remaining from this Actor timeout.
715
716
  wait_for_finish: The maximum number of seconds the server waits for the run to finish. By default,
716
717
  it is 0, the maximum value is 300.
717
718
  webhooks: Optional ad-hoc webhooks (https://docs.apify.com/webhooks/ad-hoc-webhooks) associated with
@@ -732,18 +733,39 @@ class _ActorType:
732
733
  else:
733
734
  serialized_webhooks = None
734
735
 
736
+ if timeout == 'RemainingTime':
737
+ actor_start_timeout = self._get_remaining_time()
738
+ elif timeout is None:
739
+ actor_start_timeout = None
740
+ elif isinstance(timeout, timedelta):
741
+ actor_start_timeout = timeout
742
+ else:
743
+ raise ValueError(f'Invalid timeout {timeout!r}: expected `None`, `"RemainingTime"`, or a `timedelta`.')
744
+
735
745
  api_result = await client.actor(actor_id).start(
736
746
  run_input=run_input,
737
747
  content_type=content_type,
738
748
  build=build,
739
749
  memory_mbytes=memory_mbytes,
740
- timeout_secs=int(timeout.total_seconds()) if timeout is not None else None,
750
+ timeout_secs=int(actor_start_timeout.total_seconds()) if actor_start_timeout is not None else None,
741
751
  wait_for_finish=wait_for_finish,
742
752
  webhooks=serialized_webhooks,
743
753
  )
744
754
 
745
755
  return ActorRun.model_validate(api_result)
746
756
 
757
+ def _get_remaining_time(self) -> timedelta | None:
758
+ """Get time remaining from the actor timeout. Returns `None` if not on an Apify platform."""
759
+ if self.is_at_home() and self.configuration.timeout_at:
760
+ return self.configuration.timeout_at - datetime.now(tz=timezone.utc)
761
+
762
+ self.log.warning(
763
+ 'Returning `None` instead of remaining time. Using `RemainingTime` argument is only possible when the Actor'
764
+ ' is running on the Apify platform and when the timeout for the Actor run is set. '
765
+ f'{self.is_at_home()=}, {self.configuration.timeout_at=}'
766
+ )
767
+ return None
768
+
747
769
  async def abort(
748
770
  self,
749
771
  run_id: str,
@@ -787,7 +809,7 @@ class _ActorType:
787
809
  content_type: str | None = None,
788
810
  build: str | None = None,
789
811
  memory_mbytes: int | None = None,
790
- timeout: timedelta | None = None,
812
+ timeout: timedelta | None | Literal['RemainingTime'] = None,
791
813
  webhooks: list[Webhook] | None = None,
792
814
  wait: timedelta | None = None,
793
815
  ) -> ActorRun | None:
@@ -805,7 +827,8 @@ class _ActorType:
805
827
  memory_mbytes: Memory limit for the run, in megabytes. By default, the run uses a memory limit specified
806
828
  in the default run configuration for the Actor.
807
829
  timeout: Optional timeout for the run, in seconds. By default, the run uses timeout specified in
808
- the default run configuration for the Actor.
830
+ the default run configuration for the Actor. Using `RemainingTime` will set timeout of the other Actor
831
+ to the time remaining from this Actor timeout.
809
832
  webhooks: Optional webhooks (https://docs.apify.com/webhooks) associated with the Actor run, which can
810
833
  be used to receive a notification, e.g. when the Actor finished or failed. If you already have
811
834
  a webhook set up for the Actor, you do not have to add it again here.
@@ -826,12 +849,21 @@ class _ActorType:
826
849
  else:
827
850
  serialized_webhooks = None
828
851
 
852
+ if timeout == 'RemainingTime':
853
+ actor_call_timeout = self._get_remaining_time()
854
+ elif timeout is None:
855
+ actor_call_timeout = None
856
+ elif isinstance(timeout, timedelta):
857
+ actor_call_timeout = timeout
858
+ else:
859
+ raise ValueError(f'Invalid timeout {timeout!r}: expected `None`, `"RemainingTime"`, or a `timedelta`.')
860
+
829
861
  api_result = await client.actor(actor_id).call(
830
862
  run_input=run_input,
831
863
  content_type=content_type,
832
864
  build=build,
833
865
  memory_mbytes=memory_mbytes,
834
- timeout_secs=int(timeout.total_seconds()) if timeout is not None else None,
866
+ timeout_secs=int(actor_call_timeout.total_seconds()) if actor_call_timeout is not None else None,
835
867
  webhooks=serialized_webhooks,
836
868
  wait_secs=int(wait.total_seconds()) if wait is not None else None,
837
869
  )
@@ -0,0 +1,105 @@
1
+ from __future__ import annotations
2
+
3
+ import asyncio
4
+ from typing import TYPE_CHECKING
5
+
6
+ from apify import Actor
7
+
8
+ if TYPE_CHECKING:
9
+ from .conftest import MakeActorFunction, RunActorFunction
10
+
11
+
12
+ async def test_actor_start_remaining_timeout(
13
+ make_actor: MakeActorFunction,
14
+ run_actor: RunActorFunction,
15
+ ) -> None:
16
+ """Test that correct timeout is set when using `RemainingTime` value for the `timeout` argument.
17
+
18
+ In this test, one Actor starts itself again and checks that the timeout is correctly set on the second Actor run.
19
+ Timeout should be the remaining time of the first Actor run calculated at the moment of the other Actor start."""
20
+
21
+ async def main() -> None:
22
+ from datetime import datetime, timezone
23
+
24
+ async with Actor:
25
+ actor_input = (await Actor.get_input()) or {}
26
+ if actor_input.get('called_from_another_actor', False) is True:
27
+ # If this Actor run was started with a specific argument (the second Actor run), return immediately.
28
+ # Asserts checking the timeout are in the first Actor run.
29
+ return
30
+
31
+ # Start another run of this actor with timeout set to the time remaining in this actor run
32
+ other_run_data = await Actor.call(
33
+ actor_id=Actor.configuration.actor_id or '',
34
+ run_input={'called_from_another_actor': True},
35
+ timeout='RemainingTime',
36
+ )
37
+ assert other_run_data is not None
38
+ try:
39
+ # To make sure that the actor is started
40
+ await asyncio.sleep(5)
41
+ assert other_run_data.options is not None
42
+ assert Actor.configuration.timeout_at is not None
43
+ assert Actor.configuration.started_at is not None
44
+
45
+ remaining_time_after_actor_start = Actor.configuration.timeout_at - datetime.now(tz=timezone.utc)
46
+
47
+ assert other_run_data.options.timeout > remaining_time_after_actor_start
48
+ assert other_run_data.options.timeout < Actor.configuration.timeout_at - Actor.configuration.started_at
49
+ finally:
50
+ # Make sure the other actor run is aborted
51
+ await Actor.apify_client.run(other_run_data.id).abort()
52
+
53
+ actor = await make_actor(label='remaining-timeout', main_func=main)
54
+ run_result = await run_actor(actor)
55
+
56
+ assert run_result.status == 'SUCCEEDED'
57
+
58
+
59
+ async def test_actor_call_remaining_timeout(
60
+ make_actor: MakeActorFunction,
61
+ run_actor: RunActorFunction,
62
+ ) -> None:
63
+ """Test that correct timeout is set when using `RemainingTime` value for the `timeout` argument.
64
+
65
+ In this test, one Actor starts itself again and checks that the timeout is correctly set on the second Actor run.
66
+ Timeout should be the remaining time of the first Actor run calculated at the moment of the other Actor call."""
67
+
68
+ async def main() -> None:
69
+ from datetime import datetime, timezone
70
+
71
+ async with Actor:
72
+ actor_input = (await Actor.get_input()) or {}
73
+ if actor_input.get('called_from_another_actor', False) is True:
74
+ # If this Actor run was started with a specific argument (the second Actor run), return immediately.
75
+ # Asserts checking the timeout are in the first Actor run.
76
+ return
77
+
78
+ # Start another run of this actor with timeout set to the time remaining in this actor run
79
+ other_run_data = await Actor.call(
80
+ actor_id=Actor.configuration.actor_id or '',
81
+ run_input={'called_from_another_actor': True},
82
+ timeout='RemainingTime',
83
+ )
84
+
85
+ assert other_run_data is not None
86
+ try:
87
+ # To make sure that the actor is started
88
+ await asyncio.sleep(5)
89
+
90
+ assert other_run_data.options is not None
91
+ assert Actor.configuration.timeout_at is not None
92
+ assert Actor.configuration.started_at is not None
93
+
94
+ remaining_time_after_actor_start = Actor.configuration.timeout_at - datetime.now(tz=timezone.utc)
95
+
96
+ assert other_run_data.options.timeout > remaining_time_after_actor_start
97
+ assert other_run_data.options.timeout < Actor.configuration.timeout_at - Actor.configuration.started_at
98
+ finally:
99
+ # Make sure the other actor run is aborted
100
+ await Actor.apify_client.run(other_run_data.id).abort()
101
+
102
+ actor = await make_actor(label='remaining-timeout', main_func=main)
103
+ run_result = await run_actor(actor)
104
+
105
+ assert run_result.status == 'SUCCEEDED'
@@ -1586,9 +1586,9 @@
1586
1586
  }
1587
1587
  },
1588
1588
  "node_modules/@apify/docs-theme": {
1589
- "version": "1.0.174",
1590
- "resolved": "https://registry.npmjs.org/@apify/docs-theme/-/docs-theme-1.0.174.tgz",
1591
- "integrity": "sha512-5/0/FZ7WSQ2qNLupTyTNtrXSQ7D6MXDa8i3mq7utVZB7zolY27/hHba2FYtad+rO8imLwkpDRq1k7xBRFFexkg==",
1589
+ "version": "1.0.175",
1590
+ "resolved": "https://registry.npmjs.org/@apify/docs-theme/-/docs-theme-1.0.175.tgz",
1591
+ "integrity": "sha512-aiVACmQ2T9aU+r/c3NNpJSO77y7LOvty6vlUy4UyNo85bwIyUyjqxEMPhnnG1RaHXBACCYcoGKL2ZOrqiGSl9A==",
1592
1592
  "license": "ISC",
1593
1593
  "dependencies": {
1594
1594
  "@apify/docs-search-modal": "^1.2.1",
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