66
77from datetime import timedelta , datetime
88
9+
910class RateLimit : # pylint: disable=too-few-public-methods
1011 def __init__ (self , count , period ):
1112 self .count = count
@@ -26,7 +27,7 @@ def get_tat(self, key):
2627 return self .memory [key ]
2728 else :
2829 return datetime .min
29-
30+
3031 def set_tat (self , key , tat ):
3132 self .memory [key ] = tat
3233
@@ -39,20 +40,19 @@ def get_tat_as_string(self, key):
3940 else :
4041 return datetime .min .isoformat ()
4142
42-
4343 def set_tat_as_string (self , key , tat ):
4444 # Take value as string and unmarshall:
4545 # YYYY-MM-DDTHH:MM:SS.mmmmmm
4646 # to datetime
47- self .memory [key ] = datetime .strptime (tat ,"%Y-%m-%dT%H:%M:%S.%f" )
47+ self .memory [key ] = datetime .strptime (tat , "%Y-%m-%dT%H:%M:%S.%f" )
4848
4949 def update (self , key , limit , testonly = False ):
5050 '''Determine if the item associated with the key should be
5151 rejected given the RateLimit limit.
5252 '''
5353 now = datetime .utcnow ()
5454 tat = max (self .get_tat (key ), now )
55- separation = (tat - now ).total_seconds ()
55+ separation = (tat - now ).total_seconds ()
5656 max_interval = limit .period .total_seconds () - limit .inverse
5757 if separation > max_interval :
5858 reject = True
@@ -90,23 +90,24 @@ def status(self, key, limit):
9090 # status of current limit as of now
9191 now = datetime .utcnow ()
9292
93- current_count = int ((limit .period - (tat - now )).total_seconds ()\
94- / limit .inverse )
95- ret ['X-RateLimit-Remaining' ] = str (min (current_count ,limit .count ))
93+ current_count = int ((limit .period - (tat - now )).total_seconds () /
94+ limit .inverse )
95+ ret ['X-RateLimit-Remaining' ] = str (min (current_count , limit .count ))
9696
9797 # tat_in_epochsec = (tat - datetime(1970, 1, 1)).total_seconds()
9898 seconds_to_tat = (tat - now ).total_seconds ()
9999 ret ['X-RateLimit-Reset' ] = str (max (seconds_to_tat , 0 ))
100- ret ['X-RateLimit-Reset-date' ] = "%s" % tat
101- ret ['Now' ] = str ((now - datetime (1970 ,1 , 1 )).total_seconds ())
102- ret ['Now-date' ] = "%s" % now
100+ ret ['X-RateLimit-Reset-date' ] = "%s" % tat
101+ ret ['Now' ] = str ((now - datetime (1970 , 1 , 1 )).total_seconds ())
102+ ret ['Now-date' ] = "%s" % now
103103
104104 if self .update (key , limit , testonly = True ):
105105 # A new request would be rejected if it was processes.
106106 # The user has to wait until an item is dequeued.
107107 # One item is dequeued every limit.inverse seconds.
108108 ret ['Retry-After' ] = str (int (limit .inverse ))
109- ret ['Retry-After-Timestamp' ] = "%s" % (now + timedelta (seconds = limit .inverse ))
109+ ret ['Retry-After-Timestamp' ] = "%s" % \
110+ (now + timedelta (seconds = limit .inverse )) # noqa: E127
110111 else :
111112 # if we are not rejected, the user can post another
112113 # attempt immediately.
0 commit comments