Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/02_concepts/code/10_architecture_imports.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from apify_client import (
from apify_client.http_clients import (
HttpClient,
HttpClientAsync,
HttpResponse,
Expand Down
4 changes: 3 additions & 1 deletion docs/02_concepts/code/10_plugging_in_async.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from typing import Any

from apify_client import ApifyClientAsync, HttpClientAsync, HttpResponse, Timeout
from apify_client import ApifyClientAsync
from apify_client.http_clients import HttpClientAsync, HttpResponse
from apify_client.types import Timeout

TOKEN = 'MY-APIFY-TOKEN'

Expand Down
4 changes: 3 additions & 1 deletion docs/02_concepts/code/10_plugging_in_sync.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from typing import Any

from apify_client import ApifyClient, HttpClient, HttpResponse, Timeout
from apify_client import ApifyClient
from apify_client.http_clients import HttpClient, HttpResponse
from apify_client.types import Timeout

TOKEN = 'MY-APIFY-TOKEN'

Expand Down
8 changes: 6 additions & 2 deletions docs/03_guides/code/05_custom_http_client_async.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
from __future__ import annotations

import asyncio
from typing import Any
from typing import TYPE_CHECKING, Any

import httpx

from apify_client import ApifyClientAsync, HttpClientAsync, HttpResponse, Timeout
from apify_client import ApifyClientAsync
from apify_client.http_clients import HttpClientAsync, HttpResponse

if TYPE_CHECKING:
from apify_client.types import Timeout

TOKEN = 'MY-APIFY-TOKEN'

Expand Down
8 changes: 6 additions & 2 deletions docs/03_guides/code/05_custom_http_client_sync.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
from __future__ import annotations

from typing import Any
from typing import TYPE_CHECKING, Any

import httpx

from apify_client import ApifyClient, HttpClient, HttpResponse, Timeout
from apify_client import ApifyClient
from apify_client.http_clients import HttpClient, HttpResponse

if TYPE_CHECKING:
from apify_client.types import Timeout

TOKEN = 'MY-APIFY-TOKEN'

Expand Down
5 changes: 4 additions & 1 deletion docs/04_upgrading/upgrading_to_v3.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,8 @@ The HTTP layer is now abstracted behind <ApiLink to="class/HttpClient">`HttpClie
To use a custom HTTP client, implement the `call()` method and pass the instance via the <ApiLink to="class/ApifyClient#with_custom_http_client">`ApifyClient.with_custom_http_client()`</ApiLink> class method:

```python
from apify_client import ApifyClient, HttpClient, HttpResponse, Timeout
from apify_client import ApifyClient
from apify_client.http_clients import HttpClient, HttpResponse

class MyHttpClient(HttpClient):
def call(self, *, method, url, headers=None, params=None,
Expand All @@ -127,6 +128,8 @@ client = ApifyClient.with_custom_http_client(

The response must satisfy the <ApiLink to="class/HttpResponse">`HttpResponse`</ApiLink> protocol (properties: `status_code`, `text`, `content`, `headers`; methods: `json()`, `read()`, `close()`, `iter_bytes()`). Many popular libraries like `httpx` already satisfy this protocol out of the box.

The HTTP base classes, the `HttpResponse` protocol, and the default `ImpitHttpClient` / `ImpitHttpClientAsync` implementations live in the `apify_client.http_clients` submodule. The `Timeout` alias used on the `call()` signature lives in `apify_client.types`.

For a full walkthrough and working examples, see the [Custom HTTP clients](/docs/concepts/custom-http-clients) concept page and the [Custom HTTP client](/docs/guides/custom-http-client-httpx) guide.

## Tiered timeout system
Expand Down
14 changes: 0 additions & 14 deletions src/apify_client/__init__.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,11 @@
from importlib import metadata

from ._apify_client import ApifyClient, ApifyClientAsync
from ._http_clients import (
HttpClient,
HttpClientAsync,
HttpResponse,
ImpitHttpClient,
ImpitHttpClientAsync,
)
from ._types import Timeout

__version__ = metadata.version('apify-client')

__all__ = [
'ApifyClient',
'ApifyClientAsync',
'HttpClient',
'HttpClientAsync',
'HttpResponse',
'ImpitHttpClient',
'ImpitHttpClientAsync',
'Timeout',
'__version__',
]
8 changes: 5 additions & 3 deletions src/apify_client/_apify_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
DEFAULT_TIMEOUT_SHORT,
)
from apify_client._docs import docs_group
from apify_client._http_clients import HttpClient, HttpClientAsync, ImpitHttpClient, ImpitHttpClientAsync
from apify_client._resource_clients import (
ActorClient,
ActorClientAsync,
Expand Down Expand Up @@ -74,6 +73,7 @@
)
from apify_client._statistics import ClientStatistics
from apify_client._utils import check_custom_headers
from apify_client.http_clients import HttpClient, HttpClientAsync, ImpitHttpClient, ImpitHttpClientAsync

if TYPE_CHECKING:
from datetime import timedelta
Expand Down Expand Up @@ -224,7 +224,8 @@ def with_custom_http_client(
### Usage

```python
from apify_client import ApifyClient, HttpClient, HttpResponse
from apify_client import ApifyClient
from apify_client.http_clients import HttpClient, HttpResponse

class MyHttpClient(HttpClient):
def call(self, *, method, url, **kwargs) -> HttpResponse:
Expand Down Expand Up @@ -577,7 +578,8 @@ def with_custom_http_client(
### Usage

```python
from apify_client import ApifyClientAsync, HttpClientAsync, HttpResponse
from apify_client import ApifyClientAsync
from apify_client.http_clients import HttpClientAsync, HttpResponse

class MyHttpClient(HttpClientAsync):
async def call(self, *, method, url, **kwargs) -> HttpResponse:
Expand Down
12 changes: 7 additions & 5 deletions src/apify_client/_resource_clients/_resource_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@
import time
from datetime import UTC, datetime, timedelta
from functools import cached_property
from typing import TYPE_CHECKING, Any, get_args
from typing import TYPE_CHECKING, Any, Literal, get_args

from apify_client._consts import DEFAULT_WAIT_FOR_FINISH, DEFAULT_WAIT_WHEN_JOB_NOT_EXIST
from apify_client._docs import docs_group
from apify_client._logging import WithLogDetailsClient
from apify_client._types import TerminalActorJobStatus
from apify_client._utils import (
catch_not_found_for_resource_or_throw,
catch_not_found_or_throw,
Expand All @@ -21,10 +20,13 @@

if TYPE_CHECKING:
from apify_client._client_registry import ClientRegistry, ClientRegistryAsync
from apify_client._http_clients import HttpClient, HttpClientAsync
from apify_client._types import Timeout
from apify_client.http_clients import HttpClient, HttpClientAsync
from apify_client.types import Timeout

_TERMINAL_STATUSES: frozenset[TerminalActorJobStatus] = frozenset(get_args(TerminalActorJobStatus))
_TerminalActorJobStatus = Literal['SUCCEEDED', 'FAILED', 'TIMED-OUT', 'ABORTED']
"""Subset of `ActorJobStatus` values that indicate the job has finished and will not change again."""

_TERMINAL_STATUSES: frozenset[_TerminalActorJobStatus] = frozenset(get_args(_TerminalActorJobStatus))


class ResourceClientBase(metaclass=WithLogDetailsClient):
Expand Down
2 changes: 1 addition & 1 deletion src/apify_client/_resource_clients/actor.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
WebhookCollectionClient,
WebhookCollectionClientAsync,
)
from apify_client._types import Timeout, WebhooksList
from apify_client.types import Timeout, WebhooksList

_PricingInfo = (
PayPerEventActorPricingInfo
Expand Down
2 changes: 1 addition & 1 deletion src/apify_client/_resource_clients/actor_collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
from datetime import timedelta

from apify_client._models import ActorShort
from apify_client._types import Timeout
from apify_client.types import Timeout


@docs_group('Resource clients')
Expand Down
2 changes: 1 addition & 1 deletion src/apify_client/_resource_clients/actor_env_var.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from apify_client._resource_clients._resource_client import ResourceClient, ResourceClientAsync

if TYPE_CHECKING:
from apify_client._types import Timeout
from apify_client.types import Timeout


@docs_group('Resource clients')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
if TYPE_CHECKING:
from collections.abc import AsyncIterator, Iterator

from apify_client._types import Timeout
from apify_client.types import Timeout


@docs_group('Resource clients')
Expand Down
2 changes: 1 addition & 1 deletion src/apify_client/_resource_clients/actor_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
ActorEnvVarCollectionClient,
ActorEnvVarCollectionClientAsync,
)
from apify_client._types import Timeout
from apify_client.types import Timeout

_source_file_list_adapter = TypeAdapter(list[SourceCodeFile | SourceCodeFolder])

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
from collections.abc import AsyncIterator, Iterator

from apify_client._literals import VersionSourceType
from apify_client._types import Timeout
from apify_client.types import Timeout


_source_file_list_adapter = TypeAdapter(list[SourceCodeFile | SourceCodeFolder])
Expand Down
2 changes: 1 addition & 1 deletion src/apify_client/_resource_clients/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from datetime import timedelta

from apify_client._resource_clients import LogClient, LogClientAsync
from apify_client._types import Timeout
from apify_client.types import Timeout


@docs_group('Resource clients')
Expand Down
2 changes: 1 addition & 1 deletion src/apify_client/_resource_clients/build_collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from collections.abc import AsyncIterator, Iterator

from apify_client._models import BuildShort
from apify_client._types import Timeout
from apify_client.types import Timeout


@docs_group('Resource clients')
Expand Down
4 changes: 2 additions & 2 deletions src/apify_client/_resource_clients/dataset.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
from collections.abc import AsyncIterator, Iterator
from datetime import timedelta

from apify_client._http_clients import HttpResponse
from apify_client._literals import GeneralAccess
from apify_client._types import JsonSerializable, Timeout
from apify_client.http_clients import HttpResponse
from apify_client.types import JsonSerializable, Timeout


@docs_group('Other')
Expand Down
2 changes: 1 addition & 1 deletion src/apify_client/_resource_clients/dataset_collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

from apify_client._literals import StorageOwnership
from apify_client._models import DatasetListItem
from apify_client._types import Timeout
from apify_client.types import Timeout


@docs_group('Resource clients')
Expand Down
4 changes: 2 additions & 2 deletions src/apify_client/_resource_clients/key_value_store.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@
from collections.abc import AsyncIterator, Iterator
from datetime import timedelta

from apify_client._http_clients import HttpResponse
from apify_client._literals import GeneralAccess
from apify_client._types import Timeout
from apify_client.http_clients import HttpResponse
from apify_client.types import Timeout


def _parse_get_record_response(response: HttpResponse) -> Any:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
from collections.abc import AsyncIterator, Iterator

from apify_client._literals import StorageOwnership
from apify_client._types import Timeout
from apify_client.types import Timeout


@docs_group('Resource clients')
Expand Down
4 changes: 2 additions & 2 deletions src/apify_client/_resource_clients/log.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
if TYPE_CHECKING:
from collections.abc import AsyncIterator, Iterator

from apify_client._http_clients import HttpResponse
from apify_client._types import Timeout
from apify_client.http_clients import HttpResponse
from apify_client.types import Timeout


@docs_group('Resource clients')
Expand Down
2 changes: 1 addition & 1 deletion src/apify_client/_resource_clients/request_queue.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@

from apify_client._literals import GeneralAccess
from apify_client._typeddicts import RequestDict, RequestDraftDeleteDict, RequestDraftDict
from apify_client._types import Timeout
from apify_client.types import Timeout

_RQ_MAX_REQUESTS_PER_BATCH = 25
_MAX_PAYLOAD_SIZE_BYTES = 9 * 1024 * 1024 # 9 MB
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

from apify_client._literals import StorageOwnership
from apify_client._models import RequestQueueShort
from apify_client._types import Timeout
from apify_client.types import Timeout


@docs_group('Resource clients')
Expand Down
2 changes: 1 addition & 1 deletion src/apify_client/_resource_clients/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
RequestQueueClient,
RequestQueueClientAsync,
)
from apify_client._types import Timeout
from apify_client.types import Timeout


@docs_group('Resource clients')
Expand Down
2 changes: 1 addition & 1 deletion src/apify_client/_resource_clients/run_collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

from apify_client._literals import ActorJobStatus
from apify_client._models import RunShort
from apify_client._types import Timeout
from apify_client.types import Timeout


@docs_group('Resource clients')
Expand Down
2 changes: 1 addition & 1 deletion src/apify_client/_resource_clients/schedule.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
from apify_client._utils import response_to_dict

if TYPE_CHECKING:
from apify_client._types import Timeout
from apify_client.types import Timeout


@docs_group('Resource clients')
Expand Down
2 changes: 1 addition & 1 deletion src/apify_client/_resource_clients/schedule_collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from collections.abc import AsyncIterator, Iterator

from apify_client._models import ScheduleShort
from apify_client._types import Timeout
from apify_client.types import Timeout


@docs_group('Resource clients')
Expand Down
2 changes: 1 addition & 1 deletion src/apify_client/_resource_clients/store_collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from collections.abc import AsyncIterator, Iterator

from apify_client._models import StoreListActor
from apify_client._types import Timeout
from apify_client.types import Timeout


@docs_group('Resource clients')
Expand Down
2 changes: 1 addition & 1 deletion src/apify_client/_resource_clients/task.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
WebhookCollectionClientAsync,
)
from apify_client._typeddicts import TaskInputDict
from apify_client._types import Timeout, WebhooksList
from apify_client.types import Timeout, WebhooksList


@docs_group('Resource clients')
Expand Down
2 changes: 1 addition & 1 deletion src/apify_client/_resource_clients/task_collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

from apify_client._models import TaskShort
from apify_client._typeddicts import TaskInputDict
from apify_client._types import Timeout
from apify_client.types import Timeout


@docs_group('Resource clients')
Expand Down
2 changes: 1 addition & 1 deletion src/apify_client/_resource_clients/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
from apify_client._utils import response_to_dict

if TYPE_CHECKING:
from apify_client._types import Timeout
from apify_client.types import Timeout


@docs_group('Resource clients')
Expand Down
2 changes: 1 addition & 1 deletion src/apify_client/_resource_clients/webhook.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
if TYPE_CHECKING:
from apify_client._literals import WebhookEventType
from apify_client._resource_clients import WebhookDispatchCollectionClient, WebhookDispatchCollectionClientAsync
from apify_client._types import Timeout
from apify_client.types import Timeout


@docs_group('Resource clients')
Expand Down
Loading
Loading