apify 3.3.1b5__tar.gz → 3.3.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (512) hide show
  1. {apify-3.3.1b5 → apify-3.3.2}/.github/workflows/_check_code.yaml +3 -0
  2. {apify-3.3.1b5 → apify-3.3.2}/.github/workflows/_check_docs.yaml +3 -0
  3. {apify-3.3.1b5 → apify-3.3.2}/.github/workflows/_release_docs.yaml +4 -1
  4. {apify-3.3.1b5 → apify-3.3.2}/.github/workflows/_tests.yaml +5 -2
  5. {apify-3.3.1b5 → apify-3.3.2}/.github/workflows/manual_release_stable.yaml +80 -3
  6. {apify-3.3.1b5 → apify-3.3.2}/.github/workflows/on_issue.yaml +3 -0
  7. {apify-3.3.1b5 → apify-3.3.2}/.github/workflows/on_master.yaml +13 -0
  8. {apify-3.3.1b5 → apify-3.3.2}/.github/workflows/on_pull_request.yaml +4 -0
  9. {apify-3.3.1b5 → apify-3.3.2}/CHANGELOG.md +29 -19
  10. {apify-3.3.1b5 → apify-3.3.2}/PKG-INFO +1 -1
  11. {apify-3.3.1b5 → apify-3.3.2}/pyproject.toml +5 -1
  12. {apify-3.3.1b5 → apify-3.3.2}/src/apify/_actor.py +59 -37
  13. {apify-3.3.1b5 → apify-3.3.2}/src/apify/_charging.py +148 -73
  14. {apify-3.3.1b5 → apify-3.3.2}/src/apify/_utils.py +30 -1
  15. {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/requests.py +14 -1
  16. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_alias_resolving.py +4 -2
  17. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_api_client_creation.py +2 -2
  18. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_dataset_client.py +22 -14
  19. apify-3.3.2/src/apify/storage_clients/_file_system/_dataset_client.py +57 -0
  20. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_file_system/_storage_client.py +20 -0
  21. apify-3.3.2/src/apify/storage_clients/_ppe_dataset_mixin.py +41 -0
  22. apify-3.3.2/tests/e2e/test_actor_charge.py +218 -0
  23. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_schema_storages/actor_source/main.py +4 -0
  24. {apify-3.3.1b5 → apify-3.3.2}/tests/integration/_utils.py +24 -11
  25. {apify-3.3.1b5 → apify-3.3.2}/tests/integration/test_request_queue.py +119 -127
  26. {apify-3.3.1b5 → apify-3.3.2}/tests/integration/test_storages.py +9 -0
  27. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_charge.py +100 -14
  28. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_helpers.py +58 -3
  29. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_charging_manager.py +144 -0
  30. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/requests/test_to_apify_request.py +35 -1
  31. {apify-3.3.1b5 → apify-3.3.2}/uv.lock +609 -551
  32. {apify-3.3.1b5 → apify-3.3.2}/website/docusaurus.config.js +32 -6
  33. {apify-3.3.1b5 → apify-3.3.2}/website/package.json +3 -3
  34. apify-3.3.2/website/src/theme/NavbarItem/ComponentTypes.js +7 -0
  35. apify-3.3.2/website/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +91 -0
  36. apify-3.3.2/website/src/theme/NavbarItem/VersionedReferenceNavbarItem.js +16 -0
  37. apify-3.3.2/website/versioned_docs/version-1.7/.gitignore +1 -0
  38. apify-3.3.2/website/versioned_docs/version-1.7/01-introduction/index.mdx +50 -0
  39. apify-3.3.2/website/versioned_docs/version-1.7/01-introduction/quick-start.mdx +140 -0
  40. apify-3.3.2/website/versioned_docs/version-1.7/02-guides/01-requests-and-httpx.mdx +100 -0
  41. apify-3.3.2/website/versioned_docs/version-1.7/02-guides/02-beautiful-soup.mdx +81 -0
  42. apify-3.3.2/website/versioned_docs/version-1.7/02-guides/03-playwright.mdx +120 -0
  43. apify-3.3.2/website/versioned_docs/version-1.7/02-guides/04-selenium.mdx +110 -0
  44. apify-3.3.2/website/versioned_docs/version-1.7/02-guides/05-scrapy.mdx +111 -0
  45. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/01-actor-lifecycle.mdx +117 -0
  46. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/02-actor-input.mdx +27 -0
  47. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/03-storages.mdx +284 -0
  48. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/04-actor-events.mdx +113 -0
  49. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/05-proxy-management.mdx +194 -0
  50. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/06-interacting-with-other-actors.mdx +96 -0
  51. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/07-webhooks.mdx +50 -0
  52. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/08-access-apify-api.mdx +42 -0
  53. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/09-running-webserver.mdx +66 -0
  54. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/10-logging.mdx +109 -0
  55. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/11-configuration.mdx +45 -0
  56. apify-3.3.2/website/versioned_docs/version-1.7/api-packages.json +1 -0
  57. apify-3.3.2/website/versioned_docs/version-1.7/api-typedoc.json +8083 -0
  58. apify-3.3.2/website/versioned_docs/version-2.7/.gitignore +1 -0
  59. apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/code/01_introduction.py +17 -0
  60. apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/code/actor_structure/__init__.py +0 -0
  61. apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/code/actor_structure/__main__.py +6 -0
  62. apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/code/actor_structure/main.py +8 -0
  63. apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/code/actor_structure/py.typed +0 -0
  64. apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/index.mdx +45 -0
  65. apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/quick-start.mdx +124 -0
  66. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/01_beautifulsoup_httpx.mdx +30 -0
  67. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/02_crawlee.mdx +37 -0
  68. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/03_playwright.mdx +56 -0
  69. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/04_selenium.mdx +46 -0
  70. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/05_scrapy.mdx +114 -0
  71. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/01_beautifulsoup_httpx.py +85 -0
  72. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/02_crawlee_beautifulsoup.py +55 -0
  73. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/02_crawlee_playwright.py +68 -0
  74. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/03_playwright.py +94 -0
  75. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/04_selenium.py +104 -0
  76. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/__init__.py +0 -0
  77. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/__main__.py +22 -0
  78. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/items.py +10 -0
  79. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/main.py +32 -0
  80. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/py.typed +0 -0
  81. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/settings.py +11 -0
  82. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/spiders/__init__.py +3 -0
  83. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/spiders/py.typed +0 -0
  84. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/spiders/title.py +68 -0
  85. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/01_actor_lifecycle.mdx +55 -0
  86. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/02_actor_input.mdx +18 -0
  87. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/03_storages.mdx +173 -0
  88. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/04_actor_events.mdx +81 -0
  89. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/05_proxy_management.mdx +108 -0
  90. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/06_interacting_with_other_actors.mdx +51 -0
  91. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/07_webhooks.mdx +31 -0
  92. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/08_access_apify_api.mdx +31 -0
  93. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/09_running_webserver.mdx +26 -0
  94. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/10_logging.mdx +84 -0
  95. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/11_configuration.mdx +34 -0
  96. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/12_pay_per_event.mdx +46 -0
  97. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/01_context_manager.py +9 -0
  98. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/01_init_exit.py +16 -0
  99. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/01_reboot.py +7 -0
  100. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/01_status_message.py +14 -0
  101. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/02_input.py +9 -0
  102. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_dataset_exports.py +31 -0
  103. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_dataset_read_write.py +16 -0
  104. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_deleting_storages.py +13 -0
  105. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_kvs_iterating.py +18 -0
  106. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_kvs_public_url.py +11 -0
  107. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_kvs_read_write.py +25 -0
  108. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_opening_storages.py +16 -0
  109. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_rq.py +53 -0
  110. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/04_actor_events.py +38 -0
  111. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_apify_proxy.py +12 -0
  112. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_apify_proxy_config.py +15 -0
  113. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_custom_proxy.py +17 -0
  114. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_custom_proxy_function.py +28 -0
  115. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_proxy_actor_input.py +16 -0
  116. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_proxy_httpx.py +22 -0
  117. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_proxy_rotation.py +31 -0
  118. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/06_interacting_call.py +22 -0
  119. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/06_interacting_call_task.py +19 -0
  120. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/06_interacting_metamorph.py +24 -0
  121. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/06_interacting_start.py +13 -0
  122. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/07_webhook.py +16 -0
  123. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/07_webhook_preventing.py +17 -0
  124. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/08_actor_client.py +11 -0
  125. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/08_actor_new_client.py +14 -0
  126. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/09_webserver.py +49 -0
  127. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/10_log_config.py +12 -0
  128. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/10_logger_usage.py +23 -0
  129. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/11_config.py +16 -0
  130. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/actor_charge.py +30 -0
  131. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/conditional_actor_charge.py +18 -0
  132. apify-3.3.2/website/versioned_docs/version-2.7/04_upgrading/upgrading_to_v2.md +48 -0
  133. apify-3.3.2/website/versioned_docs/version-2.7/api-packages.json +1 -0
  134. apify-3.3.2/website/versioned_docs/version-2.7/api-typedoc.json +6951 -0
  135. apify-3.3.2/website/versioned_docs/version-3.3/.gitignore +1 -0
  136. apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/code/01_introduction.py +24 -0
  137. apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/code/actor_structure/__init__.py +0 -0
  138. apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/code/actor_structure/__main__.py +6 -0
  139. apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/code/actor_structure/main.py +8 -0
  140. apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/code/actor_structure/py.typed +0 -0
  141. apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/images/apify-create.gif +0 -0
  142. apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/index.mdx +48 -0
  143. apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/quick-start.mdx +116 -0
  144. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/01_actor_lifecycle.mdx +101 -0
  145. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/02_actor_input.mdx +18 -0
  146. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/03_storages.mdx +173 -0
  147. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/04_actor_events.mdx +81 -0
  148. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/05_proxy_management.mdx +108 -0
  149. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/06_interacting_with_other_actors.mdx +51 -0
  150. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/07_webhooks.mdx +31 -0
  151. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/08_access_apify_api.mdx +31 -0
  152. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/09_logging.mdx +114 -0
  153. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/10_configuration.mdx +34 -0
  154. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/11_pay_per_event.mdx +69 -0
  155. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_class_context.py +21 -0
  156. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_class_manual.py +26 -0
  157. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_context_manager.py +15 -0
  158. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_error_handling_context.py +13 -0
  159. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_error_handling_manual.py +33 -0
  160. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_init_exit.py +22 -0
  161. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_instance_context.py +27 -0
  162. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_instance_manual.py +32 -0
  163. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_reboot.py +23 -0
  164. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_status_message.py +24 -0
  165. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/02_input.py +15 -0
  166. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_dataset_exports.py +37 -0
  167. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_dataset_read_write.py +22 -0
  168. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_deleting_storages.py +19 -0
  169. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_kvs_iterating.py +24 -0
  170. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_kvs_public_url.py +17 -0
  171. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_kvs_read_write.py +31 -0
  172. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_opening_storages.py +22 -0
  173. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_rq.py +54 -0
  174. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/04_actor_events.py +42 -0
  175. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_apify_proxy.py +18 -0
  176. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_apify_proxy_config.py +21 -0
  177. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_custom_proxy.py +23 -0
  178. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_custom_proxy_function.py +34 -0
  179. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_proxy_actor_input.py +22 -0
  180. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_proxy_httpx.py +28 -0
  181. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_proxy_rotation.py +29 -0
  182. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/06_interacting_call.py +32 -0
  183. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/06_interacting_call_task.py +25 -0
  184. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/06_interacting_metamorph.py +30 -0
  185. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/06_interacting_start.py +19 -0
  186. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/07_webhook.py +22 -0
  187. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/07_webhook_preventing.py +22 -0
  188. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/08_actor_client.py +17 -0
  189. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/08_actor_new_client.py +20 -0
  190. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/09_log_config.py +17 -0
  191. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/09_logger_usage.py +28 -0
  192. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/09_redirect_log.py +21 -0
  193. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/09_redirect_log_existing_run.py +28 -0
  194. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/10_config.py +23 -0
  195. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/11_actor_charge.py +36 -0
  196. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/11_charge_limit_check.py +29 -0
  197. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/11_conditional_actor_charge.py +24 -0
  198. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/01_beautifulsoup_httpx.mdx +30 -0
  199. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/02_parsel_impit.mdx +28 -0
  200. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/03_playwright.mdx +57 -0
  201. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/04_selenium.mdx +46 -0
  202. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/05_crawlee.mdx +46 -0
  203. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/06_scrapy.mdx +114 -0
  204. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/07_running_webserver.mdx +26 -0
  205. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/01_beautifulsoup_httpx.py +88 -0
  206. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/02_parsel_impit.py +94 -0
  207. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/03_playwright.py +97 -0
  208. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/04_selenium.py +106 -0
  209. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/05_crawlee_beautifulsoup.py +55 -0
  210. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/05_crawlee_parsel.py +55 -0
  211. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/05_crawlee_playwright.py +58 -0
  212. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/07_webserver.py +53 -0
  213. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/__init__.py +0 -0
  214. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/__main__.py +16 -0
  215. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/items.py +10 -0
  216. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/main.py +36 -0
  217. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/py.typed +0 -0
  218. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/settings.py +11 -0
  219. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/spiders/__init__.py +3 -0
  220. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/spiders/py.typed +0 -0
  221. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/spiders/title.py +68 -0
  222. apify-3.3.2/website/versioned_docs/version-3.3/04_upgrading/upgrading_to_v2.md +48 -0
  223. apify-3.3.2/website/versioned_docs/version-3.3/04_upgrading/upgrading_to_v3.md +159 -0
  224. apify-3.3.2/website/versioned_docs/version-3.3/api-packages.json +1 -0
  225. apify-3.3.2/website/versioned_docs/version-3.3/api-typedoc.json +76320 -0
  226. apify-3.3.2/website/versioned_sidebars/version-1.7-sidebars.json +38 -0
  227. apify-3.3.2/website/versioned_sidebars/version-2.7-sidebars.json +49 -0
  228. apify-3.3.2/website/versioned_sidebars/version-3.3-sidebars.json +49 -0
  229. apify-3.3.2/website/versions.json +5 -0
  230. {apify-3.3.1b5 → apify-3.3.2}/website/yarn.lock +1108 -896
  231. apify-3.3.1b5/tests/e2e/test_actor_charge.py +0 -116
  232. {apify-3.3.1b5 → apify-3.3.2}/.editorconfig +0 -0
  233. {apify-3.3.1b5 → apify-3.3.2}/.github/CODEOWNERS +0 -0
  234. {apify-3.3.1b5 → apify-3.3.2}/.gitignore +0 -0
  235. {apify-3.3.1b5 → apify-3.3.2}/.markdownlint.yaml +0 -0
  236. {apify-3.3.1b5 → apify-3.3.2}/.pre-commit-config.yaml +0 -0
  237. {apify-3.3.1b5 → apify-3.3.2}/.rules.md +0 -0
  238. {apify-3.3.1b5 → apify-3.3.2}/AGENTS.md +0 -0
  239. {apify-3.3.1b5 → apify-3.3.2}/CLAUDE.md +0 -0
  240. {apify-3.3.1b5 → apify-3.3.2}/CONTRIBUTING.md +0 -0
  241. {apify-3.3.1b5 → apify-3.3.2}/GEMINI.md +0 -0
  242. {apify-3.3.1b5 → apify-3.3.2}/LICENSE +0 -0
  243. {apify-3.3.1b5 → apify-3.3.2}/README.md +0 -0
  244. {apify-3.3.1b5 → apify-3.3.2}/codecov.yaml +0 -0
  245. {apify-3.3.1b5 → apify-3.3.2}/docs/01_introduction/code/01_introduction.py +0 -0
  246. {apify-3.3.1b5 → apify-3.3.2}/docs/01_introduction/code/actor_structure/__init__.py +0 -0
  247. {apify-3.3.1b5 → apify-3.3.2}/docs/01_introduction/code/actor_structure/__main__.py +0 -0
  248. {apify-3.3.1b5 → apify-3.3.2}/docs/01_introduction/code/actor_structure/main.py +0 -0
  249. {apify-3.3.1b5 → apify-3.3.2}/docs/01_introduction/code/actor_structure/py.typed +0 -0
  250. {apify-3.3.1b5 → apify-3.3.2}/docs/01_introduction/images/apify-create.gif +0 -0
  251. {apify-3.3.1b5 → apify-3.3.2}/docs/01_introduction/index.mdx +0 -0
  252. {apify-3.3.1b5 → apify-3.3.2}/docs/01_introduction/quick-start.mdx +0 -0
  253. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/01_actor_lifecycle.mdx +0 -0
  254. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/02_actor_input.mdx +0 -0
  255. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/03_storages.mdx +0 -0
  256. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/04_actor_events.mdx +0 -0
  257. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/05_proxy_management.mdx +0 -0
  258. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/06_interacting_with_other_actors.mdx +0 -0
  259. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/07_webhooks.mdx +0 -0
  260. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/08_access_apify_api.mdx +0 -0
  261. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/09_logging.mdx +0 -0
  262. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/10_configuration.mdx +0 -0
  263. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/11_pay_per_event.mdx +0 -0
  264. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_class_context.py +0 -0
  265. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_class_manual.py +0 -0
  266. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_context_manager.py +0 -0
  267. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_error_handling_context.py +0 -0
  268. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_error_handling_manual.py +0 -0
  269. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_init_exit.py +0 -0
  270. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_instance_context.py +0 -0
  271. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_instance_manual.py +0 -0
  272. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_reboot.py +0 -0
  273. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_status_message.py +0 -0
  274. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/02_input.py +0 -0
  275. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/03_dataset_exports.py +0 -0
  276. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/03_dataset_read_write.py +0 -0
  277. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/03_deleting_storages.py +0 -0
  278. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/03_kvs_iterating.py +0 -0
  279. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/03_kvs_public_url.py +0 -0
  280. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/03_kvs_read_write.py +0 -0
  281. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/03_opening_storages.py +0 -0
  282. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/03_rq.py +0 -0
  283. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/04_actor_events.py +0 -0
  284. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/05_apify_proxy.py +0 -0
  285. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/05_apify_proxy_config.py +0 -0
  286. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/05_custom_proxy.py +0 -0
  287. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/05_custom_proxy_function.py +0 -0
  288. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/05_proxy_actor_input.py +0 -0
  289. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/05_proxy_httpx.py +0 -0
  290. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/05_proxy_rotation.py +0 -0
  291. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/06_interacting_call.py +0 -0
  292. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/06_interacting_call_task.py +0 -0
  293. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/06_interacting_metamorph.py +0 -0
  294. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/06_interacting_start.py +0 -0
  295. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/07_webhook.py +0 -0
  296. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/07_webhook_preventing.py +0 -0
  297. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/08_actor_client.py +0 -0
  298. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/08_actor_new_client.py +0 -0
  299. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/09_log_config.py +0 -0
  300. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/09_logger_usage.py +0 -0
  301. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/09_redirect_log.py +0 -0
  302. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/09_redirect_log_existing_run.py +0 -0
  303. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/10_config.py +0 -0
  304. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/11_actor_charge.py +0 -0
  305. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/11_charge_limit_check.py +0 -0
  306. {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/11_conditional_actor_charge.py +0 -0
  307. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/01_beautifulsoup_httpx.mdx +0 -0
  308. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/02_parsel_impit.mdx +0 -0
  309. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/03_playwright.mdx +0 -0
  310. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/04_selenium.mdx +0 -0
  311. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/05_crawlee.mdx +0 -0
  312. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/06_scrapy.mdx +0 -0
  313. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/07_running_webserver.mdx +0 -0
  314. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/01_beautifulsoup_httpx.py +0 -0
  315. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/02_parsel_impit.py +0 -0
  316. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/03_playwright.py +0 -0
  317. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/04_selenium.py +0 -0
  318. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/05_crawlee_beautifulsoup.py +0 -0
  319. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/05_crawlee_parsel.py +0 -0
  320. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/05_crawlee_playwright.py +0 -0
  321. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/07_webserver.py +0 -0
  322. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/__init__.py +0 -0
  323. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/__main__.py +0 -0
  324. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/items.py +0 -0
  325. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/main.py +0 -0
  326. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/py.typed +0 -0
  327. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/settings.py +0 -0
  328. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/spiders/__init__.py +0 -0
  329. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/spiders/py.typed +0 -0
  330. {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/spiders/title.py +0 -0
  331. {apify-3.3.1b5 → apify-3.3.2}/docs/04_upgrading/upgrading_to_v2.md +0 -0
  332. {apify-3.3.1b5 → apify-3.3.2}/docs/04_upgrading/upgrading_to_v3.md +0 -0
  333. {apify-3.3.1b5 → apify-3.3.2}/docs/pyproject.toml +0 -0
  334. {apify-3.3.1b5 → apify-3.3.2}/renovate.json +0 -0
  335. {apify-3.3.1b5 → apify-3.3.2}/src/apify/__init__.py +0 -0
  336. {apify-3.3.1b5 → apify-3.3.2}/src/apify/_configuration.py +0 -0
  337. {apify-3.3.1b5 → apify-3.3.2}/src/apify/_consts.py +0 -0
  338. {apify-3.3.1b5 → apify-3.3.2}/src/apify/_crypto.py +0 -0
  339. {apify-3.3.1b5 → apify-3.3.2}/src/apify/_models.py +0 -0
  340. {apify-3.3.1b5 → apify-3.3.2}/src/apify/_proxy_configuration.py +0 -0
  341. {apify-3.3.1b5 → apify-3.3.2}/src/apify/events/__init__.py +0 -0
  342. {apify-3.3.1b5 → apify-3.3.2}/src/apify/events/_apify_event_manager.py +0 -0
  343. {apify-3.3.1b5 → apify-3.3.2}/src/apify/events/_types.py +0 -0
  344. {apify-3.3.1b5 → apify-3.3.2}/src/apify/events/py.typed +0 -0
  345. {apify-3.3.1b5 → apify-3.3.2}/src/apify/log.py +0 -0
  346. {apify-3.3.1b5 → apify-3.3.2}/src/apify/py.typed +0 -0
  347. {apify-3.3.1b5 → apify-3.3.2}/src/apify/request_loaders/__init__.py +0 -0
  348. {apify-3.3.1b5 → apify-3.3.2}/src/apify/request_loaders/_apify_request_list.py +0 -0
  349. {apify-3.3.1b5 → apify-3.3.2}/src/apify/request_loaders/py.typed +0 -0
  350. {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/__init__.py +0 -0
  351. {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/_actor_runner.py +0 -0
  352. {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/_async_thread.py +0 -0
  353. {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/_logging_config.py +0 -0
  354. {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/extensions/__init__.py +0 -0
  355. {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/extensions/_httpcache.py +0 -0
  356. {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/middlewares/__init__.py +0 -0
  357. {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/middlewares/apify_proxy.py +0 -0
  358. {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/middlewares/py.typed +0 -0
  359. {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/pipelines/__init__.py +0 -0
  360. {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/pipelines/actor_dataset_push.py +0 -0
  361. {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/pipelines/py.typed +0 -0
  362. {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/py.typed +0 -0
  363. {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/scheduler.py +0 -0
  364. {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/utils.py +0 -0
  365. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/__init__.py +0 -0
  366. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/__init__.py +0 -0
  367. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_key_value_store_client.py +0 -0
  368. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_models.py +0 -0
  369. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_request_queue_client.py +0 -0
  370. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_request_queue_shared_client.py +0 -0
  371. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_request_queue_single_client.py +0 -0
  372. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_storage_client.py +0 -0
  373. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_utils.py +0 -0
  374. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/py.typed +0 -0
  375. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_file_system/__init__.py +0 -0
  376. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_file_system/_key_value_store_client.py +0 -0
  377. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_smart_apify/__init__.py +0 -0
  378. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_smart_apify/_storage_client.py +0 -0
  379. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/py.typed +0 -0
  380. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storages/__init__.py +0 -0
  381. {apify-3.3.1b5 → apify-3.3.2}/src/apify/storages/py.typed +0 -0
  382. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/README.md +0 -0
  383. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/__init__.py +0 -0
  384. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/_utils.py +0 -0
  385. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/actor_source_base/Dockerfile +0 -0
  386. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/actor_source_base/requirements.txt +0 -0
  387. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/actor_source_base/server.py +0 -0
  388. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/actor_source_base/src/__init__.py +0 -0
  389. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/actor_source_base/src/__main__.py +0 -0
  390. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/actor_source_base/src/main.py +0 -0
  391. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/conftest.py +0 -0
  392. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_api_helpers.py +0 -0
  393. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_call_timeouts.py +0 -0
  394. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_create_proxy_configuration.py +0 -0
  395. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_dataset.py +0 -0
  396. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_events.py +0 -0
  397. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_key_value_store.py +0 -0
  398. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_lifecycle.py +0 -0
  399. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_log.py +0 -0
  400. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_request_queue.py +0 -0
  401. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_scrapy.py +0 -0
  402. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_apify_storages.py +0 -0
  403. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/__init__.py +0 -0
  404. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_adaptive_playwright_crawler.py +0 -0
  405. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_basic_crawler.py +0 -0
  406. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_beautifulsoup_crawler.py +0 -0
  407. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_http_crawler.py +0 -0
  408. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_parsel_crawler.py +0 -0
  409. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_playwright_crawler.py +0 -0
  410. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/playwright.Dockerfile +0 -0
  411. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/conftest.py +0 -0
  412. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/test_adaptive_playwright_crawler.py +0 -0
  413. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/test_basic_crawler.py +0 -0
  414. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/test_beautifulsoup_crawler.py +0 -0
  415. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/test_http_crawler.py +0 -0
  416. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/test_parsel_crawler.py +0 -0
  417. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/test_playwright_crawler.py +0 -0
  418. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_fixtures.py +0 -0
  419. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_schema_storages/__init__.py +0 -0
  420. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_schema_storages/actor_source/actor.json +0 -0
  421. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_schema_storages/test_schema_storages.py +0 -0
  422. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/__init__.py +0 -0
  423. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/__init__.py +0 -0
  424. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/__main__.py +0 -0
  425. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/items.py +0 -0
  426. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/main.py +0 -0
  427. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/main_custom_pipeline.py +0 -0
  428. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/pipelines.py +0 -0
  429. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/settings.py +0 -0
  430. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/settings_custom_pipeline.py +0 -0
  431. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/spider_basic.py +0 -0
  432. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/spider_cb_kwargs.py +0 -0
  433. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/spider_crawl.py +0 -0
  434. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/spider_custom_pipeline.py +0 -0
  435. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/spider_itemloader.py +0 -0
  436. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/conftest.py +0 -0
  437. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/test_basic_spider.py +0 -0
  438. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/test_cb_kwargs_spider.py +0 -0
  439. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/test_crawl_spider.py +0 -0
  440. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/test_custom_pipeline_spider.py +0 -0
  441. {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/test_itemloader_spider.py +0 -0
  442. {apify-3.3.1b5 → apify-3.3.2}/tests/integration/README.md +0 -0
  443. {apify-3.3.1b5 → apify-3.3.2}/tests/integration/__init__.py +0 -0
  444. {apify-3.3.1b5 → apify-3.3.2}/tests/integration/conftest.py +0 -0
  445. {apify-3.3.1b5 → apify-3.3.2}/tests/integration/test_dataset.py +0 -0
  446. {apify-3.3.1b5 → apify-3.3.2}/tests/integration/test_key_value_store.py +0 -0
  447. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/README.md +0 -0
  448. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/__init__.py +0 -0
  449. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/__init__.py +0 -0
  450. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_create_proxy_configuration.py +0 -0
  451. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_dataset.py +0 -0
  452. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_env_helpers.py +0 -0
  453. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_key_value_store.py +0 -0
  454. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_lifecycle.py +0 -0
  455. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_log.py +0 -0
  456. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_non_default_instance.py +0 -0
  457. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_request_queue.py +0 -0
  458. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_configuration.py +0 -0
  459. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_request_list.py +0 -0
  460. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/conftest.py +0 -0
  461. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/events/__init__.py +0 -0
  462. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/events/test_apify_event_manager.py +0 -0
  463. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/__init__.py +0 -0
  464. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/extensions/__init__.py +0 -0
  465. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/extensions/test_httpcache.py +0 -0
  466. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/middlewares/__init__.py +0 -0
  467. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/middlewares/test_apify_proxy.py +0 -0
  468. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/pipelines/__init__.py +0 -0
  469. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/pipelines/test_actor_dataset_push.py +0 -0
  470. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/requests/__init__.py +0 -0
  471. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/requests/test_to_scrapy_request.py +0 -0
  472. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/utils/__init__.py +0 -0
  473. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/utils/test_apply_apify_settings.py +0 -0
  474. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/utils/test_get_basic_auth_header.py +0 -0
  475. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/storage_clients/__init__.py +0 -0
  476. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/storage_clients/test_alias_resolver.py +0 -0
  477. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/storage_clients/test_api_client_creation.py +0 -0
  478. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/storage_clients/test_apify_dataset_client.py +0 -0
  479. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/storage_clients/test_apify_kvs_client.py +0 -0
  480. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/storage_clients/test_apify_request_queue_client.py +0 -0
  481. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/storage_clients/test_file_system.py +0 -0
  482. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/storage_clients/test_smart_apify_storage_client.py +0 -0
  483. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/test_apify_storages.py +0 -0
  484. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/test_crypto.py +0 -0
  485. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/test_log.py +0 -0
  486. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/test_proxy_configuration.py +0 -0
  487. {apify-3.3.1b5 → apify-3.3.2}/tests/unit/test_utils.py +0 -0
  488. {apify-3.3.1b5 → apify-3.3.2}/typos.toml +0 -0
  489. {apify-3.3.1b5 → apify-3.3.2}/website/.eslintrc.json +0 -0
  490. {apify-3.3.1b5 → apify-3.3.2}/website/.yarnrc.yml +0 -0
  491. {apify-3.3.1b5 → apify-3.3.2}/website/babel.config.js +0 -0
  492. {apify-3.3.1b5 → apify-3.3.2}/website/build_api_reference.sh +0 -0
  493. {apify-3.3.1b5 → apify-3.3.2}/website/generate_module_shortcuts.py +0 -0
  494. {apify-3.3.1b5 → apify-3.3.2}/website/roa-loader/index.js +0 -0
  495. {apify-3.3.1b5 → apify-3.3.2}/website/roa-loader/package.json +0 -0
  496. {apify-3.3.1b5 → apify-3.3.2}/website/sidebars.js +0 -0
  497. {apify-3.3.1b5 → apify-3.3.2}/website/src/components/ApiLink.jsx +0 -0
  498. {apify-3.3.1b5 → apify-3.3.2}/website/src/components/Gradients.jsx +0 -0
  499. {apify-3.3.1b5 → apify-3.3.2}/website/src/components/Highlights.jsx +0 -0
  500. {apify-3.3.1b5 → apify-3.3.2}/website/src/components/Highlights.module.css +0 -0
  501. {apify-3.3.1b5 → apify-3.3.2}/website/src/components/RunnableCodeBlock.jsx +0 -0
  502. {apify-3.3.1b5 → apify-3.3.2}/website/src/components/RunnableCodeBlock.module.css +0 -0
  503. {apify-3.3.1b5 → apify-3.3.2}/website/src/css/custom.css +0 -0
  504. {apify-3.3.1b5 → apify-3.3.2}/website/src/pages/index.js +0 -0
  505. {apify-3.3.1b5 → apify-3.3.2}/website/src/plugins/docusaurus-plugin-segment/index.js +0 -0
  506. {apify-3.3.1b5 → apify-3.3.2}/website/src/plugins/docusaurus-plugin-segment/segment.js +0 -0
  507. {apify-3.3.1b5 → apify-3.3.2}/website/src/theme/DocItem/Content/index.js +0 -0
  508. {apify-3.3.1b5 → apify-3.3.2}/website/static/.nojekyll +0 -0
  509. {apify-3.3.1b5 → apify-3.3.2}/website/static/img/docs-og.png +0 -0
  510. {apify-3.3.1b5 → apify-3.3.2}/website/static/img/guides/redirected_logs_example.webp +0 -0
  511. {apify-3.3.1b5 → apify-3.3.2}/website/tools/docs-prettier.config.js +0 -0
  512. {apify-3.3.1b5 → apify-3.3.2}/website/tools/utils/externalLink.js +0 -0
@@ -7,6 +7,9 @@ on:
7
7
  # Runs when invoked by another workflow.
8
8
  workflow_call:
9
9
 
10
+ permissions:
11
+ contents: read
12
+
10
13
  jobs:
11
14
  actions_lint_check:
12
15
  name: Actions lint check
@@ -7,6 +7,9 @@ on:
7
7
  # Runs when invoked by another workflow.
8
8
  workflow_call:
9
9
 
10
+ permissions:
11
+ contents: read
12
+
10
13
  jobs:
11
14
  doc_checks:
12
15
  name: Doc checks
@@ -11,6 +11,9 @@ on:
11
11
  required: true
12
12
  type: string
13
13
 
14
+ permissions:
15
+ contents: read
16
+
14
17
  env:
15
18
  NODE_VERSION: 22
16
19
  PYTHON_VERSION: 3.14
@@ -79,7 +82,7 @@ jobs:
79
82
  path: ./website/build
80
83
 
81
84
  - name: Deploy artifact to GitHub Pages
82
- uses: actions/deploy-pages@v4
85
+ uses: actions/deploy-pages@v5
83
86
 
84
87
  - name: Invalidate CloudFront cache
85
88
  run: |
@@ -7,6 +7,9 @@ on:
7
7
  # Runs when invoked by another workflow.
8
8
  workflow_call:
9
9
 
10
+ permissions:
11
+ contents: read
12
+
10
13
  jobs:
11
14
  unit_tests:
12
15
  name: Unit tests
@@ -68,7 +71,7 @@ jobs:
68
71
  matrix.python-version == '3.14' &&
69
72
  env.CODECOV_TOKEN != ''
70
73
  }}
71
- uses: codecov/codecov-action@v5
74
+ uses: codecov/codecov-action@v6
72
75
  env:
73
76
  CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
74
77
  with:
@@ -125,7 +128,7 @@ jobs:
125
128
  matrix.python-version == '3.14' &&
126
129
  env.CODECOV_TOKEN != ''
127
130
  }}
128
- uses: codecov/codecov-action@v5
131
+ uses: codecov/codecov-action@v6
129
132
  env:
130
133
  CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
131
134
  with:
@@ -25,6 +25,9 @@ concurrency:
25
25
  group: release
26
26
  cancel-in-progress: false
27
27
 
28
+ permissions:
29
+ contents: read
30
+
28
31
  jobs:
29
32
  code_checks:
30
33
  name: Code checks
@@ -51,6 +54,8 @@ jobs:
51
54
  changelog_update:
52
55
  name: Changelog update
53
56
  needs: [release_prepare]
57
+ permissions:
58
+ contents: write
54
59
  uses: apify/workflows/.github/workflows/python_bump_and_update_changelog.yaml@main
55
60
  with:
56
61
  version_number: ${{ needs.release_prepare.outputs.version_number }}
@@ -61,6 +66,8 @@ jobs:
61
66
  name: GitHub release
62
67
  needs: [release_prepare, changelog_update]
63
68
  runs-on: ubuntu-latest
69
+ permissions:
70
+ contents: write
64
71
  env:
65
72
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
66
73
  steps:
@@ -95,13 +102,83 @@ jobs:
95
102
  - name: Publish package to PyPI
96
103
  uses: pypa/gh-action-pypi-publish@release/v1
97
104
 
105
+ version_docs:
106
+ name: Version docs
107
+ needs: [release_prepare, changelog_update, pypi_publish]
108
+ runs-on: ubuntu-latest
109
+ outputs:
110
+ version_docs_commitish: ${{ steps.commit_versioned_docs.outputs.commit_long_sha }}
111
+ permissions:
112
+ contents: write
113
+ env:
114
+ NODE_VERSION: 22
115
+ PYTHON_VERSION: 3.14
116
+
117
+ steps:
118
+ - name: Checkout repository
119
+ uses: actions/checkout@v6
120
+ with:
121
+ token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}
122
+ ref: ${{ needs.changelog_update.outputs.changelog_commitish }}
123
+
124
+ - name: Set up Node
125
+ uses: actions/setup-node@v6
126
+ with:
127
+ node-version: ${{ env.NODE_VERSION }}
128
+
129
+ - name: Set up Python
130
+ uses: actions/setup-python@v6
131
+ with:
132
+ python-version: ${{ env.PYTHON_VERSION }}
133
+
134
+ - name: Set up uv package manager
135
+ uses: astral-sh/setup-uv@v7
136
+ with:
137
+ python-version: ${{ env.PYTHON_VERSION }}
138
+
139
+ - name: Install Python dependencies
140
+ run: uv run poe install-dev
141
+
142
+ - name: Install website dependencies
143
+ run: |
144
+ cd website
145
+ corepack enable
146
+ yarn install
147
+
148
+ - name: Snapshot the current version
149
+ run: |
150
+ cd website
151
+ VERSION="$(python -c "import tomllib, pathlib; print(tomllib.loads(pathlib.Path('../pyproject.toml').read_text())['project']['version'])")"
152
+ MAJOR_MINOR="$(echo "$VERSION" | cut -d. -f1-2)"
153
+ export MAJOR_MINOR
154
+ # Remove existing version if present (patch releases override)
155
+ rm -rf "versioned_docs/version-${MAJOR_MINOR}"
156
+ rm -rf "versioned_sidebars/version-${MAJOR_MINOR}-sidebars.json"
157
+ jq 'map(select(. != env.MAJOR_MINOR))' versions.json > tmp.json && mv tmp.json versions.json
158
+ # Build API reference and create version snapshots
159
+ bash build_api_reference.sh
160
+ npx docusaurus docs:version "$MAJOR_MINOR"
161
+ npx docusaurus api:version "$MAJOR_MINOR"
162
+
163
+ - name: Commit and push versioned docs
164
+ id: commit_versioned_docs
165
+ uses: EndBug/add-and-commit@v10
166
+ with:
167
+ add: "website/versioned_docs website/versioned_sidebars website/versions.json"
168
+ message: "docs: version ${{ needs.release_prepare.outputs.version_number }} docs [skip ci]"
169
+ default_author: github_actions
170
+
98
171
  doc_release:
99
172
  name: Doc release
100
- needs: [changelog_update, pypi_publish]
173
+ needs: [changelog_update, pypi_publish, version_docs]
174
+ permissions:
175
+ contents: write
176
+ pages: write
177
+ id-token: write
101
178
  uses: ./.github/workflows/_release_docs.yaml
102
179
  with:
103
- # Use the ref from the changelog update to include the updated changelog.
104
- ref: ${{ needs.changelog_update.outputs.changelog_commitish }}
180
+ # Use the version_docs commit to include both changelog and versioned docs.
181
+ ref: ${{ needs.version_docs.outputs.version_docs_commitish }}
105
182
  secrets: inherit
106
183
 
107
184
  trigger_docker_build:
@@ -6,6 +6,9 @@ on:
6
6
  types:
7
7
  - opened
8
8
 
9
+ permissions:
10
+ contents: read
11
+
9
12
  jobs:
10
13
  label_issues:
11
14
  name: Add labels
@@ -11,6 +11,9 @@ concurrency:
11
11
  group: release
12
12
  cancel-in-progress: false
13
13
 
14
+ permissions:
15
+ contents: read
16
+
14
17
  jobs:
15
18
  doc_checks:
16
19
  name: Doc checks
@@ -21,6 +24,10 @@ jobs:
21
24
  if: startsWith(github.event.head_commit.message, 'docs')
22
25
  name: Doc release
23
26
  needs: [doc_checks]
27
+ permissions:
28
+ contents: write
29
+ pages: write
30
+ id-token: write
24
31
  uses: ./.github/workflows/_release_docs.yaml
25
32
  with:
26
33
  # Use the same ref as the one that triggered the workflow.
@@ -64,6 +71,8 @@ jobs:
64
71
  changelog_update:
65
72
  name: Changelog update
66
73
  needs: [release_prepare]
74
+ permissions:
75
+ contents: write
67
76
  uses: apify/workflows/.github/workflows/python_bump_and_update_changelog.yaml@main
68
77
  with:
69
78
  version_number: ${{ needs.release_prepare.outputs.version_number }}
@@ -95,6 +104,10 @@ jobs:
95
104
  doc_release_post_publish:
96
105
  name: Doc release post publish
97
106
  needs: [changelog_update, pypi_publish]
107
+ permissions:
108
+ contents: write
109
+ pages: write
110
+ id-token: write
98
111
  uses: ./.github/workflows/_release_docs.yaml
99
112
  with:
100
113
  # Use the ref from the changelog update to include the updated changelog.
@@ -4,6 +4,10 @@ on:
4
4
  # Runs whenever a pull request is opened or updated.
5
5
  pull_request:
6
6
 
7
+ permissions:
8
+ contents: read
9
+ pull-requests: read
10
+
7
11
  jobs:
8
12
  pr_title_check:
9
13
  name: PR title check
@@ -2,8 +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
- ## 3.3.1 - **not yet released**
5
+ ## [3.3.2](https://github.com/apify/apify-sdk-python/releases/tag/v3.3.2) (2026-03-27)
6
+
7
+ ### 🐛 Bug Fixes
8
+
9
+ - **scrapy:** Resolve Crawlee&#x27;s request data round-trip failure in request conversion ([#832](https://github.com/apify/apify-sdk-python/pull/832)) ([3b9d588](https://github.com/apify/apify-sdk-python/commit/3b9d5888611597a522300c742014c06cc0b857b9)) by [@vdusek](https://github.com/vdusek)
10
+ - Treat `default` alias as default storage when in schema ([#827](https://github.com/apify/apify-sdk-python/pull/827)) ([1610d0d](https://github.com/apify/apify-sdk-python/commit/1610d0dda40ba30bd3b4dea28d9fef04c9b7c839)) by [@Pijukatel](https://github.com/Pijukatel)
11
+ - Guard ReentrantLock against None task context ([#841](https://github.com/apify/apify-sdk-python/pull/841)) ([193de10](https://github.com/apify/apify-sdk-python/commit/193de10910946ca0ce93bc2fc7c741a26e9f6e9c)) by [@vdusek](https://github.com/vdusek)
12
+ - Isolate cleanup steps in Actor `__aexit__` to prevent cascading failures ([#842](https://github.com/apify/apify-sdk-python/pull/842)) ([68c2acf](https://github.com/apify/apify-sdk-python/commit/68c2acf3dba71b78f893fc6f1e816e3a3148f0c9)) by [@vdusek](https://github.com/vdusek)
13
+ - Handle exceptions in pre-reboot event listeners via `return_exceptions` ([#843](https://github.com/apify/apify-sdk-python/pull/843)) ([ed13597](https://github.com/apify/apify-sdk-python/commit/ed13597d7ce0d1f0c5ff5cd0d6796c96555a55ae)) by [@vdusek](https://github.com/vdusek)
14
+
15
+
16
+ ## [3.3.1](https://github.com/apify/apify-sdk-python/releases/tag/v3.3.1) (2026-03-11)
7
17
 
8
18
  ### 🐛 Bug Fixes
9
19
 
@@ -11,9 +21,9 @@ All notable changes to this project will be documented in this file.
11
21
  - Fix BeforeValidator treating 0 as falsy in configuration fields ([#819](https://github.com/apify/apify-sdk-python/pull/819)) ([72efe88](https://github.com/apify/apify-sdk-python/commit/72efe883574ef0d05795934337c7f1c8c0d11877)) by [@vdusek](https://github.com/vdusek)
12
22
  - Clamp negative timedelta in _get_remaining_time() ([#818](https://github.com/apify/apify-sdk-python/pull/818)) ([69b8af9](https://github.com/apify/apify-sdk-python/commit/69b8af9b8d245cfed76875f983f374e05d93bba8)) by [@vdusek](https://github.com/vdusek)
13
23
  - **scrapy:** Close AsyncThread on scheduler open() failure ([#820](https://github.com/apify/apify-sdk-python/pull/820)) ([7dfaf1a](https://github.com/apify/apify-sdk-python/commit/7dfaf1a5c5af44743bd448a91140d9b074ac44bf)) by [@vdusek](https://github.com/vdusek)
24
+ - Keep track of synthetic apify-default-dataset-item events ([#814](https://github.com/apify/apify-sdk-python/pull/814)) ([50c4b6c](https://github.com/apify/apify-sdk-python/commit/50c4b6ce80b45da5348a74c559b8790edbeae04a)) by [@Mantisus](https://github.com/Mantisus), closes [#705](https://github.com/apify/apify-sdk-python/issues/705), [#760](https://github.com/apify/apify-sdk-python/issues/760)
14
25
 
15
26
 
16
- <!-- git-cliff-unreleased-end -->
17
27
  ## [3.3.0](https://github.com/apify/apify-sdk-python/releases/tag/v3.3.0) (2026-02-25)
18
28
 
19
29
  ### 🚀 Features
@@ -130,11 +140,11 @@ All notable changes to this project will be documented in this file.
130
140
  - Use same `client_key` for `Actor` created `request_queue` and improve its metadata estimation ([#552](https://github.com/apify/apify-sdk-python/pull/552)) ([7e4e5da](https://github.com/apify/apify-sdk-python/commit/7e4e5da81dd87e84ebeef2bd336c6c1d422cb9a7)) by [@Pijukatel](https://github.com/Pijukatel), closes [#536](https://github.com/apify/apify-sdk-python/issues/536)
131
141
  - Properly process pre-existing Actor input file ([#591](https://github.com/apify/apify-sdk-python/pull/591)) ([cc5075f](https://github.com/apify/apify-sdk-python/commit/cc5075fab8c72ca5711cfd97932037b34e6997cd)) by [@Pijukatel](https://github.com/Pijukatel), closes [#590](https://github.com/apify/apify-sdk-python/issues/590)
132
142
 
133
- ### Chore
143
+ ### ⚙️ Miscellaneous Tasks
134
144
 
135
145
  - [**breaking**] Update apify-client and apify-shared to v2.0 ([#548](https://github.com/apify/apify-sdk-python/pull/548)) ([8ba084d](https://github.com/apify/apify-sdk-python/commit/8ba084ded6cd018111343f2219260b481c8d4e35)) by [@vdusek](https://github.com/vdusek)
136
146
 
137
- ### Refactor
147
+ ### 🚜 Refactor
138
148
 
139
149
  - [**breaking**] Adapt to the Crawlee v1.0 ([#470](https://github.com/apify/apify-sdk-python/pull/470)) ([f7e3320](https://github.com/apify/apify-sdk-python/commit/f7e33206cf3e4767faacbdc43511b45b6785f929)) by [@vdusek](https://github.com/vdusek), closes [#469](https://github.com/apify/apify-sdk-python/issues/469), [#540](https://github.com/apify/apify-sdk-python/issues/540)
140
150
  - [**breaking**] Replace `httpx` with `impit` ([#560](https://github.com/apify/apify-sdk-python/pull/560)) ([cca3869](https://github.com/apify/apify-sdk-python/commit/cca3869e85968865e56aafcdcb36fbccba27aef0)) by [@Mantisus](https://github.com/Mantisus), closes [#558](https://github.com/apify/apify-sdk-python/issues/558)
@@ -298,11 +308,11 @@ All notable changes to this project will be documented in this file.
298
308
  - Possible infinity loop in Apify-Scrapy proxy middleware ([#259](https://github.com/apify/apify-sdk-python/pull/259)) ([8647a94](https://github.com/apify/apify-sdk-python/commit/8647a94289423528f2940d9f7174f81682fbb407)) by [@vdusek](https://github.com/vdusek)
299
309
  - Hotfix for batch_add_requests batch size limit ([#261](https://github.com/apify/apify-sdk-python/pull/261)) ([61d7a39](https://github.com/apify/apify-sdk-python/commit/61d7a392d182a752c91193170dca351f4cb0fbf3)) by [@janbuchar](https://github.com/janbuchar)
300
310
 
301
- ### Refactor
311
+ ### 🚜 Refactor
302
312
 
303
313
  - [**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)
304
314
 
305
- ### Chore
315
+ ### ⚙️ Miscellaneous Tasks
306
316
 
307
317
  - [**breaking**] Drop support for Python 3.8
308
318
 
@@ -337,7 +347,7 @@ All notable changes to this project will be documented in this file.
337
347
 
338
348
  - Update of Scrapy integration, fixes in `ApifyScheduler`, `to_apify_request` and `apply_apify_settings`.
339
349
 
340
- ### Chore
350
+ ### ⚙️ Miscellaneous Tasks
341
351
 
342
352
  - Remove `ApifyRetryMiddleware` and stay with the Scrapy's default one
343
353
 
@@ -369,7 +379,7 @@ All notable changes to this project will be documented in this file.
369
379
 
370
380
  - Add missing import check to `ApifyHttpProxyMiddleware`
371
381
 
372
- ### Chore
382
+ ### ⚙️ Miscellaneous Tasks
373
383
 
374
384
  - Create a new subpackage for Scrapy pipelines
375
385
  - Remove some noqas thanks to the new Ruff release
@@ -379,7 +389,7 @@ All notable changes to this project will be documented in this file.
379
389
 
380
390
  ## [1.5.1](https://github.com/apify/apify-sdk-python/releases/tag/v1.5.1) (2024-01-10)
381
391
 
382
- ### Chore
392
+ ### ⚙️ Miscellaneous Tasks
383
393
 
384
394
  - Allowed running integration tests from PRs from forks, after maintainer approval
385
395
  - Do not close `nested_event_loop` in the `Scheduler.__del__`
@@ -398,14 +408,14 @@ All notable changes to this project will be documented in this file.
398
408
 
399
409
  - Resolve issue in `ApifyRetryMiddleware.process_exception()`, where requests were getting stuck in the request queue
400
410
 
401
- ### Chore
411
+ ### ⚙️ Miscellaneous Tasks
402
412
 
403
413
  - Fix type hint problems for resource clients
404
414
 
405
415
 
406
416
  ## [1.4.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.4.0) (2023-12-05)
407
417
 
408
- ### Chore
418
+ ### ⚙️ Miscellaneous Tasks
409
419
 
410
420
  - Migrate from Autopep8 and Flake8 to Ruff
411
421
 
@@ -423,7 +433,7 @@ All notable changes to this project will be documented in this file.
423
433
 
424
434
  - Add support for Python 3.12
425
435
 
426
- ### Chore
436
+ ### ⚙️ Miscellaneous Tasks
427
437
 
428
438
  - Fix lint error (E721) in unit tests (for instance checks use `isinstance()`)
429
439
 
@@ -434,7 +444,7 @@ All notable changes to this project will be documented in this file.
434
444
 
435
445
  - Update the Apify log formatter to contain an option for adding the logger name
436
446
 
437
- ### Chore
447
+ ### ⚙️ Miscellaneous Tasks
438
448
 
439
449
  - Rewrite documentation publication to use Docusaurus
440
450
  - Remove PR Toolkit workflow
@@ -446,7 +456,7 @@ All notable changes to this project will be documented in this file.
446
456
 
447
457
  - Resolve issue with querying request queue head multiple times in parallel
448
458
 
449
- ### Chore
459
+ ### ⚙️ Miscellaneous Tasks
450
460
 
451
461
  - Fix integration tests for Actor logger
452
462
  - Remove `pytest-randomly` Pytest plugin
@@ -455,7 +465,7 @@ All notable changes to this project will be documented in this file.
455
465
 
456
466
  ## [1.1.3](https://github.com/apify/apify-sdk-python/releases/tag/v1.1.3) (2023-08-25)
457
467
 
458
- ### Chore
468
+ ### ⚙️ Miscellaneous Tasks
459
469
 
460
470
  - Unify indentation in configuration files
461
471
  - Update the `Actor.reboot` method to use the new reboot endpoint
@@ -463,7 +473,7 @@ All notable changes to this project will be documented in this file.
463
473
 
464
474
  ## [1.1.2](https://github.com/apify/apify-sdk-python/releases/tag/v1.1.2) (2023-08-02)
465
475
 
466
- ### Chore
476
+ ### ⚙️ Miscellaneous Tasks
467
477
 
468
478
  - Start importing general constants and utilities from the `apify-shared` library
469
479
  - Simplify code via `flake8-simplify`
@@ -491,7 +501,7 @@ All notable changes to this project will be documented in this file.
491
501
  - Start enforcing local storage to always use the UTF-8 encoding
492
502
  - Fix saving key-value store values to local storage with the right extension for a given content type
493
503
 
494
- ### Chore
504
+ ### ⚙️ Miscellaneous Tasks
495
505
 
496
506
  - Switch from `setup.py` to `pyproject.toml` for specifying project setup
497
507
 
@@ -502,7 +512,7 @@ All notable changes to this project will be documented in this file.
502
512
 
503
513
  - Fix `RequestQueue` not loading requests from an existing queue properly
504
514
 
505
- ### Chore
515
+ ### ⚙️ Miscellaneous Tasks
506
516
 
507
517
  - Update to `apify-client` 1.0.0
508
518
  - Start triggering base Docker image builds when releasing a new version
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apify
3
- Version: 3.3.1b5
3
+ Version: 3.3.2
4
4
  Summary: Apify SDK for Python
5
5
  Project-URL: Apify Homepage, https://apify.com
6
6
  Project-URL: Changelog, https://docs.apify.com/sdk/python/docs/changelog
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "apify"
7
- version = "3.3.1b5"
7
+ version = "3.3.2"
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" }
@@ -99,6 +99,9 @@ allow-direct-references = true
99
99
  [tool.ruff]
100
100
  line-length = 120
101
101
  include = ["src/**/*.py", "tests/**/*.py", "docs/**/*.py", "website/**/*.py"]
102
+ exclude = [
103
+ "website/versioned_docs/**",
104
+ ]
102
105
 
103
106
  [tool.ruff.lint]
104
107
  select = ["ALL"]
@@ -201,6 +204,7 @@ python-version = "3.10"
201
204
 
202
205
  [tool.ty.src]
203
206
  include = ["src", "tests", "scripts", "docs", "website"]
207
+ exclude = ["website/versioned_docs"]
204
208
 
205
209
  [[tool.ty.overrides]]
206
210
  include = [
@@ -26,7 +26,7 @@ from crawlee.events import (
26
26
  EventSystemInfoData,
27
27
  )
28
28
 
29
- from apify._charging import ChargeResult, ChargingManager, ChargingManagerImplementation
29
+ from apify._charging import DEFAULT_DATASET_ITEM_EVENT, ChargeResult, ChargingManager, ChargingManagerImplementation
30
30
  from apify._configuration import Configuration
31
31
  from apify._consts import EVENT_LISTENERS_TIMEOUT
32
32
  from apify._crypto import decrypt_input_secrets, load_private_key
@@ -249,11 +249,21 @@ class _ActorType:
249
249
  if self._event_listeners_timeout:
250
250
  await self.event_manager.wait_for_all_listeners_to_complete(timeout=self._event_listeners_timeout)
251
251
 
252
- await self.event_manager.__aexit__(None, None, None)
253
- await self._charging_manager_implementation.__aexit__(None, None, None)
252
+ try:
253
+ await self.event_manager.__aexit__(None, None, None)
254
+ except Exception:
255
+ self.log.exception('Failed to exit event manager')
256
+
257
+ try:
258
+ await self._charging_manager_implementation.__aexit__(None, None, None)
259
+ except Exception:
260
+ self.log.exception('Failed to exit charging manager')
254
261
 
255
262
  # Persist Actor state
256
- await self._save_actor_state()
263
+ try:
264
+ await self._save_actor_state()
265
+ except Exception:
266
+ self.log.exception('Failed to save Actor state')
257
267
 
258
268
  try:
259
269
  await asyncio.wait_for(finalize(), self._cleanup_timeout.total_seconds())
@@ -380,14 +390,6 @@ class _ActorType:
380
390
  def _charging_manager_implementation(self) -> ChargingManagerImplementation:
381
391
  return ChargingManagerImplementation(self.configuration, self.apify_client)
382
392
 
383
- @cached_property
384
- def _charge_lock(self) -> asyncio.Lock:
385
- """Lock to synchronize charge operations.
386
-
387
- Prevents race conditions between Actor.charge and Actor.push_data calls.
388
- """
389
- return asyncio.Lock()
390
-
391
393
  @cached_property
392
394
  def _storage_client(self) -> SmartApifyStorageClient:
393
395
  """Storage client used by the Actor.
@@ -621,12 +623,8 @@ class _ActorType:
621
623
  storage_client=self._storage_client.get_suitable_storage_client(force_cloud=force_cloud),
622
624
  )
623
625
 
624
- @overload
625
- async def push_data(self, data: dict | list[dict]) -> None: ...
626
- @overload
627
- async def push_data(self, data: dict | list[dict], charged_event_name: str) -> ChargeResult: ...
628
626
  @_ensure_context
629
- async def push_data(self, data: dict | list[dict], charged_event_name: str | None = None) -> ChargeResult | None:
627
+ async def push_data(self, data: dict | list[dict], charged_event_name: str | None = None) -> ChargeResult:
630
628
  """Store an object or a list of objects to the default dataset of the current Actor run.
631
629
 
632
630
  Args:
@@ -634,35 +632,54 @@ class _ActorType:
634
632
  charged_event_name: If provided and if the Actor uses the pay-per-event pricing model,
635
633
  the method will attempt to charge for the event for each pushed item.
636
634
  """
635
+ if charged_event_name and charged_event_name.startswith('apify-'):
636
+ raise ValueError(f'Cannot charge for synthetic event "{charged_event_name}" manually')
637
+
638
+ charging_manager = self.get_charging_manager()
639
+
637
640
  if not data:
638
- return None
641
+ charged_event_name = charged_event_name or DEFAULT_DATASET_ITEM_EVENT
642
+ charge_limit_reached = charging_manager.is_event_charge_limit_reached(charged_event_name)
643
+
644
+ return ChargeResult(
645
+ event_charge_limit_reached=charge_limit_reached,
646
+ charged_count=0,
647
+ chargeable_within_limit=charging_manager.compute_chargeable(),
648
+ )
639
649
 
640
650
  data = data if isinstance(data, list) else [data]
641
651
 
642
- # No charging, just push the data without locking.
643
- if charged_event_name is None:
644
- dataset = await self.open_dataset()
645
- await dataset.push_data(data)
646
- return None
652
+ dataset = await self.open_dataset()
647
653
 
648
- # If charging is requested, acquire the charge lock to prevent race conditions between concurrent
654
+ # Acquire the charge lock to prevent race conditions between concurrent
649
655
  # push_data calls. We need to hold the lock for the entire push_data + charge sequence.
650
- async with self._charge_lock:
651
- max_charged_count = self.get_charging_manager().calculate_max_event_charge_count_within_limit(
652
- charged_event_name
653
- )
654
-
655
- # Push as many items as we can charge for.
656
- pushed_items_count = min(max_charged_count, len(data)) if max_charged_count is not None else len(data)
656
+ async with charging_manager.charge_lock():
657
+ # Synthetic events are handled within dataset.push_data, only get data for `ChargeResult`.
658
+ if charged_event_name is None:
659
+ before = charging_manager.get_charged_event_count(DEFAULT_DATASET_ITEM_EVENT)
660
+ await dataset.push_data(data)
661
+ after = charging_manager.get_charged_event_count(DEFAULT_DATASET_ITEM_EVENT)
662
+ return ChargeResult(
663
+ event_charge_limit_reached=charging_manager.is_event_charge_limit_reached(
664
+ DEFAULT_DATASET_ITEM_EVENT
665
+ ),
666
+ charged_count=after - before,
667
+ chargeable_within_limit=charging_manager.compute_chargeable(),
668
+ )
657
669
 
658
- dataset = await self.open_dataset()
670
+ pushed_items_count = charging_manager.compute_push_data_limit(
671
+ items_count=len(data),
672
+ event_name=charged_event_name,
673
+ is_default_dataset=True,
674
+ )
659
675
 
660
676
  if pushed_items_count < len(data):
661
677
  await dataset.push_data(data[:pushed_items_count])
662
678
  elif pushed_items_count > 0:
663
679
  await dataset.push_data(data)
664
680
 
665
- return await self.get_charging_manager().charge(
681
+ # Only charge explicit events; synthetic events will be processed within the client.
682
+ return await charging_manager.charge(
666
683
  event_name=charged_event_name,
667
684
  count=pushed_items_count,
668
685
  )
@@ -726,9 +743,9 @@ class _ActorType:
726
743
  event_name: Name of the event to be charged for.
727
744
  count: Number of events to charge for.
728
745
  """
729
- # Acquire lock to prevent race conditions with concurrent charge/push_data calls.
730
- async with self._charge_lock:
731
- return await self.get_charging_manager().charge(event_name, count)
746
+ # charging_manager.charge() acquires charge_lock internally.
747
+ charging_manager = self.get_charging_manager()
748
+ return await charging_manager.charge(event_name, count)
732
749
 
733
750
  @overload
734
751
  def on(
@@ -1187,11 +1204,16 @@ class _ActorType:
1187
1204
  (self.event_manager._listeners_to_wrappers[Event.MIGRATING] or {}).values() # noqa: SLF001
1188
1205
  )
1189
1206
 
1190
- await asyncio.gather(
1207
+ results = await asyncio.gather(
1191
1208
  *[listener(EventPersistStateData(is_migrating=True)) for listener in persist_state_listeners],
1192
1209
  *[listener(EventMigratingData()) for listener in migrating_listeners],
1210
+ return_exceptions=True,
1193
1211
  )
1194
1212
 
1213
+ for result in results:
1214
+ if isinstance(result, Exception):
1215
+ self.log.exception('A pre-reboot event listener failed', exc_info=result)
1216
+
1195
1217
  if not self.configuration.actor_run_id:
1196
1218
  raise RuntimeError('actor_run_id cannot be None when running on the Apify platform.')
1197
1219