Skip to content

Commit 8dba583

Browse files
committed
hotfix 2.4.2
1 parent 83995e5 commit 8dba583

File tree

3 files changed

+61
-60
lines changed

3 files changed

+61
-60
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33

44
Changelog and version changes made with each release.
55

6+
## Version 2.4.2
7+
8+
* Another hotfix for correctly incrementing re-tries in the event of a 500 error.
9+
610
## Version 2.4.1
711

812
* Hotfix to correct issue with change released in 2.4.0 that would return a sparse JSON result

petpy/api.py

Lines changed: 56 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -775,69 +775,66 @@ def _get_org(self, url, org_id):
775775
}
776776
return org
777777

778-
def _get_result(self, url, headers, params=None):
779-
r"""
780-
781-
Parameters
782-
----------
783-
784-
Returns
785-
-------
786-
787-
"""
788-
r = requests.get(url,
789-
headers=headers,
790-
params=params)
791-
792-
if r.status_code == 400:
793-
raise PetfinderInvalidParameters(message='There are invalid parameters in the API query.',
794-
err=r.json()['invalid-params'])
795-
796-
if r.status_code == 401:
797-
if r.json()['detail'] == 'Access token invalid or expired':
798-
self._access_token = self._authenticate()
799-
r = self._get_result(url=url,
800-
headers=headers,
801-
params=params)
778+
import requests
802779

780+
def _get_result(self, url, headers, params=None, max_retries=3):
781+
def handle_response(r):
782+
if r.status_code == 200:
803783
return r
784+
elif r.status_code == 400:
785+
raise PetfinderInvalidParameters(
786+
message='There are invalid parameters in the API query.',
787+
err=r.json().get('invalid-params')
788+
)
789+
elif r.status_code == 401:
790+
if r.json().get('detail') == 'Access token invalid or expired':
791+
self._access_token = self._authenticate()
792+
return self._get_result(url, headers, params)
793+
else:
794+
raise PetfinderInvalidCredentials(
795+
message='Invalid Credentials',
796+
err=(r.reason, r.status_code)
797+
)
798+
elif r.status_code == 403:
799+
raise PetfinderInsufficientAccess(
800+
message='Insufficient Access',
801+
err=(r.reason, r.status_code)
802+
)
803+
elif r.status_code == 404:
804+
raise PetfinderResourceNotFound(
805+
message='Requested Resource not Found',
806+
err=(r.reason, r.status_code)
807+
)
808+
elif r.status_code == 429:
809+
raise PetfinderRateLimitExceeded(
810+
message='Daily Rate Limit Exceeded. Resets at 12:00am UTC',
811+
err=(r.reason, r.status_code)
812+
)
813+
elif r.status_code == 500:
814+
return None
804815
else:
805-
raise PetfinderInvalidCredentials(message='Invalid Credentials',
806-
err=(r.reason, r.status_code))
807-
808-
if r.status_code == 403:
809-
raise PetfinderInsufficientAccess(message='Insufficient Access',
810-
err=(r.reason, r.status_code))
811-
812-
if r.status_code == 404:
813-
raise PetfinderResourceNotFound(message='Requested Resource not Found',
814-
err=(r.reason, r.status_code))
815-
816-
if r.status_code == 429:
817-
raise PetfinderRateLimitExceeded(message='Daily Rate Limit Exceed. Resets at 12:00am UTC',
818-
err=(r.reason, r.status_code))
819-
820-
if r.status_code == 500:
821-
try_count = 1
822-
while try_count <= 3:
823-
print(f'Petfinder API encountered unexpected error. Re-trying 3 times. Attempt {try_count}')
824-
try:
825-
r = self._get_result(url=url,
826-
headers=headers,
827-
params=params)
828-
829-
return r
830-
except PetfinderUnexpectedError:
831-
try_count += 1
832-
finally:
833-
r = {
834-
'response': 500
835-
}
836-
return r
837-
raise PetfinderUnexpectedError(message='The Petfinder API encountered an unexpected error.',
838-
err=(r.reason, r.status_code))
816+
raise PetfinderUnexpectedError(
817+
message='The Petfinder API encountered an unexpected error.',
818+
err=(r.reason, r.status_code)
819+
)
820+
response = None
821+
for attempt in range(1, max_retries + 1):
822+
response = requests.get(url, headers=headers, params=params)
823+
result = handle_response(response)
824+
825+
if result:
826+
return result
827+
elif response.status_code == 500:
828+
print(f'Attempt {attempt} of {max_retries} failed with status 500. Retrying...')
829+
if attempt == max_retries:
830+
raise PetfinderUnexpectedError(
831+
message='The Petfinder API encountered an unexpected error after maximum retries.',
832+
err=(response.reason, response.status_code)
833+
)
834+
else:
835+
break
839836

840-
return r
837+
return response
841838

842839

843840
#################################################################################################################

setup.py

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

55
setup(
66
name='petpy',
7-
version='2.4.1',
7+
version='2.4.2',
88
author='Aaron Schlegel',
99
author_email='[email protected]',
1010
url='https://github.com/aschleg/petpy',

0 commit comments

Comments
 (0)