apify 2.7.1b14__tar.gz → 2.7.1b15__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.1b14 → apify-2.7.1b15}/CHANGELOG.md +13 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/PKG-INFO +1 -1
- {apify-2.7.1b14 → apify-2.7.1b15}/pyproject.toml +2 -2
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/storage_clients/_file_system/_key_value_store_client.py +22 -1
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/events/test_apify_event_manager.py +1 -1
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/scrapy/extensions/test_httpcache.py +1 -1
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/storage_clients/test_file_system.py +30 -3
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/test_crypto.py +2 -2
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/test_proxy_configuration.py +5 -5
- {apify-2.7.1b14 → apify-2.7.1b15}/uv.lock +24 -24
- {apify-2.7.1b14 → apify-2.7.1b15}/.editorconfig +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/.github/CODEOWNERS +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/.github/workflows/build_and_deploy_docs.yaml +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/.github/workflows/check_pr_title.yaml +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/.github/workflows/pre_release.yaml +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/.github/workflows/release.yaml +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/.github/workflows/run_code_checks.yaml +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/.github/workflows/update_new_issue.yaml +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/.gitignore +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/.markdownlint.yaml +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/.pre-commit-config.yaml +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/CONTRIBUTING.md +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/LICENSE +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/Makefile +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/README.md +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/01_overview/01_introduction.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/01_overview/02_running_actors_locally.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/01_overview/03_actor_structure.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/01_overview/code/01_introduction.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/01_overview/code/actor_structure/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/01_overview/code/actor_structure/__main__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/01_overview/code/actor_structure/main.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/01_overview/code/actor_structure/py.typed +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/01_actor_lifecycle.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/02_actor_input.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/03_storages.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/04_actor_events.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/05_proxy_management.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/06_interacting_with_other_actors.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/07_webhooks.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/08_access_apify_api.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/09_running_webserver.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/10_logging.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/11_configuration.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/12_pay_per_event.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/01_context_manager.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/01_init_exit.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/01_reboot.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/01_status_message.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/02_input.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/03_dataset_exports.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/03_dataset_read_write.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/03_deleting_storages.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/03_kvs_iterating.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/03_kvs_public_url.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/03_kvs_read_write.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/03_opening_storages.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/03_rq.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/04_actor_events.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/05_apify_proxy.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/05_apify_proxy_config.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/05_custom_proxy.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/05_custom_proxy_function.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/05_proxy_actor_input.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/05_proxy_httpx.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/05_proxy_rotation.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/06_interacting_call.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/06_interacting_call_task.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/06_interacting_metamorph.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/06_interacting_start.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/07_webhook.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/07_webhook_preventing.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/08_actor_client.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/08_actor_new_client.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/09_webserver.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/10_log_config.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/10_logger_usage.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/10_redirect_log.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/10_redirect_log_existing_run.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/11_config.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/actor_charge.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/02_concepts/code/conditional_actor_charge.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/01_beautifulsoup_httpx.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/02_parsel_impit.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/03_playwright.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/04_selenium.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/05_crawlee.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/06_scrapy.mdx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/code/01_beautifulsoup_httpx.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/code/02_parsel_impit.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/code/03_playwright.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/code/04_selenium.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/code/05_crawlee_beautifulsoup.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/code/05_crawlee_parsel.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/code/05_crawlee_playwright.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/code/scrapy_project/src/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/code/scrapy_project/src/__main__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/code/scrapy_project/src/items.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/code/scrapy_project/src/main.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/code/scrapy_project/src/py.typed +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/code/scrapy_project/src/settings.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/code/scrapy_project/src/spiders/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/code/scrapy_project/src/spiders/py.typed +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/code/scrapy_project/src/spiders/title.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/04_upgrading/upgrading_to_v2.md +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/04_upgrading/upgrading_to_v3.md +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/docs/pyproject.toml +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/renovate.json +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/_actor.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/_charging.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/_configuration.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/_consts.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/_crypto.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/_models.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/_proxy_configuration.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/_utils.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/events/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/events/_apify_event_manager.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/events/_types.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/events/py.typed +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/log.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/py.typed +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/request_loaders/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/request_loaders/_apify_request_list.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/request_loaders/py.typed +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/scrapy/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/scrapy/_actor_runner.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/scrapy/_async_thread.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/scrapy/_logging_config.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/scrapy/extensions/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/scrapy/extensions/_httpcache.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/scrapy/middlewares/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/scrapy/middlewares/apify_proxy.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/scrapy/middlewares/py.typed +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/scrapy/pipelines/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/scrapy/pipelines/actor_dataset_push.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/scrapy/pipelines/py.typed +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/scrapy/py.typed +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/scrapy/requests.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/scrapy/scheduler.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/scrapy/utils.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/storage_clients/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/storage_clients/_apify/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/storage_clients/_apify/_dataset_client.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/storage_clients/_apify/_key_value_store_client.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/storage_clients/_apify/_models.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/storage_clients/_apify/_request_queue_client.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/storage_clients/_apify/_storage_client.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/storage_clients/_apify/py.typed +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/storage_clients/_file_system/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/storage_clients/_file_system/_storage_client.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/storage_clients/py.typed +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/storages/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/src/apify/storages/py.typed +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/README.md +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/_utils.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/actor_source_base/Dockerfile +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/actor_source_base/requirements.txt +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/actor_source_base/server.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/actor_source_base/src/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/actor_source_base/src/__main__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/actor_source_base/src/main.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/conftest.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/test_actor_api_helpers.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/test_actor_call_timeouts.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/test_actor_charge.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/test_actor_create_proxy_configuration.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/test_actor_dataset.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/test_actor_events.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/test_actor_key_value_store.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/test_actor_lifecycle.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/test_actor_log.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/test_actor_request_queue.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/test_actor_scrapy.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/test_crawlers_with_storages.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/test_fixtures.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/integration/test_request_queue.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/actor/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/actor/test_actor_create_proxy_configuration.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/actor/test_actor_dataset.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/actor/test_actor_env_helpers.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/actor/test_actor_helpers.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/actor/test_actor_key_value_store.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/actor/test_actor_lifecycle.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/actor/test_actor_log.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/actor/test_actor_non_default_instance.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/actor/test_actor_request_queue.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/actor/test_configuration.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/actor/test_request_list.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/conftest.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/events/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/scrapy/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/scrapy/extensions/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/scrapy/middlewares/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/scrapy/middlewares/test_apify_proxy.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/scrapy/pipelines/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/scrapy/pipelines/test_actor_dataset_push.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/scrapy/requests/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/scrapy/requests/test_to_apify_request.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/scrapy/requests/test_to_scrapy_request.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/scrapy/utils/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/scrapy/utils/test_apply_apify_settings.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/scrapy/utils/test_get_basic_auth_header.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/storage_clients/__init__.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/tests/unit/storage_clients/test_apify_request_queue_client.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/.eslintrc.json +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/babel.config.js +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/build_api_reference.sh +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/docusaurus.config.js +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/generate_module_shortcuts.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/package-lock.json +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/package.json +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/sidebars.js +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/src/components/ApiLink.jsx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/src/components/Gradients.jsx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/src/components/Highlights.jsx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/src/components/Highlights.module.css +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/src/components/RunnableCodeBlock.jsx +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/src/components/RunnableCodeBlock.module.css +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/src/css/custom.css +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/src/pages/home_page_example.py +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/src/pages/index.js +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/src/pages/index.module.css +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/src/theme/DocItem/Content/index.js +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/static/.nojekyll +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/static/img/docs-og.png +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/static/img/guides/redirected_logs_example.webp +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/tools/docs-prettier.config.js +0 -0
- {apify-2.7.1b14 → apify-2.7.1b15}/website/tools/utils/externalLink.js +0 -0
|
@@ -16,6 +16,7 @@ All notable changes to this project will be documented in this file.
|
|
|
16
16
|
- Expose `APIFY_USER_IS_PAYING` env var to the configuration ([#507](https://github.com/apify/apify-sdk-python/pull/507)) ([0801e54](https://github.com/apify/apify-sdk-python/commit/0801e54887317c1280cc6828ecd3f2cc53287e76)) by [@stepskop](https://github.com/stepskop)
|
|
17
17
|
- Resolve DeprecationWarning in ApifyEventManager ([#555](https://github.com/apify/apify-sdk-python/pull/555)) ([0c5111d](https://github.com/apify/apify-sdk-python/commit/0c5111dafe19796ec1fb9652a44c031bed9758df)) by [@vdusek](https://github.com/vdusek), closes [#343](https://github.com/apify/apify-sdk-python/issues/343)
|
|
18
18
|
- 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)
|
|
19
|
+
- 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)
|
|
19
20
|
|
|
20
21
|
### Chore
|
|
21
22
|
|
|
@@ -101,6 +102,18 @@ All notable changes to this project will be documented in this file.
|
|
|
101
102
|
- 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)
|
|
102
103
|
|
|
103
104
|
|
|
105
|
+
## [2.7.0](https://github.com/apify/apify-sdk-python/releases/tag/v2.7.0) (2025-07-14)
|
|
106
|
+
|
|
107
|
+
### 🚀 Features
|
|
108
|
+
|
|
109
|
+
- **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)
|
|
110
|
+
|
|
111
|
+
### 🐛 Bug Fixes
|
|
112
|
+
|
|
113
|
+
- 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)
|
|
114
|
+
- 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)
|
|
115
|
+
|
|
116
|
+
|
|
104
117
|
|
|
105
118
|
## [2.7.3](https://github.com/apify/apify-sdk-python/releases/tag/v2.7.3) (2025-08-11)
|
|
106
119
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "apify"
|
|
7
|
-
version = "2.7.
|
|
7
|
+
version = "2.7.1b15"
|
|
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" }
|
|
@@ -75,7 +75,7 @@ dev = [
|
|
|
75
75
|
"pytest-timeout~=2.4.0",
|
|
76
76
|
"pytest-xdist~=3.8.0",
|
|
77
77
|
"pytest~=8.4.0",
|
|
78
|
-
"ruff~=0.
|
|
78
|
+
"ruff~=0.13.0",
|
|
79
79
|
"setuptools", # setuptools are used by pytest but not explicitly required
|
|
80
80
|
"types-cachetools~=6.2.0.20250827",
|
|
81
81
|
"uvicorn[standard]",
|
{apify-2.7.1b14 → apify-2.7.1b15}/src/apify/storage_clients/_file_system/_key_value_store_client.py
RENAMED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import asyncio
|
|
2
|
+
import json
|
|
3
|
+
from pathlib import Path
|
|
2
4
|
|
|
3
5
|
from typing_extensions import override
|
|
4
6
|
|
|
@@ -23,9 +25,15 @@ class ApifyFileSystemKeyValueStoreClient(FileSystemKeyValueStoreClient):
|
|
|
23
25
|
the `INPUT.json` file. It also updates the metadata to reflect that the store has been purged.
|
|
24
26
|
"""
|
|
25
27
|
kvs_input_key = Configuration.get_global_configuration().input_key
|
|
28
|
+
|
|
29
|
+
# First try to find the alternative format of the input file and process it if it exists.
|
|
30
|
+
for file_path in self.path_to_kvs.glob('*'):
|
|
31
|
+
if file_path.name == f'{kvs_input_key}.json':
|
|
32
|
+
await self._process_input_json(file_path)
|
|
33
|
+
|
|
26
34
|
async with self._lock:
|
|
27
35
|
for file_path in self.path_to_kvs.glob('*'):
|
|
28
|
-
if file_path.name in {METADATA_FILENAME, f'{kvs_input_key}.
|
|
36
|
+
if file_path.name in {METADATA_FILENAME, kvs_input_key, f'{kvs_input_key}.{METADATA_FILENAME}'}:
|
|
29
37
|
continue
|
|
30
38
|
if file_path.is_file():
|
|
31
39
|
await asyncio.to_thread(file_path.unlink, missing_ok=True)
|
|
@@ -34,3 +42,16 @@ class ApifyFileSystemKeyValueStoreClient(FileSystemKeyValueStoreClient):
|
|
|
34
42
|
update_accessed_at=True,
|
|
35
43
|
update_modified_at=True,
|
|
36
44
|
)
|
|
45
|
+
|
|
46
|
+
async def _process_input_json(self, path: Path) -> None:
|
|
47
|
+
"""Process simple input json file to format expected by the FileSystemKeyValueStoreClient.
|
|
48
|
+
|
|
49
|
+
For example: INPUT.json -> INPUT, INPUT.json.metadata
|
|
50
|
+
"""
|
|
51
|
+
try:
|
|
52
|
+
f = await asyncio.to_thread(path.open)
|
|
53
|
+
input_data = json.load(f)
|
|
54
|
+
finally:
|
|
55
|
+
f.close()
|
|
56
|
+
await asyncio.to_thread(path.unlink, missing_ok=True)
|
|
57
|
+
await self.set_value(key=path.stem, value=input_data)
|
|
@@ -131,7 +131,7 @@ async def test_lifecycle_on_platform_without_websocket(monkeypatch: pytest.Monke
|
|
|
131
131
|
monkeypatch.setenv(ActorEnvVars.EVENTS_WEBSOCKET_URL, 'ws://localhost:56565')
|
|
132
132
|
event_manager = ApifyEventManager(Configuration.get_global_configuration())
|
|
133
133
|
|
|
134
|
-
with pytest.raises(RuntimeError, match='Error connecting to platform events websocket!'):
|
|
134
|
+
with pytest.raises(RuntimeError, match=r'Error connecting to platform events websocket!'):
|
|
135
135
|
async with event_manager:
|
|
136
136
|
pass
|
|
137
137
|
|
|
@@ -67,5 +67,5 @@ def test_get_kvs_name(spider_name: str, expected: str) -> None:
|
|
|
67
67
|
],
|
|
68
68
|
)
|
|
69
69
|
def test_get_kvs_name_raises(spider_name: str) -> None:
|
|
70
|
-
with pytest.raises(ValueError, match='Unsupported spider name'):
|
|
70
|
+
with pytest.raises(ValueError, match=r'Unsupported spider name'):
|
|
71
71
|
assert get_kvs_name(spider_name)
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
|
+
import json
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
4
6
|
|
|
7
|
+
from crawlee import service_locator
|
|
5
8
|
from crawlee._consts import METADATA_FILENAME
|
|
6
9
|
|
|
7
|
-
from apify import Configuration
|
|
8
|
-
from apify.storage_clients._file_system import ApifyFileSystemKeyValueStoreClient
|
|
10
|
+
from apify import Actor, Configuration
|
|
11
|
+
from apify.storage_clients._file_system import ApifyFileSystemKeyValueStoreClient, ApifyFileSystemStorageClient
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from pathlib import Path
|
|
9
15
|
|
|
10
16
|
|
|
11
17
|
async def test_purge_preserves_input_file_and_metadata() -> None:
|
|
@@ -23,18 +29,21 @@ async def test_purge_preserves_input_file_and_metadata() -> None:
|
|
|
23
29
|
kvs_path = kvs_storage_client.path_to_kvs
|
|
24
30
|
|
|
25
31
|
# Create various files
|
|
26
|
-
input_file = kvs_path / f'{configuration.input_key}
|
|
32
|
+
input_file = kvs_path / f'{configuration.input_key}'
|
|
33
|
+
input_metadata_file = kvs_path / f'{configuration.input_key}.{METADATA_FILENAME}.json'
|
|
27
34
|
metadata_file = kvs_path / METADATA_FILENAME
|
|
28
35
|
regular_file1 = kvs_path / 'regular_file1.json'
|
|
29
36
|
regular_file2 = kvs_path / 'another_file.txt'
|
|
30
37
|
|
|
31
38
|
# Write content to files
|
|
32
39
|
await asyncio.to_thread(input_file.write_text, '{"test": "input"}')
|
|
40
|
+
await asyncio.to_thread(input_metadata_file.write_text, 'some text content')
|
|
33
41
|
await asyncio.to_thread(regular_file1.write_text, '{"test": "data1"}')
|
|
34
42
|
await asyncio.to_thread(regular_file2.write_text, 'some text content')
|
|
35
43
|
|
|
36
44
|
# Verify all files exist before purge
|
|
37
45
|
assert input_file.exists()
|
|
46
|
+
assert input_metadata_file.exists()
|
|
38
47
|
assert metadata_file.exists() # Should exist from client creation
|
|
39
48
|
assert regular_file1.exists()
|
|
40
49
|
assert regular_file2.exists()
|
|
@@ -53,3 +62,21 @@ async def test_purge_preserves_input_file_and_metadata() -> None:
|
|
|
53
62
|
# Verify INPUT.json content is unchanged
|
|
54
63
|
input_content = await asyncio.to_thread(input_file.read_text)
|
|
55
64
|
assert input_content == '{"test": "input"}'
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
async def test_pre_existing_input_used_by_actor(tmp_path: Path) -> None:
|
|
68
|
+
pre_existing_input = {
|
|
69
|
+
'foo': 'bar',
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
configuration = Configuration.get_global_configuration()
|
|
73
|
+
# Create pre-existing INPUT.json file
|
|
74
|
+
path_to_input = tmp_path / 'key_value_stores' / 'default'
|
|
75
|
+
path_to_input.mkdir(parents=True)
|
|
76
|
+
(path_to_input / f'{configuration.input_key}.json').write_text(json.dumps(pre_existing_input))
|
|
77
|
+
|
|
78
|
+
# Remove this line after https://github.com/apify/apify-sdk-python/pull/576
|
|
79
|
+
service_locator.set_storage_client(ApifyFileSystemStorageClient())
|
|
80
|
+
|
|
81
|
+
async with Actor():
|
|
82
|
+
assert pre_existing_input == await Actor.get_input()
|
|
@@ -68,7 +68,7 @@ def test_decryption_fails_with_invalid_password() -> None:
|
|
|
68
68
|
encrypted = public_encrypt(test_value, public_key=PUBLIC_KEY)
|
|
69
69
|
encrypted['encrypted_password'] = base64.b64encode(b'invalid_password').decode('utf-8')
|
|
70
70
|
|
|
71
|
-
with pytest.raises(ValueError, match='Ciphertext length must be equal to key size.'):
|
|
71
|
+
with pytest.raises(ValueError, match=r'Ciphertext length must be equal to key size.'):
|
|
72
72
|
private_decrypt(**encrypted, private_key=PRIVATE_KEY)
|
|
73
73
|
|
|
74
74
|
|
|
@@ -79,7 +79,7 @@ def test_decryption_fails_with_manipulated_cipher() -> None:
|
|
|
79
79
|
b'invalid_cipher' + base64.b64decode(encrypted['encrypted_value'].encode('utf-8')),
|
|
80
80
|
).decode('utf-8')
|
|
81
81
|
|
|
82
|
-
with pytest.raises(ValueError, match='Decryption failed, malformed encrypted value or password.'):
|
|
82
|
+
with pytest.raises(ValueError, match=r'Decryption failed, malformed encrypted value or password.'):
|
|
83
83
|
private_decrypt(**encrypted, private_key=PRIVATE_KEY)
|
|
84
84
|
|
|
85
85
|
|
|
@@ -88,19 +88,19 @@ def test_invalid_arguments() -> None:
|
|
|
88
88
|
with pytest.raises(ValueError, match=match_pattern):
|
|
89
89
|
ProxyConfiguration(country_code=invalid_country_code) # type: ignore[arg-type]
|
|
90
90
|
|
|
91
|
-
with pytest.raises(ValueError, match='Exactly one of .* must be specified'):
|
|
91
|
+
with pytest.raises(ValueError, match=r'Exactly one of .* must be specified'):
|
|
92
92
|
ProxyConfiguration(
|
|
93
93
|
proxy_urls=['http://proxy.com:1111'],
|
|
94
94
|
new_url_function=lambda session_id=None, request=None: 'http://proxy.com:2222',
|
|
95
95
|
)
|
|
96
96
|
|
|
97
|
-
with pytest.raises(ValueError, match='Cannot combine custom proxies with Apify Proxy'):
|
|
97
|
+
with pytest.raises(ValueError, match=r'Cannot combine custom proxies with Apify Proxy'):
|
|
98
98
|
ProxyConfiguration(proxy_urls=['http://proxy.com:1111'], groups=['GROUP1'])
|
|
99
99
|
|
|
100
100
|
with pytest.raises(ValueError, match=re.escape('bad-url')):
|
|
101
101
|
ProxyConfiguration(proxy_urls=['bad-url'])
|
|
102
102
|
|
|
103
|
-
with pytest.raises(ValueError, match='Cannot combine custom proxies with Apify Proxy'):
|
|
103
|
+
with pytest.raises(ValueError, match=r'Cannot combine custom proxies with Apify Proxy'):
|
|
104
104
|
ProxyConfiguration(
|
|
105
105
|
new_url_function=lambda session_id=None, request=None: 'http://proxy.com:2222', groups=['GROUP1']
|
|
106
106
|
)
|
|
@@ -241,7 +241,7 @@ async def test_invalid_custom_new_url_function() -> None:
|
|
|
241
241
|
|
|
242
242
|
proxy_configuration = ProxyConfiguration(new_url_function=custom_new_url_function)
|
|
243
243
|
|
|
244
|
-
with pytest.raises(ValueError, match='The provided "new_url_function" did not return a valid URL'):
|
|
244
|
+
with pytest.raises(ValueError, match=r'The provided "new_url_function" did not return a valid URL'):
|
|
245
245
|
await proxy_configuration.new_url()
|
|
246
246
|
|
|
247
247
|
|
|
@@ -416,7 +416,7 @@ async def test_initialize_with_valid_configuration(
|
|
|
416
416
|
async def test_initialize_without_password_or_token() -> None:
|
|
417
417
|
proxy_configuration = ProxyConfiguration()
|
|
418
418
|
|
|
419
|
-
with pytest.raises(ValueError, match='Apify Proxy password must be provided'):
|
|
419
|
+
with pytest.raises(ValueError, match=r'Apify Proxy password must be provided'):
|
|
420
420
|
await proxy_configuration.initialize()
|
|
421
421
|
|
|
422
422
|
|
|
@@ -28,7 +28,7 @@ wheels = [
|
|
|
28
28
|
|
|
29
29
|
[[package]]
|
|
30
30
|
name = "apify"
|
|
31
|
-
version = "2.7.
|
|
31
|
+
version = "2.7.1b15"
|
|
32
32
|
source = { editable = "." }
|
|
33
33
|
dependencies = [
|
|
34
34
|
{ name = "apify-client" },
|
|
@@ -103,7 +103,7 @@ dev = [
|
|
|
103
103
|
{ name = "pytest-httpserver", specifier = "~=1.1.0" },
|
|
104
104
|
{ name = "pytest-timeout", specifier = "~=2.4.0" },
|
|
105
105
|
{ name = "pytest-xdist", specifier = "~=3.8.0" },
|
|
106
|
-
{ name = "ruff", specifier = "~=0.
|
|
106
|
+
{ name = "ruff", specifier = "~=0.13.0" },
|
|
107
107
|
{ name = "setuptools" },
|
|
108
108
|
{ name = "types-cachetools", specifier = "~=6.2.0.20250827" },
|
|
109
109
|
{ name = "uvicorn", extras = ["standard"] },
|
|
@@ -1876,28 +1876,28 @@ wheels = [
|
|
|
1876
1876
|
|
|
1877
1877
|
[[package]]
|
|
1878
1878
|
name = "ruff"
|
|
1879
|
-
version = "0.
|
|
1880
|
-
source = { registry = "https://pypi.org/simple" }
|
|
1881
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1882
|
-
wheels = [
|
|
1883
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1884
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1885
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1886
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1887
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1888
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1889
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1890
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1891
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1892
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1893
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1894
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1895
|
-
{ url = "https://files.pythonhosted.org/packages/58/
|
|
1896
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1897
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1898
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1899
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1900
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1879
|
+
version = "0.13.0"
|
|
1880
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1881
|
+
sdist = { url = "https://files.pythonhosted.org/packages/6e/1a/1f4b722862840295bcaba8c9e5261572347509548faaa99b2d57ee7bfe6a/ruff-0.13.0.tar.gz", hash = "sha256:5b4b1ee7eb35afae128ab94459b13b2baaed282b1fb0f472a73c82c996c8ae60", size = 5372863, upload-time = "2025-09-10T16:25:37.917Z" }
|
|
1882
|
+
wheels = [
|
|
1883
|
+
{ url = "https://files.pythonhosted.org/packages/ac/fe/6f87b419dbe166fd30a991390221f14c5b68946f389ea07913e1719741e0/ruff-0.13.0-py3-none-linux_armv6l.whl", hash = "sha256:137f3d65d58ee828ae136a12d1dc33d992773d8f7644bc6b82714570f31b2004", size = 12187826, upload-time = "2025-09-10T16:24:39.5Z" },
|
|
1884
|
+
{ url = "https://files.pythonhosted.org/packages/e4/25/c92296b1fc36d2499e12b74a3fdb230f77af7bdf048fad7b0a62e94ed56a/ruff-0.13.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:21ae48151b66e71fd111b7d79f9ad358814ed58c339631450c66a4be33cc28b9", size = 12933428, upload-time = "2025-09-10T16:24:43.866Z" },
|
|
1885
|
+
{ url = "https://files.pythonhosted.org/packages/44/cf/40bc7221a949470307d9c35b4ef5810c294e6cfa3caafb57d882731a9f42/ruff-0.13.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:64de45f4ca5441209e41742d527944635a05a6e7c05798904f39c85bafa819e3", size = 12095543, upload-time = "2025-09-10T16:24:46.638Z" },
|
|
1886
|
+
{ url = "https://files.pythonhosted.org/packages/f1/03/8b5ff2a211efb68c63a1d03d157e924997ada87d01bebffbd13a0f3fcdeb/ruff-0.13.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b2c653ae9b9d46e0ef62fc6fbf5b979bda20a0b1d2b22f8f7eb0cde9f4963b8", size = 12312489, upload-time = "2025-09-10T16:24:49.556Z" },
|
|
1887
|
+
{ url = "https://files.pythonhosted.org/packages/37/fc/2336ef6d5e9c8d8ea8305c5f91e767d795cd4fc171a6d97ef38a5302dadc/ruff-0.13.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cec632534332062bc9eb5884a267b689085a1afea9801bf94e3ba7498a2d207", size = 11991631, upload-time = "2025-09-10T16:24:53.439Z" },
|
|
1888
|
+
{ url = "https://files.pythonhosted.org/packages/39/7f/f6d574d100fca83d32637d7f5541bea2f5e473c40020bbc7fc4a4d5b7294/ruff-0.13.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dcd628101d9f7d122e120ac7c17e0a0f468b19bc925501dbe03c1cb7f5415b24", size = 13720602, upload-time = "2025-09-10T16:24:56.392Z" },
|
|
1889
|
+
{ url = "https://files.pythonhosted.org/packages/fd/c8/a8a5b81d8729b5d1f663348d11e2a9d65a7a9bd3c399763b1a51c72be1ce/ruff-0.13.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:afe37db8e1466acb173bb2a39ca92df00570e0fd7c94c72d87b51b21bb63efea", size = 14697751, upload-time = "2025-09-10T16:24:59.89Z" },
|
|
1890
|
+
{ url = "https://files.pythonhosted.org/packages/57/f5/183ec292272ce7ec5e882aea74937f7288e88ecb500198b832c24debc6d3/ruff-0.13.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f96a8d90bb258d7d3358b372905fe7333aaacf6c39e2408b9f8ba181f4b6ef2", size = 14095317, upload-time = "2025-09-10T16:25:03.025Z" },
|
|
1891
|
+
{ url = "https://files.pythonhosted.org/packages/9f/8d/7f9771c971724701af7926c14dab31754e7b303d127b0d3f01116faef456/ruff-0.13.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94b5e3d883e4f924c5298e3f2ee0f3085819c14f68d1e5b6715597681433f153", size = 13144418, upload-time = "2025-09-10T16:25:06.272Z" },
|
|
1892
|
+
{ url = "https://files.pythonhosted.org/packages/a8/a6/7985ad1778e60922d4bef546688cd8a25822c58873e9ff30189cfe5dc4ab/ruff-0.13.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03447f3d18479df3d24917a92d768a89f873a7181a064858ea90a804a7538991", size = 13370843, upload-time = "2025-09-10T16:25:09.965Z" },
|
|
1893
|
+
{ url = "https://files.pythonhosted.org/packages/64/1c/bafdd5a7a05a50cc51d9f5711da704942d8dd62df3d8c70c311e98ce9f8a/ruff-0.13.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:fbc6b1934eb1c0033da427c805e27d164bb713f8e273a024a7e86176d7f462cf", size = 13321891, upload-time = "2025-09-10T16:25:12.969Z" },
|
|
1894
|
+
{ url = "https://files.pythonhosted.org/packages/bc/3e/7817f989cb9725ef7e8d2cee74186bf90555279e119de50c750c4b7a72fe/ruff-0.13.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a8ab6a3e03665d39d4a25ee199d207a488724f022db0e1fe4002968abdb8001b", size = 12119119, upload-time = "2025-09-10T16:25:16.621Z" },
|
|
1895
|
+
{ url = "https://files.pythonhosted.org/packages/58/07/9df080742e8d1080e60c426dce6e96a8faf9a371e2ce22eef662e3839c95/ruff-0.13.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d2a5c62f8ccc6dd2fe259917482de7275cecc86141ee10432727c4816235bc41", size = 11961594, upload-time = "2025-09-10T16:25:19.49Z" },
|
|
1896
|
+
{ url = "https://files.pythonhosted.org/packages/6a/f4/ae1185349197d26a2316840cb4d6c3fba61d4ac36ed728bf0228b222d71f/ruff-0.13.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b7b85ca27aeeb1ab421bc787009831cffe6048faae08ad80867edab9f2760945", size = 12933377, upload-time = "2025-09-10T16:25:22.371Z" },
|
|
1897
|
+
{ url = "https://files.pythonhosted.org/packages/b6/39/e776c10a3b349fc8209a905bfb327831d7516f6058339a613a8d2aaecacd/ruff-0.13.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:79ea0c44a3032af768cabfd9616e44c24303af49d633b43e3a5096e009ebe823", size = 13418555, upload-time = "2025-09-10T16:25:25.681Z" },
|
|
1898
|
+
{ url = "https://files.pythonhosted.org/packages/46/09/dca8df3d48e8b3f4202bf20b1658898e74b6442ac835bfe2c1816d926697/ruff-0.13.0-py3-none-win32.whl", hash = "sha256:4e473e8f0e6a04e4113f2e1de12a5039579892329ecc49958424e5568ef4f768", size = 12141613, upload-time = "2025-09-10T16:25:28.664Z" },
|
|
1899
|
+
{ url = "https://files.pythonhosted.org/packages/61/21/0647eb71ed99b888ad50e44d8ec65d7148babc0e242d531a499a0bbcda5f/ruff-0.13.0-py3-none-win_amd64.whl", hash = "sha256:48e5c25c7a3713eea9ce755995767f4dcd1b0b9599b638b12946e892123d1efb", size = 13258250, upload-time = "2025-09-10T16:25:31.773Z" },
|
|
1900
|
+
{ url = "https://files.pythonhosted.org/packages/e1/a3/03216a6a86c706df54422612981fb0f9041dbb452c3401501d4a22b942c9/ruff-0.13.0-py3-none-win_arm64.whl", hash = "sha256:ab80525317b1e1d38614addec8ac954f1b3e662de9d59114ecbf771d00cf613e", size = 12312357, upload-time = "2025-09-10T16:25:35.595Z" },
|
|
1901
1901
|
]
|
|
1902
1902
|
|
|
1903
1903
|
[[package]]
|
|
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
|
{apify-2.7.1b14 → apify-2.7.1b15}/docs/03_guides/code/scrapy_project/src/spiders/__init__.py
RENAMED
|
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
|