From 8d80beec085eba9836a31d57d5b01df44c1dd268 Mon Sep 17 00:00:00 2001 From: Josef Prochazka Date: Fri, 25 Jul 2025 11:30:30 +0200 Subject: [PATCH 1/2] Move `ListPage` from `apify_shared` as it is not used anywhere else and is not rendered in the docs --- .../base/resource_collection_client.py | 32 +++++++++++++++++-- .../resource_clients/actor_collection.py | 2 +- .../actor_env_var_collection.py | 2 +- .../actor_version_collection.py | 3 +- .../resource_clients/build_collection.py | 2 +- .../resource_clients/dataset_collection.py | 2 +- .../key_value_store_collection.py | 2 +- .../request_queue_collection.py | 2 +- .../resource_clients/run_collection.py | 3 +- .../resource_clients/schedule_collection.py | 2 +- .../resource_clients/store_collection.py | 2 +- .../resource_clients/task_collection.py | 2 +- .../resource_clients/webhook_collection.py | 3 +- .../webhook_dispatch_collection.py | 2 +- 14 files changed, 46 insertions(+), 15 deletions(-) diff --git a/src/apify_client/clients/base/resource_collection_client.py b/src/apify_client/clients/base/resource_collection_client.py index a91b1ed7..1c22487d 100644 --- a/src/apify_client/clients/base/resource_collection_client.py +++ b/src/apify_client/clients/base/resource_collection_client.py @@ -1,13 +1,41 @@ 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.""" + + #: list: List of returned objects on this page + items: list[T] + #: int: Count of the returned objects on this page + count: int + #: int: The limit on the number of returned objects offset specified in the API call + offset: int + #: int: The offset of the first object specified in the API call + limit: int + #: int: Total number of objects matching the API call criteria + total: int + #: bool: Whether the listing is descending or not + desc: bool + + @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): From eddc362ab2130d0442f10d9a727caf00cac36566 Mon Sep 17 00:00:00 2001 From: Josef Prochazka Date: Wed, 30 Jul 2025 08:18:37 +0200 Subject: [PATCH 2/2] Update docstrings --- .../clients/base/resource_collection_client.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/apify_client/clients/base/resource_collection_client.py b/src/apify_client/clients/base/resource_collection_client.py index 1c22487d..e4984fa9 100644 --- a/src/apify_client/clients/base/resource_collection_client.py +++ b/src/apify_client/clients/base/resource_collection_client.py @@ -13,18 +13,23 @@ class ListPage(Generic[T]): """A single page of items returned from a list() method.""" - #: list: List of returned objects on this page items: list[T] - #: int: Count of the returned objects on this page + """List of returned objects on this page""" + count: int - #: int: The limit on the number of returned objects offset specified in the API call + """Count of the returned objects on this page""" + offset: int - #: int: The offset of the first object specified in the API call + """The limit on the number of returned objects offset specified in the API call""" + limit: int - #: int: Total number of objects matching the API call criteria + """The offset of the first object specified in the API call""" + total: int - #: bool: Whether the listing is descending or not + """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: