Skip to content

Commit 6f955a9

Browse files
committed
Items are correctly sorted and avoid duplicated API calls
1 parent 5bb3b50 commit 6f955a9

File tree

3 files changed

+15
-12
lines changed

3 files changed

+15
-12
lines changed

amazon_paapi/api.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from .helpers import arguments
1414
from .helpers import requests
1515
from .helpers.generators import get_list_chunks
16-
from .helpers.items import get_items_including_unavailable
16+
from .helpers.items import sort_items
1717

1818

1919
class AmazonApi:
@@ -97,16 +97,13 @@ def get_items(
9797
items_ids = arguments.get_items_ids(items)
9898
results = []
9999

100-
for asin_chunk in get_list_chunks(items_ids, chunk_size=10):
100+
for asin_chunk in get_list_chunks(list(set(items_ids)), chunk_size=10):
101101
request = requests.get_items_request(self, asin_chunk, **kwargs)
102102
self._throttle()
103103
items_response = requests.get_items_response(self, request)
104104
results.extend(items_response)
105105

106-
if include_unavailable:
107-
results = get_items_including_unavailable(results, items_ids)
108-
109-
return results
106+
return sort_items(results, items_ids, include_unavailable)
110107

111108

112109
def search_items(

amazon_paapi/helpers/arguments.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def get_items_ids(items: Union[str, List[str]]) -> List[str]:
1818
items_ids = [get_asin(x.strip()) for x in items]
1919

2020
if items_ids:
21-
return list(set(items_ids))
21+
return items_ids
2222

2323
raise AsinNotFoundException('No ASIN codes have been found.')
2424

amazon_paapi/helpers/items.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,14 @@
44
from .. import models
55

66

7-
def get_items_including_unavailable(items: List[models.Item], items_ids: List[str]) -> List[models.Item]:
8-
for index, asin in enumerate(items_ids):
9-
if items[index].asin != asin:
10-
items.insert(index, models.Item(asin=asin))
11-
return items
7+
def sort_items(items: List[models.Item], items_ids: List[str], include_unavailable: bool) -> List[models.Item]:
8+
sorted_items = []
9+
10+
for asin in items_ids:
11+
matches = list(filter(lambda item, asin=asin: item.asin == asin, items))
12+
if matches:
13+
sorted_items.append(matches[0])
14+
elif include_unavailable:
15+
sorted_items.append(models.Item(asin=asin))
16+
17+
return sorted_items

0 commit comments

Comments
 (0)