bytekit-sdk 0.5.2__tar.gz → 0.6.0__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.
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/CHANGELOG.md +92 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/PKG-INFO +16 -8
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/README.md +15 -7
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/pyproject.toml +1 -1
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/bulk/create_bulk.py +12 -0
- bytekit_sdk-0.6.0/src/bytekit/api/bulk/list_bulk_screenshots.py +294 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/fetch_bulk/create_fetch_bulk.py +16 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/fetch_bulk/get_fetch_bulk.py +69 -5
- bytekit_sdk-0.6.0/src/bytekit/api/scrape/create_scrape.py +341 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/scrape_bulk/create_scrape_bulk.py +16 -12
- bytekit_sdk-0.6.0/src/bytekit/api/scrape_bulk/get_scrape_bulk.py +264 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/errors.py +31 -1
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/__init__.py +44 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/account_session_response.py +15 -1
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/bandwidth_balance.py +5 -3
- bytekit_sdk-0.6.0/src/bytekit/models/bulk_job_counters.py +76 -0
- bytekit_sdk-0.6.0/src/bytekit/models/bulk_mandatory_scrape_item.py +147 -0
- bytekit_sdk-0.6.0/src/bytekit/models/bulk_mandatory_scrape_item_error.py +105 -0
- bytekit_sdk-0.6.0/src/bytekit/models/bulk_mandatory_scrape_item_formats.py +232 -0
- bytekit_sdk-0.6.0/src/bytekit/models/bulk_mandatory_scrape_item_terminal_outcome.py +12 -0
- bytekit_sdk-0.6.0/src/bytekit/models/bulk_mandatory_scrape_item_type.py +8 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_fetch_bulk_response_200.py +25 -2
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_fetch_bulk_response_200_items_item.py +162 -78
- bytekit_sdk-0.6.0/src/bytekit/models/get_fetch_bulk_response_200_items_item_terminal_outcome.py +12 -0
- bytekit_sdk-0.6.0/src/bytekit/models/get_fetch_bulk_response_200_items_item_type.py +8 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_fetch_bulk_response_202.py +25 -2
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_fetch_bulk_response_202_items_item.py +162 -78
- bytekit_sdk-0.6.0/src/bytekit/models/get_fetch_bulk_response_202_items_item_terminal_outcome.py +12 -0
- bytekit_sdk-0.6.0/src/bytekit/models/get_fetch_bulk_response_202_items_item_type.py +8 -0
- bytekit_sdk-0.6.0/src/bytekit/models/get_fetch_bulk_status.py +12 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_scrape_bulk_response_200.py +54 -10
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_scrape_bulk_response_202.py +52 -9
- bytekit_sdk-0.6.0/src/bytekit/models/get_scrape_bulk_status.py +12 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_usage_response_200.py +7 -5
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/list_bulk_screenshots_response_200.py +35 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/list_bulk_screenshots_response_200_items_item.py +165 -54
- bytekit_sdk-0.6.0/src/bytekit/models/list_bulk_screenshots_response_200_items_item_artifacts.py +211 -0
- bytekit_sdk-0.6.0/src/bytekit/models/list_bulk_screenshots_response_200_items_item_terminal_outcome.py +12 -0
- bytekit_sdk-0.6.0/src/bytekit/models/list_bulk_screenshots_status.py +12 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_create_request.py +1 -1
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_create_request_scrape_options.py +1 -1
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_create_response.py +4 -2
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_response.py +4 -2
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_error_envelope.py +3 -2
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_queued_envelope.py +4 -2
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_request.py +10 -2
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_success_envelope.py +8 -4
- bytekit_sdk-0.5.2/src/bytekit/api/bulk/list_bulk_screenshots.py +0 -198
- bytekit_sdk-0.5.2/src/bytekit/api/scrape/create_scrape.py +0 -200
- bytekit_sdk-0.5.2/src/bytekit/api/scrape_bulk/get_scrape_bulk.py +0 -160
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/.gitignore +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/LICENSE +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/__init__.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/__init__.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/account/__init__.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/account/get_account.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/bulk/__init__.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/bulk/delete_bulk.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/bulk/get_bulk.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/fetch/__init__.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/fetch/get_fetch.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/fetch/post_fetch.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/fetch_bulk/__init__.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/monitors/__init__.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/monitors/create_monitor.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/monitors/delete_monitor.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/monitors/get_monitor.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/monitors/list_monitor_captures.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/monitors/list_monitors.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/monitors/update_monitor.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/scrape/__init__.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/scrape/get_scrape.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/scrape_bulk/__init__.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/screenshots/__init__.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/screenshots/create_screenshot.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/screenshots/get_screenshot.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/search/__init__.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/search/create_search.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/sitemap/__init__.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/sitemap/create_sitemap.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/sitemap/get_sitemap.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/usage/__init__.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/usage/get_usage.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/usage/get_usage_by_endpoint.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/usage/get_usage_daily.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/webhooks/__init__.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/webhooks/list_webhook_deliveries.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/api/webhooks/retry_webhook_delivery.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/client.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/account_bearer_response.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/account_bearer_response_api_key.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/account_bearer_response_api_key_environment.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/account_bearer_response_auto_topup.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/account_bearer_response_plan.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/account_bearer_response_subscription.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/account_bearer_response_subscription_plan.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/account_bearer_response_subscription_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/account_session_response_notifications.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/account_session_response_plan.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/billing_factor.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/billing_factor_name.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/billing_node.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/capture_response.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/capture_response_outcome.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/clip.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_body.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_body_defaults.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_body_defaults_device.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_body_defaults_device_scale_factor_type_1.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_body_defaults_device_scale_factor_type_2_type_1.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_body_defaults_device_scale_factor_type_3_type_1.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_body_defaults_formats_item.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_body_defaults_type.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_body_defaults_viewport_type_0.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_body_defaults_wait_until.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_body_items_item.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_body_items_item_device.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_body_items_item_formats_item.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_body_items_item_scenario.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_body_items_item_type.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_body_items_item_viewport_type_0.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_body_items_item_wait_until.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_response_202.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_bulk_response_202_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_fetch_bulk_body.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_fetch_bulk_body_defaults.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_fetch_bulk_body_urls_item_type_1.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_fetch_bulk_response_202.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_fetch_bulk_response_202_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_scrape_bulk_body.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_scrape_bulk_body_custom.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_scrape_bulk_body_defaults.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_scrape_bulk_body_defaults_formats_item.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_scrape_bulk_body_items_item.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_scrape_bulk_body_items_item_custom.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_scrape_bulk_body_items_item_formats_item.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_scrape_bulk_response_202.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_scrape_bulk_response_202_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_search_body.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_search_body_date_range.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_search_body_type.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_search_response_200.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_search_response_200_results_item.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_search_response_200_results_item_image.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_search_response_502.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/create_search_response_502_error.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/credit_balance.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/delete_bulk_response_200.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/delete_bulk_response_200_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/error.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/error_error.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/error_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/fetch_request.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/fetch_request_cache_ttl_type_1.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/fetch_request_custom.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_bulk_response_200.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_bulk_response_200_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_bulk_response_202.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_bulk_response_202_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_fetch_bulk_response_200_items_item_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_fetch_bulk_response_200_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_fetch_bulk_response_202_items_item_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_fetch_bulk_response_202_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_fetch_cache_ttl_type_1.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_scrape_bulk_response_200_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_scrape_bulk_response_202_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_usage_by_endpoint_response_200.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_usage_by_endpoint_response_200_rows_item.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_usage_by_endpoint_response_200_rows_item_endpoint.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_usage_by_endpoint_response_200_totals.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_usage_daily_response_200.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_usage_daily_response_200_data_item.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/get_usage_response_200_plan_type.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/list_bulk_screenshots_response_200_items_item_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/list_bulk_screenshots_response_200_items_item_type.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/list_monitor_captures_response_200.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/list_monitors_response_200.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/list_monitors_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/list_webhook_deliveries_response_200.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/list_webhook_deliveries_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/metadata.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_create_request_interval_type.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_create_request_notify_on.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_create_request_options.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_create_request_type.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_create_request_webhook_headers.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_response_interval_type.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_response_metadata_type_0.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_response_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_response_type.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_response_webhook_headers_type_0.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_update_request.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_update_request_interval_type.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_update_request_notify_on.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_update_request_options.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_update_request_scrape_options.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_update_request_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/monitor_update_request_webhook_headers.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_error_envelope_error.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_error_envelope_error_code.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_error_envelope_schema_version.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_error_envelope_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_formats.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_markdown_tokens.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_metadata.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_queued_envelope_schema_version.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_queued_envelope_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_request_cache_ttl_type_1.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_request_custom.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_request_events_item.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_request_formats_item.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_request_markdown_images.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_request_markdown_links.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_request_markdown_mode.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_request_token_encoding.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_request_x_internal_scrape_path.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_scored_image.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_scored_link.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_stats.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_success_envelope_cache.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_success_envelope_custom.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_success_envelope_schema_version.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_success_envelope_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_table.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_table_kind.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_warning.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/scrape_warning_code.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/screenshot_request.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/screenshot_request_device.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/screenshot_request_device_scale_factor_type_1.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/screenshot_request_device_scale_factor_type_2_type_1.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/screenshot_request_device_scale_factor_type_3_type_1.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/screenshot_request_format.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/screenshot_request_wait_until.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/screenshot_response.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/screenshot_response_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/sitemap_request.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/sitemap_request_process_type_0.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/sitemap_request_process_type_0_options.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/sitemap_request_strategy.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/sitemap_response.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/sitemap_response_cache.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/sitemap_response_metadata_type_0.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/sitemap_response_process_type_0.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/sitemap_response_sources_type_0.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/sitemap_response_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/viewport.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/webhook_delivery_response.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/webhook_delivery_response_event_type.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/models/webhook_delivery_response_status.py +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/py.typed +0 -0
- {bytekit_sdk-0.5.2 → bytekit_sdk-0.6.0}/src/bytekit/types.py +0 -0
|
@@ -5,6 +5,98 @@ PyPI distribution: `bytekit-sdk`. Import name: `bytekit`.
|
|
|
5
5
|
|
|
6
6
|
## Unreleased
|
|
7
7
|
|
|
8
|
+
## 0.6.0
|
|
9
|
+
|
|
10
|
+
_Release cut 2026-09-11._
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- **`create_scrape` now raises on a terminal scrape failure, even though it arrives on a
|
|
15
|
+
`200`** (#1870). The synchronous `POST /v1/scrape` used to answer an unreachable host, a
|
|
16
|
+
refused connection, or a bot-protection block that defeated every proxy tier with a `503`.
|
|
17
|
+
It now answers `200` carrying the canonical `failed` envelope, because a failed fetch is a
|
|
18
|
+
result rather than a transport error. Left alone, the generated union would have parsed that
|
|
19
|
+
envelope and RETURNED it on the same arm a caller reads `.formats` from, so the most common
|
|
20
|
+
first-call shape — "it returned, so it worked" — would have silently succeeded on a failed
|
|
21
|
+
scrape. `create_scrape.sync` / `.sync_detailed` / `.asyncio` / `.asyncio_detailed` therefore
|
|
22
|
+
raise `errors.UnexpectedStatus` with `.status_code` `200` and `.code` / `.message` read off
|
|
23
|
+
the envelope's `error`; under `raise_on_unexpected_status=False` they return `None`, as for
|
|
24
|
+
any other unusable body.
|
|
25
|
+
|
|
26
|
+
The carve-out is that one call site. `get_scrape` still RETURNS the identical envelope as a
|
|
27
|
+
typed `ScrapeErrorEnvelope` — polling a job that failed is a successful poll — and every
|
|
28
|
+
documented 4xx/5xx on `create_scrape` still returns its typed `Error` model.
|
|
29
|
+
|
|
30
|
+
**Upgrading:** if you inspected the result of `create_scrape` for `status == "failed"`, move
|
|
31
|
+
that handling into an `except errors.UnexpectedStatus` block. Code that already caught
|
|
32
|
+
`UnexpectedStatus` needs no change.
|
|
33
|
+
|
|
34
|
+
## 0.5.4 [NEVER PUBLISHED]
|
|
35
|
+
|
|
36
|
+
_Release cut 2026-09-06._
|
|
37
|
+
|
|
38
|
+
> **Never published to PyPI.** Publication is triggered by CI on `main` from the version
|
|
39
|
+
> `pyproject.toml` declares, and 0.6.0 (#1870) superseded 0.5.4 in the tree before any release
|
|
40
|
+
> reached `main` — no `bytekit-sdk` 0.5.4 artifact exists, so `pip install bytekit-sdk==0.5.4`
|
|
41
|
+
> fails. Everything below shipped to users in **0.6.0**, the first published release containing
|
|
42
|
+
> it.
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
|
|
46
|
+
- Bulk fetch, scrape, and mixed-result models now publish cursor pagination, stable item
|
|
47
|
+
identities, whole-job counters, exact mixed artifact keys, artifact warnings, bounded
|
|
48
|
+
webhook recovery metadata, and the `artifact_unavailable` error contract (#3717).
|
|
49
|
+
Generated bulk read functions accept optional `cursor`, `limit`, and `status` parameters.
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
|
|
53
|
+
- Corrected the artifact-URL fallback docstrings on `list_bulk_screenshots` (`image_url`,
|
|
54
|
+
`content_url`, `markdown_url`) and the `/v1/logs` row model (`artifact_url`) (#3717). Those
|
|
55
|
+
fields were documented as null-plus-`artifact_unavailable` when no signature can be minted;
|
|
56
|
+
the servers have always returned the row's stored value unchanged instead — `None` while
|
|
57
|
+
nothing is stored, and otherwise the private unsigned storage URL, which answers `401` — and
|
|
58
|
+
raise no warning. `get_fetch_bulk` does null the field and report `artifact_unavailable`, and
|
|
59
|
+
its docstring is unchanged. No server behaviour changed and no model moved; only the
|
|
60
|
+
documentation on them did.
|
|
61
|
+
|
|
62
|
+
### Changed
|
|
63
|
+
|
|
64
|
+
- Regenerated `GetUsageResponse200` against the corrected `topup_balance_bytes` description
|
|
65
|
+
(#4251). The field's docstring read "Remaining purchased top-up bytes", which contradicted its
|
|
66
|
+
own "Equal to `topup_bytes`" clause: the value covers purchased top-up lots and the one-time
|
|
67
|
+
starter grant, which is what the endpoint has always returned. The clause recording that the
|
|
68
|
+
figure is already net of consumed overage, and the "Present only in dual/bytes billing mode"
|
|
69
|
+
clause, are both unchanged and still true. Types are unchanged and no server value changed;
|
|
70
|
+
only the documentation on them moved.
|
|
71
|
+
- Regenerated `ScrapeSuccessEnvelope` against the clarified `cache_age_s` description (#4237).
|
|
72
|
+
The field's docstring now records that `GET /v1/scrape/{id}` reports `cache: hit` without
|
|
73
|
+
`cache_age_s`: the age is a property of the replay that happened at completion time, is not
|
|
74
|
+
persisted on the row, and cannot be derived honestly afterwards. The one-directional
|
|
75
|
+
"Present only on `cache: hit`" clause is unchanged and still true. Types are unchanged; only
|
|
76
|
+
the documentation on them moved.
|
|
77
|
+
- Regenerated `ScrapeSuccessEnvelope` against the completed `cache` presence list (#4203).
|
|
78
|
+
The field's description now names `GET /v1/scrape/{id}` as a third delivery path, alongside
|
|
79
|
+
the synchronous response and webhook delivery: a polled scrape now reports the cache
|
|
80
|
+
disposition its row recorded, and omits the field — rather than defaulting it to `miss` — for
|
|
81
|
+
a row that recorded none. Types are unchanged; only the documentation on them moved.
|
|
82
|
+
- Regenerated `MonitorCreateRequestScrapeOptions` against the corrected `scrape_options`
|
|
83
|
+
documentation (#4024). The description no longer lists `headers` among the accepted
|
|
84
|
+
fields — `POST /v1/monitors` never honoured a caller-supplied `headers` option and now
|
|
85
|
+
rejects it with the same 400 every other capture endpoint returns for the field. Types are
|
|
86
|
+
unchanged; only the documentation on them moved.
|
|
87
|
+
|
|
88
|
+
## 0.5.3
|
|
89
|
+
|
|
90
|
+
_Release cut 2026-09-05._
|
|
91
|
+
|
|
92
|
+
### Changed
|
|
93
|
+
|
|
94
|
+
- Regenerated `ScrapeQueuedEnvelope` against the corrected `status_url` documentation (#3925).
|
|
95
|
+
`status_url` is a root-relative path, never an absolute URI: join it onto the API base URL you
|
|
96
|
+
called (`https://api.bytekit.com`, no trailing slash) to get the URL to poll. The spec had
|
|
97
|
+
declared it `format: uri` with an absolute example, which no server has ever emitted; the
|
|
98
|
+
emitted value is unchanged, so no client behaviour moves.
|
|
99
|
+
|
|
8
100
|
## 0.5.2
|
|
9
101
|
|
|
10
102
|
_Release cut 2026-09-03._
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: bytekit-sdk
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
4
4
|
Summary: Official Python SDK for the ByteKit API
|
|
5
5
|
Project-URL: Homepage, https://bytekit.com
|
|
6
6
|
Project-URL: Repository, https://github.com/Hunt-Labs-Inc/ByteKit
|
|
@@ -75,12 +75,19 @@ The SDK has a **two-tier** error contract. Both tiers are safe: an operation nev
|
|
|
75
75
|
a bare `json.JSONDecodeError` or a bare `KeyError`, even when a server returns an HTML error
|
|
76
76
|
page or a payload whose shape has drifted from the spec.
|
|
77
77
|
|
|
78
|
-
| Situation
|
|
79
|
-
|
|
|
80
|
-
| A status the OpenAPI spec **documents** for that operation (e.g. a `422` or `500` on `create_scrape`), with a JSON body of the documented shape
|
|
81
|
-
| An **undocumented** status, or a **non-JSON body on a documented status** (HTML error page, load-balancer text, empty body)
|
|
82
|
-
| A **documented status whose JSON body does not match the documented schema** — a field the server renamed, dropped or retyped
|
|
83
|
-
|
|
|
78
|
+
| Situation | What you get |
|
|
79
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
80
|
+
| A status the OpenAPI spec **documents** for that operation (e.g. a `422` or `500` on `create_scrape`), with a JSON body of the documented shape | The typed `Error` model is **returned**, not raised. Check with `isinstance(result, Error)` and read `result.error.code` / `result.error.message`. |
|
|
81
|
+
| An **undocumented** status, or a **non-JSON body on a documented status** (HTML error page, load-balancer text, empty body) | `errors.UnexpectedStatus` is **raised**, carrying `.status_code` and the raw `.content`. When the body is the documented `Error` envelope, `.code` / `.message` are populated too. |
|
|
82
|
+
| A **documented status whose JSON body does not match the documented schema** — a field the server renamed, dropped or retyped | `errors.UnexpectedStatus` is **raised**, same shape as the row above. The underlying parse failure (e.g. `KeyError: 'schema_version'`) is attached as `__cause__` for diagnosis. |
|
|
83
|
+
| A **`200` from `create_scrape` carrying a `status: "failed"` envelope** — a terminal upstream failure (unreachable host, refused connection, bot protection that defeats every proxy tier) | `errors.UnexpectedStatus` is **raised**, with `.status_code` `200` and `.code` / `.message` read off the envelope's `error`. `get_scrape` is unchanged: polling a job that failed still **returns** the typed `ScrapeErrorEnvelope`. |
|
|
84
|
+
| Any of the above, with `raise_on_unexpected_status=False` | Nothing is raised; the operation returns `None`. |
|
|
85
|
+
|
|
86
|
+
A failed scrape is a _result_, not a transport error, so the API reports it on a `200` rather
|
|
87
|
+
than a 5xx — but a returned failure is exactly the shape a first call misreads as success
|
|
88
|
+
(`result.formats` on a `ScrapeErrorEnvelope` is an `AttributeError`). `create_scrape` therefore
|
|
89
|
+
raises it. The carve-out is that one call: the identical envelope from `get_scrape` is the
|
|
90
|
+
correct answer to "how did that job end?" and is still returned.
|
|
84
91
|
|
|
85
92
|
The table describes the **generated operations** (`create_scrape.sync`, `get_usage.sync`, …),
|
|
86
93
|
whose return types are `Optional[...]` accordingly. The hand-written
|
|
@@ -111,7 +118,8 @@ try:
|
|
|
111
118
|
),
|
|
112
119
|
)
|
|
113
120
|
except UnexpectedStatus as err:
|
|
114
|
-
# Undocumented status,
|
|
121
|
+
# Undocumented status, a non-JSON body on a documented one, or a 200 whose envelope
|
|
122
|
+
# says the scrape itself failed. Never a JSONDecodeError.
|
|
115
123
|
print(f"request failed with status {err.status_code}: {err.code} {err.message}")
|
|
116
124
|
else:
|
|
117
125
|
if isinstance(result, Error):
|
|
@@ -49,12 +49,19 @@ The SDK has a **two-tier** error contract. Both tiers are safe: an operation nev
|
|
|
49
49
|
a bare `json.JSONDecodeError` or a bare `KeyError`, even when a server returns an HTML error
|
|
50
50
|
page or a payload whose shape has drifted from the spec.
|
|
51
51
|
|
|
52
|
-
| Situation
|
|
53
|
-
|
|
|
54
|
-
| A status the OpenAPI spec **documents** for that operation (e.g. a `422` or `500` on `create_scrape`), with a JSON body of the documented shape
|
|
55
|
-
| An **undocumented** status, or a **non-JSON body on a documented status** (HTML error page, load-balancer text, empty body)
|
|
56
|
-
| A **documented status whose JSON body does not match the documented schema** — a field the server renamed, dropped or retyped
|
|
57
|
-
|
|
|
52
|
+
| Situation | What you get |
|
|
53
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
54
|
+
| A status the OpenAPI spec **documents** for that operation (e.g. a `422` or `500` on `create_scrape`), with a JSON body of the documented shape | The typed `Error` model is **returned**, not raised. Check with `isinstance(result, Error)` and read `result.error.code` / `result.error.message`. |
|
|
55
|
+
| An **undocumented** status, or a **non-JSON body on a documented status** (HTML error page, load-balancer text, empty body) | `errors.UnexpectedStatus` is **raised**, carrying `.status_code` and the raw `.content`. When the body is the documented `Error` envelope, `.code` / `.message` are populated too. |
|
|
56
|
+
| A **documented status whose JSON body does not match the documented schema** — a field the server renamed, dropped or retyped | `errors.UnexpectedStatus` is **raised**, same shape as the row above. The underlying parse failure (e.g. `KeyError: 'schema_version'`) is attached as `__cause__` for diagnosis. |
|
|
57
|
+
| A **`200` from `create_scrape` carrying a `status: "failed"` envelope** — a terminal upstream failure (unreachable host, refused connection, bot protection that defeats every proxy tier) | `errors.UnexpectedStatus` is **raised**, with `.status_code` `200` and `.code` / `.message` read off the envelope's `error`. `get_scrape` is unchanged: polling a job that failed still **returns** the typed `ScrapeErrorEnvelope`. |
|
|
58
|
+
| Any of the above, with `raise_on_unexpected_status=False` | Nothing is raised; the operation returns `None`. |
|
|
59
|
+
|
|
60
|
+
A failed scrape is a _result_, not a transport error, so the API reports it on a `200` rather
|
|
61
|
+
than a 5xx — but a returned failure is exactly the shape a first call misreads as success
|
|
62
|
+
(`result.formats` on a `ScrapeErrorEnvelope` is an `AttributeError`). `create_scrape` therefore
|
|
63
|
+
raises it. The carve-out is that one call: the identical envelope from `get_scrape` is the
|
|
64
|
+
correct answer to "how did that job end?" and is still returned.
|
|
58
65
|
|
|
59
66
|
The table describes the **generated operations** (`create_scrape.sync`, `get_usage.sync`, …),
|
|
60
67
|
whose return types are `Optional[...]` accordingly. The hand-written
|
|
@@ -85,7 +92,8 @@ try:
|
|
|
85
92
|
),
|
|
86
93
|
)
|
|
87
94
|
except UnexpectedStatus as err:
|
|
88
|
-
# Undocumented status,
|
|
95
|
+
# Undocumented status, a non-JSON body on a documented one, or a 200 whose envelope
|
|
96
|
+
# says the scrape itself failed. Never a JSONDecodeError.
|
|
89
97
|
print(f"request failed with status {err.status_code}: {err.code} {err.message}")
|
|
90
98
|
else:
|
|
91
99
|
if isinstance(result, Error):
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# `pip install bytekit-sdk` yields a working `import bytekit`. Mirrors the npm sibling
|
|
8
8
|
# @hunt-labs/bytekit-sdk.
|
|
9
9
|
name = "bytekit-sdk"
|
|
10
|
-
version = "0.
|
|
10
|
+
version = "0.6.0"
|
|
11
11
|
description = "Official Python SDK for the ByteKit API"
|
|
12
12
|
readme = "README.md"
|
|
13
13
|
requires-python = ">=3.10"
|
|
@@ -76,6 +76,9 @@ def sync_detailed(
|
|
|
76
76
|
Provide `urls` (simple list) or `items` (per-item config), not both.
|
|
77
77
|
Webhook deliveries include `X-ByteKit-Event: bulk.completed` so
|
|
78
78
|
receivers can dispatch on the header without parsing the body shape.
|
|
79
|
+
The body follows `BulkCompletedWebhook`: at most 500 complete items and
|
|
80
|
+
1 MiB, followed by cursor recovery through the existing mixed-item route
|
|
81
|
+
whenever `recovery_required` is true.
|
|
79
82
|
|
|
80
83
|
**Limits:** request bodies are guarded in a two-tier shape. A streamed body
|
|
81
84
|
with no `Content-Length` header is capped at 4 MB before your API key
|
|
@@ -140,6 +143,9 @@ def sync(
|
|
|
140
143
|
Provide `urls` (simple list) or `items` (per-item config), not both.
|
|
141
144
|
Webhook deliveries include `X-ByteKit-Event: bulk.completed` so
|
|
142
145
|
receivers can dispatch on the header without parsing the body shape.
|
|
146
|
+
The body follows `BulkCompletedWebhook`: at most 500 complete items and
|
|
147
|
+
1 MiB, followed by cursor recovery through the existing mixed-item route
|
|
148
|
+
whenever `recovery_required` is true.
|
|
143
149
|
|
|
144
150
|
**Limits:** request bodies are guarded in a two-tier shape. A streamed body
|
|
145
151
|
with no `Content-Length` header is capped at 4 MB before your API key
|
|
@@ -199,6 +205,9 @@ async def asyncio_detailed(
|
|
|
199
205
|
Provide `urls` (simple list) or `items` (per-item config), not both.
|
|
200
206
|
Webhook deliveries include `X-ByteKit-Event: bulk.completed` so
|
|
201
207
|
receivers can dispatch on the header without parsing the body shape.
|
|
208
|
+
The body follows `BulkCompletedWebhook`: at most 500 complete items and
|
|
209
|
+
1 MiB, followed by cursor recovery through the existing mixed-item route
|
|
210
|
+
whenever `recovery_required` is true.
|
|
202
211
|
|
|
203
212
|
**Limits:** request bodies are guarded in a two-tier shape. A streamed body
|
|
204
213
|
with no `Content-Length` header is capped at 4 MB before your API key
|
|
@@ -261,6 +270,9 @@ async def asyncio(
|
|
|
261
270
|
Provide `urls` (simple list) or `items` (per-item config), not both.
|
|
262
271
|
Webhook deliveries include `X-ByteKit-Event: bulk.completed` so
|
|
263
272
|
receivers can dispatch on the header without parsing the body shape.
|
|
273
|
+
The body follows `BulkCompletedWebhook`: at most 500 complete items and
|
|
274
|
+
1 MiB, followed by cursor recovery through the existing mixed-item route
|
|
275
|
+
whenever `recovery_required` is true.
|
|
264
276
|
|
|
265
277
|
**Limits:** request bodies are guarded in a two-tier shape. A streamed body
|
|
266
278
|
with no `Content-Length` header is capped at 4 MB before your API key
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
from typing import Any, Optional, Union
|
|
2
|
+
from urllib.parse import quote # BYTEKIT-PATH-QUOTE
|
|
3
|
+
|
|
4
|
+
import httpx
|
|
5
|
+
|
|
6
|
+
from ... import errors
|
|
7
|
+
from ...client import AuthenticatedClient, Client
|
|
8
|
+
from ...models.list_bulk_screenshots_response_200 import ListBulkScreenshotsResponse200
|
|
9
|
+
from ...models.list_bulk_screenshots_status import ListBulkScreenshotsStatus
|
|
10
|
+
from ...types import UNSET, Response, Unset
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _get_kwargs(
|
|
14
|
+
id: str,
|
|
15
|
+
*,
|
|
16
|
+
cursor: Union[Unset, str] = UNSET,
|
|
17
|
+
limit: Union[Unset, int] = UNSET,
|
|
18
|
+
status: Union[Unset, ListBulkScreenshotsStatus] = UNSET,
|
|
19
|
+
) -> dict[str, Any]:
|
|
20
|
+
params: dict[str, Any] = {}
|
|
21
|
+
|
|
22
|
+
params["cursor"] = cursor
|
|
23
|
+
|
|
24
|
+
params["limit"] = limit
|
|
25
|
+
|
|
26
|
+
json_status: Union[Unset, str] = UNSET
|
|
27
|
+
if not isinstance(status, Unset):
|
|
28
|
+
json_status = status.value
|
|
29
|
+
|
|
30
|
+
params["status"] = json_status
|
|
31
|
+
|
|
32
|
+
params = {k: v for k, v in params.items() if v is not UNSET and v is not None}
|
|
33
|
+
|
|
34
|
+
_kwargs: dict[str, Any] = {
|
|
35
|
+
"method": "get",
|
|
36
|
+
"url": "/v1/bulk/{id}/screenshots".format(id=quote(str(id), safe="")),
|
|
37
|
+
"params": params,
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return _kwargs
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _parse_response(
|
|
44
|
+
*, client: Union[AuthenticatedClient, Client], response: httpx.Response
|
|
45
|
+
) -> Optional[ListBulkScreenshotsResponse200]:
|
|
46
|
+
if response.status_code == 200:
|
|
47
|
+
response_200 = errors.bytekit_parse(ListBulkScreenshotsResponse200.from_dict, client=client, response=response)
|
|
48
|
+
|
|
49
|
+
return response_200
|
|
50
|
+
if client.raise_on_unexpected_status:
|
|
51
|
+
raise errors.bytekit_unexpected(response) # BYTEKIT-OP-GUARD
|
|
52
|
+
else:
|
|
53
|
+
return None
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _build_response(
|
|
57
|
+
*, client: Union[AuthenticatedClient, Client], response: httpx.Response
|
|
58
|
+
) -> Response[ListBulkScreenshotsResponse200]:
|
|
59
|
+
return Response(
|
|
60
|
+
status_code=errors.bytekit_status_code(response.status_code), # BYTEKIT-STATUS-COERCE
|
|
61
|
+
content=response.content,
|
|
62
|
+
headers=response.headers,
|
|
63
|
+
parsed=_parse_response(client=client, response=response),
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def sync_detailed(
|
|
68
|
+
id: str,
|
|
69
|
+
*,
|
|
70
|
+
client: Union[AuthenticatedClient, Client],
|
|
71
|
+
cursor: Union[Unset, str] = UNSET,
|
|
72
|
+
limit: Union[Unset, int] = UNSET,
|
|
73
|
+
status: Union[Unset, ListBulkScreenshotsStatus] = UNSET,
|
|
74
|
+
) -> Response[ListBulkScreenshotsResponse200]:
|
|
75
|
+
"""List bulk job items
|
|
76
|
+
|
|
77
|
+
Returns the bulk job's items, discriminated by `type`.
|
|
78
|
+
|
|
79
|
+
**Downloading item artifacts.** For a `completed` item with a storage key,
|
|
80
|
+
`image_url` (`type: screenshot`) and both `content_url` and `markdown_url`
|
|
81
|
+
(`type: scrape`) are **pre-signed** URLs, minted fresh on every read of
|
|
82
|
+
this endpoint and valid for **600 seconds (10 minutes)** —
|
|
83
|
+
the same signing lifetime as `content_url` on `GET /v1/fetch/bulk/{id}`.
|
|
84
|
+
Download inside that window, or re-poll this endpoint for a fresh
|
|
85
|
+
signature.
|
|
86
|
+
|
|
87
|
+
**When no signature is minted.** Three cases mint none: an item that is not
|
|
88
|
+
`completed`, a `completed` item with no storage key, and a `completed` item
|
|
89
|
+
whose object could not be signed — during an object-storage outage, for
|
|
90
|
+
instance. In all three the item's stored value is returned unchanged: `null`
|
|
91
|
+
while nothing has been stored, and otherwise a **private, unsigned**
|
|
92
|
+
object-storage URL that answers `401`. These fields are neither nulled nor
|
|
93
|
+
flagged in that case, so treat an artifact URL as usable only once you have
|
|
94
|
+
downloaded it, and re-poll for a fresh signature otherwise.
|
|
95
|
+
`artifact_warnings` and its `artifact_unavailable` code describe the sibling
|
|
96
|
+
`artifacts` object on `type: scrape` items only — they say nothing about
|
|
97
|
+
`image_url`, `content_url`, or `markdown_url`.
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
id (str):
|
|
101
|
+
cursor (Union[Unset, str]):
|
|
102
|
+
limit (Union[Unset, int]):
|
|
103
|
+
status (Union[Unset, ListBulkScreenshotsStatus]):
|
|
104
|
+
|
|
105
|
+
Raises:
|
|
106
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
107
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
110
|
+
Response[ListBulkScreenshotsResponse200]
|
|
111
|
+
"""
|
|
112
|
+
|
|
113
|
+
kwargs = _get_kwargs(
|
|
114
|
+
id=id,
|
|
115
|
+
cursor=cursor,
|
|
116
|
+
limit=limit,
|
|
117
|
+
status=status,
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
response = client.get_httpx_client().request(
|
|
121
|
+
**kwargs,
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
return _build_response(client=client, response=response)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def sync(
|
|
128
|
+
id: str,
|
|
129
|
+
*,
|
|
130
|
+
client: Union[AuthenticatedClient, Client],
|
|
131
|
+
cursor: Union[Unset, str] = UNSET,
|
|
132
|
+
limit: Union[Unset, int] = UNSET,
|
|
133
|
+
status: Union[Unset, ListBulkScreenshotsStatus] = UNSET,
|
|
134
|
+
) -> Optional[ListBulkScreenshotsResponse200]:
|
|
135
|
+
"""List bulk job items
|
|
136
|
+
|
|
137
|
+
Returns the bulk job's items, discriminated by `type`.
|
|
138
|
+
|
|
139
|
+
**Downloading item artifacts.** For a `completed` item with a storage key,
|
|
140
|
+
`image_url` (`type: screenshot`) and both `content_url` and `markdown_url`
|
|
141
|
+
(`type: scrape`) are **pre-signed** URLs, minted fresh on every read of
|
|
142
|
+
this endpoint and valid for **600 seconds (10 minutes)** —
|
|
143
|
+
the same signing lifetime as `content_url` on `GET /v1/fetch/bulk/{id}`.
|
|
144
|
+
Download inside that window, or re-poll this endpoint for a fresh
|
|
145
|
+
signature.
|
|
146
|
+
|
|
147
|
+
**When no signature is minted.** Three cases mint none: an item that is not
|
|
148
|
+
`completed`, a `completed` item with no storage key, and a `completed` item
|
|
149
|
+
whose object could not be signed — during an object-storage outage, for
|
|
150
|
+
instance. In all three the item's stored value is returned unchanged: `null`
|
|
151
|
+
while nothing has been stored, and otherwise a **private, unsigned**
|
|
152
|
+
object-storage URL that answers `401`. These fields are neither nulled nor
|
|
153
|
+
flagged in that case, so treat an artifact URL as usable only once you have
|
|
154
|
+
downloaded it, and re-poll for a fresh signature otherwise.
|
|
155
|
+
`artifact_warnings` and its `artifact_unavailable` code describe the sibling
|
|
156
|
+
`artifacts` object on `type: scrape` items only — they say nothing about
|
|
157
|
+
`image_url`, `content_url`, or `markdown_url`.
|
|
158
|
+
|
|
159
|
+
Args:
|
|
160
|
+
id (str):
|
|
161
|
+
cursor (Union[Unset, str]):
|
|
162
|
+
limit (Union[Unset, int]):
|
|
163
|
+
status (Union[Unset, ListBulkScreenshotsStatus]):
|
|
164
|
+
|
|
165
|
+
Raises:
|
|
166
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
167
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
168
|
+
|
|
169
|
+
Returns:
|
|
170
|
+
ListBulkScreenshotsResponse200
|
|
171
|
+
"""
|
|
172
|
+
|
|
173
|
+
return sync_detailed(
|
|
174
|
+
id=id,
|
|
175
|
+
client=client,
|
|
176
|
+
cursor=cursor,
|
|
177
|
+
limit=limit,
|
|
178
|
+
status=status,
|
|
179
|
+
).parsed
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
async def asyncio_detailed(
|
|
183
|
+
id: str,
|
|
184
|
+
*,
|
|
185
|
+
client: Union[AuthenticatedClient, Client],
|
|
186
|
+
cursor: Union[Unset, str] = UNSET,
|
|
187
|
+
limit: Union[Unset, int] = UNSET,
|
|
188
|
+
status: Union[Unset, ListBulkScreenshotsStatus] = UNSET,
|
|
189
|
+
) -> Response[ListBulkScreenshotsResponse200]:
|
|
190
|
+
"""List bulk job items
|
|
191
|
+
|
|
192
|
+
Returns the bulk job's items, discriminated by `type`.
|
|
193
|
+
|
|
194
|
+
**Downloading item artifacts.** For a `completed` item with a storage key,
|
|
195
|
+
`image_url` (`type: screenshot`) and both `content_url` and `markdown_url`
|
|
196
|
+
(`type: scrape`) are **pre-signed** URLs, minted fresh on every read of
|
|
197
|
+
this endpoint and valid for **600 seconds (10 minutes)** —
|
|
198
|
+
the same signing lifetime as `content_url` on `GET /v1/fetch/bulk/{id}`.
|
|
199
|
+
Download inside that window, or re-poll this endpoint for a fresh
|
|
200
|
+
signature.
|
|
201
|
+
|
|
202
|
+
**When no signature is minted.** Three cases mint none: an item that is not
|
|
203
|
+
`completed`, a `completed` item with no storage key, and a `completed` item
|
|
204
|
+
whose object could not be signed — during an object-storage outage, for
|
|
205
|
+
instance. In all three the item's stored value is returned unchanged: `null`
|
|
206
|
+
while nothing has been stored, and otherwise a **private, unsigned**
|
|
207
|
+
object-storage URL that answers `401`. These fields are neither nulled nor
|
|
208
|
+
flagged in that case, so treat an artifact URL as usable only once you have
|
|
209
|
+
downloaded it, and re-poll for a fresh signature otherwise.
|
|
210
|
+
`artifact_warnings` and its `artifact_unavailable` code describe the sibling
|
|
211
|
+
`artifacts` object on `type: scrape` items only — they say nothing about
|
|
212
|
+
`image_url`, `content_url`, or `markdown_url`.
|
|
213
|
+
|
|
214
|
+
Args:
|
|
215
|
+
id (str):
|
|
216
|
+
cursor (Union[Unset, str]):
|
|
217
|
+
limit (Union[Unset, int]):
|
|
218
|
+
status (Union[Unset, ListBulkScreenshotsStatus]):
|
|
219
|
+
|
|
220
|
+
Raises:
|
|
221
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
222
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
223
|
+
|
|
224
|
+
Returns:
|
|
225
|
+
Response[ListBulkScreenshotsResponse200]
|
|
226
|
+
"""
|
|
227
|
+
|
|
228
|
+
kwargs = _get_kwargs(
|
|
229
|
+
id=id,
|
|
230
|
+
cursor=cursor,
|
|
231
|
+
limit=limit,
|
|
232
|
+
status=status,
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
response = await client.get_async_httpx_client().request(**kwargs)
|
|
236
|
+
|
|
237
|
+
return _build_response(client=client, response=response)
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
async def asyncio(
|
|
241
|
+
id: str,
|
|
242
|
+
*,
|
|
243
|
+
client: Union[AuthenticatedClient, Client],
|
|
244
|
+
cursor: Union[Unset, str] = UNSET,
|
|
245
|
+
limit: Union[Unset, int] = UNSET,
|
|
246
|
+
status: Union[Unset, ListBulkScreenshotsStatus] = UNSET,
|
|
247
|
+
) -> Optional[ListBulkScreenshotsResponse200]:
|
|
248
|
+
"""List bulk job items
|
|
249
|
+
|
|
250
|
+
Returns the bulk job's items, discriminated by `type`.
|
|
251
|
+
|
|
252
|
+
**Downloading item artifacts.** For a `completed` item with a storage key,
|
|
253
|
+
`image_url` (`type: screenshot`) and both `content_url` and `markdown_url`
|
|
254
|
+
(`type: scrape`) are **pre-signed** URLs, minted fresh on every read of
|
|
255
|
+
this endpoint and valid for **600 seconds (10 minutes)** —
|
|
256
|
+
the same signing lifetime as `content_url` on `GET /v1/fetch/bulk/{id}`.
|
|
257
|
+
Download inside that window, or re-poll this endpoint for a fresh
|
|
258
|
+
signature.
|
|
259
|
+
|
|
260
|
+
**When no signature is minted.** Three cases mint none: an item that is not
|
|
261
|
+
`completed`, a `completed` item with no storage key, and a `completed` item
|
|
262
|
+
whose object could not be signed — during an object-storage outage, for
|
|
263
|
+
instance. In all three the item's stored value is returned unchanged: `null`
|
|
264
|
+
while nothing has been stored, and otherwise a **private, unsigned**
|
|
265
|
+
object-storage URL that answers `401`. These fields are neither nulled nor
|
|
266
|
+
flagged in that case, so treat an artifact URL as usable only once you have
|
|
267
|
+
downloaded it, and re-poll for a fresh signature otherwise.
|
|
268
|
+
`artifact_warnings` and its `artifact_unavailable` code describe the sibling
|
|
269
|
+
`artifacts` object on `type: scrape` items only — they say nothing about
|
|
270
|
+
`image_url`, `content_url`, or `markdown_url`.
|
|
271
|
+
|
|
272
|
+
Args:
|
|
273
|
+
id (str):
|
|
274
|
+
cursor (Union[Unset, str]):
|
|
275
|
+
limit (Union[Unset, int]):
|
|
276
|
+
status (Union[Unset, ListBulkScreenshotsStatus]):
|
|
277
|
+
|
|
278
|
+
Raises:
|
|
279
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
280
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
281
|
+
|
|
282
|
+
Returns:
|
|
283
|
+
ListBulkScreenshotsResponse200
|
|
284
|
+
"""
|
|
285
|
+
|
|
286
|
+
return (
|
|
287
|
+
await asyncio_detailed(
|
|
288
|
+
id=id,
|
|
289
|
+
client=client,
|
|
290
|
+
cursor=cursor,
|
|
291
|
+
limit=limit,
|
|
292
|
+
status=status,
|
|
293
|
+
)
|
|
294
|
+
).parsed
|
|
@@ -74,6 +74,10 @@ def sync_detailed(
|
|
|
74
74
|
|
|
75
75
|
Enqueues multiple URLs for HTTP fetching. Results delivered via webhook.
|
|
76
76
|
Does not support options that require page rendering (wait_for_selector, etc.).
|
|
77
|
+
Completion deliveries use `X-ByteKit-Event: bulk.completed` and the
|
|
78
|
+
`BulkCompletedWebhook` contract: at most 500 complete items and 1 MiB,
|
|
79
|
+
followed by cursor recovery through `GET /v1/fetch/bulk/{id}` whenever
|
|
80
|
+
`recovery_required` is true.
|
|
77
81
|
|
|
78
82
|
**Limits:** request bodies are guarded in a two-tier shape. A streamed body
|
|
79
83
|
with no `Content-Length` header is capped at 2 MB before your API key
|
|
@@ -117,6 +121,10 @@ def sync(
|
|
|
117
121
|
|
|
118
122
|
Enqueues multiple URLs for HTTP fetching. Results delivered via webhook.
|
|
119
123
|
Does not support options that require page rendering (wait_for_selector, etc.).
|
|
124
|
+
Completion deliveries use `X-ByteKit-Event: bulk.completed` and the
|
|
125
|
+
`BulkCompletedWebhook` contract: at most 500 complete items and 1 MiB,
|
|
126
|
+
followed by cursor recovery through `GET /v1/fetch/bulk/{id}` whenever
|
|
127
|
+
`recovery_required` is true.
|
|
120
128
|
|
|
121
129
|
**Limits:** request bodies are guarded in a two-tier shape. A streamed body
|
|
122
130
|
with no `Content-Length` header is capped at 2 MB before your API key
|
|
@@ -155,6 +163,10 @@ async def asyncio_detailed(
|
|
|
155
163
|
|
|
156
164
|
Enqueues multiple URLs for HTTP fetching. Results delivered via webhook.
|
|
157
165
|
Does not support options that require page rendering (wait_for_selector, etc.).
|
|
166
|
+
Completion deliveries use `X-ByteKit-Event: bulk.completed` and the
|
|
167
|
+
`BulkCompletedWebhook` contract: at most 500 complete items and 1 MiB,
|
|
168
|
+
followed by cursor recovery through `GET /v1/fetch/bulk/{id}` whenever
|
|
169
|
+
`recovery_required` is true.
|
|
158
170
|
|
|
159
171
|
**Limits:** request bodies are guarded in a two-tier shape. A streamed body
|
|
160
172
|
with no `Content-Length` header is capped at 2 MB before your API key
|
|
@@ -196,6 +208,10 @@ async def asyncio(
|
|
|
196
208
|
|
|
197
209
|
Enqueues multiple URLs for HTTP fetching. Results delivered via webhook.
|
|
198
210
|
Does not support options that require page rendering (wait_for_selector, etc.).
|
|
211
|
+
Completion deliveries use `X-ByteKit-Event: bulk.completed` and the
|
|
212
|
+
`BulkCompletedWebhook` contract: at most 500 complete items and 1 MiB,
|
|
213
|
+
followed by cursor recovery through `GET /v1/fetch/bulk/{id}` whenever
|
|
214
|
+
`recovery_required` is true.
|
|
199
215
|
|
|
200
216
|
**Limits:** request bodies are guarded in a two-tier shape. A streamed body
|
|
201
217
|
with no `Content-Length` header is capped at 2 MB before your API key
|