@@ -775,69 +775,66 @@ def _get_org(self, url, org_id):
775
775
}
776
776
return org
777
777
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
802
779
780
+ def _get_result (self , url , headers , params = None , max_retries = 3 ):
781
+ def handle_response (r ):
782
+ if r .status_code == 200 :
803
783
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
804
815
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
839
836
840
- return r
837
+ return response
841
838
842
839
843
840
#################################################################################################################
0 commit comments