apify 2.5.1b7__tar.gz → 2.5.1b9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of apify might be problematic. Click here for more details.

Files changed (209) hide show
  1. {apify-2.5.1b7 → apify-2.5.1b9}/CHANGELOG.md +1 -0
  2. {apify-2.5.1b7 → apify-2.5.1b9}/PKG-INFO +1 -1
  3. {apify-2.5.1b7 → apify-2.5.1b9}/pyproject.toml +1 -1
  4. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/_proxy_configuration.py +15 -18
  5. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/test_proxy_configuration.py +30 -0
  6. {apify-2.5.1b7 → apify-2.5.1b9}/uv.lock +71 -43
  7. {apify-2.5.1b7 → apify-2.5.1b9}/website/package-lock.json +216 -215
  8. {apify-2.5.1b7 → apify-2.5.1b9}/.editorconfig +0 -0
  9. {apify-2.5.1b7 → apify-2.5.1b9}/.github/CODEOWNERS +0 -0
  10. {apify-2.5.1b7 → apify-2.5.1b9}/.github/workflows/build_and_deploy_docs.yaml +0 -0
  11. {apify-2.5.1b7 → apify-2.5.1b9}/.github/workflows/check_pr_title.yaml +0 -0
  12. {apify-2.5.1b7 → apify-2.5.1b9}/.github/workflows/pre_release.yaml +0 -0
  13. {apify-2.5.1b7 → apify-2.5.1b9}/.github/workflows/release.yaml +0 -0
  14. {apify-2.5.1b7 → apify-2.5.1b9}/.github/workflows/run_code_checks.yaml +0 -0
  15. {apify-2.5.1b7 → apify-2.5.1b9}/.github/workflows/update_new_issue.yaml +0 -0
  16. {apify-2.5.1b7 → apify-2.5.1b9}/.gitignore +0 -0
  17. {apify-2.5.1b7 → apify-2.5.1b9}/.markdownlint.yaml +0 -0
  18. {apify-2.5.1b7 → apify-2.5.1b9}/.pre-commit-config.yaml +0 -0
  19. {apify-2.5.1b7 → apify-2.5.1b9}/CONTRIBUTING.md +0 -0
  20. {apify-2.5.1b7 → apify-2.5.1b9}/LICENSE +0 -0
  21. {apify-2.5.1b7 → apify-2.5.1b9}/Makefile +0 -0
  22. {apify-2.5.1b7 → apify-2.5.1b9}/README.md +0 -0
  23. {apify-2.5.1b7 → apify-2.5.1b9}/docs/01_overview/01_introduction.mdx +0 -0
  24. {apify-2.5.1b7 → apify-2.5.1b9}/docs/01_overview/02_running_actors_locally.mdx +0 -0
  25. {apify-2.5.1b7 → apify-2.5.1b9}/docs/01_overview/03_actor_structure.mdx +0 -0
  26. {apify-2.5.1b7 → apify-2.5.1b9}/docs/01_overview/code/01_introduction.py +0 -0
  27. {apify-2.5.1b7 → apify-2.5.1b9}/docs/01_overview/code/actor_structure/__init__.py +0 -0
  28. {apify-2.5.1b7 → apify-2.5.1b9}/docs/01_overview/code/actor_structure/__main__.py +0 -0
  29. {apify-2.5.1b7 → apify-2.5.1b9}/docs/01_overview/code/actor_structure/main.py +0 -0
  30. {apify-2.5.1b7 → apify-2.5.1b9}/docs/01_overview/code/actor_structure/py.typed +0 -0
  31. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/01_beautifulsoup_httpx.mdx +0 -0
  32. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/02_crawlee.mdx +0 -0
  33. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/03_playwright.mdx +0 -0
  34. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/04_selenium.mdx +0 -0
  35. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/05_scrapy.mdx +0 -0
  36. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/code/01_beautifulsoup_httpx.py +0 -0
  37. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/code/02_crawlee_beautifulsoup.py +0 -0
  38. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/code/02_crawlee_playwright.py +0 -0
  39. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/code/03_playwright.py +0 -0
  40. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/code/04_selenium.py +0 -0
  41. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/code/scrapy_project/src/__init__.py +0 -0
  42. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/code/scrapy_project/src/__main__.py +0 -0
  43. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/code/scrapy_project/src/items.py +0 -0
  44. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/code/scrapy_project/src/main.py +0 -0
  45. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/code/scrapy_project/src/py.typed +0 -0
  46. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/code/scrapy_project/src/settings.py +0 -0
  47. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/code/scrapy_project/src/spiders/__init__.py +0 -0
  48. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/code/scrapy_project/src/spiders/py.typed +0 -0
  49. {apify-2.5.1b7 → apify-2.5.1b9}/docs/02_guides/code/scrapy_project/src/spiders/title.py +0 -0
  50. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/01_actor_lifecycle.mdx +0 -0
  51. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/02_actor_input.mdx +0 -0
  52. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/03_storages.mdx +0 -0
  53. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/04_actor_events.mdx +0 -0
  54. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/05_proxy_management.mdx +0 -0
  55. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/06_interacting_with_other_actors.mdx +0 -0
  56. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/07_webhooks.mdx +0 -0
  57. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/08_access_apify_api.mdx +0 -0
  58. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/09_running_webserver.mdx +0 -0
  59. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/10_logging.mdx +0 -0
  60. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/11_configuration.mdx +0 -0
  61. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/12_pay_per_event.mdx +0 -0
  62. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/01_context_manager.py +0 -0
  63. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/01_init_exit.py +0 -0
  64. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/01_reboot.py +0 -0
  65. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/01_status_message.py +0 -0
  66. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/02_input.py +0 -0
  67. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/03_dataset_exports.py +0 -0
  68. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/03_dataset_read_write.py +0 -0
  69. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/03_deleting_storages.py +0 -0
  70. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/03_kvs_iterating.py +0 -0
  71. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/03_kvs_public_url.py +0 -0
  72. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/03_kvs_read_write.py +0 -0
  73. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/03_opening_storages.py +0 -0
  74. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/03_rq.py +0 -0
  75. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/04_actor_events.py +0 -0
  76. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/05_apify_proxy.py +0 -0
  77. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/05_apify_proxy_config.py +0 -0
  78. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/05_custom_proxy.py +0 -0
  79. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/05_custom_proxy_function.py +0 -0
  80. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/05_proxy_actor_input.py +0 -0
  81. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/05_proxy_httpx.py +0 -0
  82. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/05_proxy_rotation.py +0 -0
  83. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/06_interacting_call.py +0 -0
  84. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/06_interacting_call_task.py +0 -0
  85. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/06_interacting_metamorph.py +0 -0
  86. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/06_interacting_start.py +0 -0
  87. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/07_webhook.py +0 -0
  88. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/07_webhook_preventing.py +0 -0
  89. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/08_actor_client.py +0 -0
  90. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/08_actor_new_client.py +0 -0
  91. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/09_webserver.py +0 -0
  92. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/10_log_config.py +0 -0
  93. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/10_logger_usage.py +0 -0
  94. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/11_config.py +0 -0
  95. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/actor_charge.py +0 -0
  96. {apify-2.5.1b7 → apify-2.5.1b9}/docs/03_concepts/code/conditional_actor_charge.py +0 -0
  97. {apify-2.5.1b7 → apify-2.5.1b9}/docs/04_upgrading/upgrading_to_v2.md +0 -0
  98. {apify-2.5.1b7 → apify-2.5.1b9}/docs/pyproject.toml +0 -0
  99. {apify-2.5.1b7 → apify-2.5.1b9}/renovate.json +0 -0
  100. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/__init__.py +0 -0
  101. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/_actor.py +0 -0
  102. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/_charging.py +0 -0
  103. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/_configuration.py +0 -0
  104. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/_consts.py +0 -0
  105. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/_crypto.py +0 -0
  106. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/_models.py +0 -0
  107. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/_platform_event_manager.py +0 -0
  108. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/_utils.py +0 -0
  109. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/apify_storage_client/__init__.py +0 -0
  110. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/apify_storage_client/_apify_storage_client.py +0 -0
  111. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/apify_storage_client/_dataset_client.py +0 -0
  112. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/apify_storage_client/_dataset_collection_client.py +0 -0
  113. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/apify_storage_client/_key_value_store_client.py +0 -0
  114. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/apify_storage_client/_key_value_store_collection_client.py +0 -0
  115. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/apify_storage_client/_request_queue_client.py +0 -0
  116. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/apify_storage_client/_request_queue_collection_client.py +0 -0
  117. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/apify_storage_client/py.typed +0 -0
  118. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/log.py +0 -0
  119. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/py.typed +0 -0
  120. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/scrapy/__init__.py +0 -0
  121. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/scrapy/_actor_runner.py +0 -0
  122. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/scrapy/_async_thread.py +0 -0
  123. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/scrapy/_logging_config.py +0 -0
  124. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/scrapy/extensions/__init__.py +0 -0
  125. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/scrapy/extensions/_httpcache.py +0 -0
  126. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/scrapy/middlewares/__init__.py +0 -0
  127. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/scrapy/middlewares/apify_proxy.py +0 -0
  128. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/scrapy/middlewares/py.typed +0 -0
  129. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/scrapy/pipelines/__init__.py +0 -0
  130. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/scrapy/pipelines/actor_dataset_push.py +0 -0
  131. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/scrapy/pipelines/py.typed +0 -0
  132. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/scrapy/py.typed +0 -0
  133. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/scrapy/requests.py +0 -0
  134. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/scrapy/scheduler.py +0 -0
  135. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/scrapy/utils.py +0 -0
  136. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/storages/__init__.py +0 -0
  137. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/storages/_request_list.py +0 -0
  138. {apify-2.5.1b7 → apify-2.5.1b9}/src/apify/storages/py.typed +0 -0
  139. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/README.md +0 -0
  140. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/__init__.py +0 -0
  141. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/_utils.py +0 -0
  142. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/actor_source_base/Dockerfile +0 -0
  143. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/actor_source_base/requirements.txt +0 -0
  144. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/actor_source_base/src/__init__.py +0 -0
  145. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/actor_source_base/src/__main__.py +0 -0
  146. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/actor_source_base/src/main.py +0 -0
  147. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/conftest.py +0 -0
  148. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/test_actor_api_helpers.py +0 -0
  149. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/test_actor_charge.py +0 -0
  150. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/test_actor_create_proxy_configuration.py +0 -0
  151. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/test_actor_dataset.py +0 -0
  152. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/test_actor_events.py +0 -0
  153. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/test_actor_key_value_store.py +0 -0
  154. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/test_actor_lifecycle.py +0 -0
  155. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/test_actor_log.py +0 -0
  156. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/test_actor_request_queue.py +0 -0
  157. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/test_actor_scrapy.py +0 -0
  158. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/test_fixtures.py +0 -0
  159. {apify-2.5.1b7 → apify-2.5.1b9}/tests/integration/test_request_queue.py +0 -0
  160. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/__init__.py +0 -0
  161. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/actor/__init__.py +0 -0
  162. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/actor/test_actor_create_proxy_configuration.py +0 -0
  163. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/actor/test_actor_dataset.py +0 -0
  164. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/actor/test_actor_env_helpers.py +0 -0
  165. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/actor/test_actor_helpers.py +0 -0
  166. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/actor/test_actor_key_value_store.py +0 -0
  167. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/actor/test_actor_lifecycle.py +0 -0
  168. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/actor/test_actor_log.py +0 -0
  169. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/actor/test_actor_non_default_instance.py +0 -0
  170. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/actor/test_actor_request_queue.py +0 -0
  171. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/actor/test_configuration.py +0 -0
  172. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/actor/test_request_list.py +0 -0
  173. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/conftest.py +0 -0
  174. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/scrapy/__init__.py +0 -0
  175. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/scrapy/extensions/__init__.py +0 -0
  176. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/scrapy/extensions/test_httpcache.py +0 -0
  177. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/scrapy/middlewares/__init__.py +0 -0
  178. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/scrapy/middlewares/test_apify_proxy.py +0 -0
  179. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/scrapy/pipelines/__init__.py +0 -0
  180. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/scrapy/pipelines/test_actor_dataset_push.py +0 -0
  181. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/scrapy/requests/__init__.py +0 -0
  182. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/scrapy/requests/test_to_apify_request.py +0 -0
  183. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/scrapy/requests/test_to_scrapy_request.py +0 -0
  184. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/scrapy/utils/__init__.py +0 -0
  185. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/scrapy/utils/test_apply_apify_settings.py +0 -0
  186. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/scrapy/utils/test_get_basic_auth_header.py +0 -0
  187. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/test_crypto.py +0 -0
  188. {apify-2.5.1b7 → apify-2.5.1b9}/tests/unit/test_platform_event_manager.py +0 -0
  189. {apify-2.5.1b7 → apify-2.5.1b9}/website/.eslintrc.json +0 -0
  190. {apify-2.5.1b7 → apify-2.5.1b9}/website/babel.config.js +0 -0
  191. {apify-2.5.1b7 → apify-2.5.1b9}/website/build_api_reference.sh +0 -0
  192. {apify-2.5.1b7 → apify-2.5.1b9}/website/docusaurus.config.js +0 -0
  193. {apify-2.5.1b7 → apify-2.5.1b9}/website/generate_module_shortcuts.py +0 -0
  194. {apify-2.5.1b7 → apify-2.5.1b9}/website/package.json +0 -0
  195. {apify-2.5.1b7 → apify-2.5.1b9}/website/sidebars.js +0 -0
  196. {apify-2.5.1b7 → apify-2.5.1b9}/website/src/components/ApiLink.jsx +0 -0
  197. {apify-2.5.1b7 → apify-2.5.1b9}/website/src/components/Gradients.jsx +0 -0
  198. {apify-2.5.1b7 → apify-2.5.1b9}/website/src/components/Highlights.jsx +0 -0
  199. {apify-2.5.1b7 → apify-2.5.1b9}/website/src/components/Highlights.module.css +0 -0
  200. {apify-2.5.1b7 → apify-2.5.1b9}/website/src/components/RunnableCodeBlock.jsx +0 -0
  201. {apify-2.5.1b7 → apify-2.5.1b9}/website/src/components/RunnableCodeBlock.module.css +0 -0
  202. {apify-2.5.1b7 → apify-2.5.1b9}/website/src/css/custom.css +0 -0
  203. {apify-2.5.1b7 → apify-2.5.1b9}/website/src/pages/home_page_example.py +0 -0
  204. {apify-2.5.1b7 → apify-2.5.1b9}/website/src/pages/index.js +0 -0
  205. {apify-2.5.1b7 → apify-2.5.1b9}/website/src/pages/index.module.css +0 -0
  206. {apify-2.5.1b7 → apify-2.5.1b9}/website/static/.nojekyll +0 -0
  207. {apify-2.5.1b7 → apify-2.5.1b9}/website/static/img/docs-og.png +0 -0
  208. {apify-2.5.1b7 → apify-2.5.1b9}/website/tools/docs-prettier.config.js +0 -0
  209. {apify-2.5.1b7 → apify-2.5.1b9}/website/tools/utils/externalLink.js +0 -0
