66from ..models .search_result import SearchResult
77from ..models .variations_result import VariationsResult
88from ..models .browse_nodes_result import BrowseNode
9- from ..errors import ApiRequestException , ItemsNotFoudException , MalformedRequestException
9+ from ..errors import ApiRequestException , ItemsNotFoudException , MalformedRequestException , TooManyRequestsException , AssociateValidationException , InvalidArgumentException
1010from ..sdk .models .partner_type import PartnerType
1111from ..sdk .models .get_items_resource import GetItemsResource
1212from ..sdk .models .get_items_request import GetItemsRequest
@@ -36,7 +36,7 @@ def get_items_response(amazon_api, request: GetItemsRequest) -> List[Item]:
3636 try :
3737 response = amazon_api ._api .get_items (request )
3838 except ApiException as e :
39- raise ApiRequestException ( 'Error getting response for get_items from Amazon API: ' + str ( e ) )
39+ _manage_response_exceptions ( e )
4040
4141 if response .items_result == None :
4242 raise ItemsNotFoudException ('No items have been found' )
@@ -59,7 +59,7 @@ def get_search_items_response(amazon_api, request: SearchItemsRequest) -> Search
5959 try :
6060 response = amazon_api ._api .search_items (request )
6161 except ApiException as e :
62- raise ApiRequestException ( 'Error getting response for search_items from Amazon API: ' + str ( e ) )
62+ _manage_response_exceptions ( e )
6363
6464 if response .search_result == None :
6565 raise ItemsNotFoudException ('No items have been found' )
@@ -82,7 +82,7 @@ def get_variations_response(amazon_api, request: GetVariationsRequest) -> Variat
8282 try :
8383 response = amazon_api ._api .get_variations (request )
8484 except ApiException as e :
85- raise ApiRequestException ( 'Error getting response for get_variations from Amazon API: ' + str ( e ) )
85+ _manage_response_exceptions ( e )
8686
8787 if response .variations_result == None :
8888 raise ItemsNotFoudException ('No variation items have been found' )
@@ -105,7 +105,7 @@ def get_browse_nodes_response(amazon_api, request: GetBrowseNodesRequest) -> Lis
105105 try :
106106 response = amazon_api ._api .get_browse_nodes (request )
107107 except ApiException as e :
108- raise ApiRequestException ( 'Error getting response for get_browse_nodes from Amazon API: ' + str ( e ) )
108+ _manage_response_exceptions ( e )
109109
110110 if response .browse_nodes_result == None :
111111 raise ItemsNotFoudException ('No browse nodes have been found' )
@@ -117,3 +117,19 @@ def _get_request_resources(resources) -> List[str]:
117117 resources = inspect .getmembers (resources , lambda a :not (inspect .isroutine (a )))
118118 resources = [x [- 1 ] for x in resources if isinstance (x [- 1 ], str ) and x [0 ][0 :2 ] != '__' ]
119119 return resources
120+
121+ def _manage_response_exceptions (error ) -> None :
122+ if isinstance (error , ApiException ):
123+ if error .status == 429 :
124+ raise TooManyRequestsException ('Requests limit reached, try increasing throttling or wait before trying again' )
125+
126+ elif 'InvalidParameterValue' in error .body :
127+ raise InvalidArgumentException ('The value provided in the request for atleast one parameter is invalid.' )
128+
129+ elif 'InvalidPartnerTag' in error .body :
130+ raise InvalidArgumentException ('The partner tag is invalid or not present.' )
131+
132+ elif 'InvalidAssociate' in error .body :
133+ raise AssociateValidationException ('Used credentials are not valid for the selected country.' )
134+
135+ raise ApiRequestException ('Request failed: ' + str (error .reason ))
0 commit comments