apify 2.7.1b20__tar.gz → 2.7.1b21__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of apify might be problematic. Click here for more details.
- {apify-2.7.1b20 → apify-2.7.1b21}/CHANGELOG.md +13 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/PKG-INFO +2 -2
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/04_upgrading/upgrading_to_v3.md +49 -11
- {apify-2.7.1b20 → apify-2.7.1b21}/pyproject.toml +2 -2
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/_actor.py +37 -66
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/storage_clients/__init__.py +2 -0
- apify-2.7.1b21/src/apify/storage_clients/_apify/_request_queue_client.py +327 -0
- apify-2.7.1b20/src/apify/storage_clients/_apify/_request_queue_client.py → apify-2.7.1b21/src/apify/storage_clients/_apify/_request_queue_shared_client.py +36 -323
- apify-2.7.1b21/src/apify/storage_clients/_apify/_request_queue_single_client.py +399 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/storage_clients/_apify/_storage_client.py +26 -4
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/storage_clients/_apify/_utils.py +27 -1
- apify-2.7.1b21/src/apify/storage_clients/_smart_apify/__init__.py +1 -0
- apify-2.7.1b21/src/apify/storage_clients/_smart_apify/_storage_client.py +117 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/actor_source_base/requirements.txt +1 -1
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/conftest.py +10 -5
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/test_actor_request_queue.py +7 -4
- apify-2.7.1b21/tests/integration/test_apify_storages.py +152 -0
- apify-2.7.1b21/tests/integration/test_request_queue.py +1191 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/actor/test_actor_log.py +35 -31
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/actor/test_configuration.py +3 -17
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/storage_clients/test_apify_request_queue_client.py +1 -1
- {apify-2.7.1b20 → apify-2.7.1b21}/uv.lock +5 -5
- apify-2.7.1b20/tests/integration/test_apify_storages.py +0 -75
- apify-2.7.1b20/tests/integration/test_request_queue.py +0 -1304
- {apify-2.7.1b20 → apify-2.7.1b21}/.editorconfig +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/.github/CODEOWNERS +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/.github/workflows/build_and_deploy_docs.yaml +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/.github/workflows/check_pr_title.yaml +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/.github/workflows/pre_release.yaml +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/.github/workflows/release.yaml +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/.github/workflows/run_code_checks.yaml +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/.github/workflows/update_new_issue.yaml +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/.gitignore +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/.markdownlint.yaml +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/.pre-commit-config.yaml +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/CONTRIBUTING.md +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/LICENSE +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/Makefile +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/README.md +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/01_overview/01_introduction.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/01_overview/02_running_actors_locally.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/01_overview/03_actor_structure.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/01_overview/code/01_introduction.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/01_overview/code/actor_structure/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/01_overview/code/actor_structure/__main__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/01_overview/code/actor_structure/main.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/01_overview/code/actor_structure/py.typed +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/01_actor_lifecycle.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/02_actor_input.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/03_storages.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/04_actor_events.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/05_proxy_management.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/06_interacting_with_other_actors.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/07_webhooks.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/08_access_apify_api.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/09_running_webserver.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/10_logging.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/11_configuration.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/12_pay_per_event.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/01_context_manager.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/01_init_exit.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/01_reboot.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/01_status_message.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/02_input.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/03_dataset_exports.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/03_dataset_read_write.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/03_deleting_storages.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/03_kvs_iterating.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/03_kvs_public_url.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/03_kvs_read_write.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/03_opening_storages.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/03_rq.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/04_actor_events.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/05_apify_proxy.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/05_apify_proxy_config.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/05_custom_proxy.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/05_custom_proxy_function.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/05_proxy_actor_input.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/05_proxy_httpx.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/05_proxy_rotation.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/06_interacting_call.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/06_interacting_call_task.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/06_interacting_metamorph.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/06_interacting_start.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/07_webhook.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/07_webhook_preventing.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/08_actor_client.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/08_actor_new_client.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/09_webserver.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/10_log_config.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/10_logger_usage.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/10_redirect_log.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/10_redirect_log_existing_run.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/11_config.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/actor_charge.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/02_concepts/code/conditional_actor_charge.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/01_beautifulsoup_httpx.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/02_parsel_impit.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/03_playwright.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/04_selenium.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/05_crawlee.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/06_scrapy.mdx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/code/01_beautifulsoup_httpx.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/code/02_parsel_impit.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/code/03_playwright.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/code/04_selenium.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/code/05_crawlee_beautifulsoup.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/code/05_crawlee_parsel.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/code/05_crawlee_playwright.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/code/scrapy_project/src/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/code/scrapy_project/src/__main__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/code/scrapy_project/src/items.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/code/scrapy_project/src/main.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/code/scrapy_project/src/py.typed +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/code/scrapy_project/src/settings.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/code/scrapy_project/src/spiders/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/code/scrapy_project/src/spiders/py.typed +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/03_guides/code/scrapy_project/src/spiders/title.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/04_upgrading/upgrading_to_v2.md +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/docs/pyproject.toml +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/renovate.json +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/_charging.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/_configuration.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/_consts.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/_crypto.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/_models.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/_proxy_configuration.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/_utils.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/events/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/events/_apify_event_manager.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/events/_types.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/events/py.typed +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/log.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/py.typed +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/request_loaders/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/request_loaders/_apify_request_list.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/request_loaders/py.typed +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/scrapy/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/scrapy/_actor_runner.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/scrapy/_async_thread.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/scrapy/_logging_config.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/scrapy/extensions/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/scrapy/extensions/_httpcache.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/scrapy/middlewares/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/scrapy/middlewares/apify_proxy.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/scrapy/middlewares/py.typed +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/scrapy/pipelines/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/scrapy/pipelines/actor_dataset_push.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/scrapy/pipelines/py.typed +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/scrapy/py.typed +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/scrapy/requests.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/scrapy/scheduler.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/scrapy/utils.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/storage_clients/_apify/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/storage_clients/_apify/_dataset_client.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/storage_clients/_apify/_key_value_store_client.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/storage_clients/_apify/_models.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/storage_clients/_apify/py.typed +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/storage_clients/_file_system/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/storage_clients/_file_system/_key_value_store_client.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/storage_clients/_file_system/_storage_client.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/storage_clients/py.typed +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/storages/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/src/apify/storages/py.typed +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/README.md +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/_utils.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/actor_source_base/Dockerfile +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/actor_source_base/server.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/actor_source_base/src/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/actor_source_base/src/__main__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/actor_source_base/src/main.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/test_actor_api_helpers.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/test_actor_call_timeouts.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/test_actor_charge.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/test_actor_create_proxy_configuration.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/test_actor_dataset.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/test_actor_events.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/test_actor_key_value_store.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/test_actor_lifecycle.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/test_actor_log.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/test_actor_scrapy.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/test_crawlers_with_storages.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/integration/test_fixtures.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/actor/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/actor/test_actor_create_proxy_configuration.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/actor/test_actor_dataset.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/actor/test_actor_env_helpers.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/actor/test_actor_helpers.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/actor/test_actor_key_value_store.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/actor/test_actor_lifecycle.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/actor/test_actor_non_default_instance.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/actor/test_actor_request_queue.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/actor/test_request_list.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/conftest.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/events/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/events/test_apify_event_manager.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/scrapy/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/scrapy/extensions/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/scrapy/extensions/test_httpcache.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/scrapy/middlewares/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/scrapy/middlewares/test_apify_proxy.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/scrapy/pipelines/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/scrapy/pipelines/test_actor_dataset_push.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/scrapy/requests/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/scrapy/requests/test_to_apify_request.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/scrapy/requests/test_to_scrapy_request.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/scrapy/utils/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/scrapy/utils/test_apply_apify_settings.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/scrapy/utils/test_get_basic_auth_header.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/storage_clients/__init__.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/storage_clients/test_file_system.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/test_apify_storages.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/test_crypto.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/tests/unit/test_proxy_configuration.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/.eslintrc.json +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/babel.config.js +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/build_api_reference.sh +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/docusaurus.config.js +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/generate_module_shortcuts.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/package-lock.json +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/package.json +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/sidebars.js +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/src/components/ApiLink.jsx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/src/components/Gradients.jsx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/src/components/Highlights.jsx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/src/components/Highlights.module.css +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/src/components/RunnableCodeBlock.jsx +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/src/components/RunnableCodeBlock.module.css +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/src/css/custom.css +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/src/pages/home_page_example.py +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/src/pages/index.js +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/src/pages/index.module.css +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/src/theme/DocItem/Content/index.js +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/static/.nojekyll +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/static/img/docs-og.png +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/static/img/guides/redirected_logs_example.webp +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/tools/docs-prettier.config.js +0 -0
- {apify-2.7.1b20 → apify-2.7.1b21}/website/tools/utils/externalLink.js +0 -0
|
@@ -11,6 +11,7 @@ All notable changes to this project will be documented in this file.
|
|
|
11
11
|
- Add new methods to ChargingManager ([#580](https://github.com/apify/apify-sdk-python/pull/580)) ([54f7f8b](https://github.com/apify/apify-sdk-python/commit/54f7f8b29c5982be98b595dac11eceff915035c9)) by [@vdusek](https://github.com/vdusek)
|
|
12
12
|
- Add support for NDU storages ([#594](https://github.com/apify/apify-sdk-python/pull/594)) ([8721ef5](https://github.com/apify/apify-sdk-python/commit/8721ef5731bcb1a04ad63c930089bf83be29f308)) by [@vdusek](https://github.com/vdusek), closes [#1175](https://github.com/apify/apify-sdk-python/issues/1175)
|
|
13
13
|
- Add stats to `ApifyRequestQueueClient` ([#574](https://github.com/apify/apify-sdk-python/pull/574)) ([21f6782](https://github.com/apify/apify-sdk-python/commit/21f6782b444f623aba986b4922cf67bafafd4b2c)) by [@Pijukatel](https://github.com/Pijukatel), closes [#1344](https://github.com/apify/apify-sdk-python/issues/1344)
|
|
14
|
+
- Add specialized ApifyRequestQueue clients ([#573](https://github.com/apify/apify-sdk-python/pull/573)) ([f830ab0](https://github.com/apify/apify-sdk-python/commit/f830ab09b1fa12189c9d3297d5cf18a4f2da62fa)) by [@Pijukatel](https://github.com/Pijukatel)
|
|
14
15
|
|
|
15
16
|
### 🐛 Bug Fixes
|
|
16
17
|
|
|
@@ -178,6 +179,18 @@ All notable changes to this project will be documented in this file.
|
|
|
178
179
|
- Tagline overlap ([#501](https://github.com/apify/apify-sdk-python/pull/501)) ([bae8340](https://github.com/apify/apify-sdk-python/commit/bae8340c46fea756ea35ea4d591da84c09d478e2)) by [@katzino](https://github.com/katzino)
|
|
179
180
|
|
|
180
181
|
|
|
182
|
+
## [2.7.0](https://github.com/apify/apify-sdk-python/releases/tag/v2.7.0) (2025-07-14)
|
|
183
|
+
|
|
184
|
+
### 🚀 Features
|
|
185
|
+
|
|
186
|
+
- **crypto:** Decrypt secret objects ([#482](https://github.com/apify/apify-sdk-python/pull/482)) ([ce9daf7](https://github.com/apify/apify-sdk-python/commit/ce9daf7381212b8dc194e8a643e5ca0dedbc0078)) by [@MFori](https://github.com/MFori)
|
|
187
|
+
|
|
188
|
+
### 🐛 Bug Fixes
|
|
189
|
+
|
|
190
|
+
- Sync `@docusaurus` theme version [internal] ([#500](https://github.com/apify/apify-sdk-python/pull/500)) ([a7485e7](https://github.com/apify/apify-sdk-python/commit/a7485e7d2276fde464ce862573d5b95e7d4d836a)) by [@katzino](https://github.com/katzino)
|
|
191
|
+
- Tagline overlap ([#501](https://github.com/apify/apify-sdk-python/pull/501)) ([bae8340](https://github.com/apify/apify-sdk-python/commit/bae8340c46fea756ea35ea4d591da84c09d478e2)) by [@katzino](https://github.com/katzino)
|
|
192
|
+
|
|
193
|
+
|
|
181
194
|
|
|
182
195
|
## [2.7.3](https://github.com/apify/apify-sdk-python/releases/tag/v2.7.3) (2025-08-11)
|
|
183
196
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apify
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.1b21
|
|
4
4
|
Summary: Apify SDK for Python
|
|
5
5
|
Project-URL: Apify Homepage, https://apify.com
|
|
6
6
|
Project-URL: Changelog, https://docs.apify.com/sdk/python/docs/changelog
|
|
@@ -228,7 +228,7 @@ Requires-Python: >=3.10
|
|
|
228
228
|
Requires-Dist: apify-client<3.0.0,>=2.0.0
|
|
229
229
|
Requires-Dist: apify-shared<3.0.0,>=2.0.0
|
|
230
230
|
Requires-Dist: cachetools>=5.5.0
|
|
231
|
-
Requires-Dist: crawlee==0.6.
|
|
231
|
+
Requires-Dist: crawlee==0.6.13b46
|
|
232
232
|
Requires-Dist: cryptography>=42.0.0
|
|
233
233
|
Requires-Dist: impit>=0.6.1
|
|
234
234
|
Requires-Dist: lazy-object-proxy>=1.11.0
|
|
@@ -69,6 +69,13 @@ Some changes in the related model classes:
|
|
|
69
69
|
## Removed Actor.config property
|
|
70
70
|
- `Actor.config` property has been removed. Use `Actor.configuration` instead.
|
|
71
71
|
|
|
72
|
+
## Default storage ids in configuration changed to None
|
|
73
|
+
- `Configuration.default_key_value_store_id` changed from `'default'` to `None`.
|
|
74
|
+
- `Configuration.default_dataset_id` changed from `'default'` to `None`.
|
|
75
|
+
- `Configuration.default_request_queue_id` changed from `'default'` to `None`.
|
|
76
|
+
|
|
77
|
+
Previously using the default storage without specifying its `id` in `Configuration` would lead to using specific storage with id `'default'`. Now it will use newly created unnamed storage with `'id'` assigned by the Apify platform, consecutive calls to get the default storage will return the same storage.
|
|
78
|
+
|
|
72
79
|
## Actor initialization and ServiceLocator changes
|
|
73
80
|
|
|
74
81
|
`Actor` initialization and global `service_locator` services setup is more strict and predictable.
|
|
@@ -102,20 +109,51 @@ async def main():
|
|
|
102
109
|
)
|
|
103
110
|
```
|
|
104
111
|
|
|
105
|
-
|
|
106
|
-
- `Actor.config` property has been removed. Use `Actor.configuration` instead.
|
|
112
|
+
### Changes in storage clients
|
|
107
113
|
|
|
108
|
-
##
|
|
109
|
-
- `
|
|
110
|
-
|
|
111
|
-
|
|
114
|
+
## Explicit control over storage clients used in Actor
|
|
115
|
+
- It is now possible to have full control over which storage clients are used by the `Actor`. To make development of Actors convenient, the `Actor` has two storage clients. One that is used when running on Apify platform or when opening storages with `force_cloud=True` and the other client that is used when running outside the Apify platform. The `Actor` has reasonable defaults and for the majority of use-cases there is no need to change it. However, if you need to use a different storage client, you can set it up before entering `Actor` context through `service_locator`.
|
|
116
|
+
|
|
117
|
+
**Now (v3.0):**
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
from crawlee import service_locator
|
|
121
|
+
from apify.storage_clients import ApifyStorageClient, SmartApifyStorageClient, MemoryStorageClient
|
|
122
|
+
from apify import Actor
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
async def main():
|
|
126
|
+
service_locator.set_storage_client(
|
|
127
|
+
SmartApifyStorageClient(
|
|
128
|
+
cloud_storage_client=ApifyStorageClient(request_queue_access="single"),
|
|
129
|
+
local_storage_client=MemoryStorageClient()
|
|
130
|
+
)
|
|
131
|
+
)
|
|
132
|
+
async with Actor:
|
|
133
|
+
rq = await Actor.open_request_queue()
|
|
134
|
+
```
|
|
112
135
|
|
|
113
|
-
Previously using the default storage without specifying its `id` in `Configuration` would lead to using specific storage with id `'default'`. Now it will use newly created unnamed storage with `'id'` assigned by the Apify platform, consecutive calls to get the default storage will return the same storage.
|
|
114
136
|
|
|
115
|
-
##
|
|
137
|
+
## The default use of optimized ApifyRequestQueueClient
|
|
116
138
|
|
|
117
|
-
|
|
139
|
+
- The default client for working with Apify platform based `RequestQueue` is now optimized and simplified client which does significantly lower amount of API calls, but does not support multiple consumers working on the same queue. It is cheaper and faster and is suitable for the majority of the use cases.
|
|
140
|
+
- The full client is still available, but it has to be explicitly requested via `request_queue_access="shared"` argument when using the `ApifyStorageClient`.
|
|
118
141
|
|
|
119
|
-
|
|
142
|
+
**Now (v3.0):**
|
|
143
|
+
|
|
144
|
+
```python
|
|
145
|
+
from crawlee import service_locator
|
|
146
|
+
from apify.storage_clients import ApifyStorageClient, SmartApifyStorageClient
|
|
147
|
+
from apify import Actor
|
|
120
148
|
|
|
121
|
-
|
|
149
|
+
|
|
150
|
+
async def main():
|
|
151
|
+
# Full client that supports multiple consumers of the Apify Request Queue
|
|
152
|
+
service_locator.set_storage_client(
|
|
153
|
+
SmartApifyStorageClient(
|
|
154
|
+
cloud_storage_client=ApifyStorageClient(request_queue_access="shared"),
|
|
155
|
+
)
|
|
156
|
+
)
|
|
157
|
+
async with Actor:
|
|
158
|
+
rq = await Actor.open_request_queue()
|
|
159
|
+
```
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "apify"
|
|
7
|
-
version = "2.7.
|
|
7
|
+
version = "2.7.1b21"
|
|
8
8
|
description = "Apify SDK for Python"
|
|
9
9
|
authors = [{ name = "Apify Technologies s.r.o.", email = "support@apify.com" }]
|
|
10
10
|
license = { file = "LICENSE" }
|
|
@@ -36,7 +36,7 @@ keywords = [
|
|
|
36
36
|
dependencies = [
|
|
37
37
|
"apify-client>=2.0.0,<3.0.0",
|
|
38
38
|
"apify-shared>=2.0.0,<3.0.0",
|
|
39
|
-
"crawlee==0.6.
|
|
39
|
+
"crawlee==0.6.13b46",
|
|
40
40
|
"cachetools>=5.5.0",
|
|
41
41
|
"cryptography>=42.0.0",
|
|
42
42
|
"impit>=0.6.1",
|
|
@@ -25,7 +25,6 @@ from crawlee.events import (
|
|
|
25
25
|
EventPersistStateData,
|
|
26
26
|
EventSystemInfoData,
|
|
27
27
|
)
|
|
28
|
-
from crawlee.storage_clients import FileSystemStorageClient
|
|
29
28
|
|
|
30
29
|
from apify._charging import ChargeResult, ChargingManager, ChargingManagerImplementation
|
|
31
30
|
from apify._configuration import Configuration
|
|
@@ -38,6 +37,7 @@ from apify.events import ApifyEventManager, EventManager, LocalEventManager
|
|
|
38
37
|
from apify.log import _configure_logging, logger
|
|
39
38
|
from apify.storage_clients import ApifyStorageClient
|
|
40
39
|
from apify.storage_clients._file_system import ApifyFileSystemStorageClient
|
|
40
|
+
from apify.storage_clients._smart_apify._storage_client import SmartApifyStorageClient
|
|
41
41
|
from apify.storages import Dataset, KeyValueStore, RequestQueue
|
|
42
42
|
|
|
43
43
|
if TYPE_CHECKING:
|
|
@@ -48,7 +48,6 @@ if TYPE_CHECKING:
|
|
|
48
48
|
from typing_extensions import Self
|
|
49
49
|
|
|
50
50
|
from crawlee.proxy_configuration import _NewUrlFunction
|
|
51
|
-
from crawlee.storage_clients import StorageClient
|
|
52
51
|
|
|
53
52
|
from apify._models import Webhook
|
|
54
53
|
|
|
@@ -131,7 +130,6 @@ class _ActorType:
|
|
|
131
130
|
self._configuration = configuration
|
|
132
131
|
self._configure_logging = configure_logging
|
|
133
132
|
self._apify_client: ApifyClientAsync | None = None
|
|
134
|
-
self._local_storage_client: StorageClient | None = None
|
|
135
133
|
|
|
136
134
|
self._is_initialized = False
|
|
137
135
|
|
|
@@ -234,45 +232,42 @@ class _ActorType:
|
|
|
234
232
|
"""The logging.Logger instance the Actor uses."""
|
|
235
233
|
return logger
|
|
236
234
|
|
|
237
|
-
def
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
235
|
+
def _raise_if_not_initialized(self) -> None:
|
|
236
|
+
if not self._is_initialized:
|
|
237
|
+
raise RuntimeError('The Actor was not initialized!')
|
|
238
|
+
|
|
239
|
+
@cached_property
|
|
240
|
+
def _storage_client(self) -> SmartApifyStorageClient:
|
|
241
|
+
"""Storage client used by the actor.
|
|
241
242
|
|
|
243
|
+
Depending on the initialization of the service locator the client can be created in different ways.
|
|
244
|
+
"""
|
|
242
245
|
try:
|
|
243
|
-
#
|
|
244
|
-
implicit_storage_client =
|
|
246
|
+
# Nothing was set by the user.
|
|
247
|
+
implicit_storage_client = SmartApifyStorageClient(
|
|
248
|
+
local_storage_client=ApifyFileSystemStorageClient(), cloud_storage_client=ApifyStorageClient()
|
|
249
|
+
)
|
|
245
250
|
service_locator.set_storage_client(implicit_storage_client)
|
|
246
|
-
self._local_storage_client = implicit_storage_client
|
|
247
251
|
except ServiceConflictError:
|
|
248
252
|
self.log.debug(
|
|
249
253
|
'Storage client in service locator was set explicitly before Actor.init was called.'
|
|
250
254
|
'Using the existing storage client as implicit storage client for the Actor.'
|
|
251
255
|
)
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
def _raise_if_cloud_requested_but_not_configured(self, *, force_cloud: bool) -> None:
|
|
268
|
-
if not force_cloud:
|
|
269
|
-
return
|
|
270
|
-
|
|
271
|
-
if not self.is_at_home() and self.configuration.token is None:
|
|
272
|
-
raise RuntimeError(
|
|
273
|
-
'In order to use the Apify cloud storage from your computer, '
|
|
274
|
-
'you need to provide an Apify token using the APIFY_TOKEN environment variable.'
|
|
275
|
-
)
|
|
256
|
+
else:
|
|
257
|
+
return implicit_storage_client
|
|
258
|
+
|
|
259
|
+
# User set something in the service locator.
|
|
260
|
+
explicit_storage_client = service_locator.get_storage_client()
|
|
261
|
+
if isinstance(explicit_storage_client, SmartApifyStorageClient):
|
|
262
|
+
# The client was manually set to the right type in the service locator. This is the explicit way.
|
|
263
|
+
return explicit_storage_client
|
|
264
|
+
|
|
265
|
+
raise RuntimeError(
|
|
266
|
+
'The storage client in the service locator has to be instance of SmartApifyStorageClient. If you want to '
|
|
267
|
+
'set the storage client manually you have to call '
|
|
268
|
+
'`service_locator.set_storage_client(SmartApifyStorageClient(...))` before entering Actor context or '
|
|
269
|
+
'awaiting `Actor.init`.'
|
|
270
|
+
)
|
|
276
271
|
|
|
277
272
|
async def init(self) -> None:
|
|
278
273
|
"""Initialize the Actor instance.
|
|
@@ -285,6 +280,7 @@ class _ActorType:
|
|
|
285
280
|
This method should be called immediately before performing any additional Actor actions, and it should be
|
|
286
281
|
called only once.
|
|
287
282
|
"""
|
|
283
|
+
self.log.info('Initializing Actor...')
|
|
288
284
|
if self._configuration:
|
|
289
285
|
# Set explicitly the configuration in the service locator
|
|
290
286
|
service_locator.set_configuration(self.configuration)
|
|
@@ -298,22 +294,13 @@ class _ActorType:
|
|
|
298
294
|
if _ActorType._is_any_instance_initialized:
|
|
299
295
|
self.log.warning('Repeated Actor initialization detected - this is non-standard usage, proceed with care')
|
|
300
296
|
|
|
301
|
-
# Create an instance of the cloud storage client, the local storage client is obtained
|
|
302
|
-
# from the service locator
|
|
303
|
-
self._cloud_storage_client = ApifyStorageClient()
|
|
304
|
-
|
|
305
297
|
# Make sure that the currently initialized instance is also available through the global `Actor` proxy
|
|
306
298
|
cast('Proxy', Actor).__wrapped__ = self
|
|
307
299
|
|
|
308
300
|
self._is_exiting = False
|
|
309
301
|
self._was_final_persist_state_emitted = False
|
|
310
302
|
|
|
311
|
-
|
|
312
|
-
if self.is_at_home():
|
|
313
|
-
service_locator.set_storage_client(self._cloud_storage_client)
|
|
314
|
-
self._local_storage_client = self._cloud_storage_client
|
|
315
|
-
else:
|
|
316
|
-
self._get_local_storage_client()
|
|
303
|
+
self.log.debug(f'Storage client set to {self._storage_client}')
|
|
317
304
|
|
|
318
305
|
service_locator.set_event_manager(self.event_manager)
|
|
319
306
|
|
|
@@ -321,7 +308,6 @@ class _ActorType:
|
|
|
321
308
|
if self._configure_logging:
|
|
322
309
|
_configure_logging()
|
|
323
310
|
|
|
324
|
-
self.log.info('Initializing Actor...')
|
|
325
311
|
self.log.info('System info', extra=get_system_info())
|
|
326
312
|
|
|
327
313
|
await self.event_manager.__aenter__()
|
|
@@ -470,16 +456,11 @@ class _ActorType:
|
|
|
470
456
|
An instance of the `Dataset` class for the given ID or name.
|
|
471
457
|
"""
|
|
472
458
|
self._raise_if_not_initialized()
|
|
473
|
-
self._raise_if_cloud_requested_but_not_configured(force_cloud=force_cloud)
|
|
474
|
-
|
|
475
|
-
storage_client = self._cloud_storage_client if force_cloud else self._get_local_storage_client()
|
|
476
|
-
|
|
477
459
|
return await Dataset.open(
|
|
478
460
|
id=id,
|
|
479
|
-
alias=alias,
|
|
480
461
|
name=name,
|
|
481
|
-
|
|
482
|
-
storage_client=
|
|
462
|
+
alias=alias,
|
|
463
|
+
storage_client=self._storage_client.get_suitable_storage_client(force_cloud=force_cloud),
|
|
483
464
|
)
|
|
484
465
|
|
|
485
466
|
async def open_key_value_store(
|
|
@@ -509,16 +490,11 @@ class _ActorType:
|
|
|
509
490
|
An instance of the `KeyValueStore` class for the given ID or name.
|
|
510
491
|
"""
|
|
511
492
|
self._raise_if_not_initialized()
|
|
512
|
-
self._raise_if_cloud_requested_but_not_configured(force_cloud=force_cloud)
|
|
513
|
-
|
|
514
|
-
storage_client = self._cloud_storage_client if force_cloud else self._get_local_storage_client()
|
|
515
|
-
|
|
516
493
|
return await KeyValueStore.open(
|
|
517
494
|
id=id,
|
|
518
|
-
alias=alias,
|
|
519
495
|
name=name,
|
|
520
|
-
|
|
521
|
-
storage_client=
|
|
496
|
+
alias=alias,
|
|
497
|
+
storage_client=self._storage_client.get_suitable_storage_client(force_cloud=force_cloud),
|
|
522
498
|
)
|
|
523
499
|
|
|
524
500
|
async def open_request_queue(
|
|
@@ -550,16 +526,11 @@ class _ActorType:
|
|
|
550
526
|
An instance of the `RequestQueue` class for the given ID or name.
|
|
551
527
|
"""
|
|
552
528
|
self._raise_if_not_initialized()
|
|
553
|
-
self._raise_if_cloud_requested_but_not_configured(force_cloud=force_cloud)
|
|
554
|
-
|
|
555
|
-
storage_client = self._cloud_storage_client if force_cloud else self._get_local_storage_client()
|
|
556
|
-
|
|
557
529
|
return await RequestQueue.open(
|
|
558
530
|
id=id,
|
|
559
|
-
alias=alias,
|
|
560
531
|
name=name,
|
|
561
|
-
|
|
562
|
-
storage_client=
|
|
532
|
+
alias=alias,
|
|
533
|
+
storage_client=self._storage_client.get_suitable_storage_client(force_cloud=force_cloud),
|
|
563
534
|
)
|
|
564
535
|
|
|
565
536
|
@overload
|
|
@@ -2,9 +2,11 @@ from crawlee.storage_clients import MemoryStorageClient
|
|
|
2
2
|
|
|
3
3
|
from ._apify import ApifyStorageClient
|
|
4
4
|
from ._file_system import ApifyFileSystemStorageClient as FileSystemStorageClient
|
|
5
|
+
from ._smart_apify import SmartApifyStorageClient
|
|
5
6
|
|
|
6
7
|
__all__ = [
|
|
7
8
|
'ApifyStorageClient',
|
|
8
9
|
'FileSystemStorageClient',
|
|
9
10
|
'MemoryStorageClient',
|
|
11
|
+
'SmartApifyStorageClient',
|
|
10
12
|
]
|