apify 3.3.1b5__tar.gz → 3.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {apify-3.3.1b5 → apify-3.3.2}/.github/workflows/_check_code.yaml +3 -0
- {apify-3.3.1b5 → apify-3.3.2}/.github/workflows/_check_docs.yaml +3 -0
- {apify-3.3.1b5 → apify-3.3.2}/.github/workflows/_release_docs.yaml +4 -1
- {apify-3.3.1b5 → apify-3.3.2}/.github/workflows/_tests.yaml +5 -2
- {apify-3.3.1b5 → apify-3.3.2}/.github/workflows/manual_release_stable.yaml +80 -3
- {apify-3.3.1b5 → apify-3.3.2}/.github/workflows/on_issue.yaml +3 -0
- {apify-3.3.1b5 → apify-3.3.2}/.github/workflows/on_master.yaml +13 -0
- {apify-3.3.1b5 → apify-3.3.2}/.github/workflows/on_pull_request.yaml +4 -0
- {apify-3.3.1b5 → apify-3.3.2}/CHANGELOG.md +29 -19
- {apify-3.3.1b5 → apify-3.3.2}/PKG-INFO +1 -1
- {apify-3.3.1b5 → apify-3.3.2}/pyproject.toml +5 -1
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/_actor.py +59 -37
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/_charging.py +148 -73
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/_utils.py +30 -1
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/requests.py +14 -1
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_alias_resolving.py +4 -2
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_api_client_creation.py +2 -2
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_dataset_client.py +22 -14
- apify-3.3.2/src/apify/storage_clients/_file_system/_dataset_client.py +57 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_file_system/_storage_client.py +20 -0
- apify-3.3.2/src/apify/storage_clients/_ppe_dataset_mixin.py +41 -0
- apify-3.3.2/tests/e2e/test_actor_charge.py +218 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_schema_storages/actor_source/main.py +4 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/integration/_utils.py +24 -11
- {apify-3.3.1b5 → apify-3.3.2}/tests/integration/test_request_queue.py +119 -127
- {apify-3.3.1b5 → apify-3.3.2}/tests/integration/test_storages.py +9 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_charge.py +100 -14
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_helpers.py +58 -3
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_charging_manager.py +144 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/requests/test_to_apify_request.py +35 -1
- {apify-3.3.1b5 → apify-3.3.2}/uv.lock +609 -551
- {apify-3.3.1b5 → apify-3.3.2}/website/docusaurus.config.js +32 -6
- {apify-3.3.1b5 → apify-3.3.2}/website/package.json +3 -3
- apify-3.3.2/website/src/theme/NavbarItem/ComponentTypes.js +7 -0
- apify-3.3.2/website/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +91 -0
- apify-3.3.2/website/src/theme/NavbarItem/VersionedReferenceNavbarItem.js +16 -0
- apify-3.3.2/website/versioned_docs/version-1.7/.gitignore +1 -0
- apify-3.3.2/website/versioned_docs/version-1.7/01-introduction/index.mdx +50 -0
- apify-3.3.2/website/versioned_docs/version-1.7/01-introduction/quick-start.mdx +140 -0
- apify-3.3.2/website/versioned_docs/version-1.7/02-guides/01-requests-and-httpx.mdx +100 -0
- apify-3.3.2/website/versioned_docs/version-1.7/02-guides/02-beautiful-soup.mdx +81 -0
- apify-3.3.2/website/versioned_docs/version-1.7/02-guides/03-playwright.mdx +120 -0
- apify-3.3.2/website/versioned_docs/version-1.7/02-guides/04-selenium.mdx +110 -0
- apify-3.3.2/website/versioned_docs/version-1.7/02-guides/05-scrapy.mdx +111 -0
- apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/01-actor-lifecycle.mdx +117 -0
- apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/02-actor-input.mdx +27 -0
- apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/03-storages.mdx +284 -0
- apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/04-actor-events.mdx +113 -0
- apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/05-proxy-management.mdx +194 -0
- apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/06-interacting-with-other-actors.mdx +96 -0
- apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/07-webhooks.mdx +50 -0
- apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/08-access-apify-api.mdx +42 -0
- apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/09-running-webserver.mdx +66 -0
- apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/10-logging.mdx +109 -0
- apify-3.3.2/website/versioned_docs/version-1.7/03-concepts/11-configuration.mdx +45 -0
- apify-3.3.2/website/versioned_docs/version-1.7/api-packages.json +1 -0
- apify-3.3.2/website/versioned_docs/version-1.7/api-typedoc.json +8083 -0
- apify-3.3.2/website/versioned_docs/version-2.7/.gitignore +1 -0
- apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/code/01_introduction.py +17 -0
- apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/code/actor_structure/__init__.py +0 -0
- apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/code/actor_structure/__main__.py +6 -0
- apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/code/actor_structure/main.py +8 -0
- apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/code/actor_structure/py.typed +0 -0
- apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/index.mdx +45 -0
- apify-3.3.2/website/versioned_docs/version-2.7/01_introduction/quick-start.mdx +124 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/01_beautifulsoup_httpx.mdx +30 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/02_crawlee.mdx +37 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/03_playwright.mdx +56 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/04_selenium.mdx +46 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/05_scrapy.mdx +114 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/01_beautifulsoup_httpx.py +85 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/02_crawlee_beautifulsoup.py +55 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/02_crawlee_playwright.py +68 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/03_playwright.py +94 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/04_selenium.py +104 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/__init__.py +0 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/__main__.py +22 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/items.py +10 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/main.py +32 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/py.typed +0 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/settings.py +11 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/spiders/__init__.py +3 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/spiders/py.typed +0 -0
- apify-3.3.2/website/versioned_docs/version-2.7/02_guides/code/scrapy_project/src/spiders/title.py +68 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/01_actor_lifecycle.mdx +55 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/02_actor_input.mdx +18 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/03_storages.mdx +173 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/04_actor_events.mdx +81 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/05_proxy_management.mdx +108 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/06_interacting_with_other_actors.mdx +51 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/07_webhooks.mdx +31 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/08_access_apify_api.mdx +31 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/09_running_webserver.mdx +26 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/10_logging.mdx +84 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/11_configuration.mdx +34 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/12_pay_per_event.mdx +46 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/01_context_manager.py +9 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/01_init_exit.py +16 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/01_reboot.py +7 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/01_status_message.py +14 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/02_input.py +9 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_dataset_exports.py +31 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_dataset_read_write.py +16 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_deleting_storages.py +13 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_kvs_iterating.py +18 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_kvs_public_url.py +11 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_kvs_read_write.py +25 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_opening_storages.py +16 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/03_rq.py +53 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/04_actor_events.py +38 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_apify_proxy.py +12 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_apify_proxy_config.py +15 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_custom_proxy.py +17 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_custom_proxy_function.py +28 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_proxy_actor_input.py +16 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_proxy_httpx.py +22 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/05_proxy_rotation.py +31 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/06_interacting_call.py +22 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/06_interacting_call_task.py +19 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/06_interacting_metamorph.py +24 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/06_interacting_start.py +13 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/07_webhook.py +16 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/07_webhook_preventing.py +17 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/08_actor_client.py +11 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/08_actor_new_client.py +14 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/09_webserver.py +49 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/10_log_config.py +12 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/10_logger_usage.py +23 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/11_config.py +16 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/actor_charge.py +30 -0
- apify-3.3.2/website/versioned_docs/version-2.7/03_concepts/code/conditional_actor_charge.py +18 -0
- apify-3.3.2/website/versioned_docs/version-2.7/04_upgrading/upgrading_to_v2.md +48 -0
- apify-3.3.2/website/versioned_docs/version-2.7/api-packages.json +1 -0
- apify-3.3.2/website/versioned_docs/version-2.7/api-typedoc.json +6951 -0
- apify-3.3.2/website/versioned_docs/version-3.3/.gitignore +1 -0
- apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/code/01_introduction.py +24 -0
- apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/code/actor_structure/__init__.py +0 -0
- apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/code/actor_structure/__main__.py +6 -0
- apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/code/actor_structure/main.py +8 -0
- apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/code/actor_structure/py.typed +0 -0
- apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/images/apify-create.gif +0 -0
- apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/index.mdx +48 -0
- apify-3.3.2/website/versioned_docs/version-3.3/01_introduction/quick-start.mdx +116 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/01_actor_lifecycle.mdx +101 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/02_actor_input.mdx +18 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/03_storages.mdx +173 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/04_actor_events.mdx +81 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/05_proxy_management.mdx +108 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/06_interacting_with_other_actors.mdx +51 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/07_webhooks.mdx +31 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/08_access_apify_api.mdx +31 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/09_logging.mdx +114 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/10_configuration.mdx +34 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/11_pay_per_event.mdx +69 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_class_context.py +21 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_class_manual.py +26 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_context_manager.py +15 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_error_handling_context.py +13 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_error_handling_manual.py +33 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_init_exit.py +22 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_instance_context.py +27 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_instance_manual.py +32 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_reboot.py +23 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/01_status_message.py +24 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/02_input.py +15 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_dataset_exports.py +37 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_dataset_read_write.py +22 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_deleting_storages.py +19 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_kvs_iterating.py +24 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_kvs_public_url.py +17 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_kvs_read_write.py +31 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_opening_storages.py +22 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/03_rq.py +54 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/04_actor_events.py +42 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_apify_proxy.py +18 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_apify_proxy_config.py +21 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_custom_proxy.py +23 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_custom_proxy_function.py +34 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_proxy_actor_input.py +22 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_proxy_httpx.py +28 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/05_proxy_rotation.py +29 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/06_interacting_call.py +32 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/06_interacting_call_task.py +25 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/06_interacting_metamorph.py +30 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/06_interacting_start.py +19 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/07_webhook.py +22 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/07_webhook_preventing.py +22 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/08_actor_client.py +17 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/08_actor_new_client.py +20 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/09_log_config.py +17 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/09_logger_usage.py +28 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/09_redirect_log.py +21 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/09_redirect_log_existing_run.py +28 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/10_config.py +23 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/11_actor_charge.py +36 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/11_charge_limit_check.py +29 -0
- apify-3.3.2/website/versioned_docs/version-3.3/02_concepts/code/11_conditional_actor_charge.py +24 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/01_beautifulsoup_httpx.mdx +30 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/02_parsel_impit.mdx +28 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/03_playwright.mdx +57 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/04_selenium.mdx +46 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/05_crawlee.mdx +46 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/06_scrapy.mdx +114 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/07_running_webserver.mdx +26 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/01_beautifulsoup_httpx.py +88 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/02_parsel_impit.py +94 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/03_playwright.py +97 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/04_selenium.py +106 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/05_crawlee_beautifulsoup.py +55 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/05_crawlee_parsel.py +55 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/05_crawlee_playwright.py +58 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/07_webserver.py +53 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/__init__.py +0 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/__main__.py +16 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/items.py +10 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/main.py +36 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/py.typed +0 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/settings.py +11 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/spiders/__init__.py +3 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/spiders/py.typed +0 -0
- apify-3.3.2/website/versioned_docs/version-3.3/03_guides/code/scrapy_project/src/spiders/title.py +68 -0
- apify-3.3.2/website/versioned_docs/version-3.3/04_upgrading/upgrading_to_v2.md +48 -0
- apify-3.3.2/website/versioned_docs/version-3.3/04_upgrading/upgrading_to_v3.md +159 -0
- apify-3.3.2/website/versioned_docs/version-3.3/api-packages.json +1 -0
- apify-3.3.2/website/versioned_docs/version-3.3/api-typedoc.json +76320 -0
- apify-3.3.2/website/versioned_sidebars/version-1.7-sidebars.json +38 -0
- apify-3.3.2/website/versioned_sidebars/version-2.7-sidebars.json +49 -0
- apify-3.3.2/website/versioned_sidebars/version-3.3-sidebars.json +49 -0
- apify-3.3.2/website/versions.json +5 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/yarn.lock +1108 -896
- apify-3.3.1b5/tests/e2e/test_actor_charge.py +0 -116
- {apify-3.3.1b5 → apify-3.3.2}/.editorconfig +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/.github/CODEOWNERS +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/.gitignore +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/.markdownlint.yaml +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/.pre-commit-config.yaml +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/.rules.md +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/AGENTS.md +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/CLAUDE.md +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/CONTRIBUTING.md +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/GEMINI.md +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/LICENSE +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/README.md +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/codecov.yaml +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/01_introduction/code/01_introduction.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/01_introduction/code/actor_structure/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/01_introduction/code/actor_structure/__main__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/01_introduction/code/actor_structure/main.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/01_introduction/code/actor_structure/py.typed +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/01_introduction/images/apify-create.gif +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/01_introduction/index.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/01_introduction/quick-start.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/01_actor_lifecycle.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/02_actor_input.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/03_storages.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/04_actor_events.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/05_proxy_management.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/06_interacting_with_other_actors.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/07_webhooks.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/08_access_apify_api.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/09_logging.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/10_configuration.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/11_pay_per_event.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_class_context.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_class_manual.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_context_manager.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_error_handling_context.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_error_handling_manual.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_init_exit.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_instance_context.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_instance_manual.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_reboot.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/01_status_message.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/02_input.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/03_dataset_exports.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/03_dataset_read_write.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/03_deleting_storages.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/03_kvs_iterating.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/03_kvs_public_url.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/03_kvs_read_write.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/03_opening_storages.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/03_rq.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/04_actor_events.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/05_apify_proxy.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/05_apify_proxy_config.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/05_custom_proxy.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/05_custom_proxy_function.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/05_proxy_actor_input.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/05_proxy_httpx.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/05_proxy_rotation.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/06_interacting_call.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/06_interacting_call_task.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/06_interacting_metamorph.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/06_interacting_start.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/07_webhook.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/07_webhook_preventing.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/08_actor_client.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/08_actor_new_client.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/09_log_config.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/09_logger_usage.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/09_redirect_log.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/09_redirect_log_existing_run.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/10_config.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/11_actor_charge.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/11_charge_limit_check.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/02_concepts/code/11_conditional_actor_charge.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/01_beautifulsoup_httpx.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/02_parsel_impit.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/03_playwright.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/04_selenium.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/05_crawlee.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/06_scrapy.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/07_running_webserver.mdx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/01_beautifulsoup_httpx.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/02_parsel_impit.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/03_playwright.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/04_selenium.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/05_crawlee_beautifulsoup.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/05_crawlee_parsel.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/05_crawlee_playwright.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/07_webserver.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/__main__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/items.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/main.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/py.typed +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/settings.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/spiders/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/spiders/py.typed +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/03_guides/code/scrapy_project/src/spiders/title.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/04_upgrading/upgrading_to_v2.md +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/04_upgrading/upgrading_to_v3.md +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/docs/pyproject.toml +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/renovate.json +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/_configuration.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/_consts.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/_crypto.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/_models.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/_proxy_configuration.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/events/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/events/_apify_event_manager.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/events/_types.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/events/py.typed +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/log.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/py.typed +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/request_loaders/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/request_loaders/_apify_request_list.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/request_loaders/py.typed +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/_actor_runner.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/_async_thread.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/_logging_config.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/extensions/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/extensions/_httpcache.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/middlewares/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/middlewares/apify_proxy.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/middlewares/py.typed +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/pipelines/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/pipelines/actor_dataset_push.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/pipelines/py.typed +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/py.typed +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/scheduler.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/scrapy/utils.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_key_value_store_client.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_models.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_request_queue_client.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_request_queue_shared_client.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_request_queue_single_client.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_storage_client.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/_utils.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_apify/py.typed +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_file_system/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_file_system/_key_value_store_client.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_smart_apify/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/_smart_apify/_storage_client.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storage_clients/py.typed +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storages/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/src/apify/storages/py.typed +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/README.md +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/_utils.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/actor_source_base/Dockerfile +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/actor_source_base/requirements.txt +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/actor_source_base/server.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/actor_source_base/src/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/actor_source_base/src/__main__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/actor_source_base/src/main.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/conftest.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_api_helpers.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_call_timeouts.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_create_proxy_configuration.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_dataset.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_events.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_key_value_store.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_lifecycle.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_log.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_request_queue.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_actor_scrapy.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_apify_storages.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_adaptive_playwright_crawler.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_basic_crawler.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_beautifulsoup_crawler.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_http_crawler.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_parsel_crawler.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/main_playwright_crawler.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/actor_source/playwright.Dockerfile +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/conftest.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/test_adaptive_playwright_crawler.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/test_basic_crawler.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/test_beautifulsoup_crawler.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/test_http_crawler.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/test_parsel_crawler.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_crawlee/test_playwright_crawler.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_fixtures.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_schema_storages/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_schema_storages/actor_source/actor.json +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_schema_storages/test_schema_storages.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/__main__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/items.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/main.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/main_custom_pipeline.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/pipelines.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/settings.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/settings_custom_pipeline.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/spider_basic.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/spider_cb_kwargs.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/spider_crawl.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/spider_custom_pipeline.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/actor_source/spider_itemloader.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/conftest.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/test_basic_spider.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/test_cb_kwargs_spider.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/test_crawl_spider.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/test_custom_pipeline_spider.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/e2e/test_scrapy/test_itemloader_spider.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/integration/README.md +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/integration/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/integration/conftest.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/integration/test_dataset.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/integration/test_key_value_store.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/README.md +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_create_proxy_configuration.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_dataset.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_env_helpers.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_key_value_store.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_lifecycle.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_log.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_non_default_instance.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_actor_request_queue.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_configuration.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/actor/test_request_list.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/conftest.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/events/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/events/test_apify_event_manager.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/extensions/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/extensions/test_httpcache.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/middlewares/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/middlewares/test_apify_proxy.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/pipelines/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/pipelines/test_actor_dataset_push.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/requests/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/requests/test_to_scrapy_request.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/utils/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/utils/test_apply_apify_settings.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/scrapy/utils/test_get_basic_auth_header.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/storage_clients/__init__.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/storage_clients/test_alias_resolver.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/storage_clients/test_api_client_creation.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/storage_clients/test_apify_dataset_client.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/storage_clients/test_apify_kvs_client.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/storage_clients/test_apify_request_queue_client.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/storage_clients/test_file_system.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/storage_clients/test_smart_apify_storage_client.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/test_apify_storages.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/test_crypto.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/test_log.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/test_proxy_configuration.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/tests/unit/test_utils.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/typos.toml +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/.eslintrc.json +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/.yarnrc.yml +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/babel.config.js +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/build_api_reference.sh +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/generate_module_shortcuts.py +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/roa-loader/index.js +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/roa-loader/package.json +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/sidebars.js +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/src/components/ApiLink.jsx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/src/components/Gradients.jsx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/src/components/Highlights.jsx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/src/components/Highlights.module.css +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/src/components/RunnableCodeBlock.jsx +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/src/components/RunnableCodeBlock.module.css +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/src/css/custom.css +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/src/pages/index.js +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/src/plugins/docusaurus-plugin-segment/index.js +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/src/plugins/docusaurus-plugin-segment/segment.js +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/src/theme/DocItem/Content/index.js +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/static/.nojekyll +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/static/img/docs-og.png +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/static/img/guides/redirected_logs_example.webp +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/tools/docs-prettier.config.js +0 -0
- {apify-3.3.1b5 → apify-3.3.2}/website/tools/utils/externalLink.js +0 -0
|
@@ -11,6 +11,9 @@ on:
|
|
|
11
11
|
required: true
|
|
12
12
|
type: string
|
|
13
13
|
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
|
|
14
17
|
env:
|
|
15
18
|
NODE_VERSION: 22
|
|
16
19
|
PYTHON_VERSION: 3.14
|
|
@@ -79,7 +82,7 @@ jobs:
|
|
|
79
82
|
path: ./website/build
|
|
80
83
|
|
|
81
84
|
- name: Deploy artifact to GitHub Pages
|
|
82
|
-
uses: actions/deploy-pages@
|
|
85
|
+
uses: actions/deploy-pages@v5
|
|
83
86
|
|
|
84
87
|
- name: Invalidate CloudFront cache
|
|
85
88
|
run: |
|
|
@@ -7,6 +7,9 @@ on:
|
|
|
7
7
|
# Runs when invoked by another workflow.
|
|
8
8
|
workflow_call:
|
|
9
9
|
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
10
13
|
jobs:
|
|
11
14
|
unit_tests:
|
|
12
15
|
name: Unit tests
|
|
@@ -68,7 +71,7 @@ jobs:
|
|
|
68
71
|
matrix.python-version == '3.14' &&
|
|
69
72
|
env.CODECOV_TOKEN != ''
|
|
70
73
|
}}
|
|
71
|
-
uses: codecov/codecov-action@
|
|
74
|
+
uses: codecov/codecov-action@v6
|
|
72
75
|
env:
|
|
73
76
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
74
77
|
with:
|
|
@@ -125,7 +128,7 @@ jobs:
|
|
|
125
128
|
matrix.python-version == '3.14' &&
|
|
126
129
|
env.CODECOV_TOKEN != ''
|
|
127
130
|
}}
|
|
128
|
-
uses: codecov/codecov-action@
|
|
131
|
+
uses: codecov/codecov-action@v6
|
|
129
132
|
env:
|
|
130
133
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
131
134
|
with:
|
|
@@ -25,6 +25,9 @@ concurrency:
|
|
|
25
25
|
group: release
|
|
26
26
|
cancel-in-progress: false
|
|
27
27
|
|
|
28
|
+
permissions:
|
|
29
|
+
contents: read
|
|
30
|
+
|
|
28
31
|
jobs:
|
|
29
32
|
code_checks:
|
|
30
33
|
name: Code checks
|
|
@@ -51,6 +54,8 @@ jobs:
|
|
|
51
54
|
changelog_update:
|
|
52
55
|
name: Changelog update
|
|
53
56
|
needs: [release_prepare]
|
|
57
|
+
permissions:
|
|
58
|
+
contents: write
|
|
54
59
|
uses: apify/workflows/.github/workflows/python_bump_and_update_changelog.yaml@main
|
|
55
60
|
with:
|
|
56
61
|
version_number: ${{ needs.release_prepare.outputs.version_number }}
|
|
@@ -61,6 +66,8 @@ jobs:
|
|
|
61
66
|
name: GitHub release
|
|
62
67
|
needs: [release_prepare, changelog_update]
|
|
63
68
|
runs-on: ubuntu-latest
|
|
69
|
+
permissions:
|
|
70
|
+
contents: write
|
|
64
71
|
env:
|
|
65
72
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
66
73
|
steps:
|
|
@@ -95,13 +102,83 @@ jobs:
|
|
|
95
102
|
- name: Publish package to PyPI
|
|
96
103
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
97
104
|
|
|
105
|
+
version_docs:
|
|
106
|
+
name: Version docs
|
|
107
|
+
needs: [release_prepare, changelog_update, pypi_publish]
|
|
108
|
+
runs-on: ubuntu-latest
|
|
109
|
+
outputs:
|
|
110
|
+
version_docs_commitish: ${{ steps.commit_versioned_docs.outputs.commit_long_sha }}
|
|
111
|
+
permissions:
|
|
112
|
+
contents: write
|
|
113
|
+
env:
|
|
114
|
+
NODE_VERSION: 22
|
|
115
|
+
PYTHON_VERSION: 3.14
|
|
116
|
+
|
|
117
|
+
steps:
|
|
118
|
+
- name: Checkout repository
|
|
119
|
+
uses: actions/checkout@v6
|
|
120
|
+
with:
|
|
121
|
+
token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}
|
|
122
|
+
ref: ${{ needs.changelog_update.outputs.changelog_commitish }}
|
|
123
|
+
|
|
124
|
+
- name: Set up Node
|
|
125
|
+
uses: actions/setup-node@v6
|
|
126
|
+
with:
|
|
127
|
+
node-version: ${{ env.NODE_VERSION }}
|
|
128
|
+
|
|
129
|
+
- name: Set up Python
|
|
130
|
+
uses: actions/setup-python@v6
|
|
131
|
+
with:
|
|
132
|
+
python-version: ${{ env.PYTHON_VERSION }}
|
|
133
|
+
|
|
134
|
+
- name: Set up uv package manager
|
|
135
|
+
uses: astral-sh/setup-uv@v7
|
|
136
|
+
with:
|
|
137
|
+
python-version: ${{ env.PYTHON_VERSION }}
|
|
138
|
+
|
|
139
|
+
- name: Install Python dependencies
|
|
140
|
+
run: uv run poe install-dev
|
|
141
|
+
|
|
142
|
+
- name: Install website dependencies
|
|
143
|
+
run: |
|
|
144
|
+
cd website
|
|
145
|
+
corepack enable
|
|
146
|
+
yarn install
|
|
147
|
+
|
|
148
|
+
- name: Snapshot the current version
|
|
149
|
+
run: |
|
|
150
|
+
cd website
|
|
151
|
+
VERSION="$(python -c "import tomllib, pathlib; print(tomllib.loads(pathlib.Path('../pyproject.toml').read_text())['project']['version'])")"
|
|
152
|
+
MAJOR_MINOR="$(echo "$VERSION" | cut -d. -f1-2)"
|
|
153
|
+
export MAJOR_MINOR
|
|
154
|
+
# Remove existing version if present (patch releases override)
|
|
155
|
+
rm -rf "versioned_docs/version-${MAJOR_MINOR}"
|
|
156
|
+
rm -rf "versioned_sidebars/version-${MAJOR_MINOR}-sidebars.json"
|
|
157
|
+
jq 'map(select(. != env.MAJOR_MINOR))' versions.json > tmp.json && mv tmp.json versions.json
|
|
158
|
+
# Build API reference and create version snapshots
|
|
159
|
+
bash build_api_reference.sh
|
|
160
|
+
npx docusaurus docs:version "$MAJOR_MINOR"
|
|
161
|
+
npx docusaurus api:version "$MAJOR_MINOR"
|
|
162
|
+
|
|
163
|
+
- name: Commit and push versioned docs
|
|
164
|
+
id: commit_versioned_docs
|
|
165
|
+
uses: EndBug/add-and-commit@v10
|
|
166
|
+
with:
|
|
167
|
+
add: "website/versioned_docs website/versioned_sidebars website/versions.json"
|
|
168
|
+
message: "docs: version ${{ needs.release_prepare.outputs.version_number }} docs [skip ci]"
|
|
169
|
+
default_author: github_actions
|
|
170
|
+
|
|
98
171
|
doc_release:
|
|
99
172
|
name: Doc release
|
|
100
|
-
needs: [changelog_update, pypi_publish]
|
|
173
|
+
needs: [changelog_update, pypi_publish, version_docs]
|
|
174
|
+
permissions:
|
|
175
|
+
contents: write
|
|
176
|
+
pages: write
|
|
177
|
+
id-token: write
|
|
101
178
|
uses: ./.github/workflows/_release_docs.yaml
|
|
102
179
|
with:
|
|
103
|
-
# Use the
|
|
104
|
-
ref: ${{ needs.
|
|
180
|
+
# Use the version_docs commit to include both changelog and versioned docs.
|
|
181
|
+
ref: ${{ needs.version_docs.outputs.version_docs_commitish }}
|
|
105
182
|
secrets: inherit
|
|
106
183
|
|
|
107
184
|
trigger_docker_build:
|
|
@@ -11,6 +11,9 @@ concurrency:
|
|
|
11
11
|
group: release
|
|
12
12
|
cancel-in-progress: false
|
|
13
13
|
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
|
|
14
17
|
jobs:
|
|
15
18
|
doc_checks:
|
|
16
19
|
name: Doc checks
|
|
@@ -21,6 +24,10 @@ jobs:
|
|
|
21
24
|
if: startsWith(github.event.head_commit.message, 'docs')
|
|
22
25
|
name: Doc release
|
|
23
26
|
needs: [doc_checks]
|
|
27
|
+
permissions:
|
|
28
|
+
contents: write
|
|
29
|
+
pages: write
|
|
30
|
+
id-token: write
|
|
24
31
|
uses: ./.github/workflows/_release_docs.yaml
|
|
25
32
|
with:
|
|
26
33
|
# Use the same ref as the one that triggered the workflow.
|
|
@@ -64,6 +71,8 @@ jobs:
|
|
|
64
71
|
changelog_update:
|
|
65
72
|
name: Changelog update
|
|
66
73
|
needs: [release_prepare]
|
|
74
|
+
permissions:
|
|
75
|
+
contents: write
|
|
67
76
|
uses: apify/workflows/.github/workflows/python_bump_and_update_changelog.yaml@main
|
|
68
77
|
with:
|
|
69
78
|
version_number: ${{ needs.release_prepare.outputs.version_number }}
|
|
@@ -95,6 +104,10 @@ jobs:
|
|
|
95
104
|
doc_release_post_publish:
|
|
96
105
|
name: Doc release post publish
|
|
97
106
|
needs: [changelog_update, pypi_publish]
|
|
107
|
+
permissions:
|
|
108
|
+
contents: write
|
|
109
|
+
pages: write
|
|
110
|
+
id-token: write
|
|
98
111
|
uses: ./.github/workflows/_release_docs.yaml
|
|
99
112
|
with:
|
|
100
113
|
# Use the ref from the changelog update to include the updated changelog.
|
|
@@ -2,8 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
## [3.3.2](https://github.com/apify/apify-sdk-python/releases/tag/v3.3.2) (2026-03-27)
|
|
6
|
+
|
|
7
|
+
### 🐛 Bug Fixes
|
|
8
|
+
|
|
9
|
+
- **scrapy:** Resolve Crawlee's request data round-trip failure in request conversion ([#832](https://github.com/apify/apify-sdk-python/pull/832)) ([3b9d588](https://github.com/apify/apify-sdk-python/commit/3b9d5888611597a522300c742014c06cc0b857b9)) by [@vdusek](https://github.com/vdusek)
|
|
10
|
+
- Treat `default` alias as default storage when in schema ([#827](https://github.com/apify/apify-sdk-python/pull/827)) ([1610d0d](https://github.com/apify/apify-sdk-python/commit/1610d0dda40ba30bd3b4dea28d9fef04c9b7c839)) by [@Pijukatel](https://github.com/Pijukatel)
|
|
11
|
+
- Guard ReentrantLock against None task context ([#841](https://github.com/apify/apify-sdk-python/pull/841)) ([193de10](https://github.com/apify/apify-sdk-python/commit/193de10910946ca0ce93bc2fc7c741a26e9f6e9c)) by [@vdusek](https://github.com/vdusek)
|
|
12
|
+
- Isolate cleanup steps in Actor `__aexit__` to prevent cascading failures ([#842](https://github.com/apify/apify-sdk-python/pull/842)) ([68c2acf](https://github.com/apify/apify-sdk-python/commit/68c2acf3dba71b78f893fc6f1e816e3a3148f0c9)) by [@vdusek](https://github.com/vdusek)
|
|
13
|
+
- Handle exceptions in pre-reboot event listeners via `return_exceptions` ([#843](https://github.com/apify/apify-sdk-python/pull/843)) ([ed13597](https://github.com/apify/apify-sdk-python/commit/ed13597d7ce0d1f0c5ff5cd0d6796c96555a55ae)) by [@vdusek](https://github.com/vdusek)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
## [3.3.1](https://github.com/apify/apify-sdk-python/releases/tag/v3.3.1) (2026-03-11)
|
|
7
17
|
|
|
8
18
|
### 🐛 Bug Fixes
|
|
9
19
|
|
|
@@ -11,9 +21,9 @@ All notable changes to this project will be documented in this file.
|
|
|
11
21
|
- Fix BeforeValidator treating 0 as falsy in configuration fields ([#819](https://github.com/apify/apify-sdk-python/pull/819)) ([72efe88](https://github.com/apify/apify-sdk-python/commit/72efe883574ef0d05795934337c7f1c8c0d11877)) by [@vdusek](https://github.com/vdusek)
|
|
12
22
|
- Clamp negative timedelta in _get_remaining_time() ([#818](https://github.com/apify/apify-sdk-python/pull/818)) ([69b8af9](https://github.com/apify/apify-sdk-python/commit/69b8af9b8d245cfed76875f983f374e05d93bba8)) by [@vdusek](https://github.com/vdusek)
|
|
13
23
|
- **scrapy:** Close AsyncThread on scheduler open() failure ([#820](https://github.com/apify/apify-sdk-python/pull/820)) ([7dfaf1a](https://github.com/apify/apify-sdk-python/commit/7dfaf1a5c5af44743bd448a91140d9b074ac44bf)) by [@vdusek](https://github.com/vdusek)
|
|
24
|
+
- Keep track of synthetic apify-default-dataset-item events ([#814](https://github.com/apify/apify-sdk-python/pull/814)) ([50c4b6c](https://github.com/apify/apify-sdk-python/commit/50c4b6ce80b45da5348a74c559b8790edbeae04a)) by [@Mantisus](https://github.com/Mantisus), closes [#705](https://github.com/apify/apify-sdk-python/issues/705), [#760](https://github.com/apify/apify-sdk-python/issues/760)
|
|
14
25
|
|
|
15
26
|
|
|
16
|
-
<!-- git-cliff-unreleased-end -->
|
|
17
27
|
## [3.3.0](https://github.com/apify/apify-sdk-python/releases/tag/v3.3.0) (2026-02-25)
|
|
18
28
|
|
|
19
29
|
### 🚀 Features
|
|
@@ -130,11 +140,11 @@ All notable changes to this project will be documented in this file.
|
|
|
130
140
|
- Use same `client_key` for `Actor` created `request_queue` and improve its metadata estimation ([#552](https://github.com/apify/apify-sdk-python/pull/552)) ([7e4e5da](https://github.com/apify/apify-sdk-python/commit/7e4e5da81dd87e84ebeef2bd336c6c1d422cb9a7)) by [@Pijukatel](https://github.com/Pijukatel), closes [#536](https://github.com/apify/apify-sdk-python/issues/536)
|
|
131
141
|
- Properly process pre-existing Actor input file ([#591](https://github.com/apify/apify-sdk-python/pull/591)) ([cc5075f](https://github.com/apify/apify-sdk-python/commit/cc5075fab8c72ca5711cfd97932037b34e6997cd)) by [@Pijukatel](https://github.com/Pijukatel), closes [#590](https://github.com/apify/apify-sdk-python/issues/590)
|
|
132
142
|
|
|
133
|
-
###
|
|
143
|
+
### ⚙️ Miscellaneous Tasks
|
|
134
144
|
|
|
135
145
|
- [**breaking**] Update apify-client and apify-shared to v2.0 ([#548](https://github.com/apify/apify-sdk-python/pull/548)) ([8ba084d](https://github.com/apify/apify-sdk-python/commit/8ba084ded6cd018111343f2219260b481c8d4e35)) by [@vdusek](https://github.com/vdusek)
|
|
136
146
|
|
|
137
|
-
### Refactor
|
|
147
|
+
### 🚜 Refactor
|
|
138
148
|
|
|
139
149
|
- [**breaking**] Adapt to the Crawlee v1.0 ([#470](https://github.com/apify/apify-sdk-python/pull/470)) ([f7e3320](https://github.com/apify/apify-sdk-python/commit/f7e33206cf3e4767faacbdc43511b45b6785f929)) by [@vdusek](https://github.com/vdusek), closes [#469](https://github.com/apify/apify-sdk-python/issues/469), [#540](https://github.com/apify/apify-sdk-python/issues/540)
|
|
140
150
|
- [**breaking**] Replace `httpx` with `impit` ([#560](https://github.com/apify/apify-sdk-python/pull/560)) ([cca3869](https://github.com/apify/apify-sdk-python/commit/cca3869e85968865e56aafcdcb36fbccba27aef0)) by [@Mantisus](https://github.com/Mantisus), closes [#558](https://github.com/apify/apify-sdk-python/issues/558)
|
|
@@ -298,11 +308,11 @@ All notable changes to this project will be documented in this file.
|
|
|
298
308
|
- Possible infinity loop in Apify-Scrapy proxy middleware ([#259](https://github.com/apify/apify-sdk-python/pull/259)) ([8647a94](https://github.com/apify/apify-sdk-python/commit/8647a94289423528f2940d9f7174f81682fbb407)) by [@vdusek](https://github.com/vdusek)
|
|
299
309
|
- Hotfix for batch_add_requests batch size limit ([#261](https://github.com/apify/apify-sdk-python/pull/261)) ([61d7a39](https://github.com/apify/apify-sdk-python/commit/61d7a392d182a752c91193170dca351f4cb0fbf3)) by [@janbuchar](https://github.com/janbuchar)
|
|
300
310
|
|
|
301
|
-
### Refactor
|
|
311
|
+
### 🚜 Refactor
|
|
302
312
|
|
|
303
313
|
- [**breaking**] Preparation for v2 release ([#210](https://github.com/apify/apify-sdk-python/pull/210)) ([2f9dcc5](https://github.com/apify/apify-sdk-python/commit/2f9dcc559414f31e3f4fc87e72417a36494b9c84)) by [@janbuchar](https://github.com/janbuchar), closes [#135](https://github.com/apify/apify-sdk-python/issues/135), [#137](https://github.com/apify/apify-sdk-python/issues/137), [#138](https://github.com/apify/apify-sdk-python/issues/138), [#147](https://github.com/apify/apify-sdk-python/issues/147), [#149](https://github.com/apify/apify-sdk-python/issues/149), [#237](https://github.com/apify/apify-sdk-python/issues/237)
|
|
304
314
|
|
|
305
|
-
###
|
|
315
|
+
### ⚙️ Miscellaneous Tasks
|
|
306
316
|
|
|
307
317
|
- [**breaking**] Drop support for Python 3.8
|
|
308
318
|
|
|
@@ -337,7 +347,7 @@ All notable changes to this project will be documented in this file.
|
|
|
337
347
|
|
|
338
348
|
- Update of Scrapy integration, fixes in `ApifyScheduler`, `to_apify_request` and `apply_apify_settings`.
|
|
339
349
|
|
|
340
|
-
###
|
|
350
|
+
### ⚙️ Miscellaneous Tasks
|
|
341
351
|
|
|
342
352
|
- Remove `ApifyRetryMiddleware` and stay with the Scrapy's default one
|
|
343
353
|
|
|
@@ -369,7 +379,7 @@ All notable changes to this project will be documented in this file.
|
|
|
369
379
|
|
|
370
380
|
- Add missing import check to `ApifyHttpProxyMiddleware`
|
|
371
381
|
|
|
372
|
-
###
|
|
382
|
+
### ⚙️ Miscellaneous Tasks
|
|
373
383
|
|
|
374
384
|
- Create a new subpackage for Scrapy pipelines
|
|
375
385
|
- Remove some noqas thanks to the new Ruff release
|
|
@@ -379,7 +389,7 @@ All notable changes to this project will be documented in this file.
|
|
|
379
389
|
|
|
380
390
|
## [1.5.1](https://github.com/apify/apify-sdk-python/releases/tag/v1.5.1) (2024-01-10)
|
|
381
391
|
|
|
382
|
-
###
|
|
392
|
+
### ⚙️ Miscellaneous Tasks
|
|
383
393
|
|
|
384
394
|
- Allowed running integration tests from PRs from forks, after maintainer approval
|
|
385
395
|
- Do not close `nested_event_loop` in the `Scheduler.__del__`
|
|
@@ -398,14 +408,14 @@ All notable changes to this project will be documented in this file.
|
|
|
398
408
|
|
|
399
409
|
- Resolve issue in `ApifyRetryMiddleware.process_exception()`, where requests were getting stuck in the request queue
|
|
400
410
|
|
|
401
|
-
###
|
|
411
|
+
### ⚙️ Miscellaneous Tasks
|
|
402
412
|
|
|
403
413
|
- Fix type hint problems for resource clients
|
|
404
414
|
|
|
405
415
|
|
|
406
416
|
## [1.4.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.4.0) (2023-12-05)
|
|
407
417
|
|
|
408
|
-
###
|
|
418
|
+
### ⚙️ Miscellaneous Tasks
|
|
409
419
|
|
|
410
420
|
- Migrate from Autopep8 and Flake8 to Ruff
|
|
411
421
|
|
|
@@ -423,7 +433,7 @@ All notable changes to this project will be documented in this file.
|
|
|
423
433
|
|
|
424
434
|
- Add support for Python 3.12
|
|
425
435
|
|
|
426
|
-
###
|
|
436
|
+
### ⚙️ Miscellaneous Tasks
|
|
427
437
|
|
|
428
438
|
- Fix lint error (E721) in unit tests (for instance checks use `isinstance()`)
|
|
429
439
|
|
|
@@ -434,7 +444,7 @@ All notable changes to this project will be documented in this file.
|
|
|
434
444
|
|
|
435
445
|
- Update the Apify log formatter to contain an option for adding the logger name
|
|
436
446
|
|
|
437
|
-
###
|
|
447
|
+
### ⚙️ Miscellaneous Tasks
|
|
438
448
|
|
|
439
449
|
- Rewrite documentation publication to use Docusaurus
|
|
440
450
|
- Remove PR Toolkit workflow
|
|
@@ -446,7 +456,7 @@ All notable changes to this project will be documented in this file.
|
|
|
446
456
|
|
|
447
457
|
- Resolve issue with querying request queue head multiple times in parallel
|
|
448
458
|
|
|
449
|
-
###
|
|
459
|
+
### ⚙️ Miscellaneous Tasks
|
|
450
460
|
|
|
451
461
|
- Fix integration tests for Actor logger
|
|
452
462
|
- Remove `pytest-randomly` Pytest plugin
|
|
@@ -455,7 +465,7 @@ All notable changes to this project will be documented in this file.
|
|
|
455
465
|
|
|
456
466
|
## [1.1.3](https://github.com/apify/apify-sdk-python/releases/tag/v1.1.3) (2023-08-25)
|
|
457
467
|
|
|
458
|
-
###
|
|
468
|
+
### ⚙️ Miscellaneous Tasks
|
|
459
469
|
|
|
460
470
|
- Unify indentation in configuration files
|
|
461
471
|
- Update the `Actor.reboot` method to use the new reboot endpoint
|
|
@@ -463,7 +473,7 @@ All notable changes to this project will be documented in this file.
|
|
|
463
473
|
|
|
464
474
|
## [1.1.2](https://github.com/apify/apify-sdk-python/releases/tag/v1.1.2) (2023-08-02)
|
|
465
475
|
|
|
466
|
-
###
|
|
476
|
+
### ⚙️ Miscellaneous Tasks
|
|
467
477
|
|
|
468
478
|
- Start importing general constants and utilities from the `apify-shared` library
|
|
469
479
|
- Simplify code via `flake8-simplify`
|
|
@@ -491,7 +501,7 @@ All notable changes to this project will be documented in this file.
|
|
|
491
501
|
- Start enforcing local storage to always use the UTF-8 encoding
|
|
492
502
|
- Fix saving key-value store values to local storage with the right extension for a given content type
|
|
493
503
|
|
|
494
|
-
###
|
|
504
|
+
### ⚙️ Miscellaneous Tasks
|
|
495
505
|
|
|
496
506
|
- Switch from `setup.py` to `pyproject.toml` for specifying project setup
|
|
497
507
|
|
|
@@ -502,7 +512,7 @@ All notable changes to this project will be documented in this file.
|
|
|
502
512
|
|
|
503
513
|
- Fix `RequestQueue` not loading requests from an existing queue properly
|
|
504
514
|
|
|
505
|
-
###
|
|
515
|
+
### ⚙️ Miscellaneous Tasks
|
|
506
516
|
|
|
507
517
|
- Update to `apify-client` 1.0.0
|
|
508
518
|
- Start triggering base Docker image builds when releasing a new version
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "apify"
|
|
7
|
-
version = "3.3.
|
|
7
|
+
version = "3.3.2"
|
|
8
8
|
description = "Apify SDK for Python"
|
|
9
9
|
authors = [{ name = "Apify Technologies s.r.o.", email = "support@apify.com" }]
|
|
10
10
|
license = { file = "LICENSE" }
|
|
@@ -99,6 +99,9 @@ allow-direct-references = true
|
|
|
99
99
|
[tool.ruff]
|
|
100
100
|
line-length = 120
|
|
101
101
|
include = ["src/**/*.py", "tests/**/*.py", "docs/**/*.py", "website/**/*.py"]
|
|
102
|
+
exclude = [
|
|
103
|
+
"website/versioned_docs/**",
|
|
104
|
+
]
|
|
102
105
|
|
|
103
106
|
[tool.ruff.lint]
|
|
104
107
|
select = ["ALL"]
|
|
@@ -201,6 +204,7 @@ python-version = "3.10"
|
|
|
201
204
|
|
|
202
205
|
[tool.ty.src]
|
|
203
206
|
include = ["src", "tests", "scripts", "docs", "website"]
|
|
207
|
+
exclude = ["website/versioned_docs"]
|
|
204
208
|
|
|
205
209
|
[[tool.ty.overrides]]
|
|
206
210
|
include = [
|
|
@@ -26,7 +26,7 @@ from crawlee.events import (
|
|
|
26
26
|
EventSystemInfoData,
|
|
27
27
|
)
|
|
28
28
|
|
|
29
|
-
from apify._charging import ChargeResult, ChargingManager, ChargingManagerImplementation
|
|
29
|
+
from apify._charging import DEFAULT_DATASET_ITEM_EVENT, ChargeResult, ChargingManager, ChargingManagerImplementation
|
|
30
30
|
from apify._configuration import Configuration
|
|
31
31
|
from apify._consts import EVENT_LISTENERS_TIMEOUT
|
|
32
32
|
from apify._crypto import decrypt_input_secrets, load_private_key
|
|
@@ -249,11 +249,21 @@ class _ActorType:
|
|
|
249
249
|
if self._event_listeners_timeout:
|
|
250
250
|
await self.event_manager.wait_for_all_listeners_to_complete(timeout=self._event_listeners_timeout)
|
|
251
251
|
|
|
252
|
-
|
|
253
|
-
|
|
252
|
+
try:
|
|
253
|
+
await self.event_manager.__aexit__(None, None, None)
|
|
254
|
+
except Exception:
|
|
255
|
+
self.log.exception('Failed to exit event manager')
|
|
256
|
+
|
|
257
|
+
try:
|
|
258
|
+
await self._charging_manager_implementation.__aexit__(None, None, None)
|
|
259
|
+
except Exception:
|
|
260
|
+
self.log.exception('Failed to exit charging manager')
|
|
254
261
|
|
|
255
262
|
# Persist Actor state
|
|
256
|
-
|
|
263
|
+
try:
|
|
264
|
+
await self._save_actor_state()
|
|
265
|
+
except Exception:
|
|
266
|
+
self.log.exception('Failed to save Actor state')
|
|
257
267
|
|
|
258
268
|
try:
|
|
259
269
|
await asyncio.wait_for(finalize(), self._cleanup_timeout.total_seconds())
|
|
@@ -380,14 +390,6 @@ class _ActorType:
|
|
|
380
390
|
def _charging_manager_implementation(self) -> ChargingManagerImplementation:
|
|
381
391
|
return ChargingManagerImplementation(self.configuration, self.apify_client)
|
|
382
392
|
|
|
383
|
-
@cached_property
|
|
384
|
-
def _charge_lock(self) -> asyncio.Lock:
|
|
385
|
-
"""Lock to synchronize charge operations.
|
|
386
|
-
|
|
387
|
-
Prevents race conditions between Actor.charge and Actor.push_data calls.
|
|
388
|
-
"""
|
|
389
|
-
return asyncio.Lock()
|
|
390
|
-
|
|
391
393
|
@cached_property
|
|
392
394
|
def _storage_client(self) -> SmartApifyStorageClient:
|
|
393
395
|
"""Storage client used by the Actor.
|
|
@@ -621,12 +623,8 @@ class _ActorType:
|
|
|
621
623
|
storage_client=self._storage_client.get_suitable_storage_client(force_cloud=force_cloud),
|
|
622
624
|
)
|
|
623
625
|
|
|
624
|
-
@overload
|
|
625
|
-
async def push_data(self, data: dict | list[dict]) -> None: ...
|
|
626
|
-
@overload
|
|
627
|
-
async def push_data(self, data: dict | list[dict], charged_event_name: str) -> ChargeResult: ...
|
|
628
626
|
@_ensure_context
|
|
629
|
-
async def push_data(self, data: dict | list[dict], charged_event_name: str | None = None) -> ChargeResult
|
|
627
|
+
async def push_data(self, data: dict | list[dict], charged_event_name: str | None = None) -> ChargeResult:
|
|
630
628
|
"""Store an object or a list of objects to the default dataset of the current Actor run.
|
|
631
629
|
|
|
632
630
|
Args:
|
|
@@ -634,35 +632,54 @@ class _ActorType:
|
|
|
634
632
|
charged_event_name: If provided and if the Actor uses the pay-per-event pricing model,
|
|
635
633
|
the method will attempt to charge for the event for each pushed item.
|
|
636
634
|
"""
|
|
635
|
+
if charged_event_name and charged_event_name.startswith('apify-'):
|
|
636
|
+
raise ValueError(f'Cannot charge for synthetic event "{charged_event_name}" manually')
|
|
637
|
+
|
|
638
|
+
charging_manager = self.get_charging_manager()
|
|
639
|
+
|
|
637
640
|
if not data:
|
|
638
|
-
|
|
641
|
+
charged_event_name = charged_event_name or DEFAULT_DATASET_ITEM_EVENT
|
|
642
|
+
charge_limit_reached = charging_manager.is_event_charge_limit_reached(charged_event_name)
|
|
643
|
+
|
|
644
|
+
return ChargeResult(
|
|
645
|
+
event_charge_limit_reached=charge_limit_reached,
|
|
646
|
+
charged_count=0,
|
|
647
|
+
chargeable_within_limit=charging_manager.compute_chargeable(),
|
|
648
|
+
)
|
|
639
649
|
|
|
640
650
|
data = data if isinstance(data, list) else [data]
|
|
641
651
|
|
|
642
|
-
|
|
643
|
-
if charged_event_name is None:
|
|
644
|
-
dataset = await self.open_dataset()
|
|
645
|
-
await dataset.push_data(data)
|
|
646
|
-
return None
|
|
652
|
+
dataset = await self.open_dataset()
|
|
647
653
|
|
|
648
|
-
#
|
|
654
|
+
# Acquire the charge lock to prevent race conditions between concurrent
|
|
649
655
|
# push_data calls. We need to hold the lock for the entire push_data + charge sequence.
|
|
650
|
-
async with
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
656
|
+
async with charging_manager.charge_lock():
|
|
657
|
+
# Synthetic events are handled within dataset.push_data, only get data for `ChargeResult`.
|
|
658
|
+
if charged_event_name is None:
|
|
659
|
+
before = charging_manager.get_charged_event_count(DEFAULT_DATASET_ITEM_EVENT)
|
|
660
|
+
await dataset.push_data(data)
|
|
661
|
+
after = charging_manager.get_charged_event_count(DEFAULT_DATASET_ITEM_EVENT)
|
|
662
|
+
return ChargeResult(
|
|
663
|
+
event_charge_limit_reached=charging_manager.is_event_charge_limit_reached(
|
|
664
|
+
DEFAULT_DATASET_ITEM_EVENT
|
|
665
|
+
),
|
|
666
|
+
charged_count=after - before,
|
|
667
|
+
chargeable_within_limit=charging_manager.compute_chargeable(),
|
|
668
|
+
)
|
|
657
669
|
|
|
658
|
-
|
|
670
|
+
pushed_items_count = charging_manager.compute_push_data_limit(
|
|
671
|
+
items_count=len(data),
|
|
672
|
+
event_name=charged_event_name,
|
|
673
|
+
is_default_dataset=True,
|
|
674
|
+
)
|
|
659
675
|
|
|
660
676
|
if pushed_items_count < len(data):
|
|
661
677
|
await dataset.push_data(data[:pushed_items_count])
|
|
662
678
|
elif pushed_items_count > 0:
|
|
663
679
|
await dataset.push_data(data)
|
|
664
680
|
|
|
665
|
-
|
|
681
|
+
# Only charge explicit events; synthetic events will be processed within the client.
|
|
682
|
+
return await charging_manager.charge(
|
|
666
683
|
event_name=charged_event_name,
|
|
667
684
|
count=pushed_items_count,
|
|
668
685
|
)
|
|
@@ -726,9 +743,9 @@ class _ActorType:
|
|
|
726
743
|
event_name: Name of the event to be charged for.
|
|
727
744
|
count: Number of events to charge for.
|
|
728
745
|
"""
|
|
729
|
-
#
|
|
730
|
-
|
|
731
|
-
|
|
746
|
+
# charging_manager.charge() acquires charge_lock internally.
|
|
747
|
+
charging_manager = self.get_charging_manager()
|
|
748
|
+
return await charging_manager.charge(event_name, count)
|
|
732
749
|
|
|
733
750
|
@overload
|
|
734
751
|
def on(
|
|
@@ -1187,11 +1204,16 @@ class _ActorType:
|
|
|
1187
1204
|
(self.event_manager._listeners_to_wrappers[Event.MIGRATING] or {}).values() # noqa: SLF001
|
|
1188
1205
|
)
|
|
1189
1206
|
|
|
1190
|
-
await asyncio.gather(
|
|
1207
|
+
results = await asyncio.gather(
|
|
1191
1208
|
*[listener(EventPersistStateData(is_migrating=True)) for listener in persist_state_listeners],
|
|
1192
1209
|
*[listener(EventMigratingData()) for listener in migrating_listeners],
|
|
1210
|
+
return_exceptions=True,
|
|
1193
1211
|
)
|
|
1194
1212
|
|
|
1213
|
+
for result in results:
|
|
1214
|
+
if isinstance(result, Exception):
|
|
1215
|
+
self.log.exception('A pre-reboot event listener failed', exc_info=result)
|
|
1216
|
+
|
|
1195
1217
|
if not self.configuration.actor_run_id:
|
|
1196
1218
|
raise RuntimeError('actor_run_id cannot be None when running on the Apify platform.')
|
|
1197
1219
|
|