From 9e3fba8e6f08fef99ce2d02e52a69ccb68d1c70d Mon Sep 17 00:00:00 2001 From: asonnenschein Date: Wed, 29 Jan 2025 11:48:46 -0500 Subject: [PATCH 1/8] add page_size kwarg to list_subscriptions() --- planet/clients/subscriptions.py | 4 ++++ tests/integration/test_subscriptions_api.py | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/planet/clients/subscriptions.py b/planet/clients/subscriptions.py index 64d0d031c..c886edf44 100644 --- a/planet/clients/subscriptions.py +++ b/planet/clients/subscriptions.py @@ -69,6 +69,7 @@ async def list_subscriptions( self, status: Optional[Sequence[str]] = None, limit: int = 100, + page_size: Optional[int] = None, created: Optional[str] = None, end_time: Optional[str] = None, hosting: Optional[bool] = None, @@ -112,6 +113,7 @@ async def list_subscriptions( updated (str): filter by updated time or interval. limit (int): limit the number of subscriptions in the results. When set to 0, no maximum is applied. + page_size (int): number of subscriptions to return per page, default 20. TODO: user_id Datetime args (created, end_time, start_time, updated) can either be a @@ -156,6 +158,8 @@ class _SubscriptionsPager(Paged): params['sort_by'] = sort_by if updated is not None: params['updated'] = updated + if page_size is not None: + params['page_size'] = page_size try: response = await self._session.request(method='GET', diff --git a/tests/integration/test_subscriptions_api.py b/tests/integration/test_subscriptions_api.py index 290ffcb44..6f17cddaa 100644 --- a/tests/integration/test_subscriptions_api.py +++ b/tests/integration/test_subscriptions_api.py @@ -267,6 +267,17 @@ async def test_list_subscriptions_filtering_and_sorting(): ]) == 2 +@pytest.mark.parametrize("page_size, count", [(50, 100), (100, 100)]) +@pytest.mark.anyio +@api_mock +async def test_list_subscriptions_page_size_success(page_size, count): + async with Session() as session: + client = SubscriptionsClient(session, base_url=TEST_URL) + assert len([ + sub async for sub in client.list_subscriptions(page_size=page_size) + ]) == count + + @pytest.mark.anyio @failing_api_mock async def test_create_subscription_failure(): From 95859bcd07c86fd8383b347cbb38b88dcea405ad Mon Sep 17 00:00:00 2001 From: asonnenschein Date: Wed, 29 Jan 2025 12:17:45 -0500 Subject: [PATCH 2/8] add sync client --- planet/clients/subscriptions.py | 2 +- planet/sync/subscriptions.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/planet/clients/subscriptions.py b/planet/clients/subscriptions.py index c886edf44..5ba9c8a24 100644 --- a/planet/clients/subscriptions.py +++ b/planet/clients/subscriptions.py @@ -137,7 +137,7 @@ class _SubscriptionsPager(Paged): """Navigates pages of messages about subscriptions.""" ITEMS_KEY = 'subscriptions' - params: Dict[str, Union[str, Sequence[str], bool]] = {} + params: Dict[str, Union[str, Sequence[str], bool, int]] = {} if created is not None: params['created'] = created if end_time is not None: diff --git a/planet/sync/subscriptions.py b/planet/sync/subscriptions.py index 64153e2f8..74074e8c3 100644 --- a/planet/sync/subscriptions.py +++ b/planet/sync/subscriptions.py @@ -37,6 +37,7 @@ def __init__(self, def list_subscriptions(self, status: Optional[Sequence[str]] = None, limit: int = 100, + page_size: Optional[int] = None, created: Optional[str] = None, end_time: Optional[str] = None, hosting: Optional[bool] = None, @@ -80,6 +81,7 @@ def list_subscriptions(self, updated (str): filter by updated time or interval. limit (int): limit the number of subscriptions in the results. When set to 0, no maximum is applied. + page_size (int): number of subscriptions to return per page, default 20. TODO: user_id Datetime args (created, end_time, start_time, updated) can either be a @@ -101,6 +103,7 @@ def list_subscriptions(self, results = self._client.list_subscriptions(status, limit, + page_size, created, end_time, hosting, From 7447024d7ef46ba4747fdff2f01c6f80b66577a2 Mon Sep 17 00:00:00 2001 From: asonnenschein Date: Wed, 29 Jan 2025 13:40:50 -0500 Subject: [PATCH 3/8] fix arg order --- planet/clients/subscriptions.py | 4 ++-- planet/sync/subscriptions.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/planet/clients/subscriptions.py b/planet/clients/subscriptions.py index 5ba9c8a24..d6f566d2f 100644 --- a/planet/clients/subscriptions.py +++ b/planet/clients/subscriptions.py @@ -69,7 +69,6 @@ async def list_subscriptions( self, status: Optional[Sequence[str]] = None, limit: int = 100, - page_size: Optional[int] = None, created: Optional[str] = None, end_time: Optional[str] = None, hosting: Optional[bool] = None, @@ -78,7 +77,8 @@ async def list_subscriptions( source_type: Optional[str] = None, start_time: Optional[str] = None, sort_by: Optional[str] = None, - updated: Optional[str] = None) -> AsyncIterator[dict]: + updated: Optional[str] = None, + page_size: Optional[int] = None) -> AsyncIterator[dict]: """Iterate over list of account subscriptions with optional filtering. Note: diff --git a/planet/sync/subscriptions.py b/planet/sync/subscriptions.py index 74074e8c3..b8f39f831 100644 --- a/planet/sync/subscriptions.py +++ b/planet/sync/subscriptions.py @@ -37,7 +37,6 @@ def __init__(self, def list_subscriptions(self, status: Optional[Sequence[str]] = None, limit: int = 100, - page_size: Optional[int] = None, created: Optional[str] = None, end_time: Optional[str] = None, hosting: Optional[bool] = None, @@ -46,7 +45,8 @@ def list_subscriptions(self, source_type: Optional[str] = None, start_time: Optional[str] = None, sort_by: Optional[str] = None, - updated: Optional[str] = None) -> Iterator[dict]: + updated: Optional[str] = None, + page_size: Optional[int] = None) -> Iterator[dict]: """Iterate over list of account subscriptions with optional filtering. Note: @@ -103,7 +103,6 @@ def list_subscriptions(self, results = self._client.list_subscriptions(status, limit, - page_size, created, end_time, hosting, @@ -112,7 +111,8 @@ def list_subscriptions(self, source_type, start_time, sort_by, - updated) + updated, + page_size) try: while True: From 2ecab715706b7cc684b37c193d86170e7ea3cff5 Mon Sep 17 00:00:00 2001 From: asonnenschein Date: Wed, 29 Jan 2025 13:45:53 -0500 Subject: [PATCH 4/8] set default page_size to 500 --- planet/clients/subscriptions.py | 8 ++++---- planet/sync/subscriptions.py | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/planet/clients/subscriptions.py b/planet/clients/subscriptions.py index d6f566d2f..fa59b4609 100644 --- a/planet/clients/subscriptions.py +++ b/planet/clients/subscriptions.py @@ -78,7 +78,7 @@ async def list_subscriptions( start_time: Optional[str] = None, sort_by: Optional[str] = None, updated: Optional[str] = None, - page_size: Optional[int] = None) -> AsyncIterator[dict]: + page_size: int = 500) -> AsyncIterator[dict]: """Iterate over list of account subscriptions with optional filtering. Note: @@ -113,7 +113,7 @@ async def list_subscriptions( updated (str): filter by updated time or interval. limit (int): limit the number of subscriptions in the results. When set to 0, no maximum is applied. - page_size (int): number of subscriptions to return per page, default 20. + page_size (int): number of subscriptions to return per page. TODO: user_id Datetime args (created, end_time, start_time, updated) can either be a @@ -158,8 +158,8 @@ class _SubscriptionsPager(Paged): params['sort_by'] = sort_by if updated is not None: params['updated'] = updated - if page_size is not None: - params['page_size'] = page_size + + params['page_size'] = page_size try: response = await self._session.request(method='GET', diff --git a/planet/sync/subscriptions.py b/planet/sync/subscriptions.py index b8f39f831..edab3580b 100644 --- a/planet/sync/subscriptions.py +++ b/planet/sync/subscriptions.py @@ -46,7 +46,7 @@ def list_subscriptions(self, start_time: Optional[str] = None, sort_by: Optional[str] = None, updated: Optional[str] = None, - page_size: Optional[int] = None) -> Iterator[dict]: + page_size: int = 500) -> Iterator[dict]: """Iterate over list of account subscriptions with optional filtering. Note: @@ -81,7 +81,7 @@ def list_subscriptions(self, updated (str): filter by updated time or interval. limit (int): limit the number of subscriptions in the results. When set to 0, no maximum is applied. - page_size (int): number of subscriptions to return per page, default 20. + page_size (int): number of subscriptions to return per page. TODO: user_id Datetime args (created, end_time, start_time, updated) can either be a From db00079c387af00ce03761904d5077ca938280eb Mon Sep 17 00:00:00 2001 From: asonnenschein Date: Wed, 29 Jan 2025 13:51:32 -0500 Subject: [PATCH 5/8] lint --- planet/clients/subscriptions.py | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/planet/clients/subscriptions.py b/planet/clients/subscriptions.py index fa59b4609..18849e8cc 100644 --- a/planet/clients/subscriptions.py +++ b/planet/clients/subscriptions.py @@ -65,20 +65,19 @@ def _call_sync(self, f: Awaitable[T]) -> T: """block on an async function call, using the call_sync method of the session""" return self._session._call_sync(f) - async def list_subscriptions( - self, - status: Optional[Sequence[str]] = None, - limit: int = 100, - created: Optional[str] = None, - end_time: Optional[str] = None, - hosting: Optional[bool] = None, - name__contains: Optional[str] = None, - name: Optional[str] = None, - source_type: Optional[str] = None, - start_time: Optional[str] = None, - sort_by: Optional[str] = None, - updated: Optional[str] = None, - page_size: int = 500) -> AsyncIterator[dict]: + async def list_subscriptions(self, + status: Optional[Sequence[str]] = None, + limit: int = 100, + created: Optional[str] = None, + end_time: Optional[str] = None, + hosting: Optional[bool] = None, + name__contains: Optional[str] = None, + name: Optional[str] = None, + source_type: Optional[str] = None, + start_time: Optional[str] = None, + sort_by: Optional[str] = None, + updated: Optional[str] = None, + page_size: int = 500) -> AsyncIterator[dict]: """Iterate over list of account subscriptions with optional filtering. Note: From 820265446b9cb347896f08ca9f723320d1f11c64 Mon Sep 17 00:00:00 2001 From: asonnenschein Date: Thu, 30 Jan 2025 06:39:08 -0500 Subject: [PATCH 6/8] add page_size to cli --- planet/cli/subscriptions.py | 7 ++++++- planet/clients/subscriptions.py | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/planet/cli/subscriptions.py b/planet/cli/subscriptions.py index d911ad2df..80cea1556 100644 --- a/planet/cli/subscriptions.py +++ b/planet/cli/subscriptions.py @@ -118,6 +118,9 @@ def subscriptions(ctx, base_url): documentation for examples.""") @limit +@click.option('--page_size', + type=click.INT, + help='Number of subscriptions to return per page.') @click.pass_context @translate_exceptions @coro @@ -133,6 +136,7 @@ async def list_subscriptions_cmd(ctx, sort_by, updated, limit, + page_size, pretty): """Prints a sequence of JSON-encoded Subscription descriptions.""" async with subscriptions_client(ctx) as client: @@ -147,7 +151,8 @@ async def list_subscriptions_cmd(ctx, status=status, sort_by=sort_by, updated=updated, - limit=limit): + limit=limit, + page_size=page_size): echo_json(sub, pretty) diff --git a/planet/clients/subscriptions.py b/planet/clients/subscriptions.py index 18849e8cc..ffce14233 100644 --- a/planet/clients/subscriptions.py +++ b/planet/clients/subscriptions.py @@ -1,7 +1,7 @@ """Planet Subscriptions API Python client.""" import logging -from typing import AsyncIterator, Awaitable, Dict, Optional, Sequence, TypeVar, Union +from typing import Any, AsyncIterator, Awaitable, Dict, Optional, Sequence, TypeVar from typing_extensions import Literal @@ -136,7 +136,7 @@ class _SubscriptionsPager(Paged): """Navigates pages of messages about subscriptions.""" ITEMS_KEY = 'subscriptions' - params: Dict[str, Union[str, Sequence[str], bool, int]] = {} + params: Dict[str, Any] = {} if created is not None: params['created'] = created if end_time is not None: From 596cec40ecb4e0f4d27ca3af99792b03b16c933a Mon Sep 17 00:00:00 2001 From: asonnenschein Date: Thu, 30 Jan 2025 16:00:47 -0500 Subject: [PATCH 7/8] update cli docs --- docs/cli/cli-subscriptions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/cli/cli-subscriptions.md b/docs/cli/cli-subscriptions.md index 5c822d5da..d402e00e0 100644 --- a/docs/cli/cli-subscriptions.md +++ b/docs/cli/cli-subscriptions.md @@ -128,7 +128,7 @@ planet subscriptions list ``` outputs the JSON for your first 100 subscriptions. If you'd like more you can set the `--limit` -parameter higher, or you can set it to 0 and there will be no limit. +parameter higher, or you can set it to 0 and there will be no limit. By default the `list` command will request Subscriptions API with a page size of 500 subscriptions, and can be set lower or higher with the `--page_size` parameter. You can get nicer formatting with `--pretty` or pipe it into `jq`, just like the other Planet CLI’s. From 25e820bb7692cd1b906306441c78196f5e0d3d58 Mon Sep 17 00:00:00 2001 From: asonnenschein Date: Fri, 31 Jan 2025 13:11:35 -0500 Subject: [PATCH 8/8] change underscore to hyphen --- docs/cli/cli-subscriptions.md | 2 +- planet/cli/subscriptions.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/cli/cli-subscriptions.md b/docs/cli/cli-subscriptions.md index d402e00e0..f8dab7b59 100644 --- a/docs/cli/cli-subscriptions.md +++ b/docs/cli/cli-subscriptions.md @@ -128,7 +128,7 @@ planet subscriptions list ``` outputs the JSON for your first 100 subscriptions. If you'd like more you can set the `--limit` -parameter higher, or you can set it to 0 and there will be no limit. By default the `list` command will request Subscriptions API with a page size of 500 subscriptions, and can be set lower or higher with the `--page_size` parameter. +parameter higher, or you can set it to 0 and there will be no limit. By default the `list` command will request Subscriptions API with a page size of 500 subscriptions, and can be set lower or higher with the `--page-size` parameter. You can get nicer formatting with `--pretty` or pipe it into `jq`, just like the other Planet CLI’s. diff --git a/planet/cli/subscriptions.py b/planet/cli/subscriptions.py index 80cea1556..a50f18ef2 100644 --- a/planet/cli/subscriptions.py +++ b/planet/cli/subscriptions.py @@ -118,7 +118,7 @@ def subscriptions(ctx, base_url): documentation for examples.""") @limit -@click.option('--page_size', +@click.option('--page-size', type=click.INT, help='Number of subscriptions to return per page.') @click.pass_context