juham-visualcrossing 0.0.1__tar.gz → 0.0.3__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {juham_visualcrossing-0.0.1/juham_visualcrossing.egg-info → juham_visualcrossing-0.0.3}/PKG-INFO +2 -2
- juham_visualcrossing-0.0.3/juham_visualcrossing/py.typed +1 -0
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/juham_visualcrossing/visualcrossing.py +48 -33
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3/juham_visualcrossing.egg-info}/PKG-INFO +2 -2
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/juham_visualcrossing.egg-info/SOURCES.txt +1 -0
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/juham_visualcrossing.egg-info/requires.txt +1 -1
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/pyproject.toml +3 -3
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/tests/test_visualcrossing.py +1 -1
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/MANIFEST.in +0 -0
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/docs/source/CHANGELOG.rst +0 -0
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/docs/source/CONTRIBUTING.rst +0 -0
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/docs/source/LICENSE.rst +0 -0
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/docs/source/README.rst +0 -0
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/juham_visualcrossing/__init__.py +0 -0
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/juham_visualcrossing.egg-info/dependency_links.txt +0 -0
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/juham_visualcrossing.egg-info/entry_points.txt +0 -0
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/juham_visualcrossing.egg-info/top_level.txt +0 -0
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/setup.cfg +0 -0
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/tests/__init__.py +0 -0
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/tests/__pycache__/__init__.cpython-312.pyc +0 -0
- {juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/tests/__pycache__/test_visualcrossing.cpython-312.pyc +0 -0
{juham_visualcrossing-0.0.1/juham_visualcrossing.egg-info → juham_visualcrossing-0.0.3}/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: juham_visualcrossing
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.3
|
4
4
|
Summary: A Weather forecast plugin extending `juham` applications
|
5
5
|
Author-email: J Meskanen <juham.api@gmail.com>
|
6
6
|
Maintainer-email: "J. Meskanen" <juham.api@gmail.com>
|
@@ -40,7 +40,7 @@ Classifier: License :: OSI Approved :: MIT License
|
|
40
40
|
Classifier: Programming Language :: Python :: 3.8
|
41
41
|
Requires-Python: >=3.8
|
42
42
|
Description-Content-Type: text/markdown
|
43
|
-
Requires-Dist: juham>=0.0.
|
43
|
+
Requires-Dist: juham>=0.0.12
|
44
44
|
Requires-Dist: pytz>=2024.1
|
45
45
|
Requires-Dist: importlib-metadata
|
46
46
|
Provides-Extra: dev
|
@@ -0,0 +1 @@
|
|
1
|
+
|
{juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/juham_visualcrossing/visualcrossing.py
RENAMED
@@ -1,8 +1,9 @@
|
|
1
1
|
from datetime import datetime, timedelta, timezone
|
2
2
|
import json
|
3
|
+
from typing import Any, Dict, Optional, cast
|
4
|
+
from typing_extensions import override # for python 3.9 compatibility
|
3
5
|
|
4
|
-
from
|
5
|
-
from juham.base import Base
|
6
|
+
from juham.base import Base, MqttMsg, JMqtt
|
6
7
|
from juham.web import RCloud, RCloudThread
|
7
8
|
|
8
9
|
|
@@ -11,13 +12,13 @@ class VisualCrossingThread(RCloudThread):
|
|
11
12
|
site."""
|
12
13
|
|
13
14
|
# class attributes
|
14
|
-
_forecast_topic = ""
|
15
|
-
_base_url = ""
|
16
|
-
_api_key = ""
|
17
|
-
_location = ""
|
15
|
+
_forecast_topic: str = ""
|
16
|
+
_base_url: str = ""
|
17
|
+
_api_key: str = ""
|
18
|
+
_location: str = ""
|
18
19
|
_interval: float = 12 * 3600
|
19
20
|
|
20
|
-
def __init__(self, client=None):
|
21
|
+
def __init__(self, client: Optional[JMqtt] = None):
|
21
22
|
"""Construct with the given mqtt client. Acquires data from the visual
|
22
23
|
crossing web service and publishes the forecast data to
|
23
24
|
forecast_topic.
|
@@ -26,13 +27,14 @@ class VisualCrossingThread(RCloudThread):
|
|
26
27
|
client (object, optional): MQTT client. Defaults to None.
|
27
28
|
"""
|
28
29
|
super().__init__(client)
|
29
|
-
self.mqtt_client = client
|
30
|
+
self.mqtt_client: Optional[JMqtt] = client
|
30
31
|
|
32
|
+
@override
|
31
33
|
def update_interval(self) -> float:
|
32
34
|
return self._interval
|
33
35
|
|
34
|
-
|
35
|
-
def
|
36
|
+
@override
|
37
|
+
def make_weburl(self) -> str:
|
36
38
|
if not self._api_key:
|
37
39
|
self.error("Uninitialized api_key {self.get_class_id()}: {self._api_key}")
|
38
40
|
return ""
|
@@ -63,8 +65,8 @@ class VisualCrossingThread(RCloudThread):
|
|
63
65
|
self._api_key = api_key
|
64
66
|
self._location = location
|
65
67
|
|
66
|
-
|
67
|
-
def process_data(self, data: Any):
|
68
|
+
@override
|
69
|
+
def process_data(self, data: Any) -> None:
|
68
70
|
self.info("VisualCrossing process_data()")
|
69
71
|
data = data.json()
|
70
72
|
forecast = []
|
@@ -112,24 +114,35 @@ class VisualCrossing(RCloud):
|
|
112
114
|
update_interval.
|
113
115
|
"""
|
114
116
|
|
115
|
-
workerThreadId = VisualCrossingThread.get_class_id()
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
117
|
+
workerThreadId: str = VisualCrossingThread.get_class_id()
|
118
|
+
base_url: str = (
|
119
|
+
"https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline/"
|
120
|
+
)
|
121
|
+
update_interval: float = 12 * 3600
|
122
|
+
api_key: str = "SE9W7EHP775N7NDNW8ANM2MZN"
|
123
|
+
location: str = "lahti,finland"
|
121
124
|
|
122
|
-
def __init__(self, name="visualcrossing"):
|
125
|
+
def __init__(self, name="visualcrossing") -> None:
|
126
|
+
"""Constructs VisualCrossing automation object for acquiring and publishing
|
127
|
+
forecast data.
|
128
|
+
|
129
|
+
Args:
|
130
|
+
name (str, optional): name of the object. Defaults to "visualcrossing".
|
131
|
+
"""
|
123
132
|
super().__init__(name)
|
124
|
-
self.
|
133
|
+
self.worker: Optional[VisualCrossingThread] = None
|
134
|
+
self.forecast_topic: str = self.make_topic_name("forecast")
|
135
|
+
self.debug(f"VisualCrossing with name {name} created")
|
125
136
|
|
126
|
-
|
137
|
+
@override
|
138
|
+
def on_connect(self, client: object, userdata: Any, flags: int, rc: int) -> None:
|
127
139
|
super().on_connect(client, userdata, flags, rc)
|
128
140
|
if rc == 0:
|
129
141
|
self.subscribe(self.forecast_topic)
|
130
142
|
self.debug(f"VisualCrossing subscribed to topic {self.forecast_topic}")
|
131
143
|
|
132
|
-
|
144
|
+
@override
|
145
|
+
def on_message(self, client: object, userdata: Any, msg: MqttMsg) -> None:
|
133
146
|
if msg.topic == self.forecast_topic:
|
134
147
|
em = json.loads(msg.payload.decode())
|
135
148
|
self.on_forecast(em)
|
@@ -144,10 +157,13 @@ class VisualCrossing(RCloud):
|
|
144
157
|
"""
|
145
158
|
self.debug(f"VisualCrossing: got mqtt message {em}")
|
146
159
|
|
147
|
-
|
148
|
-
def run(self):
|
160
|
+
@override
|
161
|
+
def run(self) -> None:
|
149
162
|
# create, initialize and start the asynchronous thread for acquiring forecast
|
150
|
-
|
163
|
+
|
164
|
+
self.worker = cast(
|
165
|
+
VisualCrossingThread, Base.instantiate(VisualCrossing.workerThreadId)
|
166
|
+
)
|
151
167
|
self.worker.init(
|
152
168
|
self.forecast_topic,
|
153
169
|
self.base_url,
|
@@ -155,14 +171,13 @@ class VisualCrossing(RCloud):
|
|
155
171
|
self.api_key,
|
156
172
|
self.location,
|
157
173
|
)
|
158
|
-
self.debug(
|
159
|
-
|
160
|
-
|
161
|
-
self.debug(f"VisualCrossing.run(): location is {self.location}")
|
174
|
+
self.debug(
|
175
|
+
f"VisualCrossing run: {self.base_url}, {self.update_interval}s, location is {self.location}"
|
176
|
+
)
|
162
177
|
super().run()
|
163
178
|
|
164
|
-
|
165
|
-
def to_dict(self):
|
179
|
+
@override
|
180
|
+
def to_dict(self) -> dict:
|
166
181
|
data = super().to_dict()
|
167
182
|
data["_visualcrossing"] = {
|
168
183
|
"topic": self.forecast_topic,
|
@@ -172,8 +187,8 @@ class VisualCrossing(RCloud):
|
|
172
187
|
}
|
173
188
|
return data
|
174
189
|
|
175
|
-
|
176
|
-
def from_dict(self, data):
|
190
|
+
@override
|
191
|
+
def from_dict(self, data) -> None:
|
177
192
|
super().from_dict(data)
|
178
193
|
if "_visualcrossing" in data:
|
179
194
|
for key, value in data["_visualcrossing"].items():
|
{juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3/juham_visualcrossing.egg-info}/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: juham_visualcrossing
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.3
|
4
4
|
Summary: A Weather forecast plugin extending `juham` applications
|
5
5
|
Author-email: J Meskanen <juham.api@gmail.com>
|
6
6
|
Maintainer-email: "J. Meskanen" <juham.api@gmail.com>
|
@@ -40,7 +40,7 @@ Classifier: License :: OSI Approved :: MIT License
|
|
40
40
|
Classifier: Programming Language :: Python :: 3.8
|
41
41
|
Requires-Python: >=3.8
|
42
42
|
Description-Content-Type: text/markdown
|
43
|
-
Requires-Dist: juham>=0.0.
|
43
|
+
Requires-Dist: juham>=0.0.12
|
44
44
|
Requires-Dist: pytz>=2024.1
|
45
45
|
Requires-Dist: importlib-metadata
|
46
46
|
Provides-Extra: dev
|
{juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/juham_visualcrossing.egg-info/SOURCES.txt
RENAMED
@@ -7,6 +7,7 @@ docs/source/CONTRIBUTING.rst
|
|
7
7
|
docs/source/LICENSE.rst
|
8
8
|
docs/source/README.rst
|
9
9
|
juham_visualcrossing/__init__.py
|
10
|
+
juham_visualcrossing/py.typed
|
10
11
|
juham_visualcrossing/visualcrossing.py
|
11
12
|
juham_visualcrossing.egg-info/PKG-INFO
|
12
13
|
juham_visualcrossing.egg-info/SOURCES.txt
|
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
|
|
6
6
|
|
7
7
|
[project]
|
8
8
|
name = "juham_visualcrossing"
|
9
|
-
version = "0.0.
|
9
|
+
version = "0.0.3"
|
10
10
|
description = "A Weather forecast plugin extending `juham` applications"
|
11
11
|
readme = {file = "docs/source/README.rst", content-type = "text/markdown"}
|
12
12
|
requires-python = ">=3.8"
|
@@ -28,7 +28,7 @@ classifiers = [
|
|
28
28
|
]
|
29
29
|
|
30
30
|
dependencies = [
|
31
|
-
"juham >= 0.0.
|
31
|
+
"juham >= 0.0.12",
|
32
32
|
"pytz >= 2024.1",
|
33
33
|
"importlib-metadata"
|
34
34
|
]
|
@@ -53,5 +53,5 @@ visualcrossing_plugin = "juham_visualcrossing:VisualCrossing"
|
|
53
53
|
|
54
54
|
|
55
55
|
[tool.mypy]
|
56
|
-
files = ["juham_visualcrossing
|
56
|
+
files = ["juham_visualcrossing"]
|
57
57
|
ignore_missing_imports = true
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{juham_visualcrossing-0.0.1 → juham_visualcrossing-0.0.3}/tests/__pycache__/__init__.cpython-312.pyc
RENAMED
File without changes
|
File without changes
|