apify 2.7.1b6__tar.gz → 2.7.3__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.1b6 → apify-2.7.3}/.github/workflows/pre_release.yaml +5 -9
- {apify-2.7.1b6 → apify-2.7.3}/.github/workflows/release.yaml +4 -8
- {apify-2.7.1b6 → apify-2.7.3}/.github/workflows/run_code_checks.yaml +4 -9
- {apify-2.7.1b6 → apify-2.7.3}/CHANGELOG.md +9 -212
- {apify-2.7.1b6 → apify-2.7.3}/CONTRIBUTING.md +1 -1
- {apify-2.7.1b6 → apify-2.7.3}/PKG-INFO +3 -2
- {apify-2.7.1b6 → apify-2.7.3}/docs/01_overview/02_running_actors_locally.mdx +1 -1
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/10_logging.mdx +0 -30
- {apify-2.7.1b6 → apify-2.7.3}/pyproject.toml +9 -10
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/_actor.py +6 -42
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/_charging.py +9 -15
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/_configuration.py +10 -1
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/_crypto.py +6 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/_models.py +7 -7
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/_platform_event_manager.py +36 -20
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/_proxy_configuration.py +5 -2
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/_utils.py +2 -17
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/_apify_storage_client.py +1 -1
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/log.py +2 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/storages/_request_list.py +3 -3
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/README.md +0 -23
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/actor_source_base/Dockerfile +1 -1
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/actor_source_base/requirements.txt +0 -2
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/conftest.py +2 -2
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_events.py +1 -3
- apify-2.7.3/tests/integration/test_request_queue.py +113 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_lifecycle.py +1 -3
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/conftest.py +22 -3
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/test_platform_event_manager.py +1 -4
- {apify-2.7.1b6 → apify-2.7.3}/uv.lock +324 -265
- apify-2.7.3/website/docusaurus.config.js +145 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/package-lock.json +1047 -650
- {apify-2.7.1b6 → apify-2.7.3}/website/package.json +6 -6
- {apify-2.7.1b6 → apify-2.7.3}/website/src/pages/index.module.css +1 -1
- apify-2.7.1b6/docs/03_concepts/code/10_redirect_log.py +0 -15
- apify-2.7.1b6/docs/03_concepts/code/10_redirect_log_existing_run.py +0 -24
- apify-2.7.1b6/tests/integration/actor_source_base/server.py +0 -101
- apify-2.7.1b6/tests/integration/test_crawlers_with_storages.py +0 -111
- apify-2.7.1b6/tests/integration/test_request_queue.py +0 -1197
- apify-2.7.1b6/website/docusaurus.config.js +0 -277
- apify-2.7.1b6/website/static/img/guides/redirected_logs_example.webp +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/.editorconfig +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/.github/CODEOWNERS +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/.github/workflows/build_and_deploy_docs.yaml +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/.github/workflows/check_pr_title.yaml +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/.github/workflows/update_new_issue.yaml +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/.gitignore +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/.markdownlint.yaml +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/.pre-commit-config.yaml +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/LICENSE +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/Makefile +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/README.md +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/01_overview/01_introduction.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/01_overview/03_actor_structure.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/01_overview/code/01_introduction.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/01_overview/code/actor_structure/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/01_overview/code/actor_structure/__main__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/01_overview/code/actor_structure/main.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/01_overview/code/actor_structure/py.typed +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/01_beautifulsoup_httpx.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/02_crawlee.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/03_playwright.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/04_selenium.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/05_scrapy.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/01_beautifulsoup_httpx.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/02_crawlee_beautifulsoup.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/02_crawlee_playwright.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/03_playwright.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/04_selenium.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/__main__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/items.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/main.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/py.typed +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/settings.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/spiders/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/spiders/py.typed +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/02_guides/code/scrapy_project/src/spiders/title.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/01_actor_lifecycle.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/02_actor_input.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/03_storages.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/04_actor_events.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/05_proxy_management.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/06_interacting_with_other_actors.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/07_webhooks.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/08_access_apify_api.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/09_running_webserver.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/11_configuration.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/12_pay_per_event.mdx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/01_context_manager.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/01_init_exit.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/01_reboot.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/01_status_message.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/02_input.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/03_dataset_exports.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/03_dataset_read_write.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/03_deleting_storages.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/03_kvs_iterating.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/03_kvs_public_url.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/03_kvs_read_write.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/03_opening_storages.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/03_rq.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/04_actor_events.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/05_apify_proxy.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/05_apify_proxy_config.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/05_custom_proxy.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/05_custom_proxy_function.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/05_proxy_actor_input.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/05_proxy_httpx.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/05_proxy_rotation.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/06_interacting_call.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/06_interacting_call_task.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/06_interacting_metamorph.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/06_interacting_start.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/07_webhook.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/07_webhook_preventing.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/08_actor_client.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/08_actor_new_client.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/09_webserver.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/10_log_config.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/10_logger_usage.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/11_config.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/actor_charge.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/03_concepts/code/conditional_actor_charge.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/04_upgrading/upgrading_to_v2.md +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/docs/pyproject.toml +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/renovate.json +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/_consts.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/_dataset_client.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/_dataset_collection_client.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/_key_value_store_client.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/_key_value_store_collection_client.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/_request_queue_client.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/_request_queue_collection_client.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/apify_storage_client/py.typed +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/py.typed +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/_actor_runner.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/_async_thread.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/_logging_config.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/extensions/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/extensions/_httpcache.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/middlewares/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/middlewares/apify_proxy.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/middlewares/py.typed +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/pipelines/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/pipelines/actor_dataset_push.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/pipelines/py.typed +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/py.typed +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/requests.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/scheduler.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/scrapy/utils.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/storages/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/src/apify/storages/py.typed +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/_utils.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/actor_source_base/src/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/actor_source_base/src/__main__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/actor_source_base/src/main.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_api_helpers.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_call_timeouts.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_charge.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_create_proxy_configuration.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_dataset.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_key_value_store.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_lifecycle.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_log.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_request_queue.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_actor_scrapy.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/integration/test_fixtures.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_create_proxy_configuration.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_dataset.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_env_helpers.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_helpers.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_key_value_store.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_log.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_non_default_instance.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_actor_request_queue.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_configuration.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/actor/test_request_list.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/extensions/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/extensions/test_httpcache.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/middlewares/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/middlewares/test_apify_proxy.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/pipelines/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/pipelines/test_actor_dataset_push.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/requests/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/requests/test_to_apify_request.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/requests/test_to_scrapy_request.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/utils/__init__.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/utils/test_apply_apify_settings.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/scrapy/utils/test_get_basic_auth_header.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/test_crypto.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/tests/unit/test_proxy_configuration.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/.eslintrc.json +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/babel.config.js +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/build_api_reference.sh +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/generate_module_shortcuts.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/sidebars.js +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/src/components/ApiLink.jsx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/src/components/Gradients.jsx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/src/components/Highlights.jsx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/src/components/Highlights.module.css +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/src/components/RunnableCodeBlock.jsx +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/src/components/RunnableCodeBlock.module.css +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/src/css/custom.css +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/src/pages/home_page_example.py +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/src/pages/index.js +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/static/.nojekyll +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/static/img/docs-og.png +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/tools/docs-prettier.config.js +0 -0
- {apify-2.7.1b6 → apify-2.7.3}/website/tools/utils/externalLink.js +0 -0
|
@@ -11,10 +11,6 @@ on:
|
|
|
11
11
|
# Or it can be triggered manually.
|
|
12
12
|
workflow_dispatch:
|
|
13
13
|
|
|
14
|
-
concurrency:
|
|
15
|
-
group: release
|
|
16
|
-
cancel-in-progress: false
|
|
17
|
-
|
|
18
14
|
jobs:
|
|
19
15
|
release_metadata:
|
|
20
16
|
if: "!startsWith(github.event.head_commit.message, 'docs') && !startsWith(github.event.head_commit.message, 'ci') && startsWith(github.repository, 'apify/')"
|
|
@@ -24,38 +20,38 @@ jobs:
|
|
|
24
20
|
version_number: ${{ steps.release_metadata.outputs.version_number }}
|
|
25
21
|
tag_name: ${{ steps.release_metadata.outputs.tag_name }}
|
|
26
22
|
changelog: ${{ steps.release_metadata.outputs.changelog }}
|
|
23
|
+
existing_changelog_path: CHANGELOG.md
|
|
27
24
|
steps:
|
|
28
25
|
- uses: apify/workflows/git-cliff-release@main
|
|
29
26
|
id: release_metadata
|
|
30
27
|
name: Prepare release metadata
|
|
31
28
|
with:
|
|
32
29
|
release_type: prerelease
|
|
33
|
-
existing_changelog_path: CHANGELOG.md
|
|
34
30
|
|
|
35
31
|
lint_check:
|
|
36
32
|
name: Lint check
|
|
37
33
|
uses: apify/workflows/.github/workflows/python_lint_check.yaml@main
|
|
38
34
|
with:
|
|
39
|
-
python-versions: '["3.10", "3.11", "3.12", "3.13"]'
|
|
35
|
+
python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
|
|
40
36
|
|
|
41
37
|
type_check:
|
|
42
38
|
name: Type check
|
|
43
39
|
uses: apify/workflows/.github/workflows/python_type_check.yaml@main
|
|
44
40
|
with:
|
|
45
|
-
python-versions: '["3.10", "3.11", "3.12", "3.13"]'
|
|
41
|
+
python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
|
|
46
42
|
|
|
47
43
|
unit_tests:
|
|
48
44
|
name: Unit tests
|
|
49
45
|
uses: apify/workflows/.github/workflows/python_unit_tests.yaml@main
|
|
50
46
|
with:
|
|
51
|
-
python-versions: '["3.10", "3.11", "3.12", "3.13"]'
|
|
47
|
+
python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
|
|
52
48
|
|
|
53
49
|
integration_tests:
|
|
54
50
|
name: Integration tests
|
|
55
51
|
uses: apify/workflows/.github/workflows/python_integration_tests.yaml@main
|
|
56
52
|
secrets: inherit
|
|
57
53
|
with:
|
|
58
|
-
python-versions: '["3.
|
|
54
|
+
python-versions: '["3.9", "3.13"]'
|
|
59
55
|
|
|
60
56
|
update_changelog:
|
|
61
57
|
name: Update changelog
|
|
@@ -21,10 +21,6 @@ on:
|
|
|
21
21
|
type: string
|
|
22
22
|
default: ""
|
|
23
23
|
|
|
24
|
-
concurrency:
|
|
25
|
-
group: release
|
|
26
|
-
cancel-in-progress: false
|
|
27
|
-
|
|
28
24
|
jobs:
|
|
29
25
|
release_metadata:
|
|
30
26
|
name: Prepare release metadata
|
|
@@ -47,26 +43,26 @@ jobs:
|
|
|
47
43
|
name: Lint check
|
|
48
44
|
uses: apify/workflows/.github/workflows/python_lint_check.yaml@main
|
|
49
45
|
with:
|
|
50
|
-
python-versions: '["3.10", "3.11", "3.12", "3.13"]'
|
|
46
|
+
python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
|
|
51
47
|
|
|
52
48
|
type_check:
|
|
53
49
|
name: Type check
|
|
54
50
|
uses: apify/workflows/.github/workflows/python_type_check.yaml@main
|
|
55
51
|
with:
|
|
56
|
-
python-versions: '["3.10", "3.11", "3.12", "3.13"]'
|
|
52
|
+
python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
|
|
57
53
|
|
|
58
54
|
unit_tests:
|
|
59
55
|
name: Unit tests
|
|
60
56
|
uses: apify/workflows/.github/workflows/python_unit_tests.yaml@main
|
|
61
57
|
with:
|
|
62
|
-
python-versions: '["3.10", "3.11", "3.12", "3.13"]'
|
|
58
|
+
python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
|
|
63
59
|
|
|
64
60
|
integration_tests:
|
|
65
61
|
name: Integration tests
|
|
66
62
|
uses: apify/workflows/.github/workflows/python_integration_tests.yaml@main
|
|
67
63
|
secrets: inherit
|
|
68
64
|
with:
|
|
69
|
-
python-versions: '["3.
|
|
65
|
+
python-versions: '["3.9", "3.13"]'
|
|
70
66
|
|
|
71
67
|
update_changelog:
|
|
72
68
|
name: Update changelog
|
|
@@ -6,29 +6,24 @@ on:
|
|
|
6
6
|
# step required for PRs from forks. This prevents their potential exposure.
|
|
7
7
|
pull_request:
|
|
8
8
|
|
|
9
|
-
# Trigger for pushing to the master branch is handled by the pre-release workflow.
|
|
10
|
-
|
|
11
|
-
# It should also be possible to trigger checks manually
|
|
12
|
-
workflow_dispatch:
|
|
13
|
-
|
|
14
9
|
jobs:
|
|
15
10
|
lint_check:
|
|
16
11
|
name: Lint check
|
|
17
12
|
uses: apify/workflows/.github/workflows/python_lint_check.yaml@main
|
|
18
13
|
with:
|
|
19
|
-
python-versions: '["3.10", "3.11", "3.12", "3.13"]'
|
|
14
|
+
python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
|
|
20
15
|
|
|
21
16
|
type_check:
|
|
22
17
|
name: Type check
|
|
23
18
|
uses: apify/workflows/.github/workflows/python_type_check.yaml@main
|
|
24
19
|
with:
|
|
25
|
-
python-versions: '["3.10", "3.11", "3.12", "3.13"]'
|
|
20
|
+
python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
|
|
26
21
|
|
|
27
22
|
unit_tests:
|
|
28
23
|
name: Unit tests
|
|
29
24
|
uses: apify/workflows/.github/workflows/python_unit_tests.yaml@main
|
|
30
25
|
with:
|
|
31
|
-
python-versions: '["3.10", "3.11", "3.12", "3.13"]'
|
|
26
|
+
python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]'
|
|
32
27
|
|
|
33
28
|
docs_check:
|
|
34
29
|
name: Docs check
|
|
@@ -40,4 +35,4 @@ jobs:
|
|
|
40
35
|
uses: apify/workflows/.github/workflows/python_integration_tests.yaml@main
|
|
41
36
|
secrets: inherit
|
|
42
37
|
with:
|
|
43
|
-
python-versions: '["3.
|
|
38
|
+
python-versions: '["3.9", "3.13"]'
|
|
@@ -2,44 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
## 2.7.1 - **not yet released**
|
|
5
|
+
## [2.7.3](https://github.com/apify/apify-sdk-python/releases/tag/v2.7.3) (2025-08-11)
|
|
7
6
|
|
|
8
7
|
### 🐛 Bug Fixes
|
|
9
8
|
|
|
10
|
-
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
<!-- git-cliff-unreleased-end -->
|
|
14
|
-
## [2.7.0](https://github.com/apify/apify-sdk-python/releases/tag/v2.7.0) (2025-07-14)
|
|
15
|
-
|
|
16
|
-
### 🚀 Features
|
|
17
|
-
|
|
18
|
-
- **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)
|
|
19
|
-
|
|
20
|
-
### 🐛 Bug Fixes
|
|
21
|
-
|
|
22
|
-
- 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)
|
|
23
|
-
- 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)
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
## [2.7.0](https://github.com/apify/apify-sdk-python/releases/tag/v2.7.0) (2025-07-14)
|
|
27
|
-
|
|
28
|
-
### 🚀 Features
|
|
29
|
-
|
|
30
|
-
- **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)
|
|
31
|
-
|
|
32
|
-
### 🐛 Bug Fixes
|
|
33
|
-
|
|
34
|
-
- 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)
|
|
35
|
-
- 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)
|
|
9
|
+
- Expose `APIFY_USER_IS_PAYING` env var to the configuration (#507) ([0de022c](https://github.com/apify/apify-sdk-python/commit/0de022c3435f24c821053c771e7b659433e3fb6e))
|
|
36
10
|
|
|
37
11
|
|
|
38
12
|
## [2.7.2](https://github.com/apify/apify-sdk-python/releases/tag/v2.7.2) (2025-07-30)
|
|
39
13
|
|
|
40
14
|
### 🐛 Bug Fixes
|
|
41
15
|
|
|
42
|
-
- Restrict apify-shared and apify-client versions (
|
|
16
|
+
- Restrict apify-shared and apify-client versions (#523) ([581ebae](https://github.com/apify/apify-sdk-python/commit/581ebae5752a984a34cbabc02c49945ae392db00))
|
|
43
17
|
|
|
44
18
|
|
|
45
19
|
## [2.7.1](https://github.com/apify/apify-sdk-python/releases/tag/v2.7.1) (2025-07-24)
|
|
@@ -185,210 +159,33 @@ All notable changes to this project will be documented in this file.
|
|
|
185
159
|
|
|
186
160
|
- [**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)
|
|
187
161
|
|
|
188
|
-
### Chore
|
|
189
|
-
|
|
190
|
-
- [**breaking**] Drop support for Python 3.8
|
|
191
|
-
|
|
192
162
|
|
|
193
163
|
## [1.7.2](https://github.com/apify/apify-sdk-python/releases/tag/v1.7.2) (2024-07-08)
|
|
194
164
|
|
|
195
|
-
- Add Actor Standby port
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
## [1.7.1](https://github.com/apify/apify-sdk-python/releases/tag/v1.7.1) (2024-05-23)
|
|
199
|
-
|
|
200
|
-
### 🐛 Bug Fixes
|
|
201
|
-
|
|
202
|
-
- Set a timeout for Actor cleanup
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
## [1.7.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.7.0) (2024-03-12)
|
|
206
|
-
|
|
207
|
-
### 🚀 Features
|
|
208
|
-
|
|
209
|
-
- Add a new way of generating the `uniqueKey` field of the request, aligning it with the Crawlee.
|
|
210
|
-
|
|
211
|
-
### 🐛 Bug Fixes
|
|
212
|
-
|
|
213
|
-
- Improve error handling for `to_apify_request` serialization failures
|
|
214
|
-
- Scrapy's `Request.dont_filter` works.
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
## [1.6.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.6.0) (2024-02-23)
|
|
218
|
-
|
|
219
|
-
### 🐛 Bug Fixes
|
|
220
|
-
|
|
221
|
-
- Update of Scrapy integration, fixes in `ApifyScheduler`, `to_apify_request` and `apply_apify_settings`.
|
|
222
|
-
|
|
223
|
-
### Chore
|
|
224
|
-
|
|
225
|
-
- Remove `ApifyRetryMiddleware` and stay with the Scrapy's default one
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
## [1.5.5](https://github.com/apify/apify-sdk-python/releases/tag/v1.5.5) (2024-02-01)
|
|
229
|
-
|
|
230
|
-
### 🐛 Bug Fixes
|
|
231
|
-
|
|
232
|
-
- Fix conversion of `headers` fields in Apify <--> Scrapy request translation
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
## [1.5.4](https://github.com/apify/apify-sdk-python/releases/tag/v1.5.4) (2024-01-24)
|
|
236
|
-
|
|
237
|
-
### 🐛 Bug Fixes
|
|
238
|
-
|
|
239
|
-
- Fix conversion of `userData` and `headers` fields in Apify <--> Scrapy request translation
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
## [1.5.3](https://github.com/apify/apify-sdk-python/releases/tag/v1.5.3) (2024-01-23)
|
|
243
|
-
|
|
244
165
|
### 🚀 Features
|
|
245
166
|
|
|
246
|
-
- Add
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
## [1.5.2](https://github.com/apify/apify-sdk-python/releases/tag/v1.5.2) (2024-01-19)
|
|
250
|
-
|
|
251
|
-
### 🐛 Bug Fixes
|
|
252
|
-
|
|
253
|
-
- Add missing import check to `ApifyHttpProxyMiddleware`
|
|
254
|
-
|
|
255
|
-
### Chore
|
|
256
|
-
|
|
257
|
-
- Create a new subpackage for Scrapy pipelines
|
|
258
|
-
- Remove some noqas thanks to the new Ruff release
|
|
259
|
-
- Replace relative imports with absolute imports
|
|
260
|
-
- Replace asserts with custom checks in Scrapy subpackage
|
|
261
|
-
|
|
167
|
+
- Add actor standby port ([#220](https://github.com/apify/apify-sdk-python/pull/220)) ([6d0d87d](https://github.com/apify/apify-sdk-python/commit/6d0d87dcaedaf42d8eeb7d23c56f6b102434cbcb)) by [@jirimoravcik](https://github.com/jirimoravcik)
|
|
262
168
|
|
|
263
|
-
## [1.5.1](https://github.com/apify/apify-sdk-python/releases/tag/v1.5.1) (2024-01-10)
|
|
264
169
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
- Allowed running integration tests from PRs from forks, after maintainer approval
|
|
268
|
-
- Do not close `nested_event_loop` in the `Scheduler.__del__`
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
## [1.5.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.5.0) (2024-01-03)
|
|
272
|
-
|
|
273
|
-
### 🚀 Features
|
|
274
|
-
|
|
275
|
-
- Add `ApifyHttpProxyMiddleware`
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
## [1.4.1](https://github.com/apify/apify-sdk-python/releases/tag/v1.4.1) (2023-12-21)
|
|
279
|
-
|
|
280
|
-
### 🐛 Bug Fixes
|
|
281
|
-
|
|
282
|
-
- Resolve issue in `ApifyRetryMiddleware.process_exception()`, where requests were getting stuck in the request queue
|
|
283
|
-
|
|
284
|
-
### Chore
|
|
285
|
-
|
|
286
|
-
- Fix type hint problems for resource clients
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
## [1.4.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.4.0) (2023-12-05)
|
|
290
|
-
|
|
291
|
-
### Chore
|
|
292
|
-
|
|
293
|
-
- Migrate from Autopep8 and Flake8 to Ruff
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
## [1.3.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.3.0) (2023-11-15)
|
|
297
|
-
|
|
298
|
-
### 🚀 Features
|
|
299
|
-
|
|
300
|
-
- Add `scrapy` extra
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
## [1.2.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.2.0) (2023-10-23)
|
|
304
|
-
|
|
305
|
-
### 🚀 Features
|
|
306
|
-
|
|
307
|
-
- Add support for Python 3.12
|
|
308
|
-
|
|
309
|
-
### Chore
|
|
310
|
-
|
|
311
|
-
- Fix lint error (E721) in unit tests (for instance checks use `isinstance()`)
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
## [1.1.5](https://github.com/apify/apify-sdk-python/releases/tag/v1.1.5) (2023-10-03)
|
|
315
|
-
|
|
316
|
-
### 🚀 Features
|
|
317
|
-
|
|
318
|
-
- Update the Apify log formatter to contain an option for adding the logger name
|
|
319
|
-
|
|
320
|
-
### Chore
|
|
321
|
-
|
|
322
|
-
- Rewrite documentation publication to use Docusaurus
|
|
323
|
-
- Remove PR Toolkit workflow
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
## [1.1.4](https://github.com/apify/apify-sdk-python/releases/tag/v1.1.4) (2023-09-06)
|
|
170
|
+
## [1.7.1](https://github.com/apify/apify-sdk-python/releases/tag/v1.7.1) (2024-05-23)
|
|
327
171
|
|
|
328
172
|
### 🐛 Bug Fixes
|
|
329
173
|
|
|
330
|
-
-
|
|
331
|
-
|
|
332
|
-
### Chore
|
|
333
|
-
|
|
334
|
-
- Fix integration tests for Actor logger
|
|
335
|
-
- Remove `pytest-randomly` Pytest plugin
|
|
336
|
-
- Unpin `apify-client` and `apify-shared` to improve compatibility with their newer versions
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
## [1.1.3](https://github.com/apify/apify-sdk-python/releases/tag/v1.1.3) (2023-08-25)
|
|
340
|
-
|
|
341
|
-
### Chore
|
|
342
|
-
|
|
343
|
-
- Unify indentation in configuration files
|
|
344
|
-
- Update the `Actor.reboot` method to use the new reboot endpoint
|
|
174
|
+
- Set a timeout for Actor cleanup ([#206](https://github.com/apify/apify-sdk-python/pull/206)) ([cfed57d](https://github.com/apify/apify-sdk-python/commit/cfed57d6cff4fd15fe4b25578573190d53b9942c)) by [@janbuchar](https://github.com/janbuchar), closes [#200](https://github.com/apify/apify-sdk-python/issues/200)
|
|
345
175
|
|
|
346
176
|
|
|
347
177
|
## [1.1.2](https://github.com/apify/apify-sdk-python/releases/tag/v1.1.2) (2023-08-02)
|
|
348
178
|
|
|
349
|
-
###
|
|
350
|
-
|
|
351
|
-
- Start importing general constants and utilities from the `apify-shared` library
|
|
352
|
-
- Simplify code via `flake8-simplify`
|
|
353
|
-
- Start using environment variables with prefix `ACTOR_` instead of some with prefix `APIFY_`
|
|
354
|
-
- Pin `apify-client` and `apify-shared` to prevent their implicit updates from breaking SDK
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
## [1.1.1](https://github.com/apify/apify-sdk-python/releases/tag/v1.1.1) (2023-05-23)
|
|
358
|
-
|
|
359
|
-
### 🐛 Bug Fixes
|
|
179
|
+
### 🚀 Features
|
|
360
180
|
|
|
361
|
-
-
|
|
181
|
+
- Use Actor env vars ([#105](https://github.com/apify/apify-sdk-python/pull/105)) ([f0ba351](https://github.com/apify/apify-sdk-python/commit/f0ba35103eb9efbf39ea394d390430c849bf127c)) by [@jirimoravcik](https://github.com/jirimoravcik)
|
|
362
182
|
|
|
363
183
|
|
|
364
184
|
## [1.1.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.1.0) (2023-05-23)
|
|
365
185
|
|
|
366
186
|
### 🚀 Features
|
|
367
187
|
|
|
368
|
-
-
|
|
369
|
-
- Add support for `is_terminal` flag in status message update
|
|
370
|
-
- Add option to set status message along with `Actor.exit()`
|
|
371
|
-
|
|
372
|
-
### 🐛 Bug Fixes
|
|
373
|
-
|
|
374
|
-
- Start enforcing local storage to always use the UTF-8 encoding
|
|
375
|
-
- Fix saving key-value store values to local storage with the right extension for a given content type
|
|
376
|
-
|
|
377
|
-
### Chore
|
|
378
|
-
|
|
379
|
-
- Switch from `setup.py` to `pyproject.toml` for specifying project setup
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
## [1.0.0](https://github.com/apify/apify-sdk-python/releases/tag/v1.0.0) (2023-03-13)
|
|
383
|
-
|
|
384
|
-
### 🐛 Bug Fixes
|
|
385
|
-
|
|
386
|
-
- Fix `RequestQueue` not loading requests from an existing queue properly
|
|
387
|
-
|
|
388
|
-
### Chore
|
|
389
|
-
|
|
390
|
-
- Update to `apify-client` 1.0.0
|
|
391
|
-
- Start triggering base Docker image builds when releasing a new version
|
|
188
|
+
- Use test user token from organisation secrets ([#90](https://github.com/apify/apify-sdk-python/pull/90)) ([7826a38](https://github.com/apify/apify-sdk-python/commit/7826a382d7a3c0a1531b3a7bb73369e2801e6fa0)) by [@drobnikj](https://github.com/drobnikj)
|
|
392
189
|
|
|
393
190
|
|
|
394
191
|
## [0.2.0](https://github.com/apify/apify-sdk-python/releases/tag/v0.2.0) (2023-03-06)
|
|
@@ -4,7 +4,7 @@ Here you'll find a contributing guide to get started with development.
|
|
|
4
4
|
|
|
5
5
|
## Environment
|
|
6
6
|
|
|
7
|
-
For local development, it is required to have Python 3.
|
|
7
|
+
For local development, it is required to have Python 3.9 (or a later version) installed.
|
|
8
8
|
|
|
9
9
|
We use [uv](https://docs.astral.sh/uv/) for project management. Install it and set up your IDE accordingly.
|
|
10
10
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apify
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.3
|
|
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
|
|
@@ -219,12 +219,13 @@ Classifier: Environment :: Console
|
|
|
219
219
|
Classifier: Intended Audience :: Developers
|
|
220
220
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
221
221
|
Classifier: Operating System :: OS Independent
|
|
222
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
222
223
|
Classifier: Programming Language :: Python :: 3.10
|
|
223
224
|
Classifier: Programming Language :: Python :: 3.11
|
|
224
225
|
Classifier: Programming Language :: Python :: 3.12
|
|
225
226
|
Classifier: Programming Language :: Python :: 3.13
|
|
226
227
|
Classifier: Topic :: Software Development :: Libraries
|
|
227
|
-
Requires-Python: >=3.
|
|
228
|
+
Requires-Python: >=3.9
|
|
228
229
|
Requires-Dist: apify-client<2.0.0
|
|
229
230
|
Requires-Dist: apify-shared<2.0.0
|
|
230
231
|
Requires-Dist: crawlee~=0.6.0
|
|
@@ -11,7 +11,7 @@ In this page, you'll learn how to create and run Apify Actors locally on your co
|
|
|
11
11
|
|
|
12
12
|
## Requirements
|
|
13
13
|
|
|
14
|
-
The Apify SDK requires Python version 3.
|
|
14
|
+
The Apify SDK requires Python version 3.9 or above to run Python Actors locally.
|
|
15
15
|
|
|
16
16
|
## Creating your first Actor
|
|
17
17
|
|
|
@@ -7,8 +7,6 @@ import CodeBlock from '@theme/CodeBlock';
|
|
|
7
7
|
|
|
8
8
|
import LogConfigExample from '!!raw-loader!./code/10_log_config.py';
|
|
9
9
|
import LoggerUsageExample from '!!raw-loader!./code/10_logger_usage.py';
|
|
10
|
-
import RedirectLog from '!!raw-loader!./code/10_redirect_log.py';
|
|
11
|
-
import RedirectLogExistingRun from '!!raw-loader!./code/10_redirect_log_existing_run.py';
|
|
12
10
|
|
|
13
11
|
The Apify SDK is logging useful information through the [`logging`](https://docs.python.org/3/library/logging.html) module from Python's standard library, into the logger with the name `apify`.
|
|
14
12
|
|
|
@@ -84,31 +82,3 @@ Result:
|
|
|
84
82
|
</pre>
|
|
85
83
|
|
|
86
84
|
<!-- markdownlint-enable no-inline-html -->
|
|
87
|
-
|
|
88
|
-
## Redirect logs from other Actor runs
|
|
89
|
-
|
|
90
|
-
In some situations, one Actor is going to start one or more other Actors and wait for them to finish and produce some results. In such cases, you might want to redirect the logs and status messages of the started Actors runs back to the parent Actor run, so that you can see the progress of the started Actors' runs in the parent Actor's logs. This guide will show possibilities on how to do it.
|
|
91
|
-
|
|
92
|
-
### Redirecting logs from Actor.call
|
|
93
|
-
|
|
94
|
-
Typical use case for log redirection is to call another Actor using the [`Actor.call`](../../reference/class/Actor#call) method. This method has an optional `logger` argument, which is by default set to the `default` literal. This means that the logs of the called Actor will be automatically redirected to the parent Actor's logs with default formatting and filtering. If you set the `logger` argument to `None`, then no log redirection happens. The third option is to pass your own `Logger` instance with the possibility to define your own formatter, filter, and handler. Below you can see those three possible ways of log redirection when starting another Actor run through [`Actor.call`](../../reference/class/Actor#call).
|
|
95
|
-
|
|
96
|
-
<CodeBlock className="language-python">
|
|
97
|
-
{RedirectLog}
|
|
98
|
-
</CodeBlock>
|
|
99
|
-
|
|
100
|
-
Each default redirect logger log entry will have a specific format. After the timestamp, it will contain cyan colored text that will contain the redirect information - the other actor's name and the run ID. The rest of the log message will be printed in the same manner as the parent Actor's logger is configured.
|
|
101
|
-
|
|
102
|
-
The log redirection can be deep, meaning that if the other actor also starts another actor and is redirecting logs from it, then in the top-level Actor, you can see it as well. See the following example screenshot of the Apify log console when one actor recursively starts itself (there are 2 levels of recursion in the example).
|
|
103
|
-
|
|
104
|
-

|
|
105
|
-
|
|
106
|
-
### Redirecting logs from already running Actor run
|
|
107
|
-
|
|
108
|
-
In some cases, you might want to connect to an already running Actor run and redirect its logs to your current Actor run. This can be done using the [ApifyClient](../../reference/class/Actor#apify_client) and getting the streamed log from a specific Actor run. You can then use it as a context manager, and the log redirection will be active in the context, or you can control the log redirection manually by explicitly calling `start` and `stop` methods.
|
|
109
|
-
|
|
110
|
-
You can further decide whether you want to redirect just new logs of the ongoing Actor run, or if you also want to redirect historical logs from that Actor's run, so all logs it has produced since it was started. Both options are shown in the example code below.
|
|
111
|
-
|
|
112
|
-
<CodeBlock className="language-python">
|
|
113
|
-
{RedirectLogExistingRun}
|
|
114
|
-
</CodeBlock>
|
|
@@ -4,18 +4,19 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "apify"
|
|
7
|
-
version = "2.7.
|
|
7
|
+
version = "2.7.3"
|
|
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" }
|
|
11
11
|
readme = "README.md"
|
|
12
|
-
requires-python = ">=3.
|
|
12
|
+
requires-python = ">=3.9"
|
|
13
13
|
classifiers = [
|
|
14
14
|
"Development Status :: 5 - Production/Stable",
|
|
15
15
|
"Environment :: Console",
|
|
16
16
|
"Intended Audience :: Developers",
|
|
17
17
|
"License :: OSI Approved :: Apache Software License",
|
|
18
18
|
"Operating System :: OS Independent",
|
|
19
|
+
"Programming Language :: Python :: 3.9",
|
|
19
20
|
"Programming Language :: Python :: 3.10",
|
|
20
21
|
"Programming Language :: Python :: 3.11",
|
|
21
22
|
"Programming Language :: Python :: 3.12",
|
|
@@ -62,14 +63,13 @@ scrapy = ["scrapy>=2.11.0"]
|
|
|
62
63
|
|
|
63
64
|
[dependency-groups]
|
|
64
65
|
dev = [
|
|
65
|
-
"build~=1.
|
|
66
|
-
"crawlee[parsel]",
|
|
66
|
+
"build~=1.2.0",
|
|
67
67
|
"dycw-pytest-only>=2.1.1",
|
|
68
|
-
"griffe~=1.
|
|
69
|
-
"mypy~=1.
|
|
68
|
+
"griffe~=1.7.0",
|
|
69
|
+
"mypy~=1.16.0",
|
|
70
70
|
"pre-commit~=4.2.0",
|
|
71
71
|
"pydoc-markdown~=4.8.0",
|
|
72
|
-
"pytest-asyncio~=1.
|
|
72
|
+
"pytest-asyncio~=1.0.0",
|
|
73
73
|
"pytest-cov~=6.2.0",
|
|
74
74
|
"pytest-timeout>=2.4.0",
|
|
75
75
|
"pytest-xdist~=3.8.0",
|
|
@@ -77,7 +77,6 @@ dev = [
|
|
|
77
77
|
"respx~=0.22.0",
|
|
78
78
|
"ruff~=0.12.0",
|
|
79
79
|
"setuptools", # setuptools are used by pytest but not explicitly required
|
|
80
|
-
"uvicorn[standard]",
|
|
81
80
|
]
|
|
82
81
|
|
|
83
82
|
[tool.hatch.build.targets.wheel]
|
|
@@ -189,7 +188,7 @@ asyncio_mode = "auto"
|
|
|
189
188
|
timeout = 1200
|
|
190
189
|
|
|
191
190
|
[tool.mypy]
|
|
192
|
-
python_version = "3.
|
|
191
|
+
python_version = "3.9"
|
|
193
192
|
plugins = ["pydantic.mypy"]
|
|
194
193
|
files = ["src", "tests", "docs", "website"]
|
|
195
194
|
check_untyped_defs = true
|
|
@@ -216,7 +215,7 @@ module = [
|
|
|
216
215
|
ignore_missing_imports = true
|
|
217
216
|
|
|
218
217
|
[tool.basedpyright]
|
|
219
|
-
pythonVersion = "3.
|
|
218
|
+
pythonVersion = "3.9"
|
|
220
219
|
typeCheckingMode = "standard"
|
|
221
220
|
include = ["src", "tests", "docs", "website"]
|
|
222
221
|
|
|
@@ -5,7 +5,7 @@ import os
|
|
|
5
5
|
import sys
|
|
6
6
|
from contextlib import suppress
|
|
7
7
|
from datetime import datetime, timedelta, timezone
|
|
8
|
-
from typing import TYPE_CHECKING, Any, Literal, TypeVar, cast, overload
|
|
8
|
+
from typing import TYPE_CHECKING, Any, Callable, Literal, TypeVar, cast, overload
|
|
9
9
|
|
|
10
10
|
from lazy_object_proxy import Proxy
|
|
11
11
|
from more_itertools import flatten
|
|
@@ -13,7 +13,7 @@ from pydantic import AliasChoices
|
|
|
13
13
|
|
|
14
14
|
from apify_client import ApifyClientAsync
|
|
15
15
|
from apify_shared.consts import ActorEnvVars, ActorExitCodes, ApifyEnvVars
|
|
16
|
-
from apify_shared.utils import maybe_extract_enum_member_value
|
|
16
|
+
from apify_shared.utils import ignore_docs, maybe_extract_enum_member_value
|
|
17
17
|
from crawlee import service_locator
|
|
18
18
|
from crawlee.events import (
|
|
19
19
|
Event,
|
|
@@ -39,7 +39,6 @@ from apify.storages import Dataset, KeyValueStore, RequestQueue
|
|
|
39
39
|
|
|
40
40
|
if TYPE_CHECKING:
|
|
41
41
|
import logging
|
|
42
|
-
from collections.abc import Callable
|
|
43
42
|
from types import TracebackType
|
|
44
43
|
|
|
45
44
|
from typing_extensions import Self
|
|
@@ -54,46 +53,9 @@ MainReturnType = TypeVar('MainReturnType')
|
|
|
54
53
|
|
|
55
54
|
|
|
56
55
|
@docs_name('Actor')
|
|
57
|
-
@docs_group('
|
|
56
|
+
@docs_group('Classes')
|
|
58
57
|
class _ActorType:
|
|
59
|
-
"""The
|
|
60
|
-
|
|
61
|
-
Actors are serverless programs running in the cloud that can perform anything from simple actions
|
|
62
|
-
(such as filling out a web form or sending an email) to complex operations (such as crawling an
|
|
63
|
-
entire website or removing duplicates from a large dataset). They are packaged as Docker containers
|
|
64
|
-
which accept well-defined JSON input, perform an action, and optionally produce well-defined output.
|
|
65
|
-
|
|
66
|
-
### References
|
|
67
|
-
|
|
68
|
-
- Apify platform documentation: https://docs.apify.com/platform/actors
|
|
69
|
-
- Actor whitepaper: https://whitepaper.actor/
|
|
70
|
-
|
|
71
|
-
### Usage
|
|
72
|
-
|
|
73
|
-
```python
|
|
74
|
-
import asyncio
|
|
75
|
-
|
|
76
|
-
import httpx
|
|
77
|
-
from apify import Actor
|
|
78
|
-
from bs4 import BeautifulSoup
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
async def main() -> None:
|
|
82
|
-
async with Actor:
|
|
83
|
-
actor_input = await Actor.get_input()
|
|
84
|
-
async with httpx.AsyncClient() as client:
|
|
85
|
-
response = await client.get(actor_input['url'])
|
|
86
|
-
soup = BeautifulSoup(response.content, 'html.parser')
|
|
87
|
-
data = {
|
|
88
|
-
'url': actor_input['url'],
|
|
89
|
-
'title': soup.title.string if soup.title else None,
|
|
90
|
-
}
|
|
91
|
-
await Actor.push_data(data)
|
|
92
|
-
|
|
93
|
-
if __name__ == '__main__':
|
|
94
|
-
asyncio.run(main())
|
|
95
|
-
```
|
|
96
|
-
"""
|
|
58
|
+
"""The class of `Actor`. Only make a new instance if you're absolutely sure you need to."""
|
|
97
59
|
|
|
98
60
|
_is_rebooting = False
|
|
99
61
|
_is_any_instance_initialized = False
|
|
@@ -145,6 +107,7 @@ class _ActorType:
|
|
|
145
107
|
|
|
146
108
|
self._is_initialized = False
|
|
147
109
|
|
|
110
|
+
@ignore_docs
|
|
148
111
|
async def __aenter__(self) -> Self:
|
|
149
112
|
"""Initialize the Actor.
|
|
150
113
|
|
|
@@ -156,6 +119,7 @@ class _ActorType:
|
|
|
156
119
|
await self.init()
|
|
157
120
|
return self
|
|
158
121
|
|
|
122
|
+
@ignore_docs
|
|
159
123
|
async def __aexit__(
|
|
160
124
|
self,
|
|
161
125
|
_exc_type: type[BaseException] | None,
|