Skip to content

Commit 5b4b36a

Browse files
committed
Added arguments to specify rate limits
1 parent 2331149 commit 5b4b36a

File tree

1 file changed

+53
-5
lines changed

1 file changed

+53
-5
lines changed

samples/weather2file

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,30 @@ def valid_datetime_type(arg_datetime_str):
3636
msg = f"Given Date {arg_datetime_str} not valid! Expected format, YYYY-MM-DD_hh:mm!"
3737
raise argparse.ArgumentTypeError(msg)
3838

39+
def valid_hour_limit(hour_limit):
40+
hour_limit = int(hour_limit)
41+
if hour_limit <= 0:
42+
msg = "Hour limit must be larger than 0"
43+
raise argparse.ArgumentTypeError(msg)
44+
elif hour_limit > 500:
45+
msg = "Hour limit cannot be more than 500"
46+
raise argparse.ArgumentTypeError(msg)
47+
48+
return hour_limit
49+
50+
51+
def valid_ten_seconds_limit(ten_sec_limit):
52+
ten_sec_limit = int(ten_sec_limit)
53+
if ten_sec_limit <= 0:
54+
msg = "Ten seconds limit must be larger than 0"
55+
raise argparse.ArgumentTypeError(msg)
56+
elif ten_sec_limit > 50:
57+
msg = "Ten seconds limit cannot be more than 50"
58+
raise argparse.ArgumentTypeError(msg)
59+
60+
return ten_sec_limit
61+
62+
3963
verbose_dict = {
4064
'debug':logging.DEBUG,
4165
'info':logging.INFO,
@@ -270,9 +294,12 @@ class RateLimitHandler:
270294
nr_previous_requests=0):
271295

272296

273-
274297
self._USER_REQUEST_LIMIT_PER_TEN_SECONDS = user_request_limit_per_ten_seconds
275-
self._USER_REQUST_LIMIT_PER_HOUR = user_request_limit_per_hour # Due to the authorization steps
298+
logging.debug(f'Ten second rate limit was set to {user_request_limit_per_ten_seconds}')
299+
300+
self._USER_REQUST_LIMIT_PER_HOUR = user_request_limit_per_hour
301+
logging.debug(f'Hour rate limit was set to {user_request_limit_per_hour}')
302+
276303
self._TEN_SECOND_TIMEDELTA = timedelta(seconds=10)
277304
self._HOUR_TIMEDELTA = timedelta(hours=1)
278305
self._SECOND_TIMEDELTA = timedelta(seconds=1)
@@ -535,6 +562,26 @@ def main():
535562
required=False,
536563
help="Assumes this many previous requests has been done, so that the rate limit is not exceeded (default: 0)")
537564

565+
566+
parser.add_argument(
567+
"-hrl",
568+
"--hour-rate-limit",
569+
type=valid_hour_limit,
570+
default=400,
571+
required=False,
572+
help="Specify the rate limit per hour (default: 400, max: 500)")
573+
574+
575+
576+
parser.add_argument(
577+
"-t",
578+
"--ten-second-rate-limit",
579+
type=valid_ten_seconds_limit,
580+
default=30,
581+
required=False,
582+
help="Specify the rate limit per ten seconds (default: 30, max: 50)")
583+
584+
538585
args = parser.parse_args()
539586

540587

@@ -549,9 +596,10 @@ def main():
549596

550597

551598
# Rate handler to make sure that we don't exceed Netatmos user rate limits
552-
rate_limit_handler = RateLimitHandler(nr_previous_requests=args.previous_requests)
553-
554-
599+
rate_limit_handler = RateLimitHandler(
600+
user_request_limit_per_ten_seconds=args.ten_second_rate_limit,
601+
user_request_limit_per_hour=args.hour_rate_limit,
602+
nr_previous_requests=args.previous_requests)
555603

556604

557605
for station_mac, station_data_overview in rate_limit_handler.get_stations():

0 commit comments

Comments
 (0)