Skip to content

Commit 2bc428a

Browse files
committed
(CombinedRateLimit.get_reset_after) filter out limits that have not been exceeded
1 parent 4f7e30b commit 2bc428a

1 file changed

Lines changed: 7 additions & 1 deletion

File tree

xbox/webapi/common/ratelimits/__init__.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,14 @@ def get_counter(self) -> int:
131131
# Return the highest value
132132
return counters[0]
133133

134+
# We don't want a datetime response for a limit that has not been exceeded.
135+
# Otherwise eg. 10 burst requests -> 300s timeout (should be 30 (burst exceeded), 300s (not exceeded)
134136
def get_reset_after(self) -> Union[datetime, None]:
137+
# Get a list of limits that *have been exceeded*
138+
dates_exceeded_only = filter(lambda limit: limit.is_exceeded(), self.__limits)
139+
135140
# Map self.__limits to (limit).get_reset_after()
136-
dates_map = map(lambda limit: limit.get_reset_after(), self.__limits)
141+
dates_map = map(lambda limit: limit.get_reset_after(), dates_exceeded_only)
137142

138143
# Convert the map object to a list
139144
dates = list(dates_map)
@@ -143,6 +148,7 @@ def get_reset_after(self) -> Union[datetime, None]:
143148
dates_valid = [elem for elem in dates if type(elem) == datetime]
144149

145150
# If dates_valid has any elements, return the one with the *later* timestamp.
151+
# This means that if two or more limits have been exceeded, we wait for both to have reset (by returning the later timestamp)
146152
if len(dates_valid) != 0:
147153
dates_valid[0].isoformat
148154
print(

0 commit comments

Comments
 (0)