Skip to content

Commit b73482d

Browse files
committed
solve annotation errors for ruff
1 parent c99d18f commit b73482d

7 files changed

Lines changed: 65 additions & 50 deletions

File tree

amazon_paapi/api.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"""
55

66
import time
7-
from typing import List, Optional, Union
7+
from typing import Any, List, Optional, Union
88

99
from . import models
1010
from .errors import InvalidArgument
@@ -39,7 +39,7 @@ def __init__(
3939
tag: str,
4040
country: CountryCode,
4141
throttling: float = 1,
42-
**kwargs,
42+
**kwargs: Any,
4343
) -> None:
4444
"""Initialize the Amazon API client with the provided credentials."""
4545
self._key = key
@@ -67,7 +67,7 @@ def get_items(
6767
currency_of_preference: Optional[str] = None,
6868
languages_of_preference: Optional[List[str]] = None,
6969
include_unavailable: bool = False,
70-
**kwargs,
70+
**kwargs: Any,
7171
) -> List[models.Item]:
7272
"""Get items information from Amazon.
7373
@@ -141,7 +141,7 @@ def search_items(
141141
min_reviews_rating: Optional[int] = None,
142142
search_index: Optional[str] = None,
143143
sort_by: models.SortBy = None,
144-
**kwargs,
144+
**kwargs: Any,
145145
) -> models.SearchResult:
146146
"""Search for items on Amazon based on a search query.
147147
@@ -244,7 +244,7 @@ def get_variations(
244244
currency_of_preference: Optional[str] = None,
245245
languages_of_preference: Optional[List[str]] = None,
246246
merchant: models.Merchant = None,
247-
**kwargs,
247+
**kwargs: Any,
248248
) -> models.VariationsResult:
249249
"""Return a set of items that are the same product but differ by theme.
250250
@@ -302,7 +302,7 @@ def get_browse_nodes(
302302
self,
303303
browse_node_ids: List[str],
304304
languages_of_preference: Optional[List[str]] = None,
305-
**kwargs,
305+
**kwargs: Any,
306306
) -> List[models.BrowseNode]:
307307
"""Return the specified browse node's information.
308308

amazon_paapi/helpers/arguments.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Module with helper functions for managing arguments."""
22

3-
from typing import List, Union
3+
from typing import Any, List, Union
44

55
from amazon_paapi.errors import InvalidArgument
66
from amazon_paapi.tools import get_asin
@@ -30,13 +30,13 @@ def get_items_ids(items: Union[str, List[str]]) -> List[str]:
3030
raise InvalidArgument(msg)
3131

3232

33-
def check_search_args(**kwargs) -> None:
33+
def check_search_args(**kwargs: Any) -> None:
3434
"""Validate all search arguments."""
3535
check_search_mandatory_args(**kwargs)
3636
check_search_pagination_args(**kwargs)
3737

3838

