11from openaq .shared .models import build_query_params
22from openaq .shared .responses import CountriesResponse
3- from openaq .shared .utils import validate_integer_id
4-
3+ from openaq .shared .types import SortOrder
4+ from openaq .shared .validators import (
5+ validate_integer_id ,
6+ validate_integer_or_list_integer_params ,
7+ validate_limit_param ,
8+ validate_order_by ,
9+ validate_page_param ,
10+ validate_sort_order ,
11+ )
512from .base import AsyncResourceBase
613
714
@@ -42,33 +49,25 @@ async def list(
4249 page : int = 1 ,
4350 limit : int = 1000 ,
4451 order_by : str | None = None ,
45- sort_order : str | None = None ,
46- parameters_id : int | None = None ,
47- providers_id : int | None = None ,
52+ sort_order : SortOrder | None = None ,
53+ parameters_id : int | list [ int ] | None = None ,
54+ providers_id : int | list [ int ] | None = None ,
4855 ) -> CountriesResponse :
4956 """List countries based on provided filters.
5057
51- Provides the ability to filter the countries resource by the given arguments.
52-
53- * `page` - Specifies the page number of results to retrieve
54- * `limit` - Sets the number of results generated per page
55- * `providers_id` - Filter results by selected providers ID(s)
56- * `parameters_id` - Filters results by selected parameters ID(s)
57- * `order_by` - Determines the fields by which results are sorted; available values are `id`
58- * `sort_order` - Works in tandem with `order_by` to specify the direction: either `asc` (ascending) or `desc` (descending)
59-
6058 Args:
61- page: The page number. Page count is countries found / limit.
62- limit: The number of results returned per page.
59+ page: The page number, must be greater than zero . Page count is countries found / limit.
60+ limit: The number of results returned per page. Must be between 1 and 1,000.
6361 order_by: Order by operators for results.
64- sort_order: Sort order (asc/desc).
62+ sort_order: Order for sorting results (asc/desc).
6563 parameters_id: Single parameters ID or an array of IDs.
6664 providers_id: Single providers ID or an array of IDs.
6765
6866 Returns:
6967 CountriesResponse: An instance representing the list of retrieved countries.
7068
7169 Raises:
70+ InvalidParameterError: Client validation error, query parameter is not correct type or value.
7271 IdentifierOutOfBoundsError: Client validation error, identifier outside support int32 range.
7372 ApiKeyMissingError: Authentication error, missing API Key credentials.
7473 BadRequestError: Raised for HTTP 400 error, indicating a client request error.
@@ -84,6 +83,28 @@ async def list(
8483 ServiceUnavailableError: Raised for HTTP 503, indicating that the server is not ready to handle the request.
8584 GatewayTimeoutError: Raised for HTTP 504 error, indicating a gateway timeout.
8685 """
86+ page = validate_page_param (page )
87+ limit = validate_limit_param (limit )
88+ if sort_order is not None :
89+ sort_order = validate_sort_order (sort_order )
90+ if order_by is not None :
91+ order_by = validate_order_by (order_by )
92+ if parameters_id is not None :
93+ parameters_id = validate_integer_or_list_integer_params (
94+ 'parameters_id' , parameters_id
95+ )
96+ if providers_id is not None :
97+ providers_id = validate_integer_or_list_integer_params (
98+ 'providers_id' , providers_id
99+ )
100+ params = build_query_params (
101+ page = page ,
102+ limit = limit ,
103+ order_by = order_by ,
104+ sort_order = sort_order ,
105+ parameters_id = parameters_id ,
106+ providers_id = providers_id ,
107+ )
87108 params = build_query_params (
88109 page = page ,
89110 limit = limit ,
0 commit comments