22
22
import json
23
23
import re
24
24
25
+ try :
26
+ from typing import List , Tuple , Any
27
+ except ImportError :
28
+ pass
29
+
25
30
from adafruit_minimqtt .adafruit_minimqtt import MMQTTException
26
31
from adafruit_io .adafruit_io_errors import (
27
32
AdafruitIO_RequestError ,
35
40
CLIENT_HEADERS = {"User-Agent" : "AIO-CircuitPython/{0}" .format (__version__ )}
36
41
37
42
38
- def validate_feed_key (feed_key ):
43
+ def validate_feed_key (feed_key : str ):
39
44
"""Validates a provided feed key against Adafruit IO's system rules.
40
45
https://learn.adafruit.com/naming-things-in-adafruit-io/the-two-feed-identifiers
41
46
"""
@@ -143,7 +148,7 @@ def _on_disconnect_mqtt(self, client, userdata, return_code):
143
148
self .on_disconnect (self )
144
149
145
150
# pylint: disable=not-callable
146
- def _on_message_mqtt (self , client , topic , payload ):
151
+ def _on_message_mqtt (self , client , topic : str , payload : str ):
147
152
"""Runs when the client calls on_message. Parses and returns
148
153
incoming data from Adafruit IO feeds.
149
154
@@ -195,7 +200,7 @@ def _on_unsubscribe_mqtt(self, client, user_data, topic, pid):
195
200
if self .on_unsubscribe is not None :
196
201
self .on_unsubscribe (self , user_data , topic , pid )
197
202
198
- def add_feed_callback (self , feed_key , callback_method ):
203
+ def add_feed_callback (self , feed_key : str , callback_method : str ):
199
204
"""Attaches a callback_method to an Adafruit IO feed.
200
205
The callback_method function is called when a
201
206
new value is written to the feed.
@@ -211,7 +216,7 @@ def add_feed_callback(self, feed_key, callback_method):
211
216
"{0}/f/{1}" .format (self ._user , feed_key ), callback_method
212
217
)
213
218
214
- def remove_feed_callback (self , feed_key ):
219
+ def remove_feed_callback (self , feed_key : str ):
215
220
"""Removes a previously registered callback method
216
221
from executing whenever feed_key receives new data.
217
222
@@ -239,7 +244,7 @@ def loop(self, timeout=1):
239
244
self ._client .loop (timeout )
240
245
241
246
# Subscriptions
242
- def subscribe (self , feed_key = None , group_key = None , shared_user = None ):
247
+ def subscribe (self , feed_key : str = None , group_key : str = None , shared_user : str = None ):
243
248
"""Subscribes to your Adafruit IO feed or group.
244
249
Can also subscribe to someone else's feed.
245
250
@@ -387,7 +392,7 @@ def publish_multiple(self, feeds_and_data, timeout=3, is_group=False):
387
392
time .sleep (timeout )
388
393
389
394
# pylint: disable=too-many-arguments
390
- def publish (self , feed_key , data , metadata = None , shared_user = None , is_group = False ):
395
+ def publish (self , feed_key : str , data : Any , metadata : str = None , shared_use : str = None , is_group : bool = False ):
391
396
"""Publishes to an An Adafruit IO Feed.
392
397
393
398
:param str feed_key: Adafruit IO Feed key.
@@ -453,7 +458,7 @@ def publish(self, feed_key, data, metadata=None, shared_user=None, is_group=Fals
453
458
else :
454
459
self ._client .publish ("{0}/f/{1}" .format (self ._user , feed_key ), data )
455
460
456
- def get (self , feed_key ):
461
+ def get (self , feed_key : str ):
457
462
"""Calling this method will make Adafruit IO publish the most recent
458
463
value on feed_key.
459
464
https://io.adafruit.com/api/docs/mqtt.html#retained-values
@@ -498,7 +503,7 @@ def _create_headers(io_headers):
498
503
return headers
499
504
500
505
@staticmethod
501
- def _create_data (data , metadata ):
506
+ def _create_data (data , metadata : dict ):
502
507
"""Returns a data payload as expected by the Adafruit IO HTTP API
503
508
504
509
:param data: Payload value.
@@ -522,15 +527,15 @@ def _handle_error(response):
522
527
if response .status_code >= 400 :
523
528
raise AdafruitIO_RequestError (response )
524
529
525
- def _compose_path (self , path ):
530
+ def _compose_path (self , path : str ):
526
531
"""Composes a valid API request path.
527
532
528
533
:param str path: Adafruit IO API URL path.
529
534
"""
530
535
return "https://io.adafruit.com/api/v2/{0}/{1}" .format (self .username , path )
531
536
532
537
# HTTP Requests
533
- def _post (self , path , payload ):
538
+ def _post (self , path : str , payload : json ):
534
539
"""
535
540
POST data to Adafruit IO
536
541
@@ -545,7 +550,7 @@ def _post(self, path, payload):
545
550
response .close ()
546
551
return json_data
547
552
548
- def _get (self , path ):
553
+ def _get (self , path : str ):
549
554
"""
550
555
GET data from Adafruit IO
551
556
@@ -559,7 +564,7 @@ def _get(self, path):
559
564
response .close ()
560
565
return json_data
561
566
562
- def _delete (self , path ):
567
+ def _delete (self , path : str ):
563
568
"""
564
569
DELETE data from Adafruit IO.
565
570
@@ -574,7 +579,7 @@ def _delete(self, path):
574
579
return json_data
575
580
576
581
# Data
577
- def send_data (self , feed_key , data , metadata = None , precision = None ):
582
+ def send_data (self , feed_key : str , data : str , metadata : dict = None , precision : int = None ):
578
583
"""
579
584
Sends value data to a specified Adafruit IO feed.
580
585
@@ -595,7 +600,7 @@ def send_data(self, feed_key, data, metadata=None, precision=None):
595
600
payload = self ._create_data (data , metadata )
596
601
self ._post (path , payload )
597
602
598
- def send_batch_data (self , feed_key , data_list ):
603
+ def send_batch_data (self , feed_key : str , data_list : list ):
599
604
"""
600
605
Sends a batch array of data to a specified Adafruit IO feed
601
606
@@ -607,7 +612,7 @@ def send_batch_data(self, feed_key, data_list):
607
612
data_dict = type (data_list )((data ._asdict () for data in data_list ))
608
613
self ._post (path , {"data" : data_dict })
609
614
610
- def receive_all_data (self , feed_key ):
615
+ def receive_all_data (self , feed_key : str ):
611
616
"""
612
617
Get all data values from a specified Adafruit IO feed. Data is
613
618
returned in reverse order.
@@ -618,7 +623,7 @@ def receive_all_data(self, feed_key):
618
623
path = self ._compose_path ("feeds/{0}/data" .format (feed_key ))
619
624
return self ._get (path )
620
625
621
- def receive_data (self , feed_key ):
626
+ def receive_data (self , feed_key : str ):
622
627
"""
623
628
Return the most recent value for the specified feed.
624
629
@@ -628,7 +633,7 @@ def receive_data(self, feed_key):
628
633
path = self ._compose_path ("feeds/{0}/data/last" .format (feed_key ))
629
634
return self ._get (path )
630
635
631
- def delete_data (self , feed_key , data_id ):
636
+ def delete_data (self , feed_key : str , data_id : str ):
632
637
"""
633
638
Deletes an existing Data point from a feed.
634
639
@@ -640,7 +645,7 @@ def delete_data(self, feed_key, data_id):
640
645
return self ._delete (path )
641
646
642
647
# Groups
643
- def create_new_group (self , group_key , group_description ):
648
+ def create_new_group (self , group_key : str , group_description : str ):
644
649
"""
645
650
Creates a new Adafruit IO Group.
646
651
@@ -651,7 +656,7 @@ def create_new_group(self, group_key, group_description):
651
656
payload = {"name" : group_key , "description" : group_description }
652
657
return self ._post (path , payload )
653
658
654
- def delete_group (self , group_key ):
659
+ def delete_group (self , group_key : str ):
655
660
"""
656
661
Deletes an existing group.
657
662
@@ -660,7 +665,7 @@ def delete_group(self, group_key):
660
665
path = self ._compose_path ("groups/{0}" .format (group_key ))
661
666
return self ._delete (path )
662
667
663
- def get_group (self , group_key ):
668
+ def get_group (self , group_key : str ):
664
669
"""
665
670
Returns Group based on Group Key
666
671
@@ -669,7 +674,7 @@ def get_group(self, group_key):
669
674
path = self ._compose_path ("groups/{0}" .format (group_key ))
670
675
return self ._get (path )
671
676
672
- def create_feed_in_group (self , group_key , feed_name ):
677
+ def create_feed_in_group (self , group_key : str , feed_name : str ):
673
678
"""Creates a new feed in an existing group.
674
679
675
680
:param str group_key: Group name.
@@ -679,7 +684,7 @@ def create_feed_in_group(self, group_key, feed_name):
679
684
payload = {"feed" : {"name" : feed_name }}
680
685
return self ._post (path , payload )
681
686
682
- def add_feed_to_group (self , group_key , feed_key ):
687
+ def add_feed_to_group (self , group_key : str , feed_key : str ):
683
688
"""
684
689
Adds an existing feed to a group
685
690
@@ -692,7 +697,7 @@ def add_feed_to_group(self, group_key, feed_key):
692
697
return self ._post (path , payload )
693
698
694
699
# Feeds
695
- def get_feed (self , feed_key , detailed = False ):
700
+ def get_feed (self , feed_key : str , detailed : bool = False ):
696
701
"""
697
702
Returns an Adafruit IO feed based on the feed key
698
703
@@ -706,7 +711,7 @@ def get_feed(self, feed_key, detailed=False):
706
711
path = self ._compose_path ("feeds/{0}" .format (feed_key ))
707
712
return self ._get (path )
708
713
709
- def create_new_feed (self , feed_key , feed_desc = None , feed_license = None ):
714
+ def create_new_feed (self , feed_key : str , feed_desc : str = None , feed_license : str = None ):
710
715
"""
711
716
Creates a new Adafruit IO feed.
712
717
@@ -720,7 +725,7 @@ def create_new_feed(self, feed_key, feed_desc=None, feed_license=None):
720
725
return self ._post (path , payload )
721
726
722
727
def create_and_get_feed (
723
- self , feed_key , detailed = False , feed_desc = None , feed_license = None
728
+ self , feed_key : str , detailed : bool = False , feed_desc : str = None , feed_license : str = None
724
729
):
725
730
"""
726
731
Attempts to return a feed; if the feed does not exist, it is created, and then returned.
@@ -738,7 +743,7 @@ def create_and_get_feed(
738
743
)
739
744
return self .get_feed (feed_key , detailed = detailed )
740
745
741
- def delete_feed (self , feed_key ):
746
+ def delete_feed (self , feed_key : str ):
742
747
"""
743
748
Deletes an existing feed.
744
749
@@ -749,7 +754,7 @@ def delete_feed(self, feed_key):
749
754
return self ._delete (path )
750
755
751
756
# Adafruit IO Connected Services
752
- def receive_weather (self , weather_id ):
757
+ def receive_weather (self , weather_id : int ):
753
758
"""
754
759
Get data from the Adafruit IO Weather Forecast Service
755
760
NOTE: This service is avaliable to Adafruit IO Plus subscribers only.
@@ -759,7 +764,7 @@ def receive_weather(self, weather_id):
759
764
path = self ._compose_path ("integrations/weather/{0}" .format (weather_id ))
760
765
return self ._get (path )
761
766
762
- def receive_random_data (self , generator_id ):
767
+ def receive_random_data (self , generator_id : int ):
763
768
"""
764
769
Get data from the Adafruit IO Random Data Stream Service
765
770
0 commit comments