39-
def check_search_mandatory_args(**kwargs) -> None:
39+
def check_search_mandatory_args(**kwargs: Any) -> None:
4040
"""Validate that at least one mandatory search argument is provided."""
4141
mandatory_args = [
4242
kwargs.get("keywords"),
@@ -56,7 +56,7 @@ def check_search_mandatory_args(**kwargs) -> None:
5656
raise InvalidArgument(error_message)
5757

5858

59-
def check_search_pagination_args(**kwargs) -> None:
59+
def check_search_pagination_args(**kwargs: Any) -> None:
6060
"""Validate pagination arguments for search requests."""
6161
error_message = "Args item_count and item_page should be integers between 1 and 10."
6262
pagination_args = [kwargs.get("item_count"), kwargs.get("item_page")]
@@ -66,7 +66,7 @@ def check_search_pagination_args(**kwargs) -> None:
6666
raise InvalidArgument(error_message)
6767

6868

69-
def check_variations_args(**kwargs) -> None:
69+
def check_variations_args(**kwargs: Any) -> None:
7070
"""Validate variation arguments for get_variations requests."""
7171
error_message = (
7272
"Args variation_count and variation_page should be integers between 1 and 10."
@@ -78,7 +78,7 @@ def check_variations_args(**kwargs) -> None:
7878
raise InvalidArgument(error_message)
7979

8080

81-
def check_browse_nodes_args(**kwargs) -> None:
81+
def check_browse_nodes_args(**kwargs: Any) -> None:
8282
"""Validate browse node arguments."""
8383
if not isinstance(kwargs.get("browse_node_ids"), List):
8484
error_message = "Argument browse_node_ids should be a List of strings."

amazon_paapi/helpers/requests.py

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
"""Module with helper functions for creating requests."""
22

3+
from __future__ import annotations
4+
35
import inspect
4-
from typing import List, NoReturn, cast
6+
from typing import TYPE_CHECKING, Any, List, NoReturn, cast
7+
8+
if TYPE_CHECKING:
9+
from amazon_paapi.api import AmazonApi
10+
from amazon_paapi.sdk.rest import ApiException as ApiExceptionType
511

612
from amazon_paapi.errors import (
713
AssociateValidationError,
@@ -27,7 +33,11 @@
2733
from amazon_paapi.sdk.rest import ApiException
2834

2935

30-
def get_items_request(amazon_api, asin_chunk: List[str], **kwargs) -> GetItemsRequest:
36+
def get_items_request(
37+
amazon_api: AmazonApi,
38+
asin_chunk: list[str],
39+
**kwargs: Any,
40+
) -> GetItemsRequest:
3141
"""Create a GetItemsRequest for the Amazon API."""
3242
try:
3343
return GetItemsRequest(
@@ -43,7 +53,7 @@ def get_items_request(amazon_api, asin_chunk: List[str], **kwargs) -> GetItemsRe
4353
raise MalformedRequest(msg) from exc
4454

4555

46-
def get_items_response(amazon_api, request: GetItemsRequest) -> List[Item]:
56+
def get_items_response(amazon_api: AmazonApi, request: GetItemsRequest) -> list[Item]:
4757
"""Execute a GetItemsRequest and return the list of items."""
4858
try:
4959
response = amazon_api.api.get_items(request)
@@ -57,7 +67,10 @@ def get_items_response(amazon_api, request: GetItemsRequest) -> List[Item]:
5767
return cast(List[Item], response.items_result.items)
5868

5969

60-
def get_search_items_request(amazon_api, **kwargs) -> SearchItemsRequest:
70+
def get_search_items_request(
71+
amazon_api: AmazonApi,
72+
**kwargs: Any,
73+
) -> SearchItemsRequest:
6174
"""Create a SearchItemsRequest for the Amazon API."""
6275
try:
6376
return SearchItemsRequest(
@@ -72,7 +85,9 @@ def get_search_items_request(amazon_api, **kwargs) -> SearchItemsRequest:
7285
raise MalformedRequest(msg) from exc
7386

7487

75-
def get_search_items_response(amazon_api, request: SearchItemsRequest) -> SearchResult:
88+
def get_search_items_response(
89+
amazon_api: AmazonApi, request: SearchItemsRequest
90+
) -> SearchResult:
7691
"""Execute a SearchItemsRequest and return the search result."""
7792
try:
7893
response = amazon_api.api.search_items(request)
@@ -86,7 +101,10 @@ def get_search_items_response(amazon_api, request: SearchItemsRequest) -> Search
86101
return cast(SearchResult, response.search_result)
87102

88103

89-
def get_variations_request(amazon_api, **kwargs) -> GetVariationsRequest:
104+
def get_variations_request(
105+
amazon_api: AmazonApi,
106+
**kwargs: Any,
107+
) -> GetVariationsRequest:
90108
"""Create a GetVariationsRequest for the Amazon API."""
91109
try:
92110
return GetVariationsRequest(
@@ -102,7 +120,7 @@ def get_variations_request(amazon_api, **kwargs) -> GetVariationsRequest:
102120

103121

104122
def get_variations_response(
105-
amazon_api, request: GetVariationsRequest
123+
amazon_api: AmazonApi, request: GetVariationsRequest
106124
) -> VariationsResult:
107125
"""Execute a GetVariationsRequest and return the variations result."""
108126
try:
@@ -117,7 +135,10 @@ def get_variations_response(
117135
return cast(VariationsResult, response.variations_result)
118136

119137

120-
def get_browse_nodes_request(amazon_api, **kwargs) -> GetBrowseNodesRequest:
138+
def get_browse_nodes_request(
139+
amazon_api: AmazonApi,
140+
**kwargs: Any,
141+
) -> GetBrowseNodesRequest:
121142
"""Create a GetBrowseNodesRequest for the Amazon API."""
122143
try:
123144
return GetBrowseNodesRequest(
@@ -133,8 +154,8 @@ def get_browse_nodes_request(amazon_api, **kwargs) -> GetBrowseNodesRequest:
133154

134155

135156
def get_browse_nodes_response(
136-
amazon_api, request: GetBrowseNodesRequest
137-
) -> List[BrowseNode]:
157+
amazon_api: AmazonApi, request: GetBrowseNodesRequest
158+
) -> list[BrowseNode]:
138159
"""Execute a GetBrowseNodesRequest and return the list of browse nodes."""
139160
try:
140161
response = amazon_api.api.get_browse_nodes(request)
@@ -148,13 +169,13 @@ def get_browse_nodes_response(
148169
return cast(List[BrowseNode], response.browse_nodes_result.browse_nodes)
149170

150171

151-
def _get_request_resources(resources) -> List[str]:
172+
def _get_request_resources(resources: type[object]) -> list[str]:
152173
"""Extract all resource strings from a resource class."""
153174
resources = inspect.getmembers(resources, lambda a: not inspect.isroutine(a))
154175
return [x[-1] for x in resources if isinstance(x[-1], str) and x[0][0:2] != "__"]
155176

156177

157-
def _manage_response_exceptions(error) -> NoReturn:
178+
def _manage_response_exceptions(error: ApiExceptionType) -> NoReturn:
158179
"""Handle API exceptions and raise appropriate custom exceptions."""
159180
error_status = getattr(error, "status", None)
160181
error_body = getattr(error, "body", "") or ""

pyproject.toml

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,19 @@ unsafe-fixes = true
77
select = ["ALL"]
88
ignore = [
99
"ANN003",
10+
"ANN401",
1011
"D104",
1112
"D100",
1213
"D203",
1314
"D213",
1415
"COM812",
1516
"ISC001",
1617
]
17-
exclude = [
18-
"amazon_paapi/sdk/*",
19-
"docs/*",
20-
]
18+
exclude = ["amazon_paapi/sdk/*", "docs/*"]
2119

2220
[tool.ruff.lint.per-file-ignores]
2321
"tests/*" = [
22+
"ANN001",
2423
"ANN201",
2524
"ANN206",
2625
"D101",
@@ -33,11 +32,7 @@ exclude = [
3332
]
3433

3534
[tool.ruff.format]
36-
exclude = [
37-
"amazon_paapi/sdk/*",
38-
"docs/*",
39-
".github",
40-
]
35+
exclude = ["amazon_paapi/sdk/*", "docs/*", ".github"]
4136

4237
[tool.mypy]
4338
python_version = "3.9"
@@ -53,9 +48,7 @@ cache_dir = '.cache/mypy'
5348
exclude = ["amazon_paapi/sdk/*"]
5449

5550
[[tool.mypy.overrides]]
56-
module = [
57-
"amazon_paapi/sdk/*",
58-
]
51+
module = ["amazon_paapi/sdk/*"]
5952
follow_imports = "skip"
6053

6154
[tool.coverage.run]

tests/test_api.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import time
44
import unittest
55
from unittest import mock
6+
from unittest.mock import MagicMock
67

78
from amazon_paapi import AmazonApi, models
89
from amazon_paapi.errors.exceptions import InvalidArgument
@@ -33,14 +34,14 @@ def test_api_throttling_sleeps(self):
3334
self.assertTrue(start < int(time.time() * 10))
3435

3536
@mock.patch.object(requests, "get_items_response")
36-
def test_get_items(self, mocked_get_items_response):
37+
def test_get_items(self, mocked_get_items_response: MagicMock):
3738
mocked_get_items_response.return_value = []
3839
amazon = AmazonApi("key", "secret", "tag", "ES")
3940
response = amazon.get_items("ABCDEFGHIJ")
4041
self.assertTrue(isinstance(response, list))
4142

4243
@mock.patch.object(requests, "get_search_items_response")
43-
def test_search_items(self, mocked_get_search_items_response):
44+
def test_search_items(self, mocked_get_search_items_response: MagicMock):
4445
mocked_response = models.SearchResult()
4546
mocked_response.items = []
4647
mocked_get_search_items_response.return_value = mocked_response
@@ -49,7 +50,7 @@ def test_search_items(self, mocked_get_search_items_response):
4950
self.assertTrue(isinstance(response.items, list))
5051

5152
@mock.patch.object(requests, "get_variations_response")
52-
def test_get_variations(self, mocked_get_variations_response):
53+
def test_get_variations(self, mocked_get_variations_response: MagicMock):
5354
mocked_response = models.VariationsResult()
5455
mocked_response.items = []
5556
mocked_get_variations_response.return_value = mocked_response
@@ -58,7 +59,7 @@ def test_get_variations(self, mocked_get_variations_response):
5859
self.assertTrue(isinstance(response.items, list))
5960

6061
@mock.patch.object(requests, "get_browse_nodes_response")
61-
def test_get_browse_nodes(self, mocked_get_browse_nodes_response):
62+
def test_get_browse_nodes(self, mocked_get_browse_nodes_response: MagicMock):
6263
mocked_response = []
6364
mocked_get_browse_nodes_response.return_value = mocked_response
6465
amazon = AmazonApi("key", "secret", "tag", "ES")

tests/test_helpers_items.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88

99
class MockedItem(mock.MagicMock):
10-
def __init__(self, asin) -> None:
10+
def __init__(self, asin: str) -> None:
1111
super().__init__()
1212
self.asin = asin
1313

tests/test_helpers_requests.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""Tests for requests helper functions."""
22

33
import unittest
4-
from unittest.mock import Mock, patch
4+
from unittest.mock import MagicMock, Mock, patch
55

66
from amazon_paapi.errors import (
77
AssociateValidationError,
@@ -17,56 +17,56 @@
1717

1818
class TestRequests(unittest.TestCase):
1919
@patch.object(requests, "GetItemsRequest")
20-
def test_get_items_request(self, mock_get_items_request):
20+
def test_get_items_request(self, mock_get_items_request: MagicMock):
2121
mock_get_items_request.return_value = "foo"
2222
result = requests.get_items_request(Mock(), ["test"])
2323

2424
self.assertEqual("foo", result)
2525

2626
@patch.object(requests, "GetItemsRequest")
27-
def test_get_items_request_error(self, mock_get_items_request):
27+
def test_get_items_request_error(self, mock_get_items_request: MagicMock):
2828
mock_get_items_request.side_effect = TypeError()
2929

3030
with self.assertRaises(MalformedRequest):
3131
requests.get_items_request(Mock(), ["test"])
3232

3333
@patch.object(requests, "SearchItemsRequest")
34-
def test_search_items_request(self, mock_search_items_request):
34+
def test_search_items_request(self, mock_search_items_request: MagicMock):
3535
mock_search_items_request.return_value = "foo"
3636
result = requests.get_search_items_request(Mock())
3737

3838
self.assertEqual("foo", result)
3939

4040
@patch.object(requests, "SearchItemsRequest")
41-
def test_search_items_request_error(self, mock_search_items_request):
41+
def test_search_items_request_error(self, mock_search_items_request: MagicMock):
4242
mock_search_items_request.side_effect = TypeError()
4343

4444
with self.assertRaises(MalformedRequest):
4545
requests.get_search_items_request(Mock())
4646

4747
@patch.object(requests, "GetVariationsRequest")
48-
def test_variations_request(self, mock_variations_request):
48+
def test_variations_request(self, mock_variations_request: MagicMock):
4949
mock_variations_request.return_value = "foo"
5050
result = requests.get_variations_request(Mock())
5151

5252
self.assertEqual("foo", result)
5353

5454
@patch.object(requests, "GetVariationsRequest")
55-
def test_variations_request_error(self, mock_variations_request):
55+
def test_variations_request_error(self, mock_variations_request: MagicMock):
5656
mock_variations_request.side_effect = TypeError()
5757

5858
with self.assertRaises(MalformedRequest):
5959
requests.get_variations_request(Mock())
6060

6161
@patch.object(requests, "GetBrowseNodesRequest")
62-
def test_browse_nodes_request(self, mock_browse_nodes_request):
62+
def test_browse_nodes_request(self, mock_browse_nodes_request: MagicMock):
6363
mock_browse_nodes_request.return_value = "foo"
6464
result = requests.get_browse_nodes_request(Mock())
6565

6666
self.assertEqual("foo", result)
6767

6868
@patch.object(requests, "GetBrowseNodesRequest")
69-
def test_browse_nodes_request_error(self, mock_browse_nodes_request):
69+
def test_browse_nodes_request_error(self, mock_browse_nodes_request: MagicMock):
7070
mock_browse_nodes_request.side_effect = TypeError()
7171

7272
with self.assertRaises(MalformedRequest):

0 commit comments

Comments
 (0)