99
1010
1111class Call (object ):
12- def __init__ (self , logger = None , ** kwargs ):
12+ def __init__ (self , logger = None , limiter = None , ** kwargs ):
1313 self .version = kwargs .pop ("version" , "latest" )
1414 self .host = kwargs .pop ("host" , None )
1515 self .ssl = kwargs .pop ("_ssl" , True )
1616 self .user_agent = kwargs .pop ("user_agent" , DEFAULT_USER_AGENT )
1717 self .logger = logger
18+ self .limiter = limiter
1819 self .update_credentials (
1920 access_key = kwargs .pop ("access_key" , None ),
2021 secret_key = kwargs .pop ("secret_key" , None ),
@@ -29,6 +30,10 @@ def __init__(self, logger=None, **kwargs):
2930 retry_backoff_jitter = kwargs .pop ("retry_backoff_jitter" , None ),
3031 retry_backoff_max = kwargs .pop ("retry_backoff_max" , None )
3132 )
33+ self .update_limiter (
34+ limiter_max_requests = kwargs .pop ("limiter_max_requests" , None ),
35+ limiter_window = kwargs .pop ("limiter_window" , None )
36+ )
3237
3338 def update_credentials (
3439 self ,
@@ -59,6 +64,18 @@ def update_credentials(
5964 "retry_backoff_max" : retry_backoff_max ,
6065 }
6166
67+ def update_limiter (
68+ self ,
69+ limiter_window = None ,
70+ limiter_max_requests = None ,
71+ ):
72+ if limiter_window is not None :
73+ self .limiter .window = limiter_window
74+
75+ if limiter_max_requests is not None :
76+ self .limiter .max_requests = limiter_max_requests
77+
78+
6279 def api (self , action , ** data ):
6380 try :
6481 credentials = Credentials (** self .credentials )
@@ -78,6 +95,9 @@ def api(self, action, **data):
7895 else :
7996 endpoint = "{}{}" .format (endpoint , uri )
8097
98+ if self .limiter is not None :
99+ self .limiter .acquire ()
100+
81101 requester = Requester (
82102 Authentication (credentials , host , user_agent = self .user_agent ),
83103 endpoint ,
@@ -86,7 +106,7 @@ def api(self, action, **data):
86106 credentials .retry_backoff_jitter ,
87107 credentials .retry_backoff_max ,
88108 )
89- if self .logger != None :
109+ if self .logger is not None :
90110 self .logger .do_log (
91111 "uri: " + uri + "\n payload:\n " + json .dumps (data , indent = 2 )
92112 )
0 commit comments