diff --git a/lib/limits.py b/lib/limits.py index 019000a..46ee975 100644 --- a/lib/limits.py +++ b/lib/limits.py @@ -29,18 +29,9 @@ def _time_caps(m, h, d): 'day': d, } -def _log_visit(interval, ip): - if ip_address not in self.counter[interval]: - self.counter[interval][ip_address] = 0 - self.counter[interval][ip_address] += 1 -def _limit_exceeded(interval, ip): - visits = self.counter[interval][ip_address] - limit = self.limit[interval] - return visits > limit -def _report_excessive_visits(interval, ip): - log("%s LIMITED [%s for %s]" % (ip_address, self.limit[interval], interval)) + class Limits(object): @@ -68,6 +59,21 @@ class Limits(object): self._clear_counters_if_needed() + def _log_visit(self, interval, ip): + if ip_address not in self.counter[interval]: + self.counter[interval][ip_address] = 0 + self.counter[interval][ip_address] += 1 + + def _limit_exceeded(self, interval, ip): + visits = self.counter[interval][ip_address] + limit = self.get_limit(interval) + return visits > limit + + def _get_limit(self, interval): + return self.limit[interval] + + def _report_excessive_visits(self, interval, ip): + log("%s LIMITED [%s for %s]" % (ip_address, self.get_limit(interval), interval)) def check_ip(self, ip_address): """ @@ -78,11 +84,11 @@ class Limits(object): return None self._clear_counters_if_needed() for interval in self.intervals: - _log_visit(interval, ip) - if _limit_exceeded(interval, ip): - _report_excessive_visits(interval, ip) + self._log_visit(interval, ip) + if self._limit_exceeded(interval, ip): + self._report_excessive_visits(interval, ip) return ("Not so fast! Number of queries per %s is limited to %s" - % (interval, self.limit[interval])) + % (interval, self.get_limit(interval) )) return None def reset(self):