From 6492a21757b48c23f5621da3e674d57f7be40769 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 19 Sep 2023 21:04:48 -0700 Subject: [PATCH 1/3] Local Sensor Request Updates - added support for single or multiple local network sensors. --- purpleair_api/PurpleAirAPI.py | 2 +- purpleair_api/PurpleAirLocalAPI.py | 35 +++++++++++++++++++++++------- setup.py | 2 +- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/purpleair_api/PurpleAirAPI.py b/purpleair_api/PurpleAirAPI.py index 0641aa1..78d4857 100644 --- a/purpleair_api/PurpleAirAPI.py +++ b/purpleair_api/PurpleAirAPI.py @@ -67,7 +67,7 @@ def __init__( retval_api_write_key = self._check_an_api_key(your_api_write_key) if your_ipv4_address is not None: - PurpleAirLocalAPI.__init__(self, ipv4_address=your_ipv4_address) + PurpleAirLocalAPI.__init__(self, ipv4_address_list=your_ipv4_address) if retval_api_read_key is not None: if self._api_key_types[your_api_read_key] == "READ": diff --git a/purpleair_api/PurpleAirLocalAPI.py b/purpleair_api/PurpleAirLocalAPI.py index 2c19fae..e5c9241 100644 --- a/purpleair_api/PurpleAirLocalAPI.py +++ b/purpleair_api/PurpleAirLocalAPI.py @@ -14,24 +14,43 @@ class PurpleAirLocalAPI: """ The PurpleAirLocalAPI class designed to send valid - local network requests. + local network requests. It can work with one or many IPv4 addresses. + + :param list ipv4_address_list: A list of strings with valid IPv4 addresses for your sensors. The addresses don't need a CIDR. """ - def __init__(self, ipv4_address=None): + def __init__(self, ipv4_address_list=None): # Create the vase API request string for local networks. - error_msg = "Must provide the IPv4 address for the senson on your local network" + error_msg = ( + "Must provide the IPv4 address list for the sensor(s) on your local network" + ) - if type(ipv4_address) is type(None): + if type(ipv4_address_list) is type(None): raise PurpleAirAPIError(error_msg) - elif len(ipv4_address) == 0: + elif type(ipv4_address_list) is not type(list()): raise PurpleAirAPIError(error_msg) - self._base_api_local_network_request_string = f"http://{ipv4_address}/json" + for address in ipv4_address_list: + if len(address) == 0 or len(address) > 15: + raise PurpleAirAPIError(error_msg) + + self._base_api_local_network_request_string_dict = dict() + for address in ipv4_address_list: + self._base_api_local_network_request_string_dict[ + address + ] = f"http://{address}/json" - def request_local_sensor_data(self): + def request_local_sensor_data(self) -> dict: """ A method to request a local sensors data. This sensor must be in a netork that is accessible """ - return send_url_get_request(self._base_api_local_network_request_string) + retval = {} + for key, value in self._base_api_local_network_request_string_dict.items(): + print("key", key) + print("value", value) + request_value = send_url_get_request(value) + retval[key] = request_value + + return retval diff --git a/setup.py b/setup.py index cce99b5..3b14dde 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ def read_file(filename): setup( name="purpleair_api", - version="1.1.0", + version="1.1.1a0", license="MIT", author="Carlos Santos", author_email="dose.lucky.sake@cloak.id", From c693aa3f2912e5ab1e9dc1537f7c060fb76db9f7 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 19 Sep 2023 21:08:30 -0700 Subject: [PATCH 2/3] Update test_purpleair_local_api.py tests :) --- test/test_purpleair_local_api.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/test/test_purpleair_local_api.py b/test/test_purpleair_local_api.py index 0654fb6..446beb2 100644 --- a/test/test_purpleair_local_api.py +++ b/test/test_purpleair_local_api.py @@ -17,7 +17,7 @@ class PurpleAirLocalAPITest(unittest.TestCase): def setUp(self): - self.pala = PurpleAirLocalAPI("192.168.1.2") + self.pala = PurpleAirLocalAPI(["192.168.1.2"]) def tearDown(self): self.pala = None @@ -48,7 +48,7 @@ def test_request_local_sensor_data_none_ip_provided(self): with self.assertRaises(PurpleAirAPIError): self.pala = PurpleAirLocalAPI(None) - def test_request_local_sensor_data_empty_string_ip_provided(self): + def test_request_local_sensor_data_empty_list_ip_provided(self): """ Test that providing no IP address results in a `PurpleAirAPIError` """ @@ -58,7 +58,10 @@ def test_request_local_sensor_data_empty_string_ip_provided(self): self.pala = PurpleAirLocalAPI(None) with self.assertRaises(PurpleAirAPIError): - self.pala = PurpleAirLocalAPI("") + self.pala = PurpleAirLocalAPI(["", ""]) + + with self.assertRaises(PurpleAirAPIError): + self.pala = PurpleAirLocalAPI({}) if __name__ == "__main__": From ae59ba0232b921a10eb2cbd8c20f62369670b819 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 19 Sep 2023 21:09:52 -0700 Subject: [PATCH 3/3] HTML Docs - ran sphinx for docs. --- docs/doctrees/PurpleAirLocalAPI.doctree | Bin 8538 -> 10146 bytes docs/doctrees/environment.pickle | Bin 317811 -> 319843 bytes docs/html/.buildinfo | 2 +- docs/html/PurpleAirAPI.html | 2 +- docs/html/PurpleAirAPIConstants.html | 2 +- docs/html/PurpleAirAPIError.html | 2 +- docs/html/PurpleAirAPIHelpers.html | 2 +- docs/html/PurpleAirLocalAPI.html | 13 +++++++++---- docs/html/PurpleAirReadAPI.html | 2 +- docs/html/PurpleAirWriteAPI.html | 2 +- docs/html/_static/documentation_options.js | 2 +- docs/html/genindex.html | 2 +- docs/html/index.html | 2 +- docs/html/modules.html | 2 +- docs/html/py-modindex.html | 2 +- docs/html/search.html | 2 +- docs/html/searchindex.js | 2 +- sphinx_docs_build/source/conf.py | 2 +- 18 files changed, 24 insertions(+), 19 deletions(-) diff --git a/docs/doctrees/PurpleAirLocalAPI.doctree b/docs/doctrees/PurpleAirLocalAPI.doctree index 732367c6033207a8fd5e05e67b4d1f2aea9ab204..edf1c7a583e9946b7e778c9fd27294cfcffd0c42 100644 GIT binary patch delta 1778 zcmb7E&u<$=6!xyOcI`Nh^UFzbY)>jd*0>FamI^qOK#@=ykwoREgsOD2JI?H2@0y*p zQ=?W+P*F*l1JW!C6%`8o3tAZop`Lm{91vF|E{Jg8!~r33W@guGJ8e+m;Mtk)y*KZ@ z?|q)1U%s=dY%8Db&EHdgk4Yu=N35W%S54w}hU3f8@vK>Io>|un!-0hOIMb8rQSj$U zm3@*NDf&(xieK_jmX19V-Z@A{6={n-pSf@rEV)3}EU;xe?}07TMZmToupLm-tQJ^W zYn}n!%#bXESNfsl{}IY|GQYMHG+8lW)d;F%UTMd>=BY?QF~8CTReZDeuti0^NK321 z0Xt2uX%2^6=#a3sLFgkdNRh+4QiMg*Id)e`wHv66Z%B~{%HiwclSlVZVL8&+=;zt6 zjn+V(ZiS0s#q@(mI0dR0SP7gu1zrMT3+xIYu47u8B;d8FRZW94`t~5Dpu(wc*$oE} zXc5~X3*Zd|`;-I2w&q=6L1+LCoL_q7VlV_1MQFNe^2W95I!|L;o2;EYUVhBvy*?v% zn3T@<_}CBlxXnMDhb)zWI^Zi{G>f7rzk&)YjSc)F2SPHsZa@M(l|f5 ztvdAZNghUpyQ?{y(Dm?r0SI?ehq_rYb?;-Wa}1ZoV(30-{)#@KdqIQO z*_Wdy68OX5)E4IBqW^0Fa9VtNQ)W`^xz66$`;zo5yFXq|s$ARWfMMz`J3H}?JR-AC zCti>fGW%iTPdy=rp*SbDg=LA$C_+;PB>K7o-G*ZwmV>y+m%~w7%F-d<-f!?EPnS^_ z{qY`B!@rNed&eOGu3945_ZgkV>0_`>M!{%QSCF6Sm|=XEw6VOV*AQ0D^CxP#<~E?`;@UKW^(NE zbaAf6aT>Qba3E?+9FGYa!!z5TJ|7QmUg482vW4k5%ghvC#Xs@^Qbn(7gm@4=$zT6@ z{wwjK9e#^%#zgFP#NzgL4ZhpOO@G~zJI$FdWa(~aJoj64{-$uc!52ak;_($l5dLgq xVb~>Tj?=>JY_@pe*xwvNd3u#S$XsQsWARCp5^~}~*g-crZ~Uf&+)==r(m%%lKQjOT delta 446 zcmZ4Ff6Ixrfpx0C;zrizY>Xgo*XO8J2{t2157XH(oo{bEGRRHPfSTE zN-Zv)lEEH3B}1$SMR4Svt%UgD!tKO+M}hD-)?hHTbC5L3>Zu{0?)L%w#3MuuYS zl&nt1$?DP-Oq&=dFO)9ig(=C9&gx;DEHCq!aW~LFoyqpHti0V&?LfI5jFSUpb$NS` z&7RyXYomAxDAL28pOjTnS&%v<>oSPTk&;@R4C7CJA?wW4%{Wdd+gChstA-X}MkiBW8Gl;UG% z^$#FLZ-GQ{4`*ItZYs#$;wiOLvOp4@#Tkk~e*@(wr>J@{#!OzXI-R`}q@$m4v#(kx FBLG|vk469h diff --git a/docs/doctrees/environment.pickle b/docs/doctrees/environment.pickle index b9c44a5cca70a0a1c2bd5668c561653f765ec9b9..5d14f113bdb8f0b732677583ed505c05652310bc 100644 GIT binary patch delta 37248 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 Im09Bd0A58IH2?qr delta 36435 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 EADT=4^8f$< diff --git a/docs/html/.buildinfo b/docs/html/.buildinfo index e7f9767..5822716 100644 --- a/docs/html/.buildinfo +++ b/docs/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 2fb0fde188d98b30d7936f902f8a9d8a +config: 0e3dd2b003b323d457484d3d023fbd15 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/html/PurpleAirAPI.html b/docs/html/PurpleAirAPI.html index 9cb1f49..38ffb90 100644 --- a/docs/html/PurpleAirAPI.html +++ b/docs/html/PurpleAirAPI.html @@ -4,7 +4,7 @@ - PurpleAirAPI module — PurpleAir API V1.1.0 documentation + PurpleAirAPI module — PurpleAir API V1.1.1a0 documentation