crawlee 1.0.2b2__tar.gz → 1.0.2b4__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.
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/CHANGELOG.md +1 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/PKG-INFO +1 -1
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/upgrading/upgrading_to_v1.md +4 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/pyproject.toml +1 -1
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storages/_base.py +3 -1
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storages/_dataset.py +3 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storages/_key_value_store.py +3 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storages/_request_queue.py +3 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storages/_storage_instance_manager.py +9 -1
- crawlee-1.0.2b4/src/crawlee/storages/_utils.py +11 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_utils/test_sitemap.py +6 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/crawlers/_adaptive_playwright/test_adaptive_playwright_crawler.py +1 -1
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/otel/test_crawler_instrumentor.py +1 -1
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/sessions/test_session_pool.py +1 -1
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storage_clients/_file_system/test_fs_dataset_client.py +3 -3
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storage_clients/_file_system/test_fs_kvs_client.py +3 -3
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storage_clients/_file_system/test_fs_rq_client.py +3 -3
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storage_clients/_memory/test_memory_dataset_client.py +3 -3
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storage_clients/_memory/test_memory_kvs_client.py +3 -3
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storage_clients/_memory/test_memory_rq_client.py +3 -3
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storage_clients/_sql/test_sql_dataset_client.py +6 -6
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storage_clients/_sql/test_sql_kvs_client.py +6 -6
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storage_clients/_sql/test_sql_rq_client.py +6 -6
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storages/test_dataset.py +64 -32
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storages/test_key_value_store.py +61 -29
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storages/test_request_queue.py +63 -31
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/uv.lock +1 -1
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/.editorconfig +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/.github/CODEOWNERS +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/.github/pull_request_template.md +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/.github/workflows/build_and_deploy_docs.yaml +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/.github/workflows/check_pr_title.yaml +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/.github/workflows/pre_release.yaml +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/.github/workflows/release.yaml +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/.github/workflows/run_code_checks.yaml +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/.github/workflows/templates_e2e_tests.yaml +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/.github/workflows/update_new_issue.yaml +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/.gitignore +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/.markdownlint.yaml +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/.pre-commit-config.yaml +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/CONTRIBUTING.md +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/LICENSE +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/Makefile +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/README.md +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/deployment/apify_platform.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/deployment/code_examples/apify/crawler_as_actor_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/deployment/code_examples/apify/get_public_url.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/deployment/code_examples/apify/log_with_config_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/deployment/code_examples/apify/proxy_advanced_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/deployment/code_examples/apify/proxy_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/deployment/code_examples/google/cloud_run_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/deployment/code_examples/google/google_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/deployment/google_cloud.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/deployment/google_cloud_run.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/add_data_to_dataset.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/beautifulsoup_crawler.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/capture_screenshot_using_playwright.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/capturing_page_snapshots_with_error_snapshotter.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/adaptive_playwright_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/add_data_to_dataset_bs.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/add_data_to_dataset_dataset.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/add_data_to_dataset_pw.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/beautifulsoup_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/beautifulsoup_crawler_keep_alive.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/beautifulsoup_crawler_stop.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/capture_screenshot_using_playwright.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/configure_json_logging.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/crawl_all_links_on_website_bs.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/crawl_all_links_on_website_pw.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/crawl_multiple_urls_bs.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/crawl_multiple_urls_pw.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/crawl_specific_links_on_website_bs.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/crawl_specific_links_on_website_pw.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/crawl_website_with_relative_links_all_links.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/crawl_website_with_relative_links_same_domain.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/crawl_website_with_relative_links_same_hostname.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/crawl_website_with_relative_links_same_origin.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/export_entire_dataset_to_file_csv.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/export_entire_dataset_to_file_json.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/extract_and_add_specific_links_on_website_bs.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/extract_and_add_specific_links_on_website_pw.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/fill_and_submit_web_form_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/fill_and_submit_web_form_request.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/parsel_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/parsel_crawler_with_error_snapshotter.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/playwright_block_requests.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/playwright_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/playwright_crawler_with_camoufox.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/playwright_crawler_with_error_snapshotter.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/playwright_crawler_with_fingerprint_generator.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/respect_robots_on_skipped_request.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/respect_robots_txt_file.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/resuming_paused_crawl.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/using_browser_profiles_chrome.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/code_examples/using_browser_profiles_firefox.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/crawl_all_links_on_website.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/crawl_multiple_urls.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/crawl_specific_links_on_website.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/crawl_website_with_relative_links.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/crawler_keep_alive.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/crawler_stop.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/export_entire_dataset_to_file.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/fill_and_submit_web_form.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/json_logging.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/parsel_crawler.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/playwright_crawler.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/playwright_crawler_adaptive.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/playwright_crawler_with_block_requests.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/playwright_crawler_with_camoufox.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/playwright_crawler_with_fingerprint_generator.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/respect_robots_txt_file.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/resuming_paused_crawl.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/examples/using_browser_profile.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/architecture_overview.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/avoid_blocking.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/avoid_blocking/default_fingerprint_generator_with_args.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/avoid_blocking/playwright_with_fingerprint_generator.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/creating_web_archive/manual_archiving_parsel_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/creating_web_archive/manual_archiving_playwright_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/creating_web_archive/simple_pw_through_proxy_pywb_server.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/error_handling/change_handle_error_status.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/error_handling/disable_retry.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/error_handling/handle_proxy_error.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/http_clients/parsel_curl_impersonate_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/http_clients/parsel_httpx_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/http_clients/parsel_impit_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/http_crawlers/beautifulsoup_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/http_crawlers/custom_crawler_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/http_crawlers/http_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/http_crawlers/parsel_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/login_crawler/http_login.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/login_crawler/playwright_login.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/playwright_crawler/browser_configuration_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/playwright_crawler/multiple_launch_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/playwright_crawler/plugin_browser_configuration_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/playwright_crawler/pre_navigation_hook_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/playwright_crawler_adaptive/handler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/playwright_crawler_adaptive/init_beautifulsoup.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/playwright_crawler_adaptive/init_parsel.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/playwright_crawler_adaptive/init_prediction.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/playwright_crawler_adaptive/pre_nav_hooks.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/playwright_crawler_stagehand/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/playwright_crawler_stagehand/browser_classes.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/playwright_crawler_stagehand/stagehand_run.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/playwright_crawler_stagehand/support_classes.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/proxy_management/inspecting_bs_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/proxy_management/inspecting_pw_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/proxy_management/integration_bs_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/proxy_management/integration_pw_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/proxy_management/quick_start_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/proxy_management/session_bs_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/proxy_management/session_pw_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/proxy_management/tiers_bs_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/proxy_management/tiers_pw_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/request_loaders/rl_basic_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/request_loaders/rl_basic_example_with_persist.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/request_loaders/rl_tandem_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/request_loaders/rl_tandem_example_explicit.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/request_loaders/sitemap_basic_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/request_loaders/sitemap_example_with_persist.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/request_loaders/sitemap_tandem_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/request_loaders/sitemap_tandem_example_explicit.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/request_router/adaptive_crawler_handlers.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/request_router/basic_request_handlers.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/request_router/custom_router_default_only.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/request_router/error_handler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/request_router/failed_request_handler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/request_router/http_pre_navigation.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/request_router/playwright_pre_navigation.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/request_router/simple_default_handler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/running_in_web_server/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/running_in_web_server/crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/running_in_web_server/server.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/scaling_crawlers/max_tasks_per_minute_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/scaling_crawlers/min_and_max_concurrency_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/service_locator/service_conflicts.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/service_locator/service_crawler_configuration.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/service_locator/service_crawler_event_manager.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/service_locator/service_crawler_storage_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/service_locator/service_locator_configuration.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/service_locator/service_locator_event_manager.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/service_locator/service_locator_storage_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/service_locator/service_storage_configuration.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/service_locator/service_storage_storage_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/session_management/multi_sessions_http.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/session_management/one_session_http.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/session_management/sm_basic.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/session_management/sm_beautifulsoup.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/session_management/sm_http.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/session_management/sm_parsel.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/session_management/sm_playwright.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/session_management/sm_standalone.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storage_clients/custom_storage_client_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storage_clients/file_system_storage_client_basic_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storage_clients/file_system_storage_client_configuration_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storage_clients/memory_storage_client_basic_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storage_clients/registering_storage_clients_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storage_clients/sql_storage_client_basic_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storage_clients/sql_storage_client_configuration_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storages/cleaning_do_not_purge_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storages/cleaning_purge_explicitly_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storages/dataset_basic_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storages/dataset_with_crawler_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storages/dataset_with_crawler_explicit_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storages/helper_add_requests_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storages/helper_enqueue_links_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storages/kvs_basic_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storages/kvs_with_crawler_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storages/kvs_with_crawler_explicit_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storages/opening.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storages/rq_basic_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storages/rq_with_crawler_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/storages/rq_with_crawler_explicit_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/code_examples/trace_and_monitor_crawlers/instrument_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/crawler_login.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/creating_web_archive.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/error_handling.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/http_clients.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/http_crawlers.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/playwright_crawler.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/playwright_crawler_adaptive.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/playwright_crawler_stagehand.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/proxy_management.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/request_loaders.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/request_router.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/running_in_web_server.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/scaling_crawlers.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/service_locator.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/session_management.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/storage_clients.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/storages.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/guides/trace_and_monitor_crawlers.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/01_setting_up.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/02_first_crawler.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/03_adding_more_urls.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/04_real_world_project.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/05_crawling.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/06_scraping.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/07_saving_data.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/08_refactoring.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/09_running_in_cloud.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/02_bs.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/02_bs_better.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/02_request_queue.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/03_enqueue_strategy.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/03_finding_new_links.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/03_globs.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/03_original_code.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/03_transform_request.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/04_sanity_check.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/05_crawling_detail.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/05_crawling_listing.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/06_scraping.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/07_final_code.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/07_first_code.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/08_main.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/08_routes.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/09_apify_sdk.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/code_examples/routes.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/introduction/index.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/pyproject.toml +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/quick-start/code_examples/beautifulsoup_crawler_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/quick-start/code_examples/parsel_crawler_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/quick-start/code_examples/playwright_crawler_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/quick-start/code_examples/playwright_crawler_headful_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/quick-start/index.mdx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/docs/upgrading/upgrading_to_v0x.md +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/renovate.json +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_autoscaling/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_autoscaling/_types.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_autoscaling/autoscaled_pool.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_autoscaling/py.typed +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_autoscaling/snapshotter.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_autoscaling/system_status.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_browserforge_workaround.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_cli.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_consts.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_log_config.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_request.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_service_locator.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_types.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/blocked.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/byte_size.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/console.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/context.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/crypto.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/docs.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/file.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/globs.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/html_to_text.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/models.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/raise_if_too_many_kwargs.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/recoverable_state.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/recurring_task.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/requests.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/robots.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/sitemap.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/system.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/time.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/try_import.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/urls.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/wait.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/_utils/web.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/browsers/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/browsers/_browser_controller.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/browsers/_browser_plugin.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/browsers/_browser_pool.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/browsers/_playwright_browser.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/browsers/_playwright_browser_controller.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/browsers/_playwright_browser_plugin.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/browsers/_types.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/browsers/py.typed +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/configuration.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_abstract_http/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_abstract_http/_abstract_http_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_abstract_http/_abstract_http_parser.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_abstract_http/_http_crawling_context.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_abstract_http/py.typed +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_adaptive_playwright/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawler_statistics.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawling_context.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_adaptive_playwright/_rendering_type_predictor.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_adaptive_playwright/_result_comparator.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_adaptive_playwright/_utils.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_basic/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_basic/_basic_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_basic/_basic_crawling_context.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_basic/_context_pipeline.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_basic/_logging_utils.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_basic/py.typed +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_beautifulsoup/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_beautifulsoup/_beautifulsoup_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_beautifulsoup/_beautifulsoup_crawling_context.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_beautifulsoup/_beautifulsoup_parser.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_beautifulsoup/_utils.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_beautifulsoup/py.typed +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_http/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_http/_http_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_http/_http_parser.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_parsel/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_parsel/_parsel_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_parsel/_parsel_crawling_context.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_parsel/_parsel_parser.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_parsel/_utils.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_playwright/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_playwright/_playwright_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_playwright/_playwright_crawling_context.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_playwright/_playwright_http_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_playwright/_playwright_pre_nav_crawling_context.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_playwright/_types.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_playwright/_utils.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/_types.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/crawlers/py.typed +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/errors.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/events/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/events/_event_manager.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/events/_local_event_manager.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/events/_types.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/events/py.typed +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/fingerprint_suite/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/fingerprint_suite/_browserforge_adapter.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/fingerprint_suite/_consts.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/fingerprint_suite/_fingerprint_generator.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/fingerprint_suite/_header_generator.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/fingerprint_suite/_types.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/fingerprint_suite/py.typed +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/http_clients/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/http_clients/_base.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/http_clients/_curl_impersonate.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/http_clients/_httpx.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/http_clients/_impit.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/otel/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/otel/crawler_instrumentor.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/cookiecutter.json +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/hooks/post_gen_project.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/hooks/pre_gen_project.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/templates/main.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/templates/main_beautifulsoup.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/templates/main_parsel.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/templates/main_playwright.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/templates/main_playwright_camoufox.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/templates/routes_beautifulsoup.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/templates/routes_camoufox.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/templates/routes_parsel.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/templates/routes_playwright.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/templates/routes_playwright_camoufox.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/{{cookiecutter.project_name}}/.dockerignore +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/{{cookiecutter.project_name}}/Dockerfile +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/{{cookiecutter.project_name}}/README.md +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/{{cookiecutter.project_name}}/pyproject.toml +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/{{cookiecutter.project_name}}/requirements.txt +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/{{cookiecutter.project_name}}/{{cookiecutter.__package_name}}/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/{{cookiecutter.project_name}}/{{cookiecutter.__package_name}}/__main__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/{{cookiecutter.project_name}}/{{cookiecutter.__package_name}}/main.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/project_template/{{cookiecutter.project_name}}/{{cookiecutter.__package_name}}/routes.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/proxy_configuration.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/py.typed +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/request_loaders/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/request_loaders/_request_list.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/request_loaders/_request_loader.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/request_loaders/_request_manager.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/request_loaders/_request_manager_tandem.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/request_loaders/_sitemap_request_loader.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/router.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/sessions/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/sessions/_cookies.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/sessions/_models.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/sessions/_session.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/sessions/_session_pool.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/sessions/py.typed +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/statistics/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/statistics/_error_snapshotter.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/statistics/_error_tracker.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/statistics/_models.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/statistics/_statistics.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_base/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_base/_dataset_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_base/_key_value_store_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_base/_request_queue_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_base/_storage_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_base/py.typed +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_file_system/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_file_system/_dataset_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_file_system/_key_value_store_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_file_system/_request_queue_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_file_system/_storage_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_file_system/_utils.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_file_system/py.typed +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_memory/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_memory/_dataset_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_memory/_key_value_store_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_memory/_request_queue_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_memory/_storage_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_memory/py.typed +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_sql/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_sql/_client_mixin.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_sql/_dataset_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_sql/_db_models.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_sql/_key_value_store_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_sql/_request_queue_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_sql/_storage_client.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/_sql/py.typed +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/models.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storage_clients/py.typed +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storages/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/src/crawlee/storages/py.typed +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/e2e/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/e2e/conftest.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/e2e/project_template/test_static_crawlers_templates.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/e2e/project_template/utils.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/README.md +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/__init__.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_autoscaling/test_autoscaled_pool.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_autoscaling/test_snapshotter.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_autoscaling/test_system_status.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_statistics/test_error_tracker.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_statistics/test_periodic_logging.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_statistics/test_persistence.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_statistics/test_request_processing_record.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_utils/test_byte_size.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_utils/test_console.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_utils/test_crypto.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_utils/test_file.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_utils/test_globs.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_utils/test_html_to_text.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_utils/test_measure_time.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_utils/test_raise_if_too_many_kwargs.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_utils/test_recurring_task.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_utils/test_requests.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_utils/test_robots.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_utils/test_system.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_utils/test_timedelata_ms.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/_utils/test_urls.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/browsers/test_browser_pool.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/browsers/test_playwright_browser.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/browsers/test_playwright_browser_controller.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/browsers/test_playwright_browser_plugin.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/conftest.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/crawlers/_adaptive_playwright/test_adaptive_playwright_crawler_statistics.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/crawlers/_adaptive_playwright/test_adaptive_playwright_crawling_context.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/crawlers/_adaptive_playwright/test_predictor.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/crawlers/_basic/test_basic_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/crawlers/_basic/test_context_pipeline.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/crawlers/_beautifulsoup/test_beautifulsoup_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/crawlers/_http/test_http_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/crawlers/_parsel/test_parsel_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/crawlers/_playwright/test_playwright_crawler.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/events/test_event_manager.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/events/test_local_event_manager.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/fingerprint_suite/test_adapters.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/fingerprint_suite/test_header_generator.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/http_clients/test_http_clients.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/http_clients/test_httpx.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/proxy_configuration/test_new_proxy_info.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/proxy_configuration/test_tiers.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/request_loaders/test_request_list.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/request_loaders/test_sitemap_request_loader.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/server.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/server_endpoints.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/sessions/test_cookies.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/sessions/test_models.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/sessions/test_session.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storages/conftest.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storages/test_request_manager_tandem.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storages/test_storage_instance_manager.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/test_cli.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/test_configuration.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/test_log_config.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/test_router.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/test_service_locator.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/.eslintrc.json +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/.yarnrc.yml +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/babel.config.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/build_api_reference.sh +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/docusaurus.config.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/generate_module_shortcuts.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/package.json +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/patches/@docusaurus+core+3.4.0.patch +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/patches/@docusaurus+core+3.5.2.patch +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/roa-loader/index.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/roa-loader/package.json +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/sidebars.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/ApiLink.jsx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Button.jsx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Button.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/CopyButton.jsx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/CopyButton.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Gradients.jsx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Highlights.jsx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Highlights.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Homepage/HomepageCliExample.jsx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Homepage/HomepageCliExample.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Homepage/HomepageCtaSection.jsx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Homepage/HomepageCtaSection.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Homepage/HomepageHeroSection.jsx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Homepage/HomepageHeroSection.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Homepage/LanguageInfoWidget.jsx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Homepage/LanguageInfoWidget.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Homepage/LanguageSwitch.jsx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Homepage/LanguageSwitch.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Homepage/RiverSection.jsx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Homepage/RiverSection.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Homepage/ThreeCardsWithIcon.jsx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Homepage/ThreeCardsWithIcon.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Homepage/animated-crawlee-logo-dark.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/Homepage/animated-crawlee-logo-light.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/RunnableCodeBlock.jsx +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/components/RunnableCodeBlock.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/css/custom.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/pages/home_page_example.py +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/pages/index.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/pages/index.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/ColorModeToggle/dark-mode-icon.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/ColorModeToggle/index.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/ColorModeToggle/light-mode-icon.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/ColorModeToggle/styles.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/DocItem/Layout/index.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/DocItem/Layout/styles.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/Footer/LinkItem/index.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/Footer/LinkItem/index.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/Footer/index.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/Footer/index.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/MDXComponents/A.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/Navbar/Content/index.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/Navbar/Content/styles.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/Navbar/Logo/index.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/Navbar/Logo/index.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/Navbar/MobileSidebar/Header/index.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/Navbar/MobileSidebar/Header/index.module.css +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/Navbar/MobileSidebar/Layout/index.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/Navbar/MobileSidebar/index.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/src/theme/NavbarItem/ComponentTypes.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/.nojekyll +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/font/lota.woff +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/font/lota.woff2 +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/API.png +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/apify_logo.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/apify_og_SDK.png +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/apify_sdk.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/apify_sdk_white.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/arrow_right.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/auto-scaling-dark.webp +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/auto-scaling-light.webp +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/check.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/chrome-scrape-dark.gif +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/chrome-scrape-light.gif +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/cloud_icon.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/community-dark-icon.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/community-light-icon.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/crawlee-dark-new.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/crawlee-dark.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/crawlee-javascript-dark.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/crawlee-javascript-light.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/crawlee-light-new.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/crawlee-light.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/crawlee-logo-monocolor.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/crawlee-logo.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/crawlee-python-dark.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/crawlee-python-light.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/crawlee-python-og.png +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/defaults-dark-icon.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/defaults-light-icon.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/discord-brand-dark.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/discord-brand.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/docusaurus.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/external-link.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/favicon.ico +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/favorite-tools-dark.webp +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/favorite-tools-light.webp +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/features/auto-scaling.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/features/automate-everything.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/features/fingerprints.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/features/node-requests.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/features/runs-on-py.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/features/storage.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/features/works-everywhere.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/fill-and-submit-web-form/00.jpg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/fill-and-submit-web-form/01.jpg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/fill-and-submit-web-form/02.jpg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/fill-and-submit-web-form/03.jpg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/getting-started/current-price.jpg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/getting-started/scraping-practice.jpg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/getting-started/select-an-element.jpg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/getting-started/selected-element.jpg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/getting-started/sku.jpg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/getting-started/title.jpg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/github-brand-dark.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/github-brand.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/guides/jaeger_otel_search_view_example.png +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/guides/jaeger_otel_trace_example.png +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/hearth copy.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/hearth.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/javascript_logo.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/js_file.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/logo-big.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/logo-blur.png +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/logo-blur.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/logo-zoom.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/menu-arrows.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/oss_logo.png +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/puppeteer-live-view-dashboard.png +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/puppeteer-live-view-detail.png +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/queue-dark-icon.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/queue-light-icon.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/resuming-paused-crawl/00.webp +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/resuming-paused-crawl/01.webp +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/robot.png +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/routing-dark-icon.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/routing-light-icon.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/scraping-utils-dark-icon.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/scraping-utils-light-icon.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/smart-proxy-dark.webp +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/smart-proxy-light.webp +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/source_code.png +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/system.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/triangles_dark.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/triangles_light.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/workflow.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/zero-setup-dark-icon.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/img/zero-setup-light-icon.svg +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/js/custom.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/static/robots.txt +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/tools/docs-prettier.config.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/tools/utils/externalLink.js +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/tools/website_gif/chrome-scrape-dark.gif +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/tools/website_gif/chrome-scrape-dark.mp4 +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/tools/website_gif/chrome-scrape-light.gif +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/tools/website_gif/chrome-scrape-light.mp4 +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/tools/website_gif/website_gif.mjs +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/tsconfig.eslint.json +0 -0
- {crawlee-1.0.2b2 → crawlee-1.0.2b4}/website/yarn.lock +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
|
- Use Self type in the open() method of storage clients ([#1462](https://github.com/apify/crawlee-python/pull/1462)) ([4ec6f6c](https://github.com/apify/crawlee-python/commit/4ec6f6c08f81632197f602ff99151338b3eba6e7)) by [@janbuchar](https://github.com/janbuchar)
|
|
11
|
+
- Add storages name validation ([#1457](https://github.com/apify/crawlee-python/pull/1457)) ([84de11a](https://github.com/apify/crawlee-python/commit/84de11a3a603503076f5b7df487c9abab68a9015)) by [@Mantisus](https://github.com/Mantisus), closes [#1434](https://github.com/apify/crawlee-python/issues/1434)
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
<!-- git-cliff-unreleased-end -->
|
|
@@ -333,3 +333,7 @@ async def main() -> None:
|
|
|
333
333
|
|
|
334
334
|
await crawler.run(['https://crawlee.dev/'])
|
|
335
335
|
```
|
|
336
|
+
|
|
337
|
+
### New storage naming restrictions
|
|
338
|
+
|
|
339
|
+
We've introduced naming restrictions for storages to ensure compatibility with Apify Platform requirements and prevent potential conflicts. Storage names may include only letters (a–z, A–Z), digits (0–9), and hyphens (-), with hyphens allowed only in the middle of the name (for example, my-storage-1).
|
|
@@ -44,7 +44,9 @@ class Storage(ABC):
|
|
|
44
44
|
|
|
45
45
|
Args:
|
|
46
46
|
id: The storage ID.
|
|
47
|
-
name: The storage name (global scope, persists across runs).
|
|
47
|
+
name: The storage name (global scope, persists across runs). Name can only contain letters "a" through "z",
|
|
48
|
+
the digits "0" through "9", and the hyphen ("-") but only in the middle of the string
|
|
49
|
+
(e.g. "my-value-1").
|
|
48
50
|
alias: The storage alias (run scope, creates unnamed storage).
|
|
49
51
|
configuration: Configuration object used during the storage creation or restoration process.
|
|
50
52
|
storage_client: Underlying storage client to use. If not provided, the default global storage client
|
|
@@ -12,6 +12,7 @@ from crawlee._utils.file import export_csv_to_stream, export_json_to_stream
|
|
|
12
12
|
|
|
13
13
|
from ._base import Storage
|
|
14
14
|
from ._key_value_store import KeyValueStore
|
|
15
|
+
from ._utils import validate_storage_name
|
|
15
16
|
|
|
16
17
|
if TYPE_CHECKING:
|
|
17
18
|
from collections.abc import AsyncIterator
|
|
@@ -75,6 +76,8 @@ class Dataset(Storage):
|
|
|
75
76
|
id: The unique identifier of the storage.
|
|
76
77
|
name: The name of the storage, if available.
|
|
77
78
|
"""
|
|
79
|
+
validate_storage_name(name)
|
|
80
|
+
|
|
78
81
|
self._client = client
|
|
79
82
|
self._id = id
|
|
80
83
|
self._name = name
|
|
@@ -15,6 +15,7 @@ from crawlee._utils.recoverable_state import RecoverableState
|
|
|
15
15
|
from crawlee.storage_clients.models import KeyValueStoreMetadata
|
|
16
16
|
|
|
17
17
|
from ._base import Storage
|
|
18
|
+
from ._utils import validate_storage_name
|
|
18
19
|
|
|
19
20
|
if TYPE_CHECKING:
|
|
20
21
|
from collections.abc import AsyncIterator
|
|
@@ -84,6 +85,8 @@ class KeyValueStore(Storage):
|
|
|
84
85
|
id: The unique identifier of the storage.
|
|
85
86
|
name: The name of the storage, if available.
|
|
86
87
|
"""
|
|
88
|
+
validate_storage_name(name)
|
|
89
|
+
|
|
87
90
|
self._client = client
|
|
88
91
|
self._id = id
|
|
89
92
|
self._name = name
|
|
@@ -13,6 +13,7 @@ from crawlee._utils.wait import wait_for_all_tasks_for_finish
|
|
|
13
13
|
from crawlee.request_loaders import RequestManager
|
|
14
14
|
|
|
15
15
|
from ._base import Storage
|
|
16
|
+
from ._utils import validate_storage_name
|
|
16
17
|
|
|
17
18
|
if TYPE_CHECKING:
|
|
18
19
|
from collections.abc import Sequence
|
|
@@ -80,6 +81,8 @@ class RequestQueue(Storage, RequestManager):
|
|
|
80
81
|
id: The unique identifier of the storage.
|
|
81
82
|
name: The name of the storage, if available.
|
|
82
83
|
"""
|
|
84
|
+
validate_storage_name(name)
|
|
85
|
+
|
|
83
86
|
self._client = client
|
|
84
87
|
self._id = id
|
|
85
88
|
self._name = name
|
|
@@ -8,6 +8,8 @@ from typing import TYPE_CHECKING, TypeVar
|
|
|
8
8
|
from crawlee._utils.raise_if_too_many_kwargs import raise_if_too_many_kwargs
|
|
9
9
|
from crawlee.storage_clients._base import DatasetClient, KeyValueStoreClient, RequestQueueClient
|
|
10
10
|
|
|
11
|
+
from ._utils import validate_storage_name
|
|
12
|
+
|
|
11
13
|
if TYPE_CHECKING:
|
|
12
14
|
from ._base import Storage
|
|
13
15
|
|
|
@@ -90,7 +92,9 @@ class StorageInstanceManager:
|
|
|
90
92
|
Args:
|
|
91
93
|
cls: The storage class to instantiate.
|
|
92
94
|
id: Storage ID.
|
|
93
|
-
name: Storage name. (global scope, persists across runs).
|
|
95
|
+
name: Storage name. (global scope, persists across runs). Name can only contain letters "a" through "z",
|
|
96
|
+
the digits "0" through "9", and the hyphen ("-") but only in the middle of the string
|
|
97
|
+
(e.g. "my-value-1").
|
|
94
98
|
alias: Storage alias (run scope, creates unnamed storage).
|
|
95
99
|
client_opener_coro: Coroutine to open the storage client when storage instance not found in cache.
|
|
96
100
|
storage_client_cache_key: Additional optional key from storage client to differentiate cache entries.
|
|
@@ -146,6 +150,10 @@ class StorageInstanceManager:
|
|
|
146
150
|
f'Use a different name or drop the existing alias storage first.'
|
|
147
151
|
)
|
|
148
152
|
|
|
153
|
+
# Validate storage name
|
|
154
|
+
if name is not None:
|
|
155
|
+
validate_storage_name(name)
|
|
156
|
+
|
|
149
157
|
# Create new instance
|
|
150
158
|
client: KeyValueStoreClient | DatasetClient | RequestQueueClient
|
|
151
159
|
client = await client_opener_coro
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import re
|
|
2
|
+
|
|
3
|
+
NAME_REGEX = re.compile(r'^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])$')
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def validate_storage_name(name: str | None) -> None:
|
|
7
|
+
if name and not NAME_REGEX.match(name):
|
|
8
|
+
raise ValueError(
|
|
9
|
+
f'Invalid storage name "{name}". Name can only contain letters "a" through "z", the digits "0" through'
|
|
10
|
+
'"9", and the hyphen ("-") but only in the middle of the string (e.g. "my-value-1")'
|
|
11
|
+
)
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import base64
|
|
2
2
|
import gzip
|
|
3
|
+
import os
|
|
3
4
|
from datetime import datetime
|
|
4
5
|
|
|
6
|
+
import pytest
|
|
5
7
|
from yarl import URL
|
|
6
8
|
|
|
7
9
|
from crawlee._utils.sitemap import Sitemap, SitemapUrl, parse_sitemap
|
|
@@ -104,6 +106,10 @@ async def test_gzipped_sitemap_with_invalid_data(server_url: URL, http_client: H
|
|
|
104
106
|
assert sitemap.urls == []
|
|
105
107
|
|
|
106
108
|
|
|
109
|
+
@pytest.mark.skipif(
|
|
110
|
+
os.name == 'nt',
|
|
111
|
+
reason='This test is flaky on Windows, see https://github.com/apify/crawlee-python/issues/1460.',
|
|
112
|
+
)
|
|
107
113
|
async def test_gz_sitemap_with_non_gzipped(server_url: URL, http_client: HttpClient) -> None:
|
|
108
114
|
"""Test loading a sitemap with gzip type and .xml.gz url, but without gzipped data."""
|
|
109
115
|
sitemap_url = (server_url / 'sitemap.xml.gz').with_query(
|
|
@@ -473,7 +473,7 @@ async def test_adaptive_crawler_exceptions_in_sub_crawlers(*, error_in_pw_crawle
|
|
|
473
473
|
async def test_adaptive_playwright_crawler_statistics_in_init() -> None:
|
|
474
474
|
"""Tests that adaptive crawler uses created AdaptivePlaywrightCrawlerStatistics from inputted Statistics."""
|
|
475
475
|
persistence_enabled = True
|
|
476
|
-
persist_state_kvs_name = 'some
|
|
476
|
+
persist_state_kvs_name = 'some-name'
|
|
477
477
|
persist_state_key = 'come key'
|
|
478
478
|
log_message = 'some message'
|
|
479
479
|
periodic_message_logger = logging.getLogger('some logger')
|
|
@@ -38,7 +38,7 @@ async def test_crawler_instrumentor_capability(server_url: URL) -> None:
|
|
|
38
38
|
|
|
39
39
|
# Generate first telemetry data from `Dataset` public methods.
|
|
40
40
|
# `Dataset` is in `instrument_classes` argument, and thus it's public methods are instrumented.
|
|
41
|
-
dataset = await Dataset.open(name='
|
|
41
|
+
dataset = await Dataset.open(name='test-dataset')
|
|
42
42
|
await dataset.drop()
|
|
43
43
|
|
|
44
44
|
# Other traces will be from crawler run.
|
|
@@ -27,14 +27,14 @@ def configuration(tmp_path: Path) -> Configuration:
|
|
|
27
27
|
@pytest.fixture
|
|
28
28
|
async def dataset_client(configuration: Configuration) -> AsyncGenerator[FileSystemDatasetClient, None]:
|
|
29
29
|
"""A fixture for a file system dataset client."""
|
|
30
|
-
client = await FileSystemStorageClient().create_dataset_client(name='
|
|
30
|
+
client = await FileSystemStorageClient().create_dataset_client(name='test-dataset', configuration=configuration)
|
|
31
31
|
yield client
|
|
32
32
|
await client.drop()
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
async def test_file_and_directory_creation(configuration: Configuration) -> None:
|
|
36
36
|
"""Test that file system dataset creates proper files and directories."""
|
|
37
|
-
client = await FileSystemStorageClient().create_dataset_client(name='
|
|
37
|
+
client = await FileSystemStorageClient().create_dataset_client(name='new-dataset', configuration=configuration)
|
|
38
38
|
|
|
39
39
|
# Verify files were created
|
|
40
40
|
assert client.path_to_dataset.exists()
|
|
@@ -45,7 +45,7 @@ async def test_file_and_directory_creation(configuration: Configuration) -> None
|
|
|
45
45
|
metadata = json.load(f)
|
|
46
46
|
client_metadata = await client.get_metadata()
|
|
47
47
|
assert metadata['id'] == client_metadata.id
|
|
48
|
-
assert metadata['name'] == '
|
|
48
|
+
assert metadata['name'] == 'new-dataset'
|
|
49
49
|
assert metadata['item_count'] == 0
|
|
50
50
|
|
|
51
51
|
await client.drop()
|
{crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storage_clients/_file_system/test_fs_kvs_client.py
RENAMED
|
@@ -27,14 +27,14 @@ def configuration(tmp_path: Path) -> Configuration:
|
|
|
27
27
|
@pytest.fixture
|
|
28
28
|
async def kvs_client(configuration: Configuration) -> AsyncGenerator[FileSystemKeyValueStoreClient, None]:
|
|
29
29
|
"""A fixture for a file system key-value store client."""
|
|
30
|
-
client = await FileSystemStorageClient().create_kvs_client(name='
|
|
30
|
+
client = await FileSystemStorageClient().create_kvs_client(name='test-kvs', configuration=configuration)
|
|
31
31
|
yield client
|
|
32
32
|
await client.drop()
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
async def test_file_and_directory_creation(configuration: Configuration) -> None:
|
|
36
36
|
"""Test that file system KVS creates proper files and directories."""
|
|
37
|
-
client = await FileSystemStorageClient().create_kvs_client(name='
|
|
37
|
+
client = await FileSystemStorageClient().create_kvs_client(name='new-kvs', configuration=configuration)
|
|
38
38
|
|
|
39
39
|
# Verify files were created
|
|
40
40
|
assert client.path_to_kvs.exists()
|
|
@@ -44,7 +44,7 @@ async def test_file_and_directory_creation(configuration: Configuration) -> None
|
|
|
44
44
|
with client.path_to_metadata.open() as f:
|
|
45
45
|
metadata = json.load(f)
|
|
46
46
|
assert metadata['id'] == (await client.get_metadata()).id
|
|
47
|
-
assert metadata['name'] == '
|
|
47
|
+
assert metadata['name'] == 'new-kvs'
|
|
48
48
|
|
|
49
49
|
await client.drop()
|
|
50
50
|
|
{crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storage_clients/_file_system/test_fs_rq_client.py
RENAMED
|
@@ -28,7 +28,7 @@ def configuration(tmp_path: Path) -> Configuration:
|
|
|
28
28
|
async def rq_client() -> AsyncGenerator[FileSystemRequestQueueClient, None]:
|
|
29
29
|
"""A fixture for a file system request queue client."""
|
|
30
30
|
client = await FileSystemStorageClient().create_rq_client(
|
|
31
|
-
name='
|
|
31
|
+
name='test-request-queue',
|
|
32
32
|
)
|
|
33
33
|
yield client
|
|
34
34
|
await client.drop()
|
|
@@ -36,7 +36,7 @@ async def rq_client() -> AsyncGenerator[FileSystemRequestQueueClient, None]:
|
|
|
36
36
|
|
|
37
37
|
async def test_file_and_directory_creation() -> None:
|
|
38
38
|
"""Test that file system RQ creates proper files and directories."""
|
|
39
|
-
client = await FileSystemStorageClient().create_rq_client(name='
|
|
39
|
+
client = await FileSystemStorageClient().create_rq_client(name='new-request-queue')
|
|
40
40
|
|
|
41
41
|
# Verify files were created
|
|
42
42
|
assert client.path_to_rq.exists()
|
|
@@ -46,7 +46,7 @@ async def test_file_and_directory_creation() -> None:
|
|
|
46
46
|
with client.path_to_metadata.open() as f:
|
|
47
47
|
metadata = json.load(f)
|
|
48
48
|
assert metadata['id'] == (await client.get_metadata()).id
|
|
49
|
-
assert metadata['name'] == '
|
|
49
|
+
assert metadata['name'] == 'new-request-queue'
|
|
50
50
|
|
|
51
51
|
await client.drop()
|
|
52
52
|
|
{crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storage_clients/_memory/test_memory_dataset_client.py
RENAMED
|
@@ -16,7 +16,7 @@ if TYPE_CHECKING:
|
|
|
16
16
|
@pytest.fixture
|
|
17
17
|
async def dataset_client() -> AsyncGenerator[MemoryDatasetClient, None]:
|
|
18
18
|
"""Fixture that provides a fresh memory dataset client for each test."""
|
|
19
|
-
client = await MemoryStorageClient().create_dataset_client(name='
|
|
19
|
+
client = await MemoryStorageClient().create_dataset_client(name='test-dataset')
|
|
20
20
|
yield client
|
|
21
21
|
await client.drop()
|
|
22
22
|
|
|
@@ -25,7 +25,7 @@ async def test_memory_specific_purge_behavior() -> None:
|
|
|
25
25
|
"""Test memory-specific purge behavior and in-memory storage characteristics."""
|
|
26
26
|
# Create dataset and add data
|
|
27
27
|
dataset_client1 = await MemoryStorageClient().create_dataset_client(
|
|
28
|
-
name='
|
|
28
|
+
name='test-purge-dataset',
|
|
29
29
|
)
|
|
30
30
|
await dataset_client1.push_data({'item': 'initial data'})
|
|
31
31
|
|
|
@@ -35,7 +35,7 @@ async def test_memory_specific_purge_behavior() -> None:
|
|
|
35
35
|
|
|
36
36
|
# Reopen with same storage client instance
|
|
37
37
|
dataset_client2 = await MemoryStorageClient().create_dataset_client(
|
|
38
|
-
name='
|
|
38
|
+
name='test-purge-dataset',
|
|
39
39
|
)
|
|
40
40
|
|
|
41
41
|
# Verify data was purged (memory storage specific behavior)
|
{crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storage_clients/_memory/test_memory_kvs_client.py
RENAMED
|
@@ -16,7 +16,7 @@ if TYPE_CHECKING:
|
|
|
16
16
|
@pytest.fixture
|
|
17
17
|
async def kvs_client() -> AsyncGenerator[MemoryKeyValueStoreClient, None]:
|
|
18
18
|
"""Fixture that provides a fresh memory key-value store client for each test."""
|
|
19
|
-
client = await MemoryStorageClient().create_kvs_client(name='
|
|
19
|
+
client = await MemoryStorageClient().create_kvs_client(name='test-kvs')
|
|
20
20
|
yield client
|
|
21
21
|
await client.drop()
|
|
22
22
|
|
|
@@ -26,7 +26,7 @@ async def test_memory_specific_purge_behavior() -> None:
|
|
|
26
26
|
|
|
27
27
|
# Create KVS and add data
|
|
28
28
|
kvs_client1 = await MemoryStorageClient().create_kvs_client(
|
|
29
|
-
name='
|
|
29
|
+
name='test-purge-kvs',
|
|
30
30
|
)
|
|
31
31
|
await kvs_client1.set_value(key='test-key', value='initial value')
|
|
32
32
|
|
|
@@ -37,7 +37,7 @@ async def test_memory_specific_purge_behavior() -> None:
|
|
|
37
37
|
|
|
38
38
|
# Reopen with same storage client instance
|
|
39
39
|
kvs_client2 = await MemoryStorageClient().create_kvs_client(
|
|
40
|
-
name='
|
|
40
|
+
name='test-purge-kvs',
|
|
41
41
|
)
|
|
42
42
|
|
|
43
43
|
# Verify value was purged (memory storage specific behavior)
|
{crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storage_clients/_memory/test_memory_rq_client.py
RENAMED
|
@@ -17,7 +17,7 @@ if TYPE_CHECKING:
|
|
|
17
17
|
@pytest.fixture
|
|
18
18
|
async def rq_client() -> AsyncGenerator[MemoryRequestQueueClient, None]:
|
|
19
19
|
"""Fixture that provides a fresh memory request queue client for each test."""
|
|
20
|
-
client = await MemoryStorageClient().create_rq_client(name='
|
|
20
|
+
client = await MemoryStorageClient().create_rq_client(name='test-rq')
|
|
21
21
|
yield client
|
|
22
22
|
await client.drop()
|
|
23
23
|
|
|
@@ -26,7 +26,7 @@ async def test_memory_specific_purge_behavior() -> None:
|
|
|
26
26
|
"""Test memory-specific purge behavior and in-memory storage characteristics."""
|
|
27
27
|
# Create RQ and add data
|
|
28
28
|
rq_client1 = await MemoryStorageClient().create_rq_client(
|
|
29
|
-
name='
|
|
29
|
+
name='test-purge-rq',
|
|
30
30
|
)
|
|
31
31
|
request = Request.from_url(url='https://example.com/initial')
|
|
32
32
|
await rq_client1.add_batch_of_requests([request])
|
|
@@ -36,7 +36,7 @@ async def test_memory_specific_purge_behavior() -> None:
|
|
|
36
36
|
|
|
37
37
|
# Reopen with same storage client instance
|
|
38
38
|
rq_client2 = await MemoryStorageClient().create_rq_client(
|
|
39
|
-
name='
|
|
39
|
+
name='test-purge-rq',
|
|
40
40
|
)
|
|
41
41
|
|
|
42
42
|
# Verify queue was purged (memory storage specific behavior)
|
{crawlee-1.0.2b2 → crawlee-1.0.2b4}/tests/unit/storage_clients/_sql/test_sql_dataset_client.py
RENAMED
|
@@ -44,7 +44,7 @@ async def dataset_client(
|
|
|
44
44
|
async with SqlStorageClient() as storage_client:
|
|
45
45
|
monkeypatch.setattr(storage_client, '_accessed_modified_update_interval', timedelta(seconds=0))
|
|
46
46
|
client = await storage_client.create_dataset_client(
|
|
47
|
-
name='
|
|
47
|
+
name='test-dataset',
|
|
48
48
|
configuration=configuration,
|
|
49
49
|
)
|
|
50
50
|
yield client
|
|
@@ -57,7 +57,7 @@ async def test_create_tables_with_connection_string(configuration: Configuration
|
|
|
57
57
|
|
|
58
58
|
async with SqlStorageClient(connection_string=f'sqlite+aiosqlite:///{storage_dir}') as storage_client:
|
|
59
59
|
await storage_client.create_dataset_client(
|
|
60
|
-
name='
|
|
60
|
+
name='new-dataset',
|
|
61
61
|
configuration=configuration,
|
|
62
62
|
)
|
|
63
63
|
|
|
@@ -75,7 +75,7 @@ async def test_create_tables_with_engine(configuration: Configuration, tmp_path:
|
|
|
75
75
|
|
|
76
76
|
async with SqlStorageClient(engine=engine) as storage_client:
|
|
77
77
|
await storage_client.create_dataset_client(
|
|
78
|
-
name='
|
|
78
|
+
name='new-dataset',
|
|
79
79
|
configuration=configuration,
|
|
80
80
|
)
|
|
81
81
|
|
|
@@ -89,7 +89,7 @@ async def test_tables_and_metadata_record(configuration: Configuration) -> None:
|
|
|
89
89
|
"""Test that SQL dataset creates proper tables and metadata records."""
|
|
90
90
|
async with SqlStorageClient() as storage_client:
|
|
91
91
|
client = await storage_client.create_dataset_client(
|
|
92
|
-
name='
|
|
92
|
+
name='new-dataset',
|
|
93
93
|
configuration=configuration,
|
|
94
94
|
)
|
|
95
95
|
|
|
@@ -101,12 +101,12 @@ async def test_tables_and_metadata_record(configuration: Configuration) -> None:
|
|
|
101
101
|
assert 'datasets' in tables
|
|
102
102
|
|
|
103
103
|
async with client.get_session() as session:
|
|
104
|
-
stmt = select(DatasetMetadataDb).where(DatasetMetadataDb.name == '
|
|
104
|
+
stmt = select(DatasetMetadataDb).where(DatasetMetadataDb.name == 'new-dataset')
|
|
105
105
|
result = await session.execute(stmt)
|
|
106
106
|
orm_metadata = result.scalar_one_or_none()
|
|
107
107
|
assert orm_metadata is not None
|
|
108
108
|
assert orm_metadata.id == client_metadata.id
|
|
109
|
-
assert orm_metadata.name == '
|
|
109
|
+
assert orm_metadata.name == 'new-dataset'
|
|
110
110
|
assert orm_metadata.item_count == 0
|
|
111
111
|
|
|
112
112
|
await client.drop()
|
|
@@ -40,7 +40,7 @@ async def kvs_client(
|
|
|
40
40
|
async with SqlStorageClient() as storage_client:
|
|
41
41
|
monkeypatch.setattr(storage_client, '_accessed_modified_update_interval', timedelta(seconds=0))
|
|
42
42
|
client = await storage_client.create_kvs_client(
|
|
43
|
-
name='
|
|
43
|
+
name='test-kvs',
|
|
44
44
|
configuration=configuration,
|
|
45
45
|
)
|
|
46
46
|
monkeypatch.setattr(client, '_accessed_modified_update_interval', timedelta(seconds=0))
|
|
@@ -60,7 +60,7 @@ async def test_create_tables_with_connection_string(configuration: Configuration
|
|
|
60
60
|
|
|
61
61
|
async with SqlStorageClient(connection_string=f'sqlite+aiosqlite:///{storage_dir}') as storage_client:
|
|
62
62
|
await storage_client.create_kvs_client(
|
|
63
|
-
name='
|
|
63
|
+
name='new-kvs',
|
|
64
64
|
configuration=configuration,
|
|
65
65
|
)
|
|
66
66
|
|
|
@@ -78,7 +78,7 @@ async def test_create_tables_with_engine(configuration: Configuration, tmp_path:
|
|
|
78
78
|
|
|
79
79
|
async with SqlStorageClient(engine=engine) as storage_client:
|
|
80
80
|
await storage_client.create_kvs_client(
|
|
81
|
-
name='
|
|
81
|
+
name='new-kvs',
|
|
82
82
|
configuration=configuration,
|
|
83
83
|
)
|
|
84
84
|
|
|
@@ -92,7 +92,7 @@ async def test_tables_and_metadata_record(configuration: Configuration) -> None:
|
|
|
92
92
|
"""Test that SQL key-value store creates proper tables and metadata records."""
|
|
93
93
|
async with SqlStorageClient() as storage_client:
|
|
94
94
|
client = await storage_client.create_kvs_client(
|
|
95
|
-
name='
|
|
95
|
+
name='new-kvs',
|
|
96
96
|
configuration=configuration,
|
|
97
97
|
)
|
|
98
98
|
|
|
@@ -104,12 +104,12 @@ async def test_tables_and_metadata_record(configuration: Configuration) -> None:
|
|
|
104
104
|
assert 'key_value_store_records' in tables
|
|
105
105
|
|
|
106
106
|
async with client.get_session() as session:
|
|
107
|
-
stmt = select(KeyValueStoreMetadataDb).where(KeyValueStoreMetadataDb.name == '
|
|
107
|
+
stmt = select(KeyValueStoreMetadataDb).where(KeyValueStoreMetadataDb.name == 'new-kvs')
|
|
108
108
|
result = await session.execute(stmt)
|
|
109
109
|
orm_metadata = result.scalar_one_or_none()
|
|
110
110
|
metadata = KeyValueStoreMetadata.model_validate(orm_metadata)
|
|
111
111
|
assert metadata.id == client_metadata.id
|
|
112
|
-
assert metadata.name == '
|
|
112
|
+
assert metadata.name == 'new-kvs'
|
|
113
113
|
|
|
114
114
|
await client.drop()
|
|
115
115
|
|
|
@@ -41,7 +41,7 @@ async def rq_client(
|
|
|
41
41
|
async with SqlStorageClient() as storage_client:
|
|
42
42
|
monkeypatch.setattr(storage_client, '_accessed_modified_update_interval', timedelta(seconds=0))
|
|
43
43
|
client = await storage_client.create_rq_client(
|
|
44
|
-
name='
|
|
44
|
+
name='test-request-queue',
|
|
45
45
|
configuration=configuration,
|
|
46
46
|
)
|
|
47
47
|
monkeypatch.setattr(client, '_accessed_modified_update_interval', timedelta(seconds=0))
|
|
@@ -61,7 +61,7 @@ async def test_create_tables_with_connection_string(configuration: Configuration
|
|
|
61
61
|
|
|
62
62
|
async with SqlStorageClient(connection_string=f'sqlite+aiosqlite:///{storage_dir}') as storage_client:
|
|
63
63
|
await storage_client.create_rq_client(
|
|
64
|
-
name='
|
|
64
|
+
name='test-request-queue',
|
|
65
65
|
configuration=configuration,
|
|
66
66
|
)
|
|
67
67
|
|
|
@@ -80,7 +80,7 @@ async def test_create_tables_with_engine(configuration: Configuration, tmp_path:
|
|
|
80
80
|
|
|
81
81
|
async with SqlStorageClient(engine=engine) as storage_client:
|
|
82
82
|
await storage_client.create_rq_client(
|
|
83
|
-
name='
|
|
83
|
+
name='test-request-queue',
|
|
84
84
|
configuration=configuration,
|
|
85
85
|
)
|
|
86
86
|
|
|
@@ -95,7 +95,7 @@ async def test_tables_and_metadata_record(configuration: Configuration) -> None:
|
|
|
95
95
|
"""Test that SQL request queue creates proper tables and metadata records."""
|
|
96
96
|
async with SqlStorageClient() as storage_client:
|
|
97
97
|
client = await storage_client.create_rq_client(
|
|
98
|
-
name='
|
|
98
|
+
name='test-request-queue',
|
|
99
99
|
configuration=configuration,
|
|
100
100
|
)
|
|
101
101
|
|
|
@@ -108,12 +108,12 @@ async def test_tables_and_metadata_record(configuration: Configuration) -> None:
|
|
|
108
108
|
assert 'request_queue_state' in tables
|
|
109
109
|
|
|
110
110
|
async with client.get_session() as session:
|
|
111
|
-
stmt = select(RequestQueueMetadataDb).where(RequestQueueMetadataDb.name == '
|
|
111
|
+
stmt = select(RequestQueueMetadataDb).where(RequestQueueMetadataDb.name == 'test-request-queue')
|
|
112
112
|
result = await session.execute(stmt)
|
|
113
113
|
orm_metadata = result.scalar_one_or_none()
|
|
114
114
|
metadata = RequestQueueMetadata.model_validate(orm_metadata)
|
|
115
115
|
assert metadata.id == client_metadata.id
|
|
116
|
-
assert metadata.name == '
|
|
116
|
+
assert metadata.name == 'test-request-queue'
|
|
117
117
|
|
|
118
118
|
await client.drop()
|
|
119
119
|
|