diff --git a/src/apify_client/clients/base/resource_collection_client.py b/src/apify_client/clients/base/resource_collection_client.py index a91b1ed7..e4984fa9 100644 --- a/src/apify_client/clients/base/resource_collection_client.py +++ b/src/apify_client/clients/base/resource_collection_client.py @@ -1,13 +1,46 @@ from __future__ import annotations -from typing import Any +from typing import Any, Generic, TypeVar -from apify_shared.models import ListPage from apify_shared.utils import ignore_docs, parse_date_fields from apify_client._utils import pluck_data from apify_client.clients.base.base_client import BaseClient, BaseClientAsync +T = TypeVar('T') + + +class ListPage(Generic[T]): + """A single page of items returned from a list() method.""" + + items: list[T] + """List of returned objects on this page""" + + count: int + """Count of the returned objects on this page""" + + offset: int + """The limit on the number of returned objects offset specified in the API call""" + + limit: int + """The offset of the first object specified in the API call""" + + total: int + """Total number of objects matching the API call criteria""" + + desc: bool + """Whether the listing is descending or not""" + + @ignore_docs + def __init__(self, data: dict) -> None: + """Initialize a ListPage instance from the API response data.""" + self.items = data.get('items', []) + self.offset = data.get('offset', 0) + self.limit = data.get('limit', 0) + self.count = data['count'] if 'count' in data else len(self.items) + self.total = data['total'] if 'total' in data else self.offset + self.count + self.desc = data.get('desc', False) + @ignore_docs class ResourceCollectionClient(BaseClient): diff --git a/src/apify_client/clients/resource_clients/actor_collection.py b/src/apify_client/clients/resource_clients/actor_collection.py index 2f91ba7b..b08d33d0 100644 --- a/src/apify_client/clients/resource_clients/actor_collection.py +++ b/src/apify_client/clients/resource_clients/actor_collection.py @@ -8,7 +8,7 @@ from apify_client.clients.resource_clients.actor import get_actor_representation if TYPE_CHECKING: - from apify_shared.models import ListPage + from apify_client.clients.base.resource_collection_client import ListPage class ActorCollectionClient(ResourceCollectionClient): diff --git a/src/apify_client/clients/resource_clients/actor_env_var_collection.py b/src/apify_client/clients/resource_clients/actor_env_var_collection.py index e6ffb7a8..962be3e9 100644 --- a/src/apify_client/clients/resource_clients/actor_env_var_collection.py +++ b/src/apify_client/clients/resource_clients/actor_env_var_collection.py @@ -8,7 +8,7 @@ from apify_client.clients.resource_clients.actor_env_var import get_actor_env_var_representation if TYPE_CHECKING: - from apify_shared.models import ListPage + from apify_client.clients.base.resource_collection_client import ListPage class ActorEnvVarCollectionClient(ResourceCollectionClient): diff --git a/src/apify_client/clients/resource_clients/actor_version_collection.py b/src/apify_client/clients/resource_clients/actor_version_collection.py index fa582957..a335e97d 100644 --- a/src/apify_client/clients/resource_clients/actor_version_collection.py +++ b/src/apify_client/clients/resource_clients/actor_version_collection.py @@ -9,7 +9,8 @@ if TYPE_CHECKING: from apify_shared.consts import ActorSourceType - from apify_shared.models import ListPage + + from apify_client.clients.base.resource_collection_client import ListPage class ActorVersionCollectionClient(ResourceCollectionClient): diff --git a/src/apify_client/clients/resource_clients/build_collection.py b/src/apify_client/clients/resource_clients/build_collection.py index bf42af26..7da31df2 100644 --- a/src/apify_client/clients/resource_clients/build_collection.py +++ b/src/apify_client/clients/resource_clients/build_collection.py @@ -7,7 +7,7 @@ from apify_client.clients.base import ResourceCollectionClient, ResourceCollectionClientAsync if TYPE_CHECKING: - from apify_shared.models import ListPage + from apify_client.clients.base.resource_collection_client import ListPage class BuildCollectionClient(ResourceCollectionClient): diff --git a/src/apify_client/clients/resource_clients/dataset_collection.py b/src/apify_client/clients/resource_clients/dataset_collection.py index 3aa1658f..d28f915c 100644 --- a/src/apify_client/clients/resource_clients/dataset_collection.py +++ b/src/apify_client/clients/resource_clients/dataset_collection.py @@ -7,7 +7,7 @@ from apify_client.clients.base import ResourceCollectionClient, ResourceCollectionClientAsync if TYPE_CHECKING: - from apify_shared.models import ListPage + from apify_client.clients.base.resource_collection_client import ListPage class DatasetCollectionClient(ResourceCollectionClient): diff --git a/src/apify_client/clients/resource_clients/key_value_store_collection.py b/src/apify_client/clients/resource_clients/key_value_store_collection.py index 95277682..242b07b8 100644 --- a/src/apify_client/clients/resource_clients/key_value_store_collection.py +++ b/src/apify_client/clients/resource_clients/key_value_store_collection.py @@ -7,7 +7,7 @@ from apify_client.clients.base import ResourceCollectionClient, ResourceCollectionClientAsync if TYPE_CHECKING: - from apify_shared.models import ListPage + from apify_client.clients.base.resource_collection_client import ListPage class KeyValueStoreCollectionClient(ResourceCollectionClient): diff --git a/src/apify_client/clients/resource_clients/request_queue_collection.py b/src/apify_client/clients/resource_clients/request_queue_collection.py index 5d458568..d3311401 100644 --- a/src/apify_client/clients/resource_clients/request_queue_collection.py +++ b/src/apify_client/clients/resource_clients/request_queue_collection.py @@ -7,7 +7,7 @@ from apify_client.clients.base import ResourceCollectionClient, ResourceCollectionClientAsync if TYPE_CHECKING: - from apify_shared.models import ListPage + from apify_client.clients.base.resource_collection_client import ListPage class RequestQueueCollectionClient(ResourceCollectionClient): diff --git a/src/apify_client/clients/resource_clients/run_collection.py b/src/apify_client/clients/resource_clients/run_collection.py index c1f962fb..0e314c91 100644 --- a/src/apify_client/clients/resource_clients/run_collection.py +++ b/src/apify_client/clients/resource_clients/run_collection.py @@ -8,7 +8,8 @@ if TYPE_CHECKING: from apify_shared.consts import ActorJobStatus - from apify_shared.models import ListPage + + from apify_client.clients.base.resource_collection_client import ListPage class RunCollectionClient(ResourceCollectionClient): diff --git a/src/apify_client/clients/resource_clients/schedule_collection.py b/src/apify_client/clients/resource_clients/schedule_collection.py index 64ff15d2..61dbe839 100644 --- a/src/apify_client/clients/resource_clients/schedule_collection.py +++ b/src/apify_client/clients/resource_clients/schedule_collection.py @@ -8,7 +8,7 @@ from apify_client.clients.resource_clients.schedule import _get_schedule_representation if TYPE_CHECKING: - from apify_shared.models import ListPage + from apify_client.clients.base.resource_collection_client import ListPage class ScheduleCollectionClient(ResourceCollectionClient): diff --git a/src/apify_client/clients/resource_clients/store_collection.py b/src/apify_client/clients/resource_clients/store_collection.py index 1defe3db..f6de47c0 100644 --- a/src/apify_client/clients/resource_clients/store_collection.py +++ b/src/apify_client/clients/resource_clients/store_collection.py @@ -7,7 +7,7 @@ from apify_client.clients.base import ResourceCollectionClient, ResourceCollectionClientAsync if TYPE_CHECKING: - from apify_shared.models import ListPage + from apify_client.clients.base.resource_collection_client import ListPage class StoreCollectionClient(ResourceCollectionClient): diff --git a/src/apify_client/clients/resource_clients/task_collection.py b/src/apify_client/clients/resource_clients/task_collection.py index 257c052d..811f8961 100644 --- a/src/apify_client/clients/resource_clients/task_collection.py +++ b/src/apify_client/clients/resource_clients/task_collection.py @@ -8,7 +8,7 @@ from apify_client.clients.resource_clients.task import get_task_representation if TYPE_CHECKING: - from apify_shared.models import ListPage + from apify_client.clients.base.resource_collection_client import ListPage class TaskCollectionClient(ResourceCollectionClient): diff --git a/src/apify_client/clients/resource_clients/webhook_collection.py b/src/apify_client/clients/resource_clients/webhook_collection.py index ea4f11a3..65ce54b2 100644 --- a/src/apify_client/clients/resource_clients/webhook_collection.py +++ b/src/apify_client/clients/resource_clients/webhook_collection.py @@ -9,7 +9,8 @@ if TYPE_CHECKING: from apify_shared.consts import WebhookEventType - from apify_shared.models import ListPage + + from apify_client.clients.base.resource_collection_client import ListPage class WebhookCollectionClient(ResourceCollectionClient): diff --git a/src/apify_client/clients/resource_clients/webhook_dispatch_collection.py b/src/apify_client/clients/resource_clients/webhook_dispatch_collection.py index cdf4d964..2cdb87cf 100644 --- a/src/apify_client/clients/resource_clients/webhook_dispatch_collection.py +++ b/src/apify_client/clients/resource_clients/webhook_dispatch_collection.py @@ -7,7 +7,7 @@ from apify_client.clients.base import ResourceCollectionClient, ResourceCollectionClientAsync if TYPE_CHECKING: - from apify_shared.models import ListPage + from apify_client.clients.base.resource_collection_client import ListPage class WebhookDispatchCollectionClient(ResourceCollectionClient):