apify 3.3.1b6__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 (511) hide show
  1. {apify-3.3.1b6 → apify-3.3.2}/.github/workflows/_check_code.yaml +3 -0
  2. {apify-3.3.1b6 → apify-3.3.2}/.github/workflows/_check_docs.yaml +3 -0
  3. {apify-3.3.1b6 → apify-3.3.2}/.github/workflows/_release_docs.yaml +4 -1
  4. {apify-3.3.1b6 → apify-3.3.2}/.github/workflows/_tests.yaml +5 -2
  5. {apify-3.3.1b6 → apify-3.3.2}/.github/workflows/manual_release_stable.yaml +80 -3
  6. {apify-3.3.1b6 → apify-3.3.2}/.github/workflows/on_issue.yaml +3 -0
  7. {apify-3.3.1b6 → apify-3.3.2}/.github/workflows/on_master.yaml +13 -0
  8. {apify-3.3.1b6 → apify-3.3.2}/.github/workflows/on_pull_request.yaml +4 -0
  9. {apify-3.3.1b6 → apify-3.3.2}/CHANGELOG.md +12 -3
  10. {apify-3.3.1b6 → apify-3.3.2}/PKG-INFO +1 -1
  11. {apify-3.3.1b6 → apify-3.3.2}/pyproject.toml +5 -1
  12. {apify-3.3.1b6 → apify-3.3.2}/src/apify/_actor.py +19 -4
  13. {apify-3.3.1b6 → apify-3.3.2}/src/apify/_utils.py +2 -0
  14. {apify-3.3.1b6 → apify-3.3.2}/src/apify/scrapy/requests.py +14 -1
  15. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_apify/_alias_resolving.py +4 -2
  16. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_apify/_api_client_creation.py +2 -2
  17. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_schema_storages/actor_source/main.py +4 -0
  18. {apify-3.3.1b6 → apify-3.3.2}/tests/integration/_utils.py +24 -11
  19. {apify-3.3.1b6 → apify-3.3.2}/tests/integration/test_request_queue.py +119 -127
  20. {apify-3.3.1b6 → apify-3.3.2}/tests/integration/test_storages.py +9 -0
  21. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/actor/test_actor_helpers.py +55 -0
  22. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/scrapy/requests/test_to_apify_request.py +35 -1
  23. {apify-3.3.1b6 → apify-3.3.2}/uv.lock +462 -432
  24. {apify-3.3.1b6 → apify-3.3.2}/website/docusaurus.config.js +32 -6
  25. {apify-3.3.1b6 → apify-3.3.2}/website/package.json +2 -2
  26. apify-3.3.2/website/src/theme/NavbarItem/ComponentTypes.js +7 -0
  27. apify-3.3.2/website/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +91 -0
  28. apify-3.3.2/website/src/theme/NavbarItem/VersionedReferenceNavbarItem.js +16 -0
  29. apify-3.3.2/website/versioned_docs/version-1.7/.gitignore +1 -0
  30. apify-3.3.2/website/versioned_docs/version-1.7/01-introduction/index.mdx +50 -0
  31. apify-3.3.2/website/versioned_docs/version-1.7/01-introduction/quick-start.mdx +140 -0
  32. apify-3.3.2/website/versioned_docs/version-1.7/02-guides/01-requests-and-httpx.mdx +100 -0
  33. apify-3.3.2/website/versioned_docs/version-1.7/02-guides/02-beautiful-soup.mdx +81 -0
  34. apify-3.3.2/website/versioned_docs/version-1.7/02-guides/03-playwright.mdx +120 -0
  35. apify-3.3.2/website/versioned_docs/version-1.7/02-guides/04-selenium.mdx +110 -0
  36. apify-3.3.2/website/versioned_docs/version-1.7/02-guides/05-scrapy.mdx +111 -0
  37. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/01-actor-lifecycle.mdx +117 -0
  38. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/02-actor-input.mdx +27 -0
  39. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/03-storages.mdx +284 -0
  40. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/04-actor-events.mdx +113 -0
  41. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/05-proxy-management.mdx +194 -0
  42. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/06-interacting-with-other-actors.mdx +96 -0
  43. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/07-webhooks.mdx +50 -0
  44. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/08-access-apify-api.mdx +42 -0
  45. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/09-running-webserver.mdx +66 -0
  46. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/10-logging.mdx +109 -0
  47. apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/11-configuration.mdx +45 -0
  48. apify-3.3.2/website/versioned_docs/version-1.7/api-packages.json +1 -0
  49. apify-3.3.2/website/versioned_docs/version-1.7/api-typedoc.json +8083 -0
  50. apify-3.3.2/website/versioned_docs/version-2.7/.gitignore +1 -0
  51. apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/code/01_introduction.py +17 -0
  52. apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/code/actor_structure/__init__.py +0 -0
  53. apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/code/actor_structure/__main__.py +6 -0
  54. apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/code/actor_structure/main.py +8 -0
  55. apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/code/actor_structure/py.typed +0 -0
  56. apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/index.mdx +45 -0
  57. apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/quick-start.mdx +124 -0
  58. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/01_beautifulsoup_httpx.mdx +30 -0
  59. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/02_crawlee.mdx +37 -0
  60. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/03_playwright.mdx +56 -0
  61. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/04_selenium.mdx +46 -0
  62. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/05_scrapy.mdx +114 -0
  63. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/01_beautifulsoup_httpx.py +85 -0
  64. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/02_crawlee_beautifulsoup.py +55 -0
  65. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/02_crawlee_playwright.py +68 -0
  66. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/03_playwright.py +94 -0
  67. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/04_selenium.py +104 -0
  68. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/__init__.py +0 -0
  69. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/__main__.py +22 -0
  70. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/items.py +10 -0
  71. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/main.py +32 -0
  72. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/py.typed +0 -0
  73. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/settings.py +11 -0
  74. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/spiders/__init__.py +3 -0
  75. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/spiders/py.typed +0 -0
  76. apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/spiders/title.py +68 -0
  77. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/01_actor_lifecycle.mdx +55 -0
  78. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/02_actor_input.mdx +18 -0
  79. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/03_storages.mdx +173 -0
  80. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/04_actor_events.mdx +81 -0
  81. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/05_proxy_management.mdx +108 -0
  82. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/06_interacting_with_other_actors.mdx +51 -0
  83. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/07_webhooks.mdx +31 -0
  84. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/08_access_apify_api.mdx +31 -0
  85. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/09_running_webserver.mdx +26 -0
  86. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/10_logging.mdx +84 -0
  87. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/11_configuration.mdx +34 -0
  88. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/12_pay_per_event.mdx +46 -0
  89. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/01_context_manager.py +9 -0
  90. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/01_init_exit.py +16 -0
  91. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/01_reboot.py +7 -0
  92. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/01_status_message.py +14 -0
  93. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/02_input.py +9 -0
  94. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_dataset_exports.py +31 -0
  95. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_dataset_read_write.py +16 -0
  96. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_deleting_storages.py +13 -0
  97. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_kvs_iterating.py +18 -0
  98. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_kvs_public_url.py +11 -0
  99. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_kvs_read_write.py +25 -0
  100. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_opening_storages.py +16 -0
  101. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_rq.py +53 -0
  102. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/04_actor_events.py +38 -0
  103. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_apify_proxy.py +12 -0
  104. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_apify_proxy_config.py +15 -0
  105. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_custom_proxy.py +17 -0
  106. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_custom_proxy_function.py +28 -0
  107. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_proxy_actor_input.py +16 -0
  108. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_proxy_httpx.py +22 -0
  109. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_proxy_rotation.py +31 -0
  110. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/06_interacting_call.py +22 -0
  111. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/06_interacting_call_task.py +19 -0
  112. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/06_interacting_metamorph.py +24 -0
  113. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/06_interacting_start.py +13 -0
  114. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/07_webhook.py +16 -0
  115. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/07_webhook_preventing.py +17 -0
  116. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/08_actor_client.py +11 -0
  117. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/08_actor_new_client.py +14 -0
  118. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/09_webserver.py +49 -0
  119. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/10_log_config.py +12 -0
  120. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/10_logger_usage.py +23 -0
  121. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/11_config.py +16 -0
  122. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/actor_charge.py +30 -0
  123. apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/conditional_actor_charge.py +18 -0
  124. apify-3.3.2/website/versioned_docs/version-2.7/04_upgrading/upgrading_to_v2.md +48 -0
  125. apify-3.3.2/website/versioned_docs/version-2.7/api-packages.json +1 -0
  126. apify-3.3.2/website/versioned_docs/version-2.7/api-typedoc.json +6951 -0
  127. apify-3.3.2/website/versioned_docs/version-3.3/.gitignore +1 -0
  128. apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/code/01_introduction.py +24 -0
  129. apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/code/actor_structure/__init__.py +0 -0
  130. apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/code/actor_structure/__main__.py +6 -0
  131. apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/code/actor_structure/main.py +8 -0
  132. apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/code/actor_structure/py.typed +0 -0
  133. apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/images/apify-create.gif +0 -0
  134. apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/index.mdx +48 -0
  135. apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/quick-start.mdx +116 -0
  136. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/01_actor_lifecycle.mdx +101 -0
  137. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/02_actor_input.mdx +18 -0
  138. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/03_storages.mdx +173 -0
  139. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/04_actor_events.mdx +81 -0
  140. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/05_proxy_management.mdx +108 -0
  141. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/06_interacting_with_other_actors.mdx +51 -0
  142. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/07_webhooks.mdx +31 -0
  143. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/08_access_apify_api.mdx +31 -0
  144. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/09_logging.mdx +114 -0
  145. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/10_configuration.mdx +34 -0
  146. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/11_pay_per_event.mdx +69 -0
  147. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_class_context.py +21 -0
  148. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_class_manual.py +26 -0
  149. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_context_manager.py +15 -0
  150. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_error_handling_context.py +13 -0
  151. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_error_handling_manual.py +33 -0
  152. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_init_exit.py +22 -0
  153. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_instance_context.py +27 -0
  154. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_instance_manual.py +32 -0
  155. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_reboot.py +23 -0
  156. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_status_message.py +24 -0
  157. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/02_input.py +15 -0
  158. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_dataset_exports.py +37 -0
  159. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_dataset_read_write.py +22 -0
  160. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_deleting_storages.py +19 -0
  161. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_kvs_iterating.py +24 -0
  162. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_kvs_public_url.py +17 -0
  163. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_kvs_read_write.py +31 -0
  164. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_opening_storages.py +22 -0
  165. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_rq.py +54 -0
  166. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/04_actor_events.py +42 -0
  167. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_apify_proxy.py +18 -0
  168. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_apify_proxy_config.py +21 -0
  169. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_custom_proxy.py +23 -0
  170. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_custom_proxy_function.py +34 -0
  171. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_proxy_actor_input.py +22 -0
  172. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_proxy_httpx.py +28 -0
  173. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_proxy_rotation.py +29 -0
  174. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/06_interacting_call.py +32 -0
  175. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/06_interacting_call_task.py +25 -0
  176. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/06_interacting_metamorph.py +30 -0
  177. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/06_interacting_start.py +19 -0
  178. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/07_webhook.py +22 -0
  179. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/07_webhook_preventing.py +22 -0
  180. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/08_actor_client.py +17 -0
  181. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/08_actor_new_client.py +20 -0
  182. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/09_log_config.py +17 -0
  183. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/09_logger_usage.py +28 -0
  184. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/09_redirect_log.py +21 -0
  185. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/09_redirect_log_existing_run.py +28 -0
  186. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/10_config.py +23 -0
  187. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/11_actor_charge.py +36 -0
  188. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/11_charge_limit_check.py +29 -0
  189. apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/11_conditional_actor_charge.py +24 -0
  190. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/01_beautifulsoup_httpx.mdx +30 -0
  191. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/02_parsel_impit.mdx +28 -0
  192. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/03_playwright.mdx +57 -0
  193. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/04_selenium.mdx +46 -0
  194. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/05_crawlee.mdx +46 -0
  195. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/06_scrapy.mdx +114 -0
  196. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/07_running_webserver.mdx +26 -0
  197. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/01_beautifulsoup_httpx.py +88 -0
  198. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/02_parsel_impit.py +94 -0
  199. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/03_playwright.py +97 -0
  200. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/04_selenium.py +106 -0
  201. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/05_crawlee_beautifulsoup.py +55 -0
  202. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/05_crawlee_parsel.py +55 -0
  203. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/05_crawlee_playwright.py +58 -0
  204. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/07_webserver.py +53 -0
  205. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/__init__.py +0 -0
  206. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/__main__.py +16 -0
  207. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/items.py +10 -0
  208. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/main.py +36 -0
  209. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/py.typed +0 -0
  210. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/settings.py +11 -0
  211. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/spiders/__init__.py +3 -0
  212. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/spiders/py.typed +0 -0
  213. apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/spiders/title.py +68 -0
  214. apify-3.3.2/website/versioned_docs/version-3.3/04_upgrading/upgrading_to_v2.md +48 -0
  215. apify-3.3.2/website/versioned_docs/version-3.3/04_upgrading/upgrading_to_v3.md +159 -0
  216. apify-3.3.2/website/versioned_docs/version-3.3/api-packages.json +1 -0
  217. apify-3.3.2/website/versioned_docs/version-3.3/api-typedoc.json +76320 -0
  218. apify-3.3.2/website/versioned_sidebars/version-1.7-sidebars.json +38 -0
  219. apify-3.3.2/website/versioned_sidebars/version-2.7-sidebars.json +49 -0
  220. apify-3.3.2/website/versioned_sidebars/version-3.3-sidebars.json +49 -0
  221. apify-3.3.2/website/versions.json +5 -0
  222. {apify-3.3.1b6 → apify-3.3.2}/website/yarn.lock +920 -717
  223. {apify-3.3.1b6 → apify-3.3.2}/.editorconfig +0 -0
  224. {apify-3.3.1b6 → apify-3.3.2}/.github/CODEOWNERS +0 -0
  225. {apify-3.3.1b6 → apify-3.3.2}/.gitignore +0 -0
  226. {apify-3.3.1b6 → apify-3.3.2}/.markdownlint.yaml +0 -0
  227. {apify-3.3.1b6 → apify-3.3.2}/.pre-commit-config.yaml +0 -0
  228. {apify-3.3.1b6 → apify-3.3.2}/.rules.md +0 -0
  229. {apify-3.3.1b6 → apify-3.3.2}/AGENTS.md +0 -0
  230. {apify-3.3.1b6 → apify-3.3.2}/CLAUDE.md +0 -0
  231. {apify-3.3.1b6 → apify-3.3.2}/CONTRIBUTING.md +0 -0
  232. {apify-3.3.1b6 → apify-3.3.2}/GEMINI.md +0 -0
  233. {apify-3.3.1b6 → apify-3.3.2}/LICENSE +0 -0
  234. {apify-3.3.1b6 → apify-3.3.2}/README.md +0 -0
  235. {apify-3.3.1b6 → apify-3.3.2}/codecov.yaml +0 -0
  236. {apify-3.3.1b6 → apify-3.3.2}/docs/01_introduction/code/01_introduction.py +0 -0
  237. {apify-3.3.1b6 → apify-3.3.2}/docs/01_introduction/code/actor_structure/__init__.py +0 -0
  238. {apify-3.3.1b6 → apify-3.3.2}/docs/01_introduction/code/actor_structure/__main__.py +0 -0
  239. {apify-3.3.1b6 → apify-3.3.2}/docs/01_introduction/code/actor_structure/main.py +0 -0
  240. {apify-3.3.1b6 → apify-3.3.2}/docs/01_introduction/code/actor_structure/py.typed +0 -0
  241. {apify-3.3.1b6 → apify-3.3.2}/docs/01_introduction/images/apify-create.gif +0 -0
  242. {apify-3.3.1b6 → apify-3.3.2}/docs/01_introduction/index.mdx +0 -0
  243. {apify-3.3.1b6 → apify-3.3.2}/docs/01_introduction/quick-start.mdx +0 -0
  244. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/01_actor_lifecycle.mdx +0 -0
  245. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/02_actor_input.mdx +0 -0
  246. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/03_storages.mdx +0 -0
  247. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/04_actor_events.mdx +0 -0
  248. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/05_proxy_management.mdx +0 -0
  249. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/06_interacting_with_other_actors.mdx +0 -0
  250. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/07_webhooks.mdx +0 -0
  251. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/08_access_apify_api.mdx +0 -0
  252. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/09_logging.mdx +0 -0
  253. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/10_configuration.mdx +0 -0
  254. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/11_pay_per_event.mdx +0 -0
  255. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/01_class_context.py +0 -0
  256. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/01_class_manual.py +0 -0
  257. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/01_context_manager.py +0 -0
  258. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/01_error_handling_context.py +0 -0
  259. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/01_error_handling_manual.py +0 -0
  260. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/01_init_exit.py +0 -0
  261. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/01_instance_context.py +0 -0
  262. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/01_instance_manual.py +0 -0
  263. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/01_reboot.py +0 -0
  264. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/01_status_message.py +0 -0
  265. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/02_input.py +0 -0
  266. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/03_dataset_exports.py +0 -0
  267. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/03_dataset_read_write.py +0 -0
  268. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/03_deleting_storages.py +0 -0
  269. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/03_kvs_iterating.py +0 -0
  270. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/03_kvs_public_url.py +0 -0
  271. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/03_kvs_read_write.py +0 -0
  272. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/03_opening_storages.py +0 -0
  273. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/03_rq.py +0 -0
  274. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/04_actor_events.py +0 -0
  275. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/05_apify_proxy.py +0 -0
  276. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/05_apify_proxy_config.py +0 -0
  277. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/05_custom_proxy.py +0 -0
  278. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/05_custom_proxy_function.py +0 -0
  279. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/05_proxy_actor_input.py +0 -0
  280. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/05_proxy_httpx.py +0 -0
  281. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/05_proxy_rotation.py +0 -0
  282. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/06_interacting_call.py +0 -0
  283. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/06_interacting_call_task.py +0 -0
  284. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/06_interacting_metamorph.py +0 -0
  285. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/06_interacting_start.py +0 -0
  286. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/07_webhook.py +0 -0
  287. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/07_webhook_preventing.py +0 -0
  288. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/08_actor_client.py +0 -0
  289. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/08_actor_new_client.py +0 -0
  290. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/09_log_config.py +0 -0
  291. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/09_logger_usage.py +0 -0
  292. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/09_redirect_log.py +0 -0
  293. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/09_redirect_log_existing_run.py +0 -0
  294. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/10_config.py +0 -0
  295. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/11_actor_charge.py +0 -0
  296. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/11_charge_limit_check.py +0 -0
  297. {apify-3.3.1b6 → apify-3.3.2}/docs/02_concepts/code/11_conditional_actor_charge.py +0 -0
  298. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/01_beautifulsoup_httpx.mdx +0 -0
  299. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/02_parsel_impit.mdx +0 -0
  300. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/03_playwright.mdx +0 -0
  301. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/04_selenium.mdx +0 -0
  302. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/05_crawlee.mdx +0 -0
  303. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/06_scrapy.mdx +0 -0
  304. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/07_running_webserver.mdx +0 -0
  305. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/code/01_beautifulsoup_httpx.py +0 -0
  306. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/code/02_parsel_impit.py +0 -0
  307. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/code/03_playwright.py +0 -0
  308. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/code/04_selenium.py +0 -0
  309. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/code/05_crawlee_beautifulsoup.py +0 -0
  310. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/code/05_crawlee_parsel.py +0 -0
  311. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/code/05_crawlee_playwright.py +0 -0
  312. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/code/07_webserver.py +0 -0
  313. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/__init__.py +0 -0
  314. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/__main__.py +0 -0
  315. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/items.py +0 -0
  316. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/main.py +0 -0
  317. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/py.typed +0 -0
  318. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/settings.py +0 -0
  319. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/spiders/__init__.py +0 -0
  320. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/spiders/py.typed +0 -0
  321. {apify-3.3.1b6 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/spiders/title.py +0 -0
  322. {apify-3.3.1b6 → apify-3.3.2}/docs/04_upgrading/upgrading_to_v2.md +0 -0
  323. {apify-3.3.1b6 → apify-3.3.2}/docs/04_upgrading/upgrading_to_v3.md +0 -0
  324. {apify-3.3.1b6 → apify-3.3.2}/docs/pyproject.toml +0 -0
  325. {apify-3.3.1b6 → apify-3.3.2}/renovate.json +0 -0
  326. {apify-3.3.1b6 → apify-3.3.2}/src/apify/__init__.py +0 -0
  327. {apify-3.3.1b6 → apify-3.3.2}/src/apify/_charging.py +0 -0
  328. {apify-3.3.1b6 → apify-3.3.2}/src/apify/_configuration.py +0 -0
  329. {apify-3.3.1b6 → apify-3.3.2}/src/apify/_consts.py +0 -0
  330. {apify-3.3.1b6 → apify-3.3.2}/src/apify/_crypto.py +0 -0
  331. {apify-3.3.1b6 → apify-3.3.2}/src/apify/_models.py +0 -0
  332. {apify-3.3.1b6 → apify-3.3.2}/src/apify/_proxy_configuration.py +0 -0
  333. {apify-3.3.1b6 → apify-3.3.2}/src/apify/events/__init__.py +0 -0
  334. {apify-3.3.1b6 → apify-3.3.2}/src/apify/events/_apify_event_manager.py +0 -0
  335. {apify-3.3.1b6 → apify-3.3.2}/src/apify/events/_types.py +0 -0
  336. {apify-3.3.1b6 → apify-3.3.2}/src/apify/events/py.typed +0 -0
  337. {apify-3.3.1b6 → apify-3.3.2}/src/apify/log.py +0 -0
  338. {apify-3.3.1b6 → apify-3.3.2}/src/apify/py.typed +0 -0
  339. {apify-3.3.1b6 → apify-3.3.2}/src/apify/request_loaders/__init__.py +0 -0
  340. {apify-3.3.1b6 → apify-3.3.2}/src/apify/request_loaders/_apify_request_list.py +0 -0
  341. {apify-3.3.1b6 → apify-3.3.2}/src/apify/request_loaders/py.typed +0 -0
  342. {apify-3.3.1b6 → apify-3.3.2}/src/apify/scrapy/__init__.py +0 -0
  343. {apify-3.3.1b6 → apify-3.3.2}/src/apify/scrapy/_actor_runner.py +0 -0
  344. {apify-3.3.1b6 → apify-3.3.2}/src/apify/scrapy/_async_thread.py +0 -0
  345. {apify-3.3.1b6 → apify-3.3.2}/src/apify/scrapy/_logging_config.py +0 -0
  346. {apify-3.3.1b6 → apify-3.3.2}/src/apify/scrapy/extensions/__init__.py +0 -0
  347. {apify-3.3.1b6 → apify-3.3.2}/src/apify/scrapy/extensions/_httpcache.py +0 -0
  348. {apify-3.3.1b6 → apify-3.3.2}/src/apify/scrapy/middlewares/__init__.py +0 -0
  349. {apify-3.3.1b6 → apify-3.3.2}/src/apify/scrapy/middlewares/apify_proxy.py +0 -0
  350. {apify-3.3.1b6 → apify-3.3.2}/src/apify/scrapy/middlewares/py.typed +0 -0
  351. {apify-3.3.1b6 → apify-3.3.2}/src/apify/scrapy/pipelines/__init__.py +0 -0
  352. {apify-3.3.1b6 → apify-3.3.2}/src/apify/scrapy/pipelines/actor_dataset_push.py +0 -0
  353. {apify-3.3.1b6 → apify-3.3.2}/src/apify/scrapy/pipelines/py.typed +0 -0
  354. {apify-3.3.1b6 → apify-3.3.2}/src/apify/scrapy/py.typed +0 -0
  355. {apify-3.3.1b6 → apify-3.3.2}/src/apify/scrapy/scheduler.py +0 -0
  356. {apify-3.3.1b6 → apify-3.3.2}/src/apify/scrapy/utils.py +0 -0
  357. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/__init__.py +0 -0
  358. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_apify/__init__.py +0 -0
  359. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_apify/_dataset_client.py +0 -0
  360. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_apify/_key_value_store_client.py +0 -0
  361. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_apify/_models.py +0 -0
  362. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_apify/_request_queue_client.py +0 -0
  363. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_apify/_request_queue_shared_client.py +0 -0
  364. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_apify/_request_queue_single_client.py +0 -0
  365. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_apify/_storage_client.py +0 -0
  366. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_apify/_utils.py +0 -0
  367. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_apify/py.typed +0 -0
  368. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_file_system/__init__.py +0 -0
  369. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_file_system/_dataset_client.py +0 -0
  370. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_file_system/_key_value_store_client.py +0 -0
  371. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_file_system/_storage_client.py +0 -0
  372. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_ppe_dataset_mixin.py +0 -0
  373. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_smart_apify/__init__.py +0 -0
  374. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/_smart_apify/_storage_client.py +0 -0
  375. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storage_clients/py.typed +0 -0
  376. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storages/__init__.py +0 -0
  377. {apify-3.3.1b6 → apify-3.3.2}/src/apify/storages/py.typed +0 -0
  378. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/README.md +0 -0
  379. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/__init__.py +0 -0
  380. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/_utils.py +0 -0
  381. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/actor_source_base/Dockerfile +0 -0
  382. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/actor_source_base/requirements.txt +0 -0
  383. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/actor_source_base/server.py +0 -0
  384. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/actor_source_base/src/__init__.py +0 -0
  385. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/actor_source_base/src/__main__.py +0 -0
  386. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/actor_source_base/src/main.py +0 -0
  387. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/conftest.py +0 -0
  388. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_actor_api_helpers.py +0 -0
  389. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_actor_call_timeouts.py +0 -0
  390. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_actor_charge.py +0 -0
  391. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_actor_create_proxy_configuration.py +0 -0
  392. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_actor_dataset.py +0 -0
  393. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_actor_events.py +0 -0
  394. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_actor_key_value_store.py +0 -0
  395. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_actor_lifecycle.py +0 -0
  396. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_actor_log.py +0 -0
  397. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_actor_request_queue.py +0 -0
  398. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_actor_scrapy.py +0 -0
  399. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_apify_storages.py +0 -0
  400. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_crawlee/__init__.py +0 -0
  401. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_adaptive_playwright_crawler.py +0 -0
  402. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_basic_crawler.py +0 -0
  403. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_beautifulsoup_crawler.py +0 -0
  404. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_http_crawler.py +0 -0
  405. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_parsel_crawler.py +0 -0
  406. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_playwright_crawler.py +0 -0
  407. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/playwright.Dockerfile +0 -0
  408. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_crawlee/conftest.py +0 -0
  409. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_crawlee/test_adaptive_playwright_crawler.py +0 -0
  410. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_crawlee/test_basic_crawler.py +0 -0
  411. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_crawlee/test_beautifulsoup_crawler.py +0 -0
  412. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_crawlee/test_http_crawler.py +0 -0
  413. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_crawlee/test_parsel_crawler.py +0 -0
  414. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_crawlee/test_playwright_crawler.py +0 -0
  415. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_fixtures.py +0 -0
  416. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_schema_storages/__init__.py +0 -0
  417. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_schema_storages/actor_source/actor.json +0 -0
  418. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_schema_storages/test_schema_storages.py +0 -0
  419. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/__init__.py +0 -0
  420. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/__init__.py +0 -0
  421. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/__main__.py +0 -0
  422. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/items.py +0 -0
  423. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/main.py +0 -0
  424. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/main_custom_pipeline.py +0 -0
  425. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/pipelines.py +0 -0
  426. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/settings.py +0 -0
  427. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/settings_custom_pipeline.py +0 -0
  428. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/spider_basic.py +0 -0
  429. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/spider_cb_kwargs.py +0 -0
  430. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/spider_crawl.py +0 -0
  431. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/spider_custom_pipeline.py +0 -0
  432. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/spider_itemloader.py +0 -0
  433. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/conftest.py +0 -0
  434. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/test_basic_spider.py +0 -0
  435. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/test_cb_kwargs_spider.py +0 -0
  436. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/test_crawl_spider.py +0 -0
  437. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/test_custom_pipeline_spider.py +0 -0
  438. {apify-3.3.1b6 → apify-3.3.2}/tests/e2e/test_scrapy/test_itemloader_spider.py +0 -0
  439. {apify-3.3.1b6 → apify-3.3.2}/tests/integration/README.md +0 -0
  440. {apify-3.3.1b6 → apify-3.3.2}/tests/integration/__init__.py +0 -0
  441. {apify-3.3.1b6 → apify-3.3.2}/tests/integration/conftest.py +0 -0
  442. {apify-3.3.1b6 → apify-3.3.2}/tests/integration/test_dataset.py +0 -0
  443. {apify-3.3.1b6 → apify-3.3.2}/tests/integration/test_key_value_store.py +0 -0
  444. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/README.md +0 -0
  445. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/__init__.py +0 -0
  446. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/actor/__init__.py +0 -0
  447. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/actor/test_actor_charge.py +0 -0
  448. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/actor/test_actor_create_proxy_configuration.py +0 -0
  449. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/actor/test_actor_dataset.py +0 -0
  450. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/actor/test_actor_env_helpers.py +0 -0
  451. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/actor/test_actor_key_value_store.py +0 -0
  452. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/actor/test_actor_lifecycle.py +0 -0
  453. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/actor/test_actor_log.py +0 -0
  454. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/actor/test_actor_non_default_instance.py +0 -0
  455. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/actor/test_actor_request_queue.py +0 -0
  456. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/actor/test_charging_manager.py +0 -0
  457. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/actor/test_configuration.py +0 -0
  458. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/actor/test_request_list.py +0 -0
  459. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/conftest.py +0 -0
  460. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/events/__init__.py +0 -0
  461. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/events/test_apify_event_manager.py +0 -0
  462. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/scrapy/__init__.py +0 -0
  463. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/scrapy/extensions/__init__.py +0 -0
  464. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/scrapy/extensions/test_httpcache.py +0 -0
  465. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/scrapy/middlewares/__init__.py +0 -0
  466. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/scrapy/middlewares/test_apify_proxy.py +0 -0
  467. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/scrapy/pipelines/__init__.py +0 -0
  468. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/scrapy/pipelines/test_actor_dataset_push.py +0 -0
  469. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/scrapy/requests/__init__.py +0 -0
  470. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/scrapy/requests/test_to_scrapy_request.py +0 -0
  471. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/scrapy/utils/__init__.py +0 -0
  472. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/scrapy/utils/test_apply_apify_settings.py +0 -0
  473. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/scrapy/utils/test_get_basic_auth_header.py +0 -0
  474. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/storage_clients/__init__.py +0 -0
  475. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/storage_clients/test_alias_resolver.py +0 -0
  476. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/storage_clients/test_api_client_creation.py +0 -0
  477. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/storage_clients/test_apify_dataset_client.py +0 -0
  478. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/storage_clients/test_apify_kvs_client.py +0 -0
  479. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/storage_clients/test_apify_request_queue_client.py +0 -0
  480. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/storage_clients/test_file_system.py +0 -0
  481. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/storage_clients/test_smart_apify_storage_client.py +0 -0
  482. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/test_apify_storages.py +0 -0
  483. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/test_crypto.py +0 -0
  484. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/test_log.py +0 -0
  485. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/test_proxy_configuration.py +0 -0
  486. {apify-3.3.1b6 → apify-3.3.2}/tests/unit/test_utils.py +0 -0
  487. {apify-3.3.1b6 → apify-3.3.2}/typos.toml +0 -0
  488. {apify-3.3.1b6 → apify-3.3.2}/website/.eslintrc.json +0 -0
  489. {apify-3.3.1b6 → apify-3.3.2}/website/.yarnrc.yml +0 -0
  490. {apify-3.3.1b6 → apify-3.3.2}/website/babel.config.js +0 -0
  491. {apify-3.3.1b6 → apify-3.3.2}/website/build_api_reference.sh +0 -0
  492. {apify-3.3.1b6 → apify-3.3.2}/website/generate_module_shortcuts.py +0 -0
  493. {apify-3.3.1b6 → apify-3.3.2}/website/roa-loader/index.js +0 -0
  494. {apify-3.3.1b6 → apify-3.3.2}/website/roa-loader/package.json +0 -0
  495. {apify-3.3.1b6 → apify-3.3.2}/website/sidebars.js +0 -0
  496. {apify-3.3.1b6 → apify-3.3.2}/website/src/components/ApiLink.jsx +0 -0
  497. {apify-3.3.1b6 → apify-3.3.2}/website/src/components/Gradients.jsx +0 -0
  498. {apify-3.3.1b6 → apify-3.3.2}/website/src/components/Highlights.jsx +0 -0
  499. {apify-3.3.1b6 → apify-3.3.2}/website/src/components/Highlights.module.css +0 -0
  500. {apify-3.3.1b6 → apify-3.3.2}/website/src/components/RunnableCodeBlock.jsx +0 -0
  501. {apify-3.3.1b6 → apify-3.3.2}/website/src/components/RunnableCodeBlock.module.css +0 -0
  502. {apify-3.3.1b6 → apify-3.3.2}/website/src/css/custom.css +0 -0
  503. {apify-3.3.1b6 → apify-3.3.2}/website/src/pages/index.js +0 -0
  504. {apify-3.3.1b6 → apify-3.3.2}/website/src/plugins/docusaurus-plugin-segment/index.js +0 -0
  505. {apify-3.3.1b6 → apify-3.3.2}/website/src/plugins/docusaurus-plugin-segment/segment.js +0 -0
  506. {apify-3.3.1b6 → apify-3.3.2}/website/src/theme/DocItem/Content/index.js +0 -0
  507. {apify-3.3.1b6 → apify-3.3.2}/website/static/.nojekyll +0 -0
  508. {apify-3.3.1b6 → apify-3.3.2}/website/static/img/docs-og.png +0 -0
  509. {apify-3.3.1b6 → apify-3.3.2}/website/static/img/guides/redirected_logs_example.webp +0 -0
  510. {apify-3.3.1b6 → apify-3.3.2}/website/tools/docs-prettier.config.js +0 -0
  511. {apify-3.3.1b6 → 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
 
@@ -14,7 +24,6 @@ All notable changes to this project will be documented in this file.
14
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)
15
25
 
16
26
 
17
- <!-- git-cliff-unreleased-end -->
18
27
  ## [3.3.0](https://github.com/apify/apify-sdk-python/releases/tag/v3.3.0) (2026-02-25)
19
28
 
20
29
  ### 🚀 Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apify
3
- Version: 3.3.1b6
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.1b6"
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 = [
@@ -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())
@@ -1194,11 +1204,16 @@ class _ActorType:
1194
1204
  (self.event_manager._listeners_to_wrappers[Event.MIGRATING] or {}).values() # noqa: SLF001
1195
1205
  )
1196
1206
 
1197
- await asyncio.gather(
1207
+ results = await asyncio.gather(
1198
1208
  *[listener(EventPersistStateData(is_migrating=True)) for listener in persist_state_listeners],
1199
1209
  *[listener(EventMigratingData()) for listener in migrating_listeners],
1210
+ return_exceptions=True,
1200
1211
  )
1201
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
+
1202
1217
  if not self.configuration.actor_run_id:
1203
1218
  raise RuntimeError('actor_run_id cannot be None when running on the Apify platform.')
1204
1219
 
@@ -141,6 +141,8 @@ class ReentrantLock:
141
141
  async def __call__(self) -> AsyncIterator[None]:
142
142
  """Acquire the lock if it's not already owned by the current task, otherwise proceed without acquiring."""
143
143
  me = asyncio.current_task()
144
+ if me is None:
145
+ raise RuntimeError('ReentrantLock must be used within an asyncio.Task')
144
146
  if self._owner is me:
145
147
  yield
146
148
  return
@@ -10,6 +10,7 @@ from scrapy import Spider
10
10
  from scrapy.http.headers import Headers
11
11
  from scrapy.utils.request import request_from_dict
12
12
 
13
+ from crawlee._request import UserData
13
14
  from crawlee._types import HttpHeaders
14
15
 
15
16
  from apify import Request as ApifyRequest
@@ -52,7 +53,19 @@ def to_apify_request(scrapy_request: ScrapyRequest, spider: Spider) -> ApifyRequ
52
53
  if scrapy_request.meta.get('apify_request_id'):
53
54
  request_kwargs['id'] = scrapy_request.meta['apify_request_id']
54
55
 
55
- request_kwargs['user_data'] = scrapy_request.meta.get('userData', {})
56
+ user_data = scrapy_request.meta.get('userData', {})
57
+
58
+ # Convert UserData Pydantic model to a plain dict to prevent CrawleeRequestData objects
59
+ # from leaking into Request.from_url() during Scrapy-Apify roundtrips.
60
+ if isinstance(user_data, UserData):
61
+ user_data = user_data.model_dump(by_alias=True)
62
+
63
+ # Remove internal Crawlee data since it's managed by Request.from_url() and values
64
+ # from previous roundtrips cause incorrect state.
65
+ if isinstance(user_data, dict):
66
+ user_data.pop('__crawlee', None)
67
+
68
+ request_kwargs['user_data'] = user_data if isinstance(user_data, dict) else {}
56
69
 
57
70
  # Convert Scrapy's headers to a HttpHeaders and store them in the apify_request
58
71
  if isinstance(scrapy_request.headers, Headers):
@@ -76,7 +76,7 @@ async def open_by_alias(
76
76
  The alias mapping is stored in the default key-value store for persistence across Actor runs.
77
77
 
78
78
  Args:
79
- alias: The alias name for the storage (e.g., '__default__', 'my-storage').
79
+ alias: The alias name for the storage (e.g., 'my-storage').
80
80
  storage_type: The type of storage to open.
81
81
  collection_client: The Apify API collection client for the storage type.
82
82
  get_resource_client_by_id: A callable that takes a storage ID and returns the resource client.
@@ -131,6 +131,8 @@ class AliasResolver:
131
131
  _alias_init_lock: Lock | None = None
132
132
  """Lock for creating alias storages. Only one alias storage can be created at the time. Global for all instances."""
133
133
 
134
+ default_storage_key: ClassVar[str] = '__default__'
135
+
134
136
  def __init__(
135
137
  self,
136
138
  storage_type: Literal['Dataset', 'KeyValueStore', 'RequestQueue'],
@@ -195,7 +197,7 @@ class AliasResolver:
195
197
  """
196
198
  # First try to find the alias in the configuration mapping to avoid any API calls.
197
199
  # This mapping is maintained by the Apify platform and does not have to be maintained in the default KVS.
198
- if self._configuration.actor_storages and self._alias != 'default':
200
+ if self._configuration.actor_storages:
199
201
  storage_maps = {
200
202
  'Dataset': self._configuration.actor_storages['datasets'],
201
203
  'KeyValueStore': self._configuration.actor_storages['key_value_stores'],
@@ -5,7 +5,7 @@ from typing import TYPE_CHECKING, Literal, overload
5
5
  from apify_client import ApifyClientAsync
6
6
  from crawlee._utils.crypto import crypto_random_object_id
7
7
 
8
- from apify.storage_clients._apify._alias_resolving import open_by_alias
8
+ from apify.storage_clients._apify._alias_resolving import AliasResolver, open_by_alias
9
9
 
10
10
  if TYPE_CHECKING:
11
11
  from apify_client.clients import DatasetClientAsync, KeyValueStoreClientAsync, RequestQueueClientAsync
@@ -113,7 +113,7 @@ async def create_storage_api_client(
113
113
  # Normalize unnamed default storage to unnamed storage aliased as `__default__`.
114
114
  case (None, None, None, None):
115
115
  return await open_by_alias(
116
- alias='__default__',
116
+ alias=AliasResolver.default_storage_key,
117
117
  storage_type=storage_type,
118
118
  collection_client=collection_client,
119
119
  get_resource_client_by_id=get_resource_client,
@@ -7,3 +7,7 @@ async def main() -> None:
7
7
  dataset = await Actor.open_dataset(alias='custom')
8
8
  expected_id = Actor.configuration.actor_storages['datasets']['custom']
9
9
  assert dataset.id == expected_id
10
+
11
+ implicit_default_dataset = await Actor.open_dataset()
12
+ explicit_default_dataset = await Actor.open_dataset(alias='default')
13
+ assert implicit_default_dataset.id == explicit_default_dataset.id
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import asyncio
4
- from typing import TYPE_CHECKING, TypeVar
4
+ from typing import TYPE_CHECKING, Literal, TypeVar
5
5
 
6
6
  from crawlee._utils.crypto import crypto_random_object_id
7
7
 
@@ -13,26 +13,39 @@ if TYPE_CHECKING:
13
13
  T = TypeVar('T')
14
14
 
15
15
 
16
- async def call_with_exp_backoff(fn: Callable[[], Awaitable[T]], *, max_retries: int = 3) -> T | None:
16
+ async def call_with_exp_backoff(
17
+ fn: Callable[[], Awaitable[T]],
18
+ *,
19
+ rq_access_mode: Literal['single', 'shared'],
20
+ max_retries: int = 3,
21
+ ) -> T | None:
17
22
  """Call an async callable with exponential backoff retries until it returns a truthy value.
18
23
 
19
24
  In shared request queue mode, there is a propagation delay before newly added, reclaimed, or handled requests
20
25
  become visible in the API (see https://github.com/apify/apify-sdk-python/issues/808). This helper retries with
21
26
  exponential backoff to handle that delay in integration tests.
27
+
28
+ When `rq_access_mode` is `'single'`, the function is called once without retries.
22
29
  """
23
- result = None
30
+ if rq_access_mode == 'single':
31
+ return await fn()
32
+
33
+ if rq_access_mode == 'shared':
34
+ result = None
35
+
36
+ for attempt in range(max_retries):
37
+ result = await fn()
24
38
 
25
- for attempt in range(max_retries):
26
- result = await fn()
39
+ if result:
40
+ return result
27
41
 
28
- if result:
29
- return result
42
+ delay = 2**attempt
43
+ Actor.log.info(f'{fn} returned {result!r}, retrying in {delay}s (attempt {attempt + 1}/{max_retries})')
44
+ await asyncio.sleep(delay)
30
45
 
31
- delay = 2**attempt
32
- Actor.log.info(f'{fn} returned {result!r}, retrying in {delay}s (attempt {attempt + 1}/{max_retries})')
33
- await asyncio.sleep(delay)
46
+ return result
34
47
 
35
- return result
48
+ raise ValueError(f'Invalid rq_access_mode: {rq_access_mode}')
36
49
 
37
50
 
38
51
  def generate_unique_resource_name(label: str) -> str: