apify 3.0.4b3__tar.gz → 3.0.4b4__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-3.0.4b3 → apify-3.0.4b4}/PKG-INFO +1 -1
- {apify-3.0.4b3 → apify-3.0.4b4}/pyproject.toml +1 -1
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/_actor.py +1 -7
- apify-3.0.4b4/tests/unit/actor/test_actor_log.py +107 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/uv.lock +1 -1
- apify-3.0.4b3/tests/unit/actor/test_actor_log.py +0 -112
- {apify-3.0.4b3 → apify-3.0.4b4}/.editorconfig +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/.github/CODEOWNERS +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/.github/workflows/build_and_deploy_docs.yaml +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/.github/workflows/check_pr_title.yaml +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/.github/workflows/pre_release.yaml +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/.github/workflows/release.yaml +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/.github/workflows/run_code_checks.yaml +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/.github/workflows/update_new_issue.yaml +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/.gitignore +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/.markdownlint.yaml +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/.pre-commit-config.yaml +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/CHANGELOG.md +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/CONTRIBUTING.md +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/LICENSE +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/Makefile +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/README.md +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/01_overview/01_introduction.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/01_overview/02_running_actors_locally.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/01_overview/03_actor_structure.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/01_overview/code/01_introduction.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/01_overview/code/actor_structure/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/01_overview/code/actor_structure/__main__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/01_overview/code/actor_structure/main.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/01_overview/code/actor_structure/py.typed +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/01_actor_lifecycle.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/02_actor_input.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/03_storages.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/04_actor_events.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/05_proxy_management.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/06_interacting_with_other_actors.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/07_webhooks.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/08_access_apify_api.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/09_running_webserver.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/10_logging.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/11_configuration.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/12_pay_per_event.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/01_class_context.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/01_class_manual.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/01_context_manager.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/01_error_handling_context.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/01_error_handling_manual.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/01_init_exit.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/01_instance_context.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/01_instance_manual.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/01_reboot.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/01_status_message.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/02_input.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/03_dataset_exports.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/03_dataset_read_write.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/03_deleting_storages.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/03_kvs_iterating.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/03_kvs_public_url.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/03_kvs_read_write.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/03_opening_storages.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/03_rq.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/04_actor_events.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/05_apify_proxy.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/05_apify_proxy_config.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/05_custom_proxy.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/05_custom_proxy_function.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/05_proxy_actor_input.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/05_proxy_httpx.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/05_proxy_rotation.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/06_interacting_call.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/06_interacting_call_task.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/06_interacting_metamorph.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/06_interacting_start.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/07_webhook.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/07_webhook_preventing.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/08_actor_client.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/08_actor_new_client.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/09_webserver.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/10_log_config.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/10_logger_usage.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/10_redirect_log.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/10_redirect_log_existing_run.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/11_config.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/actor_charge.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/02_concepts/code/conditional_actor_charge.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/01_beautifulsoup_httpx.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/02_parsel_impit.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/03_playwright.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/04_selenium.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/05_crawlee.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/06_scrapy.mdx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/code/01_beautifulsoup_httpx.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/code/02_parsel_impit.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/code/03_playwright.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/code/04_selenium.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/code/05_crawlee_beautifulsoup.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/code/05_crawlee_parsel.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/code/05_crawlee_playwright.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/code/scrapy_project/src/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/code/scrapy_project/src/__main__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/code/scrapy_project/src/items.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/code/scrapy_project/src/main.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/code/scrapy_project/src/py.typed +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/code/scrapy_project/src/settings.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/code/scrapy_project/src/spiders/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/code/scrapy_project/src/spiders/py.typed +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/03_guides/code/scrapy_project/src/spiders/title.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/04_upgrading/upgrading_to_v2.md +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/04_upgrading/upgrading_to_v3.md +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/docs/pyproject.toml +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/renovate.json +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/_charging.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/_configuration.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/_consts.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/_crypto.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/_models.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/_proxy_configuration.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/_utils.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/events/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/events/_apify_event_manager.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/events/_types.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/events/py.typed +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/log.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/py.typed +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/request_loaders/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/request_loaders/_apify_request_list.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/request_loaders/py.typed +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/scrapy/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/scrapy/_actor_runner.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/scrapy/_async_thread.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/scrapy/_logging_config.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/scrapy/extensions/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/scrapy/extensions/_httpcache.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/scrapy/middlewares/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/scrapy/middlewares/apify_proxy.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/scrapy/middlewares/py.typed +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/scrapy/pipelines/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/scrapy/pipelines/actor_dataset_push.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/scrapy/pipelines/py.typed +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/scrapy/py.typed +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/scrapy/requests.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/scrapy/scheduler.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/scrapy/utils.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storage_clients/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storage_clients/_apify/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storage_clients/_apify/_dataset_client.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storage_clients/_apify/_key_value_store_client.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storage_clients/_apify/_models.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storage_clients/_apify/_request_queue_client.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storage_clients/_apify/_request_queue_shared_client.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storage_clients/_apify/_request_queue_single_client.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storage_clients/_apify/_storage_client.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storage_clients/_apify/_utils.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storage_clients/_apify/py.typed +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storage_clients/_file_system/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storage_clients/_file_system/_key_value_store_client.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storage_clients/_file_system/_storage_client.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storage_clients/_smart_apify/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storage_clients/_smart_apify/_storage_client.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storage_clients/py.typed +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storages/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/src/apify/storages/py.typed +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/README.md +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/_utils.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/actor_source_base/Dockerfile +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/actor_source_base/requirements.txt +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/actor_source_base/server.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/actor_source_base/src/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/actor_source_base/src/__main__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/actor_source_base/src/main.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/conftest.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/test_actor_api_helpers.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/test_actor_call_timeouts.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/test_actor_charge.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/test_actor_create_proxy_configuration.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/test_actor_dataset.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/test_actor_events.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/test_actor_key_value_store.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/test_actor_lifecycle.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/test_actor_log.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/test_actor_request_queue.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/test_actor_scrapy.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/test_apify_storages.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/test_crawlers_with_storages.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/actor/test_fixtures.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/apify_api/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/apify_api/conftest.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/apify_api/test_apify_storages.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/apify_api/test_request_queue.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/integration/conftest.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/actor/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/actor/test_actor_create_proxy_configuration.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/actor/test_actor_dataset.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/actor/test_actor_env_helpers.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/actor/test_actor_helpers.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/actor/test_actor_key_value_store.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/actor/test_actor_lifecycle.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/actor/test_actor_non_default_instance.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/actor/test_actor_request_queue.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/actor/test_configuration.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/actor/test_request_list.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/conftest.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/events/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/events/test_apify_event_manager.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/scrapy/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/scrapy/extensions/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/scrapy/extensions/test_httpcache.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/scrapy/middlewares/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/scrapy/middlewares/test_apify_proxy.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/scrapy/pipelines/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/scrapy/pipelines/test_actor_dataset_push.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/scrapy/requests/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/scrapy/requests/test_to_apify_request.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/scrapy/requests/test_to_scrapy_request.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/scrapy/utils/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/scrapy/utils/test_apply_apify_settings.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/scrapy/utils/test_get_basic_auth_header.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/storage_clients/__init__.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/storage_clients/test_apify_request_queue_client.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/storage_clients/test_file_system.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/test_apify_storages.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/test_crypto.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/tests/unit/test_proxy_configuration.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/.eslintrc.json +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/babel.config.js +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/build_api_reference.sh +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/docusaurus.config.js +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/generate_module_shortcuts.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/package-lock.json +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/package.json +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/sidebars.js +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/src/components/ApiLink.jsx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/src/components/Gradients.jsx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/src/components/Highlights.jsx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/src/components/Highlights.module.css +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/src/components/RunnableCodeBlock.jsx +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/src/components/RunnableCodeBlock.module.css +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/src/css/custom.css +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/src/pages/home_page_example.py +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/src/pages/index.js +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/src/pages/index.module.css +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/src/theme/DocItem/Content/index.js +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/static/.nojekyll +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/static/img/docs-og.png +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/static/img/guides/redirected_logs_example.webp +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/tools/docs-prettier.config.js +0 -0
- {apify-3.0.4b3 → apify-3.0.4b4}/website/tools/utils/externalLink.js +0 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
|
-
import os
|
|
5
4
|
import sys
|
|
6
5
|
from contextlib import suppress
|
|
7
6
|
from datetime import datetime, timedelta, timezone
|
|
@@ -1288,16 +1287,11 @@ class _ActorType:
|
|
|
1288
1287
|
raise RuntimeError('The Actor was not initialized!')
|
|
1289
1288
|
|
|
1290
1289
|
def _get_default_exit_process(self) -> bool:
|
|
1291
|
-
"""Return False for IPython
|
|
1290
|
+
"""Return False for IPython and Scrapy environments, True otherwise."""
|
|
1292
1291
|
if is_running_in_ipython():
|
|
1293
1292
|
self.log.debug('Running in IPython, setting default `exit_process` to False.')
|
|
1294
1293
|
return False
|
|
1295
1294
|
|
|
1296
|
-
# Check if running in Pytest by detecting the relevant environment variable.
|
|
1297
|
-
if os.getenv('PYTEST_CURRENT_TEST'):
|
|
1298
|
-
self.log.debug('Running in Pytest, setting default `exit_process` to False.')
|
|
1299
|
-
return False
|
|
1300
|
-
|
|
1301
1295
|
# Check if running in Scrapy by attempting to import it.
|
|
1302
1296
|
with suppress(ImportError):
|
|
1303
1297
|
import scrapy # noqa: F401 PLC0415
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import contextlib
|
|
4
|
+
import logging
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
|
|
7
|
+
from apify import Actor
|
|
8
|
+
from apify.log import logger
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
import pytest
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
async def test_actor_logs_messages_correctly(caplog: pytest.LogCaptureFixture) -> None:
|
|
15
|
+
caplog.set_level(logging.DEBUG, logger='apify')
|
|
16
|
+
|
|
17
|
+
with contextlib.suppress(RuntimeError):
|
|
18
|
+
async with Actor(configure_logging=False, exit_process=False):
|
|
19
|
+
# Test Actor.log
|
|
20
|
+
Actor.log.debug('Debug message')
|
|
21
|
+
Actor.log.info('Info message')
|
|
22
|
+
|
|
23
|
+
# Test logger
|
|
24
|
+
logger.warning('Warning message')
|
|
25
|
+
logger.error('Error message')
|
|
26
|
+
|
|
27
|
+
# Test that exception is logged with the traceback
|
|
28
|
+
try:
|
|
29
|
+
raise ValueError('Dummy ValueError')
|
|
30
|
+
except Exception:
|
|
31
|
+
Actor.log.exception('Exception message')
|
|
32
|
+
|
|
33
|
+
# Test multiline message being indented correctly
|
|
34
|
+
logger.info('Multi\nline\nlog\nmessage')
|
|
35
|
+
|
|
36
|
+
# Test that exception in Actor.main is logged with the traceback
|
|
37
|
+
raise RuntimeError('Dummy RuntimeError')
|
|
38
|
+
|
|
39
|
+
# We skip the first entry, as it is related to the initialization of `lazy_object_proxy.Proxy` for `Actor`.
|
|
40
|
+
records = caplog.records[1:]
|
|
41
|
+
|
|
42
|
+
# Updated expected number of log records (additional debug messages added)
|
|
43
|
+
assert len(records) == 14
|
|
44
|
+
|
|
45
|
+
# Record 0: Logging configured
|
|
46
|
+
assert records[0].levelno == logging.DEBUG
|
|
47
|
+
assert records[0].message == 'Logging configured'
|
|
48
|
+
|
|
49
|
+
# Record 1: Initializing Actor
|
|
50
|
+
assert records[1].levelno == logging.INFO
|
|
51
|
+
assert records[1].message == 'Initializing Actor'
|
|
52
|
+
|
|
53
|
+
# Record 2: Configuration initialized
|
|
54
|
+
assert records[2].levelno == logging.DEBUG
|
|
55
|
+
assert records[2].message == 'Configuration initialized'
|
|
56
|
+
|
|
57
|
+
# Record 3: Storage client initialized
|
|
58
|
+
assert records[3].levelno == logging.DEBUG
|
|
59
|
+
assert records[3].message == 'Storage client initialized'
|
|
60
|
+
|
|
61
|
+
# Record 4: Event manager initialized
|
|
62
|
+
assert records[4].levelno == logging.DEBUG
|
|
63
|
+
assert records[4].message == 'Event manager initialized'
|
|
64
|
+
|
|
65
|
+
# Record 5: Charging manager initialized
|
|
66
|
+
assert records[5].levelno == logging.DEBUG
|
|
67
|
+
assert records[5].message == 'Charging manager initialized'
|
|
68
|
+
|
|
69
|
+
# Record 6: Debug message
|
|
70
|
+
assert records[6].levelno == logging.DEBUG
|
|
71
|
+
assert records[6].message == 'Debug message'
|
|
72
|
+
|
|
73
|
+
# Record 7: Info message
|
|
74
|
+
assert records[7].levelno == logging.INFO
|
|
75
|
+
assert records[7].message == 'Info message'
|
|
76
|
+
|
|
77
|
+
# Record 8: Warning message
|
|
78
|
+
assert records[8].levelno == logging.WARNING
|
|
79
|
+
assert records[8].message == 'Warning message'
|
|
80
|
+
|
|
81
|
+
# Record 9: Error message
|
|
82
|
+
assert records[9].levelno == logging.ERROR
|
|
83
|
+
assert records[9].message == 'Error message'
|
|
84
|
+
|
|
85
|
+
# Record 10: Exception message with traceback (ValueError)
|
|
86
|
+
assert records[10].levelno == logging.ERROR
|
|
87
|
+
assert records[10].message == 'Exception message'
|
|
88
|
+
assert records[10].exc_info is not None
|
|
89
|
+
assert records[10].exc_info[0] is ValueError
|
|
90
|
+
assert isinstance(records[10].exc_info[1], ValueError)
|
|
91
|
+
assert str(records[10].exc_info[1]) == 'Dummy ValueError'
|
|
92
|
+
|
|
93
|
+
# Record 11: Multiline log message
|
|
94
|
+
assert records[11].levelno == logging.INFO
|
|
95
|
+
assert records[11].message == 'Multi\nline\nlog\nmessage'
|
|
96
|
+
|
|
97
|
+
# Record 12: Actor failed with an exception (RuntimeError)
|
|
98
|
+
assert records[12].levelno == logging.ERROR
|
|
99
|
+
assert records[12].message == 'Actor failed with an exception'
|
|
100
|
+
assert records[12].exc_info is not None
|
|
101
|
+
assert records[12].exc_info[0] is RuntimeError
|
|
102
|
+
assert isinstance(records[12].exc_info[1], RuntimeError)
|
|
103
|
+
assert str(records[12].exc_info[1]) == 'Dummy RuntimeError'
|
|
104
|
+
|
|
105
|
+
# Record 13: Exiting Actor
|
|
106
|
+
assert records[13].levelno == logging.INFO
|
|
107
|
+
assert records[13].message == 'Exiting Actor'
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
import contextlib
|
|
4
|
-
import logging
|
|
5
|
-
from typing import TYPE_CHECKING
|
|
6
|
-
|
|
7
|
-
from apify import Actor
|
|
8
|
-
from apify.log import logger
|
|
9
|
-
|
|
10
|
-
if TYPE_CHECKING:
|
|
11
|
-
import pytest
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
async def test_actor_logs_messages_correctly(caplog: pytest.LogCaptureFixture) -> None:
|
|
15
|
-
caplog.set_level(logging.DEBUG, logger='apify')
|
|
16
|
-
|
|
17
|
-
with contextlib.suppress(RuntimeError):
|
|
18
|
-
async with Actor(configure_logging=False):
|
|
19
|
-
# Test Actor.log
|
|
20
|
-
Actor.log.debug('Debug message')
|
|
21
|
-
Actor.log.info('Info message')
|
|
22
|
-
|
|
23
|
-
# Test logger
|
|
24
|
-
logger.warning('Warning message')
|
|
25
|
-
logger.error('Error message')
|
|
26
|
-
|
|
27
|
-
# Test that exception is logged with the traceback
|
|
28
|
-
try:
|
|
29
|
-
raise ValueError('Dummy ValueError')
|
|
30
|
-
except Exception:
|
|
31
|
-
Actor.log.exception('Exception message')
|
|
32
|
-
|
|
33
|
-
# Test multiline message being indented correctly
|
|
34
|
-
logger.info('Multi\nline\nlog\nmessage')
|
|
35
|
-
|
|
36
|
-
# Test that exception in Actor.main is logged with the traceback
|
|
37
|
-
raise RuntimeError('Dummy RuntimeError')
|
|
38
|
-
|
|
39
|
-
# Updated expected number of log records (additional debug messages added)
|
|
40
|
-
assert len(caplog.records) == 16
|
|
41
|
-
|
|
42
|
-
# Record 0: First Pytest context log
|
|
43
|
-
assert caplog.records[0].levelno == logging.DEBUG
|
|
44
|
-
assert caplog.records[0].message.startswith('Running in Pytest')
|
|
45
|
-
|
|
46
|
-
# Record 1: Duplicate Pytest context log
|
|
47
|
-
assert caplog.records[1].levelno == logging.DEBUG
|
|
48
|
-
assert caplog.records[1].message.startswith('Running in Pytest')
|
|
49
|
-
|
|
50
|
-
# Record 2: Logging configured
|
|
51
|
-
assert caplog.records[2].levelno == logging.DEBUG
|
|
52
|
-
assert caplog.records[2].message == 'Logging configured'
|
|
53
|
-
|
|
54
|
-
# Record 3: Initializing Actor
|
|
55
|
-
assert caplog.records[3].levelno == logging.INFO
|
|
56
|
-
assert caplog.records[3].message == 'Initializing Actor'
|
|
57
|
-
|
|
58
|
-
# Record 4: Configuration initialized
|
|
59
|
-
assert caplog.records[4].levelno == logging.DEBUG
|
|
60
|
-
assert caplog.records[4].message == 'Configuration initialized'
|
|
61
|
-
|
|
62
|
-
# Record 5: Storage client initialized
|
|
63
|
-
assert caplog.records[5].levelno == logging.DEBUG
|
|
64
|
-
assert caplog.records[5].message == 'Storage client initialized'
|
|
65
|
-
|
|
66
|
-
# Record 6: Event manager initialized
|
|
67
|
-
assert caplog.records[6].levelno == logging.DEBUG
|
|
68
|
-
assert caplog.records[6].message == 'Event manager initialized'
|
|
69
|
-
|
|
70
|
-
# Record 7: Charging manager initialized
|
|
71
|
-
assert caplog.records[7].levelno == logging.DEBUG
|
|
72
|
-
assert caplog.records[7].message == 'Charging manager initialized'
|
|
73
|
-
|
|
74
|
-
# Record 8: Debug message
|
|
75
|
-
assert caplog.records[8].levelno == logging.DEBUG
|
|
76
|
-
assert caplog.records[8].message == 'Debug message'
|
|
77
|
-
|
|
78
|
-
# Record 9: Info message
|
|
79
|
-
assert caplog.records[9].levelno == logging.INFO
|
|
80
|
-
assert caplog.records[9].message == 'Info message'
|
|
81
|
-
|
|
82
|
-
# Record 10: Warning message
|
|
83
|
-
assert caplog.records[10].levelno == logging.WARNING
|
|
84
|
-
assert caplog.records[10].message == 'Warning message'
|
|
85
|
-
|
|
86
|
-
# Record 11: Error message
|
|
87
|
-
assert caplog.records[11].levelno == logging.ERROR
|
|
88
|
-
assert caplog.records[11].message == 'Error message'
|
|
89
|
-
|
|
90
|
-
# Record 12: Exception message with traceback (ValueError)
|
|
91
|
-
assert caplog.records[12].levelno == logging.ERROR
|
|
92
|
-
assert caplog.records[12].message == 'Exception message'
|
|
93
|
-
assert caplog.records[12].exc_info is not None
|
|
94
|
-
assert caplog.records[12].exc_info[0] is ValueError
|
|
95
|
-
assert isinstance(caplog.records[12].exc_info[1], ValueError)
|
|
96
|
-
assert str(caplog.records[12].exc_info[1]) == 'Dummy ValueError'
|
|
97
|
-
|
|
98
|
-
# Record 13: Multiline log message
|
|
99
|
-
assert caplog.records[13].levelno == logging.INFO
|
|
100
|
-
assert caplog.records[13].message == 'Multi\nline\nlog\nmessage'
|
|
101
|
-
|
|
102
|
-
# Record 14: Actor failed with an exception (RuntimeError)
|
|
103
|
-
assert caplog.records[14].levelno == logging.ERROR
|
|
104
|
-
assert caplog.records[14].message == 'Actor failed with an exception'
|
|
105
|
-
assert caplog.records[14].exc_info is not None
|
|
106
|
-
assert caplog.records[14].exc_info[0] is RuntimeError
|
|
107
|
-
assert isinstance(caplog.records[14].exc_info[1], RuntimeError)
|
|
108
|
-
assert str(caplog.records[14].exc_info[1]) == 'Dummy RuntimeError'
|
|
109
|
-
|
|
110
|
-
# Record 15: Exiting Actor
|
|
111
|
-
assert caplog.records[15].levelno == logging.INFO
|
|
112
|
-
assert caplog.records[15].message == 'Exiting Actor'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|