1- from .upload import FrameioUploader
2- from ratelimit import RateLimitException
3- from backoff import on_exception , expo
41import requests
2+ from .upload import FrameioUploader
3+ from requests .adapters import HTTPAdapter
4+ from requests .packages .urllib3 .util .retry import Retry
55
66class PaginatedResponse (object ):
77 def __init__ (self , results = [], page = 0 , page_size = 0 , total = 0 , total_pages = 0 ):
@@ -19,16 +19,26 @@ class FrameioClient(object):
1919 def __init__ (self , token , host = 'https://api.frame.io' ):
2020 self .token = token
2121 self .host = host
22+ self .retry_strategy = Retry (
23+ total = 3 ,
24+ backoff_factor = 1 ,
25+ status_forcelist = [429 ],
26+ method_whitelist = ["POST" , "OPTIONS" ]
27+ )
2228
23- @on_exception (expo , RateLimitException , max_tries = 10 )
2429 def _api_call (self , method , endpoint , payload = {}):
2530 url = '{}/v2{}' .format (self .host , endpoint )
2631
2732 headers = {
2833 'Authorization' : 'Bearer {}' .format (self .token )
2934 }
3035
31- r = requests .request (
36+ adapter = HTTPAdapter (max_retries = self .retry_strategy )
37+
38+ http = requests .Session ()
39+ http .mount ("https://" , adapter )
40+
41+ r = http .request (
3242 method ,
3343 url ,
3444 json = payload ,
@@ -47,9 +57,6 @@ def _api_call(self, method, endpoint, payload={}):
4757
4858 return r .json ()
4959
50- if r .status_code == "429" :
51- raise RateLimitException
52-
5360 return r .raise_for_status ()
5461
5562 def get_me (self ):
0 commit comments