crawlee 1.0.3b7__tar.gz → 1.0.3b9__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 crawlee might be problematic. Click here for more details.

Files changed (679) hide show
  1. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/CHANGELOG.md +1 -0
  2. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/PKG-INFO +1 -1
  3. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/pyproject.toml +1 -1
  4. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_service_locator.py +4 -4
  5. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/recoverable_state.py +32 -8
  6. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/statistics/_statistics.py +6 -1
  7. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_file_system/_request_queue_client.py +24 -6
  8. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storages/_key_value_store.py +5 -2
  9. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/conftest.py +5 -0
  10. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/crawlers/_adaptive_playwright/test_adaptive_playwright_crawler.py +0 -1
  11. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/storage_clients/_file_system/test_fs_rq_client.py +10 -2
  12. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/storages/test_key_value_store.py +42 -2
  13. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/storages/test_request_queue.py +31 -0
  14. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/uv.lock +1 -1
  15. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/.editorconfig +0 -0
  16. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/.github/CODEOWNERS +0 -0
  17. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/.github/pull_request_template.md +0 -0
  18. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/.github/workflows/build_and_deploy_docs.yaml +0 -0
  19. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/.github/workflows/check_pr_title.yaml +0 -0
  20. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/.github/workflows/pre_release.yaml +0 -0
  21. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/.github/workflows/release.yaml +0 -0
  22. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/.github/workflows/run_code_checks.yaml +0 -0
  23. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/.github/workflows/templates_e2e_tests.yaml +0 -0
  24. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/.github/workflows/update_new_issue.yaml +0 -0
  25. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/.gitignore +0 -0
  26. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/.markdownlint.yaml +0 -0
  27. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/.pre-commit-config.yaml +0 -0
  28. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/CONTRIBUTING.md +0 -0
  29. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/LICENSE +0 -0
  30. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/Makefile +0 -0
  31. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/README.md +0 -0
  32. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/deployment/apify_platform.mdx +0 -0
  33. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/deployment/code_examples/apify/crawler_as_actor_example.py +0 -0
  34. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/deployment/code_examples/apify/get_public_url.py +0 -0
  35. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/deployment/code_examples/apify/log_with_config_example.py +0 -0
  36. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/deployment/code_examples/apify/proxy_advanced_example.py +0 -0
  37. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/deployment/code_examples/apify/proxy_example.py +0 -0
  38. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/deployment/code_examples/google/cloud_run_example.py +0 -0
  39. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/deployment/code_examples/google/google_example.py +0 -0
  40. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/deployment/google_cloud.mdx +0 -0
  41. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/deployment/google_cloud_run.mdx +0 -0
  42. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/add_data_to_dataset.mdx +0 -0
  43. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/beautifulsoup_crawler.mdx +0 -0
  44. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/capture_screenshot_using_playwright.mdx +0 -0
  45. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/capturing_page_snapshots_with_error_snapshotter.mdx +0 -0
  46. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/adaptive_playwright_crawler.py +0 -0
  47. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/add_data_to_dataset_bs.py +0 -0
  48. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/add_data_to_dataset_dataset.py +0 -0
  49. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/add_data_to_dataset_pw.py +0 -0
  50. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/beautifulsoup_crawler.py +0 -0
  51. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/beautifulsoup_crawler_keep_alive.py +0 -0
  52. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/beautifulsoup_crawler_stop.py +0 -0
  53. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/capture_screenshot_using_playwright.py +0 -0
  54. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/configure_json_logging.py +0 -0
  55. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/crawl_all_links_on_website_bs.py +0 -0
  56. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/crawl_all_links_on_website_pw.py +0 -0
  57. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/crawl_multiple_urls_bs.py +0 -0
  58. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/crawl_multiple_urls_pw.py +0 -0
  59. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/crawl_specific_links_on_website_bs.py +0 -0
  60. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/crawl_specific_links_on_website_pw.py +0 -0
  61. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/crawl_website_with_relative_links_all_links.py +0 -0
  62. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/crawl_website_with_relative_links_same_domain.py +0 -0
  63. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/crawl_website_with_relative_links_same_hostname.py +0 -0
  64. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/crawl_website_with_relative_links_same_origin.py +0 -0
  65. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/export_entire_dataset_to_file_csv.py +0 -0
  66. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/export_entire_dataset_to_file_json.py +0 -0
  67. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/extract_and_add_specific_links_on_website_bs.py +0 -0
  68. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/extract_and_add_specific_links_on_website_pw.py +0 -0
  69. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/fill_and_submit_web_form_crawler.py +0 -0
  70. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/fill_and_submit_web_form_request.py +0 -0
  71. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/parsel_crawler.py +0 -0
  72. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/parsel_crawler_with_error_snapshotter.py +0 -0
  73. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/playwright_block_requests.py +0 -0
  74. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/playwright_crawler.py +0 -0
  75. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/playwright_crawler_with_camoufox.py +0 -0
  76. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/playwright_crawler_with_error_snapshotter.py +0 -0
  77. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/playwright_crawler_with_fingerprint_generator.py +0 -0
  78. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/respect_robots_on_skipped_request.py +0 -0
  79. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/respect_robots_txt_file.py +0 -0
  80. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/resuming_paused_crawl.py +0 -0
  81. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/using_browser_profiles_chrome.py +0 -0
  82. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/code_examples/using_browser_profiles_firefox.py +0 -0
  83. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/crawl_all_links_on_website.mdx +0 -0
  84. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/crawl_multiple_urls.mdx +0 -0
  85. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/crawl_specific_links_on_website.mdx +0 -0
  86. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/crawl_website_with_relative_links.mdx +0 -0
  87. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/crawler_keep_alive.mdx +0 -0
  88. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/crawler_stop.mdx +0 -0
  89. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/export_entire_dataset_to_file.mdx +0 -0
  90. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/fill_and_submit_web_form.mdx +0 -0
  91. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/json_logging.mdx +0 -0
  92. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/parsel_crawler.mdx +0 -0
  93. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/playwright_crawler.mdx +0 -0
  94. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/playwright_crawler_adaptive.mdx +0 -0
  95. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/playwright_crawler_with_block_requests.mdx +0 -0
  96. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/playwright_crawler_with_camoufox.mdx +0 -0
  97. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/playwright_crawler_with_fingerprint_generator.mdx +0 -0
  98. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/respect_robots_txt_file.mdx +0 -0
  99. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/resuming_paused_crawl.mdx +0 -0
  100. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/examples/using_browser_profile.mdx +0 -0
  101. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/architecture_overview.mdx +0 -0
  102. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/avoid_blocking.mdx +0 -0
  103. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/avoid_blocking/default_fingerprint_generator_with_args.py +0 -0
  104. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/avoid_blocking/playwright_with_fingerprint_generator.py +0 -0
  105. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/creating_web_archive/manual_archiving_parsel_crawler.py +0 -0
  106. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/creating_web_archive/manual_archiving_playwright_crawler.py +0 -0
  107. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/creating_web_archive/simple_pw_through_proxy_pywb_server.py +0 -0
  108. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/error_handling/change_handle_error_status.py +0 -0
  109. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/error_handling/disable_retry.py +0 -0
  110. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/error_handling/handle_proxy_error.py +0 -0
  111. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/http_clients/parsel_curl_impersonate_example.py +0 -0
  112. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/http_clients/parsel_httpx_example.py +0 -0
  113. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/http_clients/parsel_impit_example.py +0 -0
  114. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/http_crawlers/beautifulsoup_example.py +0 -0
  115. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/http_crawlers/custom_crawler_example.py +0 -0
  116. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/http_crawlers/http_example.py +0 -0
  117. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/http_crawlers/parsel_example.py +0 -0
  118. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/login_crawler/http_login.py +0 -0
  119. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/login_crawler/playwright_login.py +0 -0
  120. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/playwright_crawler/browser_configuration_example.py +0 -0
  121. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/playwright_crawler/multiple_launch_example.py +0 -0
  122. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/playwright_crawler/plugin_browser_configuration_example.py +0 -0
  123. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/playwright_crawler/pre_navigation_hook_example.py +0 -0
  124. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/playwright_crawler_adaptive/handler.py +0 -0
  125. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/playwright_crawler_adaptive/init_beautifulsoup.py +0 -0
  126. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/playwright_crawler_adaptive/init_parsel.py +0 -0
  127. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/playwright_crawler_adaptive/init_prediction.py +0 -0
  128. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/playwright_crawler_adaptive/pre_nav_hooks.py +0 -0
  129. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/playwright_crawler_stagehand/__init__.py +0 -0
  130. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/playwright_crawler_stagehand/browser_classes.py +0 -0
  131. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/playwright_crawler_stagehand/stagehand_run.py +0 -0
  132. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/playwright_crawler_stagehand/support_classes.py +0 -0
  133. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/proxy_management/inspecting_bs_example.py +0 -0
  134. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/proxy_management/inspecting_pw_example.py +0 -0
  135. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/proxy_management/integration_bs_example.py +0 -0
  136. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/proxy_management/integration_pw_example.py +0 -0
  137. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/proxy_management/quick_start_example.py +0 -0
  138. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/proxy_management/session_bs_example.py +0 -0
  139. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/proxy_management/session_pw_example.py +0 -0
  140. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/proxy_management/tiers_bs_example.py +0 -0
  141. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/proxy_management/tiers_pw_example.py +0 -0
  142. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/request_loaders/rl_basic_example.py +0 -0
  143. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/request_loaders/rl_basic_example_with_persist.py +0 -0
  144. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/request_loaders/rl_tandem_example.py +0 -0
  145. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/request_loaders/rl_tandem_example_explicit.py +0 -0
  146. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/request_loaders/sitemap_basic_example.py +0 -0
  147. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/request_loaders/sitemap_example_with_persist.py +0 -0
  148. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/request_loaders/sitemap_tandem_example.py +0 -0
  149. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/request_loaders/sitemap_tandem_example_explicit.py +0 -0
  150. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/request_router/adaptive_crawler_handlers.py +0 -0
  151. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/request_router/basic_request_handlers.py +0 -0
  152. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/request_router/custom_router_default_only.py +0 -0
  153. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/request_router/error_handler.py +0 -0
  154. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/request_router/failed_request_handler.py +0 -0
  155. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/request_router/http_pre_navigation.py +0 -0
  156. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/request_router/playwright_pre_navigation.py +0 -0
  157. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/request_router/simple_default_handler.py +0 -0
  158. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/running_in_web_server/__init__.py +0 -0
  159. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/running_in_web_server/crawler.py +0 -0
  160. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/running_in_web_server/server.py +0 -0
  161. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/scaling_crawlers/max_tasks_per_minute_example.py +0 -0
  162. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/scaling_crawlers/min_and_max_concurrency_example.py +0 -0
  163. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/service_locator/service_conflicts.py +0 -0
  164. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/service_locator/service_crawler_configuration.py +0 -0
  165. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/service_locator/service_crawler_event_manager.py +0 -0
  166. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/service_locator/service_crawler_storage_client.py +0 -0
  167. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/service_locator/service_locator_configuration.py +0 -0
  168. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/service_locator/service_locator_event_manager.py +0 -0
  169. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/service_locator/service_locator_storage_client.py +0 -0
  170. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/service_locator/service_storage_configuration.py +0 -0
  171. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/service_locator/service_storage_storage_client.py +0 -0
  172. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/session_management/multi_sessions_http.py +0 -0
  173. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/session_management/one_session_http.py +0 -0
  174. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/session_management/sm_basic.py +0 -0
  175. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/session_management/sm_beautifulsoup.py +0 -0
  176. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/session_management/sm_http.py +0 -0
  177. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/session_management/sm_parsel.py +0 -0
  178. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/session_management/sm_playwright.py +0 -0
  179. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/session_management/sm_standalone.py +0 -0
  180. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storage_clients/custom_storage_client_example.py +0 -0
  181. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storage_clients/file_system_storage_client_basic_example.py +0 -0
  182. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storage_clients/file_system_storage_client_configuration_example.py +0 -0
  183. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storage_clients/memory_storage_client_basic_example.py +0 -0
  184. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storage_clients/registering_storage_clients_example.py +0 -0
  185. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storage_clients/sql_storage_client_basic_example.py +0 -0
  186. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storage_clients/sql_storage_client_configuration_example.py +0 -0
  187. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storages/cleaning_do_not_purge_example.py +0 -0
  188. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storages/cleaning_purge_explicitly_example.py +0 -0
  189. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storages/dataset_basic_example.py +0 -0
  190. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storages/dataset_with_crawler_example.py +0 -0
  191. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storages/dataset_with_crawler_explicit_example.py +0 -0
  192. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storages/helper_add_requests_example.py +0 -0
  193. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storages/helper_enqueue_links_example.py +0 -0
  194. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storages/kvs_basic_example.py +0 -0
  195. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storages/kvs_with_crawler_example.py +0 -0
  196. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storages/kvs_with_crawler_explicit_example.py +0 -0
  197. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storages/opening.py +0 -0
  198. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storages/rq_basic_example.py +0 -0
  199. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storages/rq_with_crawler_example.py +0 -0
  200. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/storages/rq_with_crawler_explicit_example.py +0 -0
  201. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/code_examples/trace_and_monitor_crawlers/instrument_crawler.py +0 -0
  202. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/crawler_login.mdx +0 -0
  203. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/creating_web_archive.mdx +0 -0
  204. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/error_handling.mdx +0 -0
  205. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/http_clients.mdx +0 -0
  206. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/http_crawlers.mdx +0 -0
  207. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/playwright_crawler.mdx +0 -0
  208. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/playwright_crawler_adaptive.mdx +0 -0
  209. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/playwright_crawler_stagehand.mdx +0 -0
  210. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/proxy_management.mdx +0 -0
  211. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/request_loaders.mdx +0 -0
  212. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/request_router.mdx +0 -0
  213. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/running_in_web_server.mdx +0 -0
  214. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/scaling_crawlers.mdx +0 -0
  215. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/service_locator.mdx +0 -0
  216. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/session_management.mdx +0 -0
  217. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/storage_clients.mdx +0 -0
  218. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/storages.mdx +0 -0
  219. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/guides/trace_and_monitor_crawlers.mdx +0 -0
  220. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/01_setting_up.mdx +0 -0
  221. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/02_first_crawler.mdx +0 -0
  222. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/03_adding_more_urls.mdx +0 -0
  223. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/04_real_world_project.mdx +0 -0
  224. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/05_crawling.mdx +0 -0
  225. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/06_scraping.mdx +0 -0
  226. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/07_saving_data.mdx +0 -0
  227. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/08_refactoring.mdx +0 -0
  228. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/09_running_in_cloud.mdx +0 -0
  229. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/02_bs.py +0 -0
  230. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/02_bs_better.py +0 -0
  231. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/02_request_queue.py +0 -0
  232. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/03_enqueue_strategy.py +0 -0
  233. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/03_finding_new_links.py +0 -0
  234. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/03_globs.py +0 -0
  235. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/03_original_code.py +0 -0
  236. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/03_transform_request.py +0 -0
  237. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/04_sanity_check.py +0 -0
  238. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/05_crawling_detail.py +0 -0
  239. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/05_crawling_listing.py +0 -0
  240. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/06_scraping.py +0 -0
  241. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/07_final_code.py +0 -0
  242. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/07_first_code.py +0 -0
  243. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/08_main.py +0 -0
  244. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/08_routes.py +0 -0
  245. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/09_apify_sdk.py +0 -0
  246. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/__init__.py +0 -0
  247. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/code_examples/routes.py +0 -0
  248. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/introduction/index.mdx +0 -0
  249. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/pyproject.toml +0 -0
  250. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/quick-start/code_examples/beautifulsoup_crawler_example.py +0 -0
  251. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/quick-start/code_examples/parsel_crawler_example.py +0 -0
  252. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/quick-start/code_examples/playwright_crawler_example.py +0 -0
  253. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/quick-start/code_examples/playwright_crawler_headful_example.py +0 -0
  254. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/quick-start/index.mdx +0 -0
  255. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/upgrading/upgrading_to_v0x.md +0 -0
  256. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/docs/upgrading/upgrading_to_v1.md +0 -0
  257. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/renovate.json +0 -0
  258. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/__init__.py +0 -0
  259. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_autoscaling/__init__.py +0 -0
  260. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_autoscaling/_types.py +0 -0
  261. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_autoscaling/autoscaled_pool.py +0 -0
  262. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_autoscaling/py.typed +0 -0
  263. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_autoscaling/snapshotter.py +0 -0
  264. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_autoscaling/system_status.py +0 -0
  265. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_browserforge_workaround.py +0 -0
  266. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_cli.py +0 -0
  267. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_consts.py +0 -0
  268. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_log_config.py +0 -0
  269. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_request.py +0 -0
  270. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_types.py +0 -0
  271. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/__init__.py +0 -0
  272. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/blocked.py +0 -0
  273. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/byte_size.py +0 -0
  274. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/console.py +0 -0
  275. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/context.py +0 -0
  276. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/crypto.py +0 -0
  277. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/docs.py +0 -0
  278. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/file.py +0 -0
  279. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/globs.py +0 -0
  280. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/html_to_text.py +0 -0
  281. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/models.py +0 -0
  282. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/raise_if_too_many_kwargs.py +0 -0
  283. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/recurring_task.py +0 -0
  284. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/requests.py +0 -0
  285. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/robots.py +0 -0
  286. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/sitemap.py +0 -0
  287. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/system.py +0 -0
  288. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/time.py +0 -0
  289. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/try_import.py +0 -0
  290. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/urls.py +0 -0
  291. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/wait.py +0 -0
  292. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/_utils/web.py +0 -0
  293. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/browsers/__init__.py +0 -0
  294. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/browsers/_browser_controller.py +0 -0
  295. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/browsers/_browser_plugin.py +0 -0
  296. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/browsers/_browser_pool.py +0 -0
  297. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/browsers/_playwright_browser.py +0 -0
  298. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/browsers/_playwright_browser_controller.py +0 -0
  299. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/browsers/_playwright_browser_plugin.py +0 -0
  300. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/browsers/_types.py +0 -0
  301. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/browsers/py.typed +0 -0
  302. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/configuration.py +0 -0
  303. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/__init__.py +0 -0
  304. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_abstract_http/__init__.py +0 -0
  305. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_abstract_http/_abstract_http_crawler.py +0 -0
  306. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_abstract_http/_abstract_http_parser.py +0 -0
  307. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_abstract_http/_http_crawling_context.py +0 -0
  308. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_abstract_http/py.typed +0 -0
  309. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_adaptive_playwright/__init__.py +0 -0
  310. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawler.py +0 -0
  311. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawler_statistics.py +0 -0
  312. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawling_context.py +0 -0
  313. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_adaptive_playwright/_rendering_type_predictor.py +0 -0
  314. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_adaptive_playwright/_result_comparator.py +0 -0
  315. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_adaptive_playwright/_utils.py +0 -0
  316. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_basic/__init__.py +0 -0
  317. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_basic/_basic_crawler.py +0 -0
  318. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_basic/_basic_crawling_context.py +0 -0
  319. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_basic/_context_pipeline.py +0 -0
  320. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_basic/_logging_utils.py +0 -0
  321. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_basic/py.typed +0 -0
  322. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_beautifulsoup/__init__.py +0 -0
  323. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_beautifulsoup/_beautifulsoup_crawler.py +0 -0
  324. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_beautifulsoup/_beautifulsoup_crawling_context.py +0 -0
  325. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_beautifulsoup/_beautifulsoup_parser.py +0 -0
  326. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_beautifulsoup/_utils.py +0 -0
  327. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_beautifulsoup/py.typed +0 -0
  328. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_http/__init__.py +0 -0
  329. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_http/_http_crawler.py +0 -0
  330. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_http/_http_parser.py +0 -0
  331. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_parsel/__init__.py +0 -0
  332. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_parsel/_parsel_crawler.py +0 -0
  333. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_parsel/_parsel_crawling_context.py +0 -0
  334. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_parsel/_parsel_parser.py +0 -0
  335. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_parsel/_utils.py +0 -0
  336. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_playwright/__init__.py +0 -0
  337. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_playwright/_playwright_crawler.py +0 -0
  338. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_playwright/_playwright_crawling_context.py +0 -0
  339. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_playwright/_playwright_http_client.py +0 -0
  340. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_playwright/_playwright_pre_nav_crawling_context.py +0 -0
  341. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_playwright/_types.py +0 -0
  342. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_playwright/_utils.py +0 -0
  343. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/_types.py +0 -0
  344. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/crawlers/py.typed +0 -0
  345. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/errors.py +0 -0
  346. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/events/__init__.py +0 -0
  347. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/events/_event_manager.py +0 -0
  348. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/events/_local_event_manager.py +0 -0
  349. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/events/_types.py +0 -0
  350. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/events/py.typed +0 -0
  351. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/fingerprint_suite/__init__.py +0 -0
  352. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/fingerprint_suite/_browserforge_adapter.py +0 -0
  353. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/fingerprint_suite/_consts.py +0 -0
  354. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/fingerprint_suite/_fingerprint_generator.py +0 -0
  355. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/fingerprint_suite/_header_generator.py +0 -0
  356. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/fingerprint_suite/_types.py +0 -0
  357. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/fingerprint_suite/py.typed +0 -0
  358. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/http_clients/__init__.py +0 -0
  359. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/http_clients/_base.py +0 -0
  360. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/http_clients/_curl_impersonate.py +0 -0
  361. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/http_clients/_httpx.py +0 -0
  362. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/http_clients/_impit.py +0 -0
  363. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/otel/__init__.py +0 -0
  364. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/otel/crawler_instrumentor.py +0 -0
  365. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/cookiecutter.json +0 -0
  366. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/hooks/post_gen_project.py +0 -0
  367. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/hooks/pre_gen_project.py +0 -0
  368. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/templates/main.py +0 -0
  369. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/templates/main_beautifulsoup.py +0 -0
  370. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/templates/main_parsel.py +0 -0
  371. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/templates/main_playwright.py +0 -0
  372. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/templates/main_playwright_camoufox.py +0 -0
  373. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/templates/routes_beautifulsoup.py +0 -0
  374. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/templates/routes_camoufox.py +0 -0
  375. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/templates/routes_parsel.py +0 -0
  376. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/templates/routes_playwright.py +0 -0
  377. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/templates/routes_playwright_camoufox.py +0 -0
  378. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/{{cookiecutter.project_name}}/.dockerignore +0 -0
  379. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/{{cookiecutter.project_name}}/Dockerfile +0 -0
  380. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/{{cookiecutter.project_name}}/README.md +0 -0
  381. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/{{cookiecutter.project_name}}/pyproject.toml +0 -0
  382. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/{{cookiecutter.project_name}}/requirements.txt +0 -0
  383. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/{{cookiecutter.project_name}}/{{cookiecutter.__package_name}}/__init__.py +0 -0
  384. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/{{cookiecutter.project_name}}/{{cookiecutter.__package_name}}/__main__.py +0 -0
  385. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/{{cookiecutter.project_name}}/{{cookiecutter.__package_name}}/main.py +0 -0
  386. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/project_template/{{cookiecutter.project_name}}/{{cookiecutter.__package_name}}/routes.py +0 -0
  387. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/proxy_configuration.py +0 -0
  388. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/py.typed +0 -0
  389. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/request_loaders/__init__.py +0 -0
  390. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/request_loaders/_request_list.py +0 -0
  391. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/request_loaders/_request_loader.py +0 -0
  392. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/request_loaders/_request_manager.py +0 -0
  393. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/request_loaders/_request_manager_tandem.py +0 -0
  394. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/request_loaders/_sitemap_request_loader.py +0 -0
  395. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/router.py +0 -0
  396. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/sessions/__init__.py +0 -0
  397. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/sessions/_cookies.py +0 -0
  398. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/sessions/_models.py +0 -0
  399. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/sessions/_session.py +0 -0
  400. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/sessions/_session_pool.py +0 -0
  401. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/sessions/py.typed +0 -0
  402. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/statistics/__init__.py +0 -0
  403. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/statistics/_error_snapshotter.py +0 -0
  404. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/statistics/_error_tracker.py +0 -0
  405. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/statistics/_models.py +0 -0
  406. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/__init__.py +0 -0
  407. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_base/__init__.py +0 -0
  408. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_base/_dataset_client.py +0 -0
  409. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_base/_key_value_store_client.py +0 -0
  410. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_base/_request_queue_client.py +0 -0
  411. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_base/_storage_client.py +0 -0
  412. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_base/py.typed +0 -0
  413. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_file_system/__init__.py +0 -0
  414. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_file_system/_dataset_client.py +0 -0
  415. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_file_system/_key_value_store_client.py +0 -0
  416. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_file_system/_storage_client.py +0 -0
  417. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_file_system/_utils.py +0 -0
  418. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_file_system/py.typed +0 -0
  419. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_memory/__init__.py +0 -0
  420. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_memory/_dataset_client.py +0 -0
  421. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_memory/_key_value_store_client.py +0 -0
  422. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_memory/_request_queue_client.py +0 -0
  423. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_memory/_storage_client.py +0 -0
  424. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_memory/py.typed +0 -0
  425. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_sql/__init__.py +0 -0
  426. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_sql/_client_mixin.py +0 -0
  427. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_sql/_dataset_client.py +0 -0
  428. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_sql/_db_models.py +0 -0
  429. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_sql/_key_value_store_client.py +0 -0
  430. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_sql/_request_queue_client.py +0 -0
  431. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_sql/_storage_client.py +0 -0
  432. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/_sql/py.typed +0 -0
  433. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/models.py +0 -0
  434. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storage_clients/py.typed +0 -0
  435. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storages/__init__.py +0 -0
  436. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storages/_base.py +0 -0
  437. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storages/_dataset.py +0 -0
  438. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storages/_request_queue.py +0 -0
  439. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storages/_storage_instance_manager.py +0 -0
  440. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storages/_utils.py +0 -0
  441. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/src/crawlee/storages/py.typed +0 -0
  442. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/__init__.py +0 -0
  443. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/e2e/__init__.py +0 -0
  444. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/e2e/conftest.py +0 -0
  445. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/e2e/project_template/test_static_crawlers_templates.py +0 -0
  446. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/e2e/project_template/utils.py +0 -0
  447. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/README.md +0 -0
  448. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/__init__.py +0 -0
  449. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_autoscaling/test_autoscaled_pool.py +0 -0
  450. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_autoscaling/test_snapshotter.py +0 -0
  451. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_autoscaling/test_system_status.py +0 -0
  452. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_statistics/test_error_tracker.py +0 -0
  453. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_statistics/test_periodic_logging.py +0 -0
  454. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_statistics/test_persistence.py +0 -0
  455. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_statistics/test_request_processing_record.py +0 -0
  456. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_utils/test_byte_size.py +0 -0
  457. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_utils/test_console.py +0 -0
  458. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_utils/test_crypto.py +0 -0
  459. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_utils/test_file.py +0 -0
  460. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_utils/test_globs.py +0 -0
  461. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_utils/test_html_to_text.py +0 -0
  462. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_utils/test_measure_time.py +0 -0
  463. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_utils/test_raise_if_too_many_kwargs.py +0 -0
  464. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_utils/test_recurring_task.py +0 -0
  465. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_utils/test_requests.py +0 -0
  466. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_utils/test_robots.py +0 -0
  467. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_utils/test_sitemap.py +0 -0
  468. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_utils/test_system.py +0 -0
  469. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_utils/test_timedelata_ms.py +0 -0
  470. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/_utils/test_urls.py +0 -0
  471. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/browsers/test_browser_pool.py +0 -0
  472. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/browsers/test_playwright_browser.py +0 -0
  473. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/browsers/test_playwright_browser_controller.py +0 -0
  474. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/browsers/test_playwright_browser_plugin.py +0 -0
  475. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/crawlers/_adaptive_playwright/test_adaptive_playwright_crawler_statistics.py +0 -0
  476. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/crawlers/_adaptive_playwright/test_adaptive_playwright_crawling_context.py +0 -0
  477. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/crawlers/_adaptive_playwright/test_predictor.py +0 -0
  478. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/crawlers/_basic/test_basic_crawler.py +0 -0
  479. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/crawlers/_basic/test_context_pipeline.py +0 -0
  480. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/crawlers/_beautifulsoup/test_beautifulsoup_crawler.py +0 -0
  481. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/crawlers/_http/test_http_crawler.py +0 -0
  482. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/crawlers/_parsel/test_parsel_crawler.py +0 -0
  483. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/crawlers/_playwright/test_playwright_crawler.py +0 -0
  484. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/events/test_event_manager.py +0 -0
  485. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/events/test_local_event_manager.py +0 -0
  486. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/fingerprint_suite/test_adapters.py +0 -0
  487. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/fingerprint_suite/test_header_generator.py +0 -0
  488. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/http_clients/test_http_clients.py +0 -0
  489. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/http_clients/test_httpx.py +0 -0
  490. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/otel/test_crawler_instrumentor.py +0 -0
  491. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/proxy_configuration/test_new_proxy_info.py +0 -0
  492. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/proxy_configuration/test_tiers.py +0 -0
  493. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/request_loaders/test_request_list.py +0 -0
  494. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/request_loaders/test_sitemap_request_loader.py +0 -0
  495. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/server.py +0 -0
  496. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/server_endpoints.py +0 -0
  497. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/sessions/test_cookies.py +0 -0
  498. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/sessions/test_models.py +0 -0
  499. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/sessions/test_session.py +0 -0
  500. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/sessions/test_session_pool.py +0 -0
  501. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/storage_clients/_file_system/test_fs_dataset_client.py +0 -0
  502. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/storage_clients/_file_system/test_fs_kvs_client.py +0 -0
  503. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/storage_clients/_memory/test_memory_dataset_client.py +0 -0
  504. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/storage_clients/_memory/test_memory_kvs_client.py +0 -0
  505. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/storage_clients/_memory/test_memory_rq_client.py +0 -0
  506. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/storage_clients/_sql/test_sql_dataset_client.py +0 -0
  507. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/storage_clients/_sql/test_sql_kvs_client.py +0 -0
  508. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/storage_clients/_sql/test_sql_rq_client.py +0 -0
  509. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/storages/conftest.py +0 -0
  510. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/storages/test_dataset.py +0 -0
  511. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/storages/test_request_manager_tandem.py +0 -0
  512. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/storages/test_storage_instance_manager.py +0 -0
  513. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/test_cli.py +0 -0
  514. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/test_configuration.py +0 -0
  515. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/test_log_config.py +0 -0
  516. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/test_router.py +0 -0
  517. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/tests/unit/test_service_locator.py +0 -0
  518. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/.eslintrc.json +0 -0
  519. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/.yarnrc.yml +0 -0
  520. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/babel.config.js +0 -0
  521. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/build_api_reference.sh +0 -0
  522. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/docusaurus.config.js +0 -0
  523. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/generate_module_shortcuts.py +0 -0
  524. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/package.json +0 -0
  525. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/patches/@docusaurus+core+3.4.0.patch +0 -0
  526. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/patches/@docusaurus+core+3.5.2.patch +0 -0
  527. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/roa-loader/index.js +0 -0
  528. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/roa-loader/package.json +0 -0
  529. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/sidebars.js +0 -0
  530. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/ApiLink.jsx +0 -0
  531. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Button.jsx +0 -0
  532. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Button.module.css +0 -0
  533. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/CopyButton.jsx +0 -0
  534. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/CopyButton.module.css +0 -0
  535. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Gradients.jsx +0 -0
  536. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Highlights.jsx +0 -0
  537. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Highlights.module.css +0 -0
  538. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Homepage/HomepageCliExample.jsx +0 -0
  539. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Homepage/HomepageCliExample.module.css +0 -0
  540. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Homepage/HomepageCtaSection.jsx +0 -0
  541. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Homepage/HomepageCtaSection.module.css +0 -0
  542. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Homepage/HomepageHeroSection.jsx +0 -0
  543. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Homepage/HomepageHeroSection.module.css +0 -0
  544. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Homepage/LanguageInfoWidget.jsx +0 -0
  545. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Homepage/LanguageInfoWidget.module.css +0 -0
  546. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Homepage/LanguageSwitch.jsx +0 -0
  547. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Homepage/LanguageSwitch.module.css +0 -0
  548. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Homepage/RiverSection.jsx +0 -0
  549. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Homepage/RiverSection.module.css +0 -0
  550. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Homepage/ThreeCardsWithIcon.jsx +0 -0
  551. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Homepage/ThreeCardsWithIcon.module.css +0 -0
  552. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Homepage/animated-crawlee-logo-dark.svg +0 -0
  553. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/Homepage/animated-crawlee-logo-light.svg +0 -0
  554. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/RunnableCodeBlock.jsx +0 -0
  555. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/components/RunnableCodeBlock.module.css +0 -0
  556. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/css/custom.css +0 -0
  557. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/pages/home_page_example.py +0 -0
  558. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/pages/index.js +0 -0
  559. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/pages/index.module.css +0 -0
  560. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/ColorModeToggle/dark-mode-icon.svg +0 -0
  561. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/ColorModeToggle/index.js +0 -0
  562. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/ColorModeToggle/light-mode-icon.svg +0 -0
  563. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/ColorModeToggle/styles.module.css +0 -0
  564. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/DocItem/Layout/index.js +0 -0
  565. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/DocItem/Layout/styles.module.css +0 -0
  566. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/Footer/LinkItem/index.js +0 -0
  567. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/Footer/LinkItem/index.module.css +0 -0
  568. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/Footer/index.js +0 -0
  569. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/Footer/index.module.css +0 -0
  570. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/MDXComponents/A.js +0 -0
  571. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/Navbar/Content/index.js +0 -0
  572. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/Navbar/Content/styles.module.css +0 -0
  573. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/Navbar/Logo/index.js +0 -0
  574. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/Navbar/Logo/index.module.css +0 -0
  575. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/Navbar/MobileSidebar/Header/index.js +0 -0
  576. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/Navbar/MobileSidebar/Header/index.module.css +0 -0
  577. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/Navbar/MobileSidebar/Layout/index.js +0 -0
  578. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.js +0 -0
  579. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/Navbar/MobileSidebar/index.js +0 -0
  580. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/src/theme/NavbarItem/ComponentTypes.js +0 -0
  581. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/.nojekyll +0 -0
  582. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/font/lota.woff +0 -0
  583. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/font/lota.woff2 +0 -0
  584. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/API.png +0 -0
  585. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/apify_logo.svg +0 -0
  586. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/apify_og_SDK.png +0 -0
  587. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/apify_sdk.svg +0 -0
  588. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/apify_sdk_white.svg +0 -0
  589. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/arrow_right.svg +0 -0
  590. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/auto-scaling-dark.webp +0 -0
  591. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/auto-scaling-light.webp +0 -0
  592. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/check.svg +0 -0
  593. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/chrome-scrape-dark.gif +0 -0
  594. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/chrome-scrape-light.gif +0 -0
  595. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/cloud_icon.svg +0 -0
  596. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/community-dark-icon.svg +0 -0
  597. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/community-light-icon.svg +0 -0
  598. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/crawlee-dark-new.svg +0 -0
  599. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/crawlee-dark.svg +0 -0
  600. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/crawlee-javascript-dark.svg +0 -0
  601. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/crawlee-javascript-light.svg +0 -0
  602. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/crawlee-light-new.svg +0 -0
  603. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/crawlee-light.svg +0 -0
  604. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/crawlee-logo-monocolor.svg +0 -0
  605. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/crawlee-logo.svg +0 -0
  606. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/crawlee-python-dark.svg +0 -0
  607. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/crawlee-python-light.svg +0 -0
  608. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/crawlee-python-og.png +0 -0
  609. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/defaults-dark-icon.svg +0 -0
  610. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/defaults-light-icon.svg +0 -0
  611. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/discord-brand-dark.svg +0 -0
  612. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/discord-brand.svg +0 -0
  613. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/docusaurus.svg +0 -0
  614. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/external-link.svg +0 -0
  615. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/favicon.ico +0 -0
  616. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/favorite-tools-dark.webp +0 -0
  617. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/favorite-tools-light.webp +0 -0
  618. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/features/auto-scaling.svg +0 -0
  619. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/features/automate-everything.svg +0 -0
  620. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/features/fingerprints.svg +0 -0
  621. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/features/node-requests.svg +0 -0
  622. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/features/runs-on-py.svg +0 -0
  623. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/features/storage.svg +0 -0
  624. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/features/works-everywhere.svg +0 -0
  625. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/fill-and-submit-web-form/00.jpg +0 -0
  626. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/fill-and-submit-web-form/01.jpg +0 -0
  627. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/fill-and-submit-web-form/02.jpg +0 -0
  628. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/fill-and-submit-web-form/03.jpg +0 -0
  629. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/getting-started/current-price.jpg +0 -0
  630. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/getting-started/scraping-practice.jpg +0 -0
  631. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/getting-started/select-an-element.jpg +0 -0
  632. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/getting-started/selected-element.jpg +0 -0
  633. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/getting-started/sku.jpg +0 -0
  634. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/getting-started/title.jpg +0 -0
  635. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/github-brand-dark.svg +0 -0
  636. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/github-brand.svg +0 -0
  637. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/guides/jaeger_otel_search_view_example.png +0 -0
  638. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/guides/jaeger_otel_trace_example.png +0 -0
  639. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/hearth copy.svg +0 -0
  640. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/hearth.svg +0 -0
  641. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/javascript_logo.svg +0 -0
  642. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/js_file.svg +0 -0
  643. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/logo-big.svg +0 -0
  644. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/logo-blur.png +0 -0
  645. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/logo-blur.svg +0 -0
  646. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/logo-zoom.svg +0 -0
  647. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/menu-arrows.svg +0 -0
  648. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/oss_logo.png +0 -0
  649. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/puppeteer-live-view-dashboard.png +0 -0
  650. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/puppeteer-live-view-detail.png +0 -0
  651. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/queue-dark-icon.svg +0 -0
  652. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/queue-light-icon.svg +0 -0
  653. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/resuming-paused-crawl/00.webp +0 -0
  654. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/resuming-paused-crawl/01.webp +0 -0
  655. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/robot.png +0 -0
  656. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/routing-dark-icon.svg +0 -0
  657. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/routing-light-icon.svg +0 -0
  658. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/scraping-utils-dark-icon.svg +0 -0
  659. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/scraping-utils-light-icon.svg +0 -0
  660. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/smart-proxy-dark.webp +0 -0
  661. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/smart-proxy-light.webp +0 -0
  662. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/source_code.png +0 -0
  663. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/system.svg +0 -0
  664. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/triangles_dark.svg +0 -0
  665. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/triangles_light.svg +0 -0
  666. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/workflow.svg +0 -0
  667. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/zero-setup-dark-icon.svg +0 -0
  668. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/img/zero-setup-light-icon.svg +0 -0
  669. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/js/custom.js +0 -0
  670. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/static/robots.txt +0 -0
  671. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/tools/docs-prettier.config.js +0 -0
  672. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/tools/utils/externalLink.js +0 -0
  673. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/tools/website_gif/chrome-scrape-dark.gif +0 -0
  674. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/tools/website_gif/chrome-scrape-dark.mp4 +0 -0
  675. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/tools/website_gif/chrome-scrape-light.gif +0 -0
  676. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/tools/website_gif/chrome-scrape-light.mp4 +0 -0
  677. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/tools/website_gif/website_gif.mjs +0 -0
  678. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/tsconfig.eslint.json +0 -0
  679. {crawlee-1.0.3b7 → crawlee-1.0.3b9}/website/yarn.lock +0 -0