@@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file.
8
8
  ### 🐛 Bug Fixes
9
9
 
10
10
  - Fix duplicate logs from apify logger in Scrapy integration ([#457](https://github.com/apify/apify-sdk-python/pull/457)) ([2745ee6](https://github.com/apify/apify-sdk-python/commit/2745ee6529deecb4f2838c764b9bb3fb6606762b)) by [@vdusek](https://github.com/vdusek), closes [#391](https://github.com/apify/apify-sdk-python/issues/391)
11
+ - Prefer proxy password from env var ([#468](https://github.com/apify/apify-sdk-python/pull/468)) ([1c4ad9b](https://github.com/apify/apify-sdk-python/commit/1c4ad9bcfbf6ac404f942d7d2d249b036c2e7f54)) by [@stepskop](https://github.com/stepskop)
11
12
 
12
13
 
13
14
  <!-- git-cliff-unreleased-end -->
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apify
3
- Version: 2.5.1b7
3
+ Version: 2.5.1b9
4
4
  Summary: Apify SDK for Python
5
5
  Project-URL: Homepage, https://docs.apify.com/sdk/python/
6
6
  Project-URL: Apify homepage, https://apify.com
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "apify"
7
- version = "2.5.1b7"
7
+ version = "2.5.1b9"
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" }
@@ -178,7 +178,9 @@ class ProxyConfiguration(CrawleeProxyConfiguration):
178
178
  self._country_code = country_code
179
179
 
180
180
  async def initialize(self) -> None:
181
- """Load the Apify Proxy password if the API token is provided and check access to Apify Proxy and proxy groups.
181
+ """Check if using proxy, if so, check the access.
182
+
183
+ Load the Apify Proxy password from API (only if not passed to constructor or through env var).
182
184
 
183
185
  Only called if Apify Proxy configuration is used. Also checks if country has access to Apify Proxy groups
184
186
  if the country code is provided.
@@ -187,7 +189,17 @@ class ProxyConfiguration(CrawleeProxyConfiguration):
187
189
  `ProxyConfiguration` instance instead of calling this manually.
188
190
  """
189
191
  if self._uses_apify_proxy:
190
- await self._maybe_fetch_password()
192
+ if not self._password:
193
+ await self._maybe_fetch_password()
194
+ if not self._password:
195
+ raise ValueError(
196
+ 'Apify Proxy password must be provided using the "password" constructor argument '
197
+ f'or the "{ApifyEnvVars.PROXY_PASSWORD}" environment variable. '
198
+ f'You can also provide your Apify token via the "${ApifyEnvVars.TOKEN}" environment variable, '
199
+ f'so that the SDK can fetch the proxy password from Apify API, '
200
+ f'when not provided through constructor or ${ApifyEnvVars.PROXY_PASSWORD}.'
201
+ )
202
+
191
203
  await self._check_access()
192
204
 
193
205
  async def new_proxy_info(
@@ -255,22 +267,7 @@ class ProxyConfiguration(CrawleeProxyConfiguration):
255
267
  user_info = await self._apify_client.user().get()
256
268
  if user_info:
257
269
  password = user_info['proxy']['password']
258
-
259
- if self._password:
260
- if self._password != password:
261
- logger.warning(
262
- 'The Apify Proxy password you provided belongs to a different user than the Apify '
263
- 'token you are using. Are you sure this is correct?'
264
- )
265
- else:
266
- self._password = password
267
-
268
- if not self._password:
269
- raise ValueError(
270
- 'Apify Proxy password must be provided using the "password" constructor argument '
271
- f'or the "{ApifyEnvVars.PROXY_PASSWORD}" environment variable. If you add '
272
- f'the "{ApifyEnvVars.TOKEN}" environment variable, the password will be automatically inferred.'
273
- )
270
+ self._password = password
274
271
 
275
272
  async def _check_access(self) -> None:
276
273
  proxy_status_url = f'{self._configuration.proxy_status_url}/?format=json'
@@ -432,6 +432,36 @@ async def test_initialize_with_manual_password(monkeypatch: pytest.MonkeyPatch,
432
432
  assert proxy_configuration.is_man_in_the_middle is False
433
433
 
434
434
 
435
+ async def test_initialize_prefering_password_from_env_over_calling_api(
436
+ monkeypatch: pytest.MonkeyPatch,
437
+ respx_mock: MockRouter,
438
+ patched_apify_client: ApifyClientAsync,
439
+ ) -> None:
440
+ dummy_proxy_status_url = 'http://dummy-proxy-status-url.com'
441
+ monkeypatch.setenv(ApifyEnvVars.PROXY_STATUS_URL.value, dummy_proxy_status_url)
442
+ monkeypatch.setenv(ApifyEnvVars.PROXY_PASSWORD.value, DUMMY_PASSWORD)
443
+
444
+ respx_mock.get(dummy_proxy_status_url).mock(
445
+ httpx.Response(
446
+ 200,
447
+ json={
448
+ 'connected': True,
449
+ 'connectionError': None,
450
+ 'isManInTheMiddle': False,
451
+ },
452
+ )
453
+ )
454
+
455
+ proxy_configuration = ProxyConfiguration()
456
+
457
+ await proxy_configuration.initialize()
458
+
459
+ assert proxy_configuration._password == DUMMY_PASSWORD
460
+ assert proxy_configuration.is_man_in_the_middle is False
461
+
462
+ assert len(patched_apify_client.calls['user']['get']) == 0 # type: ignore[attr-defined]
463
+
464
+
435
465
  @pytest.mark.skip(reason='There are issues with log propagation to caplog, see issue #462.')
436
466
  async def test_initialize_with_manual_password_different_than_user_one(
437
467
  monkeypatch: pytest.MonkeyPatch,
@@ -1,6 +1,10 @@
1
1
  version = 1
2
2
  revision = 2
3
3
  requires-python = ">=3.9"
4
+ resolution-markers = [
5
+ "python_full_version >= '3.10'",
6
+ "python_full_version < '3.10'",
7
+ ]
4
8
 
5
9
  [[package]]
6
10
  name = "annotated-types"
@@ -154,7 +158,8 @@ name = "black"
154
158
  version = "23.12.1"
155
159
  source = { registry = "https://pypi.org/simple" }
156
160
  dependencies = [
157
- { name = "click" },
161
+ { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
162
+ { name = "click", version = "8.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
158
163
  { name = "mypy-extensions" },
159
164
  { name = "packaging" },
160
165
  { name = "pathspec" },
@@ -301,7 +306,8 @@ name = "browserforge"
301
306
  version = "1.2.3"
302
307
  source = { registry = "https://pypi.org/simple" }
303
308
  dependencies = [
304
- { name = "click" },
309
+ { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
310
+ { name = "click", version = "8.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
305
311
  { name = "typing-extensions", marker = "python_full_version < '3.10'" },
306
312
  ]
307
313
  sdist = { url = "https://files.pythonhosted.org/packages/df/5c/fe4d8cc5d5e61a5b1585190bba19d25bb76c45fdfe9c7bf264f5301fcf33/browserforge-1.2.3.tar.gz", hash = "sha256:d5bec6dffd4748b30fbac9f9c1ef33b26c01a23185240bf90011843e174b7ecc", size = 38072, upload-time = "2025-01-29T09:45:48.711Z" }
@@ -499,14 +505,32 @@ wheels = [
499
505
  name = "click"
500
506
  version = "8.1.8"
501
507
  source = { registry = "https://pypi.org/simple" }
508
+ resolution-markers = [
509
+ "python_full_version < '3.10'",
510
+ ]
502
511
  dependencies = [
503
- { name = "colorama", marker = "sys_platform == 'win32'" },
512
+ { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" },
504
513
  ]
505
514
  sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" }
506
515
  wheels = [
507
516
  { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" },
508
517
  ]
509
518
 
519
+ [[package]]
520
+ name = "click"
521
+ version = "8.2.0"
522
+ source = { registry = "https://pypi.org/simple" }
523
+ resolution-markers = [
524
+ "python_full_version >= '3.10'",
525
+ ]
526
+ dependencies = [
527
+ { name = "colorama", marker = "python_full_version >= '3.10' and sys_platform == 'win32'" },
528
+ ]
529
+ sdist = { url = "https://files.pythonhosted.org/packages/cd/0f/62ca20172d4f87d93cf89665fbaedcd560ac48b465bd1d92bfc7ea6b0a41/click-8.2.0.tar.gz", hash = "sha256:f5452aeddd9988eefa20f90f05ab66f17fce1ee2a36907fd30b05bbb5953814d", size = 235857, upload-time = "2025-05-10T22:21:03.111Z" }
530
+ wheels = [
531
+ { url = "https://files.pythonhosted.org/packages/a2/58/1f37bf81e3c689cc74ffa42102fa8915b59085f54a6e4a80bc6265c0f6bf/click-8.2.0-py3-none-any.whl", hash = "sha256:6b303f0b2aa85f1cb4e5303078fadcbcd4e476f114fab9b5007005711839325c", size = 102156, upload-time = "2025-05-10T22:21:01.352Z" },
532
+ ]
533
+
510
534
  [[package]]
511
535
  name = "colorama"
512
536
  version = "0.4.6"
@@ -758,16 +782,16 @@ wheels = [
758
782
 
759
783
  [[package]]
760
784
  name = "docspec"
761
- version = "2.2.1"
785
+ version = "2.2.2"
762
786
  source = { registry = "https://pypi.org/simple" }
763
787
  dependencies = [
764
788
  { name = "databind-core" },
765
789
  { name = "databind-json" },
766
790
  { name = "deprecated" },
767
791
  ]
768
- sdist = { url = "https://files.pythonhosted.org/packages/3c/39/7a71382107445b2cd50c67c6194e3e584f19748a817c3b29e8be8a14f00f/docspec-2.2.1.tar.gz", hash = "sha256:4854e77edc0e2de40e785e57e95880f7095a05fe978f8b54cef7a269586e15ff", size = 8646, upload-time = "2023-05-28T11:24:18.68Z" }
792
+ sdist = { url = "https://files.pythonhosted.org/packages/8b/fe/1ad244d0ca186b5386050ec30dfd59bd3dbeea5baec33ca861dd43b922e6/docspec-2.2.2.tar.gz", hash = "sha256:c772c6facfce839176b647701082c7a22b3d22d872d392552cf5d65e0348c919", size = 14086, upload-time = "2025-05-06T12:39:59.466Z" }
769
793
  wheels = [
770
- { url = "https://files.pythonhosted.org/packages/33/aa/0c9d71cc9d450afd3993d09835e2910810a45b0703f585e1aee1d9b78969/docspec-2.2.1-py3-none-any.whl", hash = "sha256:7538f750095a9688c6980ff9a4e029a823a500f64bd00b6b4bdb27951feb31cb", size = 9844, upload-time = "2023-05-28T11:24:15.419Z" },
794
+ { url = "https://files.pythonhosted.org/packages/38/57/1011f2e88743a818cced9a95d54200ba6a05decaf43fd91d8c6ed9f6470d/docspec-2.2.2-py3-none-any.whl", hash = "sha256:854d25401e7ec2d155b0c1e001e25819d16b6df3a7575212a7f340ae8b00122e", size = 9726, upload-time = "2025-05-06T12:39:58.047Z" },
771
795
  ]
772
796
 
773
797
  [[package]]
@@ -801,11 +825,14 @@ wheels = [
801
825
 
802
826
  [[package]]
803
827
  name = "exceptiongroup"
804
- version = "1.2.2"
828
+ version = "1.3.0"
805
829
  source = { registry = "https://pypi.org/simple" }
806
- sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883, upload-time = "2024-07-12T22:26:00.161Z" }
830
+ dependencies = [
831
+ { name = "typing-extensions", marker = "python_full_version < '3.13'" },
832
+ ]
833
+ sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" }
807
834
  wheels = [
808
- { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453, upload-time = "2024-07-12T22:25:58.476Z" },
835
+ { url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10", size = 16674, upload-time = "2025-05-10T17:42:49.33Z" },
809
836
  ]
810
837
 
811
838
  [[package]]
@@ -1482,11 +1509,11 @@ wheels = [
1482
1509
 
1483
1510
  [[package]]
1484
1511
  name = "platformdirs"
1485
- version = "4.3.7"
1512
+ version = "4.3.8"
1486
1513
  source = { registry = "https://pypi.org/simple" }
1487
- sdist = { url = "https://files.pythonhosted.org/packages/b6/2d/7d512a3913d60623e7eb945c6d1b4f0bddf1d0b7ada5225274c87e5b53d1/platformdirs-4.3.7.tar.gz", hash = "sha256:eb437d586b6a0986388f0d6f74aa0cde27b48d0e3d66843640bfb6bdcdb6e351", size = 21291, upload-time = "2025-03-19T20:36:10.989Z" }
1514
+ sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362, upload-time = "2025-05-07T22:47:42.121Z" }
1488
1515
  wheels = [
1489
- { url = "https://files.pythonhosted.org/packages/6d/45/59578566b3275b8fd9157885918fcd0c4d74162928a5310926887b856a51/platformdirs-4.3.7-py3-none-any.whl", hash = "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94", size = 18499, upload-time = "2025-03-19T20:36:09.038Z" },
1516
+ { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567, upload-time = "2025-05-07T22:47:40.376Z" },
1490
1517
  ]
1491
1518
 
1492
1519
  [[package]]
@@ -1824,7 +1851,8 @@ name = "pydoc-markdown"
1824
1851
  version = "4.8.2"
1825
1852
  source = { registry = "https://pypi.org/simple" }
1826
1853
  dependencies = [
1827
- { name = "click" },
1854
+ { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
1855
+ { name = "click", version = "8.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
1828
1856
  { name = "databind-core" },
1829
1857
  { name = "databind-json" },
1830
1858
  { name = "docspec" },
@@ -2064,32 +2092,32 @@ wheels = [
2064
2092
 
2065
2093
  [[package]]
2066
2094
  name = "ruff"
2067
- version = "0.11.8"
2068
- source = { registry = "https://pypi.org/simple" }
2069
- sdist = { url = "https://files.pythonhosted.org/packages/52/f6/adcf73711f31c9f5393862b4281c875a462d9f639f4ccdf69dc368311c20/ruff-0.11.8.tar.gz", hash = "sha256:6d742d10626f9004b781f4558154bb226620a7242080e11caeffab1a40e99df8", size = 4086399, upload-time = "2025-05-01T14:53:24.459Z" }
2070
- wheels = [
2071
- { url = "https://files.pythonhosted.org/packages/9f/60/c6aa9062fa518a9f86cb0b85248245cddcd892a125ca00441df77d79ef88/ruff-0.11.8-py3-none-linux_armv6l.whl", hash = "sha256:896a37516c594805e34020c4a7546c8f8a234b679a7716a3f08197f38913e1a3", size = 10272473, upload-time = "2025-05-01T14:52:37.252Z" },
2072
- { url = "https://files.pythonhosted.org/packages/a0/e4/0325e50d106dc87c00695f7bcd5044c6d252ed5120ebf423773e00270f50/ruff-0.11.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ab86d22d3d721a40dd3ecbb5e86ab03b2e053bc93c700dc68d1c3346b36ce835", size = 11040862, upload-time = "2025-05-01T14:52:41.022Z" },
2073
- { url = "https://files.pythonhosted.org/packages/e6/27/b87ea1a7be37fef0adbc7fd987abbf90b6607d96aa3fc67e2c5b858e1e53/ruff-0.11.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:258f3585057508d317610e8a412788cf726efeefa2fec4dba4001d9e6f90d46c", size = 10385273, upload-time = "2025-05-01T14:52:43.551Z" },
2074
- { url = "https://files.pythonhosted.org/packages/d3/f7/3346161570d789045ed47a86110183f6ac3af0e94e7fd682772d89f7f1a1/ruff-0.11.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:727d01702f7c30baed3fc3a34901a640001a2828c793525043c29f7614994a8c", size = 10578330, upload-time = "2025-05-01T14:52:45.48Z" },
2075
- { url = "https://files.pythonhosted.org/packages/c6/c3/327fb950b4763c7b3784f91d3038ef10c13b2d42322d4ade5ce13a2f9edb/ruff-0.11.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3dca977cc4fc8f66e89900fa415ffe4dbc2e969da9d7a54bfca81a128c5ac219", size = 10122223, upload-time = "2025-05-01T14:52:47.675Z" },
2076
- { url = "https://files.pythonhosted.org/packages/de/c7/ba686bce9adfeb6c61cb1bbadc17d58110fe1d602f199d79d4c880170f19/ruff-0.11.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c657fa987d60b104d2be8b052d66da0a2a88f9bd1d66b2254333e84ea2720c7f", size = 11697353, upload-time = "2025-05-01T14:52:50.264Z" },
2077
- { url = "https://files.pythonhosted.org/packages/53/8e/a4fb4a1ddde3c59e73996bb3ac51844ff93384d533629434b1def7a336b0/ruff-0.11.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f2e74b021d0de5eceb8bd32919f6ff8a9b40ee62ed97becd44993ae5b9949474", size = 12375936, upload-time = "2025-05-01T14:52:52.394Z" },
2078
- { url = "https://files.pythonhosted.org/packages/ad/a1/9529cb1e2936e2479a51aeb011307e7229225df9ac64ae064d91ead54571/ruff-0.11.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f9b5ef39820abc0f2c62111f7045009e46b275f5b99d5e59dda113c39b7f4f38", size = 11850083, upload-time = "2025-05-01T14:52:55.424Z" },
2079
- { url = "https://files.pythonhosted.org/packages/3e/94/8f7eac4c612673ae15a4ad2bc0ee62e03c68a2d4f458daae3de0e47c67ba/ruff-0.11.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1dba3135ca503727aa4648152c0fa67c3b1385d3dc81c75cd8a229c4b2a1458", size = 14005834, upload-time = "2025-05-01T14:52:58.056Z" },
2080
- { url = "https://files.pythonhosted.org/packages/1e/7c/6f63b46b2be870cbf3f54c9c4154d13fac4b8827f22fa05ac835c10835b2/ruff-0.11.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f024d32e62faad0f76b2d6afd141b8c171515e4fb91ce9fd6464335c81244e5", size = 11503713, upload-time = "2025-05-01T14:53:01.244Z" },
2081
- { url = "https://files.pythonhosted.org/packages/3a/91/57de411b544b5fe072779678986a021d87c3ee5b89551f2ca41200c5d643/ruff-0.11.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d365618d3ad747432e1ae50d61775b78c055fee5936d77fb4d92c6f559741948", size = 10457182, upload-time = "2025-05-01T14:53:03.726Z" },
2082
- { url = "https://files.pythonhosted.org/packages/01/49/cfe73e0ce5ecdd3e6f1137bf1f1be03dcc819d1bfe5cff33deb40c5926db/ruff-0.11.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:4d9aaa91035bdf612c8ee7266153bcf16005c7c7e2f5878406911c92a31633cb", size = 10101027, upload-time = "2025-05-01T14:53:06.555Z" },
2083
- { url = "https://files.pythonhosted.org/packages/56/21/a5cfe47c62b3531675795f38a0ef1c52ff8de62eaddf370d46634391a3fb/ruff-0.11.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0eba551324733efc76116d9f3a0d52946bc2751f0cd30661564117d6fd60897c", size = 11111298, upload-time = "2025-05-01T14:53:08.825Z" },
2084
- { url = "https://files.pythonhosted.org/packages/36/98/f76225f87e88f7cb669ae92c062b11c0a1e91f32705f829bd426f8e48b7b/ruff-0.11.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:161eb4cff5cfefdb6c9b8b3671d09f7def2f960cee33481dd898caf2bcd02304", size = 11566884, upload-time = "2025-05-01T14:53:11.626Z" },
2085
- { url = "https://files.pythonhosted.org/packages/de/7e/fff70b02e57852fda17bd43f99dda37b9bcf3e1af3d97c5834ff48d04715/ruff-0.11.8-py3-none-win32.whl", hash = "sha256:5b18caa297a786465cc511d7f8be19226acf9c0a1127e06e736cd4e1878c3ea2", size = 10451102, upload-time = "2025-05-01T14:53:14.303Z" },
2086
- { url = "https://files.pythonhosted.org/packages/7b/a9/eaa571eb70648c9bde3120a1d5892597de57766e376b831b06e7c1e43945/ruff-0.11.8-py3-none-win_amd64.whl", hash = "sha256:6e70d11043bef637c5617297bdedec9632af15d53ac1e1ba29c448da9341b0c4", size = 11597410, upload-time = "2025-05-01T14:53:16.571Z" },
2087
- { url = "https://files.pythonhosted.org/packages/cd/be/f6b790d6ae98f1f32c645f8540d5c96248b72343b0a56fab3a07f2941897/ruff-0.11.8-py3-none-win_arm64.whl", hash = "sha256:304432e4c4a792e3da85b7699feb3426a0908ab98bf29df22a31b0cdd098fac2", size = 10713129, upload-time = "2025-05-01T14:53:22.27Z" },
2095
+ version = "0.11.9"
2096
+ source = { registry = "https://pypi.org/simple" }
2097
+ sdist = { url = "https://files.pythonhosted.org/packages/f5/e7/e55dda1c92cdcf34b677ebef17486669800de01e887b7831a1b8fdf5cb08/ruff-0.11.9.tar.gz", hash = "sha256:ebd58d4f67a00afb3a30bf7d383e52d0e036e6195143c6db7019604a05335517", size = 4132134, upload-time = "2025-05-09T16:19:41.511Z" }
2098
+ wheels = [
2099
+ { url = "https://files.pythonhosted.org/packages/fb/71/75dfb7194fe6502708e547941d41162574d1f579c4676a8eb645bf1a6842/ruff-0.11.9-py3-none-linux_armv6l.whl", hash = "sha256:a31a1d143a5e6f499d1fb480f8e1e780b4dfdd580f86e05e87b835d22c5c6f8c", size = 10335453, upload-time = "2025-05-09T16:18:58.2Z" },
2100
+ { url = "https://files.pythonhosted.org/packages/74/fc/ad80c869b1732f53c4232bbf341f33c5075b2c0fb3e488983eb55964076a/ruff-0.11.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:66bc18ca783b97186a1f3100e91e492615767ae0a3be584e1266aa9051990722", size = 11072566, upload-time = "2025-05-09T16:19:01.432Z" },
2101
+ { url = "https://files.pythonhosted.org/packages/87/0d/0ccececef8a0671dae155cbf7a1f90ea2dd1dba61405da60228bbe731d35/ruff-0.11.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:bd576cd06962825de8aece49f28707662ada6a1ff2db848d1348e12c580acbf1", size = 10435020, upload-time = "2025-05-09T16:19:03.897Z" },
2102
+ { url = "https://files.pythonhosted.org/packages/52/01/e249e1da6ad722278094e183cbf22379a9bbe5f21a3e46cef24ccab76e22/ruff-0.11.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b1d18b4be8182cc6fddf859ce432cc9631556e9f371ada52f3eaefc10d878de", size = 10593935, upload-time = "2025-05-09T16:19:06.455Z" },
2103
+ { url = "https://files.pythonhosted.org/packages/ed/9a/40cf91f61e3003fe7bd43f1761882740e954506c5a0f9097b1cff861f04c/ruff-0.11.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0f3f46f759ac623e94824b1e5a687a0df5cd7f5b00718ff9c24f0a894a683be7", size = 10172971, upload-time = "2025-05-09T16:19:10.261Z" },
2104
+ { url = "https://files.pythonhosted.org/packages/61/12/d395203de1e8717d7a2071b5a340422726d4736f44daf2290aad1085075f/ruff-0.11.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f34847eea11932d97b521450cf3e1d17863cfa5a94f21a056b93fb86f3f3dba2", size = 11748631, upload-time = "2025-05-09T16:19:12.307Z" },
2105
+ { url = "https://files.pythonhosted.org/packages/66/d6/ef4d5eba77677eab511644c37c55a3bb8dcac1cdeb331123fe342c9a16c9/ruff-0.11.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f33b15e00435773df97cddcd263578aa83af996b913721d86f47f4e0ee0ff271", size = 12409236, upload-time = "2025-05-09T16:19:15.006Z" },
2106
+ { url = "https://files.pythonhosted.org/packages/c5/8f/5a2c5fc6124dd925a5faf90e1089ee9036462118b619068e5b65f8ea03df/ruff-0.11.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b27613a683b086f2aca8996f63cb3dd7bc49e6eccf590563221f7b43ded3f65", size = 11881436, upload-time = "2025-05-09T16:19:17.063Z" },
2107
+ { url = "https://files.pythonhosted.org/packages/39/d1/9683f469ae0b99b95ef99a56cfe8c8373c14eba26bd5c622150959ce9f64/ruff-0.11.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e0d88756e63e8302e630cee3ce2ffb77859797cc84a830a24473939e6da3ca6", size = 13982759, upload-time = "2025-05-09T16:19:19.693Z" },
2108
+ { url = "https://files.pythonhosted.org/packages/4e/0b/c53a664f06e0faab596397867c6320c3816df479e888fe3af63bc3f89699/ruff-0.11.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:537c82c9829d7811e3aa680205f94c81a2958a122ac391c0eb60336ace741a70", size = 11541985, upload-time = "2025-05-09T16:19:21.831Z" },
2109
+ { url = "https://files.pythonhosted.org/packages/23/a0/156c4d7e685f6526a636a60986ee4a3c09c8c4e2a49b9a08c9913f46c139/ruff-0.11.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:440ac6a7029f3dee7d46ab7de6f54b19e34c2b090bb4f2480d0a2d635228f381", size = 10465775, upload-time = "2025-05-09T16:19:24.401Z" },
2110
+ { url = "https://files.pythonhosted.org/packages/43/d5/88b9a6534d9d4952c355e38eabc343df812f168a2c811dbce7d681aeb404/ruff-0.11.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:71c539bac63d0788a30227ed4d43b81353c89437d355fdc52e0cda4ce5651787", size = 10170957, upload-time = "2025-05-09T16:19:27.08Z" },
2111
+ { url = "https://files.pythonhosted.org/packages/f0/b8/2bd533bdaf469dc84b45815ab806784d561fab104d993a54e1852596d581/ruff-0.11.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c67117bc82457e4501473c5f5217d49d9222a360794bfb63968e09e70f340abd", size = 11143307, upload-time = "2025-05-09T16:19:29.462Z" },
2112
+ { url = "https://files.pythonhosted.org/packages/2f/d9/43cfba291788459b9bfd4e09a0479aa94d05ab5021d381a502d61a807ec1/ruff-0.11.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e4b78454f97aa454586e8a5557facb40d683e74246c97372af3c2d76901d697b", size = 11603026, upload-time = "2025-05-09T16:19:31.569Z" },
2113
+ { url = "https://files.pythonhosted.org/packages/22/e6/7ed70048e89b01d728ccc950557a17ecf8df4127b08a56944b9d0bae61bc/ruff-0.11.9-py3-none-win32.whl", hash = "sha256:7fe1bc950e7d7b42caaee2a8a3bc27410547cc032c9558ee2e0f6d3b209e845a", size = 10548627, upload-time = "2025-05-09T16:19:33.657Z" },
2114
+ { url = "https://files.pythonhosted.org/packages/90/36/1da5d566271682ed10f436f732e5f75f926c17255c9c75cefb77d4bf8f10/ruff-0.11.9-py3-none-win_amd64.whl", hash = "sha256:52edaa4a6d70f8180343a5b7f030c7edd36ad180c9f4d224959c2d689962d964", size = 11634340, upload-time = "2025-05-09T16:19:35.815Z" },
2115
+ { url = "https://files.pythonhosted.org/packages/40/f7/70aad26e5877c8f7ee5b161c4c9fa0100e63fc4c944dc6d97b9c7e871417/ruff-0.11.9-py3-none-win_arm64.whl", hash = "sha256:bcf42689c22f2e240f496d0c183ef2c6f7b35e809f12c1db58f75d9aa8d630ca", size = 10741080, upload-time = "2025-05-09T16:19:39.605Z" },
2088
2116
  ]
2089
2117
 
2090
2118
  [[package]]
2091
2119
  name = "scrapy"
2092
- version = "2.12.0"
2120
+ version = "2.13.0"
2093
2121
  source = { registry = "https://pypi.org/simple" }
2094
2122
  dependencies = [
2095
2123
  { name = "cryptography" },
@@ -2111,9 +2139,9 @@ dependencies = [
2111
2139
  { name = "w3lib" },
2112
2140
  { name = "zope-interface" },
2113
2141
  ]
2114
- sdist = { url = "https://files.pythonhosted.org/packages/f8/52/b0f4ded03c5966e7e90c607bb9aa7e3c5b228cb1d7051325fde017c46987/scrapy-2.12.0.tar.gz", hash = "sha256:d66d6e76009b12447604196875a463b61d10721140032a8084a0a52df7f4788f", size = 1210998, upload-time = "2024-11-18T08:34:21.295Z" }
2142
+ sdist = { url = "https://files.pythonhosted.org/packages/8a/db/6acda5c8c407dbb1a210a7a9732f86ed7eacb22bd500b589a13716e634cb/scrapy-2.13.0.tar.gz", hash = "sha256:9661629805ff0e43054cc1306d9b13236c6bb9565d8d8e303a332c8da045d90f", size = 1213803, upload-time = "2025-05-08T09:45:06.075Z" }
2115
2143
  wheels = [
2116
- { url = "https://files.pythonhosted.org/packages/e8/43/2cc828e9b7a453d791afbe3ef36c951f4641fc1d886b6d39e9455c5468e0/Scrapy-2.12.0-py2.py3-none-any.whl", hash = "sha256:c33e2dc7da42e727390bacb32dd9938a54ac210fa71972b5c392754f478669cd", size = 311170, upload-time = "2024-11-18T08:34:18.62Z" },
2144
+ { url = "https://files.pythonhosted.org/packages/ad/b1/f0add339f50c7eb19ff5ff2de2e3c7c3acd1be04ac8771c279c5ca3a3bd0/scrapy-2.13.0-py3-none-any.whl", hash = "sha256:8ebc28d14e7e603fa29f76d4144c0908398ff51e23b3389e17c62c339adc5ac6", size = 321762, upload-time = "2025-05-08T09:45:03.925Z" },
2117
2145
  ]
2118
2146
 
2119
2147
  [[package]]
@@ -2133,11 +2161,11 @@ wheels = [
2133
2161
 
2134
2162
  [[package]]
2135
2163
  name = "setuptools"
2136
- version = "80.3.1"
2164
+ version = "80.4.0"
2137
2165
  source = { registry = "https://pypi.org/simple" }
2138
- sdist = { url = "https://files.pythonhosted.org/packages/70/dc/3976b322de9d2e87ed0007cf04cc7553969b6c7b3f48a565d0333748fbcd/setuptools-80.3.1.tar.gz", hash = "sha256:31e2c58dbb67c99c289f51c16d899afedae292b978f8051efaf6262d8212f927", size = 1315082, upload-time = "2025-05-04T18:47:04.397Z" }
2166
+ sdist = { url = "https://files.pythonhosted.org/packages/95/32/0cc40fe41fd2adb80a2f388987f4f8db3c866c69e33e0b4c8b093fdf700e/setuptools-80.4.0.tar.gz", hash = "sha256:5a78f61820bc088c8e4add52932ae6b8cf423da2aff268c23f813cfbb13b4006", size = 1315008, upload-time = "2025-05-09T20:42:27.972Z" }
2139
2167
  wheels = [
2140
- { url = "https://files.pythonhosted.org/packages/53/7e/5d8af3317ddbf9519b687bd1c39d8737fde07d97f54df65553faca5cffb1/setuptools-80.3.1-py3-none-any.whl", hash = "sha256:ea8e00d7992054c4c592aeb892f6ad51fe1b4d90cc6947cc45c45717c40ec537", size = 1201172, upload-time = "2025-05-04T18:47:02.575Z" },
2168
+ { url = "https://files.pythonhosted.org/packages/b1/93/dba5ed08c2e31ec7cdc2ce75705a484ef0be1a2fecac8a58272489349de8/setuptools-80.4.0-py3-none-any.whl", hash = "sha256:6cdc8cb9a7d590b237dbe4493614a9b75d0559b888047c1f67d49ba50fc3edb2", size = 1200812, upload-time = "2025-05-09T20:42:25.325Z" },
2141
2169
  ]
2142
2170
 
2143
2171
  [[package]]
@@ -2295,16 +2323,16 @@ wheels = [
2295
2323
 
2296
2324
  [[package]]
2297
2325
  name = "virtualenv"
2298
- version = "20.30.0"
2326
+ version = "20.31.2"
2299
2327
  source = { registry = "https://pypi.org/simple" }
2300
2328
  dependencies = [
2301
2329
  { name = "distlib" },
2302
2330
  { name = "filelock" },
2303
2331
  { name = "platformdirs" },
2304
2332
  ]
2305
- sdist = { url = "https://files.pythonhosted.org/packages/38/e0/633e369b91bbc664df47dcb5454b6c7cf441e8f5b9d0c250ce9f0546401e/virtualenv-20.30.0.tar.gz", hash = "sha256:800863162bcaa5450a6e4d721049730e7f2dae07720e0902b0e4040bd6f9ada8", size = 4346945, upload-time = "2025-03-31T16:33:29.185Z" }
2333
+ sdist = { url = "https://files.pythonhosted.org/packages/56/2c/444f465fb2c65f40c3a104fd0c495184c4f2336d65baf398e3c75d72ea94/virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af", size = 6076316, upload-time = "2025-05-08T17:58:23.811Z" }
2306
2334
  wheels = [
2307
- { url = "https://files.pythonhosted.org/packages/4c/ed/3cfeb48175f0671ec430ede81f628f9fb2b1084c9064ca67ebe8c0ed6a05/virtualenv-20.30.0-py3-none-any.whl", hash = "sha256:e34302959180fca3af42d1800df014b35019490b119eba981af27f2fa486e5d6", size = 4329461, upload-time = "2025-03-31T16:33:26.758Z" },
2335
+ { url = "https://files.pythonhosted.org/packages/f3/40/b1c265d4b2b62b58576588510fc4d1fe60a86319c8de99fd8e9fec617d2c/virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11", size = 6057982, upload-time = "2025-05-08T17:58:21.15Z" },
2308
2336
  ]
2309
2337
 
2310
2338
  [[package]]