Skip to content

Commit 7de44f2

Browse files
committed
feat: add delivery_flags parameter to search_items
1 parent 8401f54 commit 7de44f2

7 files changed

Lines changed: 101 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [6.3.0] - 2026-05-15
9+
10+
### Added
11+
12+
- `delivery_flags` parameter in `search_items` for `amazon_creatorsapi` and `amazon_creatorsapi.aio`
13+
814
## [6.2.0] - 2026-03-12
915

1016
### Added

amazon_creatorsapi/aio/api.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
)
3030
raise ImportError(msg) from exc
3131

32+
from creatorsapi_python_sdk.models.delivery_flag import DeliveryFlag
3233
from creatorsapi_python_sdk.models.get_browse_nodes_resource import (
3334
GetBrowseNodesResource,
3435
)
@@ -245,6 +246,7 @@ async def search_items( # noqa: PLR0912, C901
245246
item_page: int | None = None,
246247
condition: Condition | None = None,
247248
currency_of_preference: str | None = None,
249+
delivery_flags: list[DeliveryFlag] | None = None,
248250
languages_of_preference: list[str] | None = None,
249251
max_price: int | None = None,
250252
min_price: int | None = None,
@@ -271,6 +273,7 @@ async def search_items( # noqa: PLR0912, C901
271273
item_page: Page of items to return (1-10). Defaults to 1.
272274
condition: Filter offers by condition type.
273275
currency_of_preference: ISO 4217 currency code for prices.
276+
delivery_flags: Delivery programs to filter search results by.
274277
languages_of_preference: Languages in order of preference.
275278
max_price: Max price in lowest currency denomination.
276279
min_price: Min price in lowest currency denomination.
@@ -319,6 +322,8 @@ async def search_items( # noqa: PLR0912, C901
319322
request_body["condition"] = condition.value
320323
if currency_of_preference is not None:
321324
request_body["currencyOfPreference"] = currency_of_preference
325+
if delivery_flags is not None:
326+
request_body["deliveryFlags"] = [flag.value for flag in delivery_flags]
322327
if languages_of_preference is not None:
323328
request_body["languagesOfPreference"] = languages_of_preference
324329
if max_price is not None:

amazon_creatorsapi/api.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
from amazon_creatorsapi.core.marketplaces import CountryCode
4141
from creatorsapi_python_sdk.models.browse_node import BrowseNode
4242
from creatorsapi_python_sdk.models.condition import Condition
43+
from creatorsapi_python_sdk.models.delivery_flag import DeliveryFlag
4344
from creatorsapi_python_sdk.models.item import Item
4445
from creatorsapi_python_sdk.models.search_result import SearchResult
4546
from creatorsapi_python_sdk.models.sort_by import SortBy
@@ -171,6 +172,7 @@ def search_items(
171172
item_page: int | None = None,
172173
condition: Condition | None = None,
173174
currency_of_preference: str | None = None,
175+
delivery_flags: list[DeliveryFlag] | None = None,
174176
languages_of_preference: list[str] | None = None,
175177
max_price: int | None = None,
176178
min_price: int | None = None,
@@ -197,6 +199,7 @@ def search_items(
197199
item_page: Page of items to return (1-10). Defaults to 1.
198200
condition: Filter offers by condition type.
199201
currency_of_preference: ISO 4217 currency code for prices.
202+
delivery_flags: Delivery programs to filter search results by.
200203
languages_of_preference: Languages in order of preference.
201204
max_price: Max price in lowest currency denomination.
202205
min_price: Min price in lowest currency denomination.
@@ -229,6 +232,7 @@ def search_items(
229232
itemPage=item_page,
230233
condition=condition,
231234
currencyOfPreference=currency_of_preference,
235+
deliveryFlags=delivery_flags,
232236
languagesOfPreference=languages_of_preference,
233237
maxPrice=max_price,
234238
minPrice=min_price,

docs/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
author = "Sergio Abad"
2424

2525
# The full version, including alpha/beta/rc tags
26-
release = "6.2.0"
26+
release = "6.3.0"
2727

2828

2929
# -- General configuration ---------------------------------------------------

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "python-amazon-paapi"
3-
version = "6.2.0"
3+
version = "6.3.0"
44
description = "Amazon Product Advertising API 5.0 wrapper for Python"
55
readme = "README.md"
66
requires-python = ">=3.9"

tests/amazon_creatorsapi/aio/api_test.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
TooManyRequestsError,
1515
)
1616
from creatorsapi_python_sdk.models.condition import Condition
17+
from creatorsapi_python_sdk.models.delivery_flag import DeliveryFlag
1718
from creatorsapi_python_sdk.models.get_browse_nodes_resource import (
1819
GetBrowseNodesResource,
1920
)
@@ -289,6 +290,53 @@ async def test_get_items_not_found(
289290
with self.assertRaises(ItemsNotFoundError):
290291
await api.get_items(["B0DLFMFBJX"])
291292

293+
294+
class TestAsyncAmazonCreatorsApiSearchItemsDeliveryFlags(
295+
unittest.IsolatedAsyncioTestCase,
296+
):
297+
"""Focused tests for delivery_flags in search_items()."""
298+
299+
@patch("amazon_creatorsapi.aio.api.AsyncOAuth2TokenManager")
300+
@patch("amazon_creatorsapi.aio.api.AsyncHttpClient")
301+
async def test_search_items_with_delivery_flags(
302+
self,
303+
mock_http_client_class: MagicMock,
304+
mock_token_manager_class: MagicMock,
305+
) -> None:
306+
"""Test search_items includes delivery flags in the request body."""
307+
mock_response = MagicMock()
308+
mock_response.status_code = 200
309+
mock_response.json.return_value = {
310+
"searchResult": {"items": [{"asin": "B0DLFMFBJW"}]}
311+
}
312+
313+
mock_client = AsyncMock()
314+
mock_client.post.return_value = mock_response
315+
mock_client.__aenter__.return_value = mock_client
316+
mock_http_client_class.return_value = mock_client
317+
318+
mock_token_manager = AsyncMock()
319+
mock_token_manager.get_token.return_value = "test_token"
320+
mock_token_manager_class.return_value = mock_token_manager
321+
322+
async with AsyncAmazonCreatorsApi(
323+
credential_id="test_id",
324+
credential_secret="test_secret",
325+
version="2.2",
326+
tag="test-tag",
327+
country="ES",
328+
throttling=0,
329+
) as api:
330+
await api.search_items(
331+
keywords="laptop",
332+
delivery_flags=[DeliveryFlag.PRIME, DeliveryFlag.FREESHIPPING],
333+
)
334+
335+
call_args = mock_client.post.call_args
336+
self.assertIn("deliveryFlags", str(call_args))
337+
self.assertIn("Prime", str(call_args))
338+
self.assertIn("FreeShipping", str(call_args))
339+
292340
@patch("amazon_creatorsapi.aio.api.AsyncOAuth2TokenManager")
293341
@patch("amazon_creatorsapi.aio.api.AsyncHttpClient")
294342
async def test_get_items_with_optional_params(

tests/amazon_creatorsapi/api_test.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
TooManyRequestsError,
1818
)
1919
from creatorsapi_python_sdk.exceptions import ApiException
20+
from creatorsapi_python_sdk.models.delivery_flag import DeliveryFlag
2021
from creatorsapi_python_sdk.models.get_browse_nodes_resource import (
2122
GetBrowseNodesResource,
2223
)
@@ -183,6 +184,41 @@ def test_search_items(
183184
self.assertIsNotNone(result)
184185
mock_api.search_items.assert_called_once()
185186

187+
@mock.patch("amazon_creatorsapi.api.DefaultApi")
188+
@mock.patch("amazon_creatorsapi.api.ApiClient")
189+
def test_search_items_with_delivery_flags(
190+
self,
191+
_mock_client_class: MagicMock,
192+
mock_api_class: MagicMock,
193+
) -> None:
194+
"""Test search_items forwards delivery flags to the SDK request."""
195+
mock_api = MagicMock()
196+
mock_api_class.return_value = mock_api
197+
mock_response = MagicMock()
198+
mock_response.search_result = MagicMock()
199+
mock_api.search_items.return_value = mock_response
200+
201+
api = AmazonCreatorsApi(
202+
credential_id=self.credential_id,
203+
credential_secret=self.credential_secret,
204+
version=self.version,
205+
tag=self.tag,
206+
country=self.country,
207+
throttling=0,
208+
)
209+
210+
result = api.search_items(
211+
keywords="laptop",
212+
delivery_flags=[DeliveryFlag.PRIME, DeliveryFlag.FREESHIPPING],
213+
)
214+
215+
self.assertIsNotNone(result)
216+
request = mock_api.search_items.call_args.kwargs["search_items_request_content"]
217+
self.assertEqual(
218+
request.delivery_flags,
219+
[DeliveryFlag.PRIME, DeliveryFlag.FREESHIPPING],
220+
)
221+
186222
@mock.patch("amazon_creatorsapi.api.DefaultApi")
187223
@mock.patch("amazon_creatorsapi.api.ApiClient")
188224
def test_get_items_no_results(

0 commit comments

Comments
 (0)