@@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file.
10
10
  - Add support for Pydantic v2.12 ([#1471](https://github.com/apify/crawlee-python/pull/1471)) ([35c1108](https://github.com/apify/crawlee-python/commit/35c110878c2f445a2866be2522ea8703e9b371dd)) by [@Mantisus](https://github.com/Mantisus), closes [#1464](https://github.com/apify/crawlee-python/issues/1464)
11
11
  - Fix database version warning message ([#1485](https://github.com/apify/crawlee-python/pull/1485)) ([18a545e](https://github.com/apify/crawlee-python/commit/18a545ee8add92e844acd0068f9cb8580a82e1c9)) by [@Mantisus](https://github.com/Mantisus)
12
12
  - Fix `reclaim_request` in `SqlRequestQueueClient` to correctly update the request state ([#1486](https://github.com/apify/crawlee-python/pull/1486)) ([1502469](https://github.com/apify/crawlee-python/commit/150246957f8f7f1ceb77bb77e3a02a903c50cae1)) by [@Mantisus](https://github.com/Mantisus), closes [#1484](https://github.com/apify/crawlee-python/issues/1484)
13
+ - Fix `KeyValueStore.auto_saved_value` failing in some scenarios ([#1438](https://github.com/apify/crawlee-python/pull/1438)) ([b35dee7](https://github.com/apify/crawlee-python/commit/b35dee78180e57161b826641d45a61b8d8f6ef51)) by [@Pijukatel](https://github.com/Pijukatel), closes [#1354](https://github.com/apify/crawlee-python/issues/1354)
13
14
 
14
15
 
15
16
  <!-- git-cliff-unreleased-end -->
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crawlee
3
- Version: 1.0.3b7
3
+ Version: 1.0.3b9
4
4
  Summary: Crawlee for Python
5
5
  Project-URL: Apify Homepage, https://apify.com
6
6
  Project-URL: Changelog, https://crawlee.dev/python/docs/changelog
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "crawlee"
7
- version = "1.0.3b7"
7
+ version = "1.0.3b9"
8
8
  description = "Crawlee for Python"
9
9
  authors = [{ name = "Apify Technologies s.r.o.", email = "support@apify.com" }]
10
10
  license = { file = "LICENSE" }
@@ -38,7 +38,7 @@ class ServiceLocator:
38
38
  def get_configuration(self) -> Configuration:
39
39
  """Get the configuration."""
40
40
  if self._configuration is None:
41
- logger.warning('No configuration set, implicitly creating and using default Configuration.')
41
+ logger.debug('No configuration set, implicitly creating and using default Configuration.')
42
42
  self._configuration = Configuration()
43
43
 
44
44
  return self._configuration
@@ -63,9 +63,9 @@ class ServiceLocator:
63
63
  def get_event_manager(self) -> EventManager:
64
64
  """Get the event manager."""
65
65
  if self._event_manager is None:
66
- logger.warning('No event manager set, implicitly creating and using default LocalEventManager.')
66
+ logger.debug('No event manager set, implicitly creating and using default LocalEventManager.')
67
67
  if self._configuration is None:
68
- logger.warning(
68
+ logger.debug(
69
69
  'Implicit creation of event manager will implicitly set configuration as side effect. '
70
70
  'It is advised to explicitly first set the configuration instead.'
71
71
  )
@@ -93,7 +93,7 @@ class ServiceLocator:
93
93
  def get_storage_client(self) -> StorageClient:
94
94
  """Get the storage client."""
95
95
  if self._storage_client is None:
96
- logger.warning('No storage client set, implicitly creating and using default FileSystemStorageClient.')
96
+ logger.debug('No storage client set, implicitly creating and using default FileSystemStorageClient.')
97
97
  if self._configuration is None:
98
98
  logger.warning(
99
99
  'Implicit creation of storage client will implicitly set configuration as side effect. '
@@ -4,12 +4,14 @@ from typing import TYPE_CHECKING, Generic, Literal, TypeVar
4
4
 
5
5
  from pydantic import BaseModel
6
6
 
7
+ from crawlee._utils.raise_if_too_many_kwargs import raise_if_too_many_kwargs
7
8
  from crawlee.events._types import Event, EventPersistStateData
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  import logging
12
+ from collections.abc import Callable, Coroutine
11
13
 
12
- from crawlee.storages._key_value_store import KeyValueStore
14
+ from crawlee.storages import KeyValueStore
13
15
 
14
16
  TStateModel = TypeVar('TStateModel', bound=BaseModel)
15
17
 
@@ -37,6 +39,7 @@ class RecoverableState(Generic[TStateModel]):
37
39
  persistence_enabled: Literal[True, False, 'explicit_only'] = False,
38
40
  persist_state_kvs_name: str | None = None,
39
41
  persist_state_kvs_id: str | None = None,
42
+ persist_state_kvs_factory: Callable[[], Coroutine[None, None, KeyValueStore]] | None = None,
40
43
  logger: logging.Logger,
41
44
  ) -> None:
42
45
  """Initialize a new recoverable state object.
@@ -51,16 +54,40 @@ class RecoverableState(Generic[TStateModel]):
51
54
  If neither a name nor and id are supplied, the default store will be used.
52
55
  persist_state_kvs_id: The identifier of the KeyValueStore to use for persistence.
53
56
  If neither a name nor and id are supplied, the default store will be used.
57
+ persist_state_kvs_factory: Factory that can be awaited to create KeyValueStore to use for persistence. If
58
+ not provided, a system-wide KeyValueStore will be used, based on service locator configuration.
54
59
  logger: A logger instance for logging operations related to state persistence
55
60
  """
61
+ raise_if_too_many_kwargs(
62
+ persist_state_kvs_name=persist_state_kvs_name,
63
+ persist_state_kvs_id=persist_state_kvs_id,
64
+ persist_state_kvs_factory=persist_state_kvs_factory,
65
+ )
66
+ if not persist_state_kvs_factory:
67
+ logger.debug(
68
+ 'No explicit key_value_store set for recoverable state. Recovery will use a system-wide KeyValueStore '
69
+ 'based on service_locator configuration, potentially calling service_locator.set_storage_client in the '
70
+ 'process. It is recommended to initialize RecoverableState with explicit key_value_store to avoid '
71
+ 'global side effects.'
72
+ )
73
+
56
74
  self._default_state = default_state
57
75
  self._state_type: type[TStateModel] = self._default_state.__class__
58
76
  self._state: TStateModel | None = None
59
77
  self._persistence_enabled = persistence_enabled
60
78
  self._persist_state_key = persist_state_key
61
- self._persist_state_kvs_name = persist_state_kvs_name
62
- self._persist_state_kvs_id = persist_state_kvs_id
63
- self._key_value_store: 'KeyValueStore | None' = None # noqa: UP037
79
+ if persist_state_kvs_factory is None:
80
+
81
+ async def kvs_factory() -> KeyValueStore:
82
+ from crawlee.storages import KeyValueStore # noqa: PLC0415 avoid circular import
83
+
84
+ return await KeyValueStore.open(name=persist_state_kvs_name, id=persist_state_kvs_id)
85
+
86
+ self._persist_state_kvs_factory = kvs_factory
87
+ else:
88
+ self._persist_state_kvs_factory = persist_state_kvs_factory
89
+
90
+ self._key_value_store: KeyValueStore | None = None
64
91
  self._log = logger
65
92
 
66
93
  async def initialize(self) -> TStateModel:
@@ -77,11 +104,8 @@ class RecoverableState(Generic[TStateModel]):
77
104
  return self.current_value
78
105
 
79
106
  # Import here to avoid circular imports.
80
- from crawlee.storages._key_value_store import KeyValueStore # noqa: PLC0415
81
107
 
82
- self._key_value_store = await KeyValueStore.open(
83
- name=self._persist_state_kvs_name, id=self._persist_state_kvs_id
84
- )
108
+ self._key_value_store = await self._persist_state_kvs_factory()
85
109
 
86
110
  await self._load_saved_state()
87
111
 
@@ -17,8 +17,11 @@ from crawlee.statistics import FinalStatistics, StatisticsState
17
17
  from crawlee.statistics._error_tracker import ErrorTracker
18
18
 
19
19
  if TYPE_CHECKING:
20
+ from collections.abc import Callable, Coroutine
20
21
  from types import TracebackType
21
22
 
23
+ from crawlee.storages import KeyValueStore
24
+
22
25
  TStatisticsState = TypeVar('TStatisticsState', bound=StatisticsState, default=StatisticsState)
23
26
  TNewStatisticsState = TypeVar('TNewStatisticsState', bound=StatisticsState, default=StatisticsState)
24
27
  logger = getLogger(__name__)
@@ -70,6 +73,7 @@ class Statistics(Generic[TStatisticsState]):
70
73
  persistence_enabled: bool | Literal['explicit_only'] = False,
71
74
  persist_state_kvs_name: str | None = None,
72
75
  persist_state_key: str | None = None,
76
+ persist_state_kvs_factory: Callable[[], Coroutine[None, None, KeyValueStore]] | None = None,
73
77
  log_message: str = 'Statistics',
74
78
  periodic_message_logger: Logger | None = None,
75
79
  log_interval: timedelta = timedelta(minutes=1),
@@ -95,6 +99,7 @@ class Statistics(Generic[TStatisticsState]):
95
99
  persist_state_key=persist_state_key or f'SDK_CRAWLER_STATISTICS_{self._id}',
96
100
  persistence_enabled=persistence_enabled,
97
101
  persist_state_kvs_name=persist_state_kvs_name,
102
+ persist_state_kvs_factory=persist_state_kvs_factory,
98
103
  logger=logger,
99
104
  )
100
105
 
@@ -110,8 +115,8 @@ class Statistics(Generic[TStatisticsState]):
110
115
  """Create near copy of the `Statistics` with replaced `state_model`."""
111
116
  new_statistics: Statistics[TNewStatisticsState] = Statistics(
112
117
  persistence_enabled=self._state._persistence_enabled, # noqa: SLF001
113
- persist_state_kvs_name=self._state._persist_state_kvs_name, # noqa: SLF001
114
118
  persist_state_key=self._state._persist_state_key, # noqa: SLF001
119
+ persist_state_kvs_factory=self._state._persist_state_kvs_factory, # noqa: SLF001
115
120
  log_message=self._log_message,
116
121
  periodic_message_logger=self._periodic_message_logger,
117
122
  state_model=state_model,
@@ -31,6 +31,7 @@ if TYPE_CHECKING:
31
31
  from collections.abc import Sequence
32
32
 
33
33
  from crawlee.configuration import Configuration
34
+ from crawlee.storages import KeyValueStore
34
35
 
35
36
  logger = getLogger(__name__)
36
37
 
@@ -92,6 +93,7 @@ class FileSystemRequestQueueClient(RequestQueueClient):
92
93
  metadata: RequestQueueMetadata,
93
94
  path_to_rq: Path,
94
95
  lock: asyncio.Lock,
96
+ recoverable_state: RecoverableState[RequestQueueState],
95
97
  ) -> None:
96
98
  """Initialize a new instance.
97
99
 
@@ -114,12 +116,7 @@ class FileSystemRequestQueueClient(RequestQueueClient):
114
116
  self._is_empty_cache: bool | None = None
115
117
  """Cache for is_empty result: None means unknown, True/False is cached state."""
116
118
 
117
- self._state = RecoverableState[RequestQueueState](
118
- default_state=RequestQueueState(),
119
- persist_state_key=f'__RQ_STATE_{self._metadata.id}',
120
- persistence_enabled=True,
121
- logger=logger,
122
- )
119
+ self._state = recoverable_state
123
120
  """Recoverable state to maintain request ordering, in-progress status, and handled status."""
124
121
 
125
122
  @override
@@ -136,6 +133,22 @@ class FileSystemRequestQueueClient(RequestQueueClient):
136
133
  """The full path to the request queue metadata file."""
137
134
  return self.path_to_rq / METADATA_FILENAME
138
135
 
136
+ @classmethod
137
+ async def _create_recoverable_state(cls, id: str, configuration: Configuration) -> RecoverableState:
138
+ async def kvs_factory() -> KeyValueStore:
139
+ from crawlee.storage_clients import FileSystemStorageClient # noqa: PLC0415 avoid circular import
140
+ from crawlee.storages import KeyValueStore # noqa: PLC0415 avoid circular import
141
+
142
+ return await KeyValueStore.open(storage_client=FileSystemStorageClient(), configuration=configuration)
143
+
144
+ return RecoverableState[RequestQueueState](
145
+ default_state=RequestQueueState(),
146
+ persist_state_key=f'__RQ_STATE_{id}',
147
+ persist_state_kvs_factory=kvs_factory,
148
+ persistence_enabled=True,
149
+ logger=logger,
150
+ )
151
+
139
152
  @classmethod
140
153
  async def open(
141
154
  cls,
@@ -194,6 +207,9 @@ class FileSystemRequestQueueClient(RequestQueueClient):
194
207
  metadata=metadata,
195
208
  path_to_rq=rq_base_path / rq_dir,
196
209
  lock=asyncio.Lock(),
210
+ recoverable_state=await cls._create_recoverable_state(
211
+ id=id, configuration=configuration
212
+ ),
197
213
  )
198
214
  await client._state.initialize()
199
215
  await client._discover_existing_requests()
@@ -230,6 +246,7 @@ class FileSystemRequestQueueClient(RequestQueueClient):
230
246
  metadata=metadata,
231
247
  path_to_rq=path_to_rq,
232
248
  lock=asyncio.Lock(),
249
+ recoverable_state=await cls._create_recoverable_state(id=metadata.id, configuration=configuration),
233
250
  )
234
251
 
235
252
  await client._state.initialize()
@@ -254,6 +271,7 @@ class FileSystemRequestQueueClient(RequestQueueClient):
254
271
  metadata=metadata,
255
272
  path_to_rq=path_to_rq,
256
273
  lock=asyncio.Lock(),
274
+ recoverable_state=await cls._create_recoverable_state(id=metadata.id, configuration=configuration),
257
275
  )
258
276
  await client._state.initialize()
259
277
  await client._update_metadata()
@@ -281,11 +281,14 @@ class KeyValueStore(Storage):
281
281
  if key in cache:
282
282
  return cache[key].current_value.root
283
283
 
284
+ async def kvs_factory() -> KeyValueStore:
285
+ return self
286
+
284
287
  cache[key] = recoverable_state = RecoverableState(
285
288
  default_state=AutosavedValue(default_value),
286
- persistence_enabled=True,
287
- persist_state_kvs_id=self.id,
288
289
  persist_state_key=key,
290
+ persistence_enabled=True,
291
+ persist_state_kvs_factory=kvs_factory,
289
292
  logger=logger,
290
293
  )
291
294
 
@@ -17,6 +17,7 @@ from crawlee import service_locator
17
17
  from crawlee.fingerprint_suite._browserforge_adapter import get_available_header_network
18
18
  from crawlee.http_clients import CurlImpersonateHttpClient, HttpxHttpClient, ImpitHttpClient
19
19
  from crawlee.proxy_configuration import ProxyInfo
20
+ from crawlee.statistics import Statistics
20
21
  from crawlee.storages import KeyValueStore
21
22
  from tests.unit.server import TestServer, app, serve_in_thread
22
23
 
@@ -72,6 +73,10 @@ def prepare_test_env(monkeypatch: pytest.MonkeyPatch, tmp_path: Path) -> Callabl
72
73
  # Verify that the test environment was set up correctly.
73
74
  assert os.environ.get('CRAWLEE_STORAGE_DIR') == str(tmp_path)
74
75
 
76
+ # Reset global class variables to ensure test isolation.
77
+ KeyValueStore._autosaved_values = {}
78
+ Statistics._Statistics__next_id = 0 # type:ignore[attr-defined] # Mangled attribute
79
+
75
80
  return _prepare_test_env
76
81
 
77
82
 
@@ -493,7 +493,6 @@ async def test_adaptive_playwright_crawler_statistics_in_init() -> None:
493
493
  assert type(crawler._statistics.state) is AdaptivePlaywrightCrawlerStatisticState
494
494
 
495
495
  assert crawler._statistics._state._persistence_enabled == persistence_enabled
496
- assert crawler._statistics._state._persist_state_kvs_name == persist_state_kvs_name
497
496
  assert crawler._statistics._state._persist_state_key == persist_state_key
498
497
 
499
498
  assert crawler._statistics._log_message == log_message
@@ -6,9 +6,9 @@ from typing import TYPE_CHECKING
6
6
 
7
7
  import pytest
8
8
 
9
- from crawlee import Request
9
+ from crawlee import Request, service_locator
10
10
  from crawlee.configuration import Configuration
11
- from crawlee.storage_clients import FileSystemStorageClient
11
+ from crawlee.storage_clients import FileSystemStorageClient, MemoryStorageClient
12
12
 
13
13
  if TYPE_CHECKING:
14
14
  from collections.abc import AsyncGenerator
@@ -78,6 +78,14 @@ async def test_request_file_persistence(rq_client: FileSystemRequestQueueClient)
78
78
  assert request_data['url'].startswith('https://example.com/')
79
79
 
80
80
 
81
+ async def test_opening_rq_does_not_have_side_effect_on_service_locator(configuration: Configuration) -> None:
82
+ """Opening request queue client should cause setting storage client in the global service locator."""
83
+ await FileSystemStorageClient().create_rq_client(name='test_request_queue', configuration=configuration)
84
+
85
+ # Set some specific storage client in the service locator. There should be no `ServiceConflictError`.
86
+ service_locator.set_storage_client(MemoryStorageClient())
87
+
88
+
81
89
  async def test_drop_removes_directory(rq_client: FileSystemRequestQueueClient) -> None:
82
90
  """Test that drop removes the entire RQ directory from disk."""
83
91
  await rq_client.add_batch_of_requests([Request.from_url('https://example.com')])
@@ -10,13 +10,13 @@ import pytest
10
10
 
11
11
  from crawlee import service_locator
12
12
  from crawlee.configuration import Configuration
13
+ from crawlee.storage_clients import FileSystemStorageClient, MemoryStorageClient, SqlStorageClient, StorageClient
13
14
  from crawlee.storages import KeyValueStore
14
15
  from crawlee.storages._storage_instance_manager import StorageInstanceManager
15
16
 
16
17
  if TYPE_CHECKING:
17
18
  from collections.abc import AsyncGenerator
18
-
19
- from crawlee.storage_clients import StorageClient
19
+ from pathlib import Path
20
20
 
21
21
 
22
22
  @pytest.fixture
@@ -1095,3 +1095,43 @@ async def test_validate_name(storage_client: StorageClient, name: str, *, is_val
1095
1095
  else:
1096
1096
  with pytest.raises(ValueError, match=rf'Invalid storage name "{name}".*'):
1097
1097
  await KeyValueStore.open(name=name, storage_client=storage_client)
1098
+
1099
+
1100
+ @pytest.mark.parametrize(
1101
+ 'tested_storage_client',
1102
+ [
1103
+ pytest.param(MemoryStorageClient(), id='tested=MemoryStorageClient'),
1104
+ pytest.param(FileSystemStorageClient(), id='tested=FileSystemStorageClient'),
1105
+ pytest.param(SqlStorageClient(), id='tested=SqlStorageClient'),
1106
+ ],
1107
+ )
1108
+ @pytest.mark.parametrize(
1109
+ 'global_storage_client',
1110
+ [
1111
+ pytest.param(MemoryStorageClient(), id='global=MemoryStorageClient'),
1112
+ pytest.param(FileSystemStorageClient(), id='global=FileSystemStorageClient'),
1113
+ pytest.param(SqlStorageClient(), id='global=SqlStorageClient'),
1114
+ ],
1115
+ )
1116
+ async def test_get_auto_saved_value_various_global_clients(
1117
+ tmp_path: Path, tested_storage_client: StorageClient, global_storage_client: StorageClient
1118
+ ) -> None:
1119
+ """Ensure that persistence is working for all clients regardless of what is set in service locator."""
1120
+ service_locator.set_configuration(
1121
+ Configuration(
1122
+ crawlee_storage_dir=str(tmp_path), # type: ignore[call-arg]
1123
+ purge_on_start=True,
1124
+ )
1125
+ )
1126
+ service_locator.set_storage_client(global_storage_client)
1127
+
1128
+ kvs = await KeyValueStore.open(storage_client=tested_storage_client)
1129
+ values_kvs = {'key': 'some_value'}
1130
+ test_key = 'test_key'
1131
+
1132
+ autosaved_value_kvs = await kvs.get_auto_saved_value(test_key)
1133
+ assert autosaved_value_kvs == {}
1134
+ autosaved_value_kvs.update(values_kvs)
1135
+ await kvs.persist_autosaved_values()
1136
+
1137
+ assert await kvs.get_value(test_key) == autosaved_value_kvs
@@ -4,6 +4,7 @@
4
4
  from __future__ import annotations
5
5
 
6
6
  import asyncio
7
+ from datetime import timedelta
7
8
  from typing import TYPE_CHECKING
8
9
 
9
10
  import pytest
@@ -421,6 +422,36 @@ async def test_is_empty(rq: RequestQueue) -> None:
421
422
  assert await rq.is_empty() is True
422
423
 
423
424
 
425
+ @pytest.mark.parametrize(
426
+ ('wait_for_all'),
427
+ [
428
+ pytest.param(True, id='wait for all'),
429
+ pytest.param(False, id='don`t wait for all'),
430
+ ],
431
+ )
432
+ async def test_add_requests_wait_for_all(rq: RequestQueue, *, wait_for_all: bool) -> None:
433
+ """Test adding requests with wait_for_all_requests_to_be_added option."""
434
+ urls = [f'https://example.com/{i}' for i in range(15)]
435
+
436
+ # Add requests without waiting
437
+ await rq.add_requests(
438
+ urls,
439
+ batch_size=5,
440
+ wait_for_all_requests_to_be_added=wait_for_all,
441
+ wait_time_between_batches=timedelta(milliseconds=100),
442
+ )
443
+
444
+ if not wait_for_all:
445
+ # Immediately after adding, the total count may be less than 15 due to background processing
446
+ assert await rq.get_total_count() <= 15
447
+
448
+ # Wait a 250 milliseconds for background tasks to complete
449
+ await asyncio.sleep(0.25)
450
+
451
+ # Verify all requests were added
452
+ assert await rq.get_total_count() == 15
453
+
454
+
424
455
  async def test_is_finished(rq: RequestQueue) -> None:
425
456
  """Test checking if a request queue is finished."""
426
457
  # Initially the queue should be finished (empty and no background tasks)
@@ -705,7 +705,7 @@ toml = [
705
705
 
706
706
  [[package]]
707
707
  name = "crawlee"
708
- version = "1.0.3b7"
708
+ version = "1.0.3b9"
709
709
  source = { editable = "." }
710
710
  dependencies = [
711
711
  { name = "cachetools" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes