@@ -36,6 +36,30 @@ def valid_datetime_type(arg_datetime_str):
36
36
msg = f"Given Date { arg_datetime_str } not valid! Expected format, YYYY-MM-DD_hh:mm!"
37
37
raise argparse .ArgumentTypeError (msg )
38
38
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
+
39
63
verbose_dict = {
40
64
'debug' :logging .DEBUG ,
41
65
'info' :logging .INFO ,
@@ -270,9 +294,12 @@ class RateLimitHandler:
270
294
nr_previous_requests = 0 ):
271
295
272
296
273
-
274
297
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
+
276
303
self ._TEN_SECOND_TIMEDELTA = timedelta (seconds = 10 )
277
304
self ._HOUR_TIMEDELTA = timedelta (hours = 1 )
278
305
self ._SECOND_TIMEDELTA = timedelta (seconds = 1 )
@@ -535,6 +562,26 @@ def main():
535
562
required = False ,
536
563
help = "Assumes this many previous requests has been done, so that the rate limit is not exceeded (default: 0)" )
537
564
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
+
538
585
args = parser .parse_args ()
539
586
540
587
@@ -549,9 +596,10 @@ def main():
549
596
550
597
551
598
# 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 )
555
603
556
604
557
605
for station_mac , station_data_overview in rate_limit_handler .get_stations ():
0 commit comments