Merge branch 'main' into all_in_one
This commit is contained in:
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "weather2oag"
|
name = "weather2oag"
|
||||||
version = "1.1.0"
|
version = "1.1.1"
|
||||||
description = "Monatlicher Wetterbericht der Sternwarte Welzheim"
|
description = "Monatlicher Wetterbericht der Sternwarte Welzheim"
|
||||||
requires-python = ">=3.12"
|
requires-python = ">=3.12"
|
||||||
|
|||||||
+13
-26
@@ -4,7 +4,7 @@
|
|||||||
import os
|
import os
|
||||||
import smtplib
|
import smtplib
|
||||||
import tempfile
|
import tempfile
|
||||||
from collections import defaultdict
|
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from email.mime.image import MIMEImage
|
from email.mime.image import MIMEImage
|
||||||
from email.mime.multipart import MIMEMultipart
|
from email.mime.multipart import MIMEMultipart
|
||||||
@@ -85,32 +85,19 @@ def _data_temp_hourly(start: datetime, end: datetime):
|
|||||||
|
|
||||||
|
|
||||||
def _data_rain_daily(start: datetime, end: datetime):
|
def _data_rain_daily(start: datetime, end: datetime):
|
||||||
# +1 Tag extra damit der Abschlusswert des letzten Tages (kum. Zähler) enthalten ist
|
today = datetime.now(timezone.utc).replace(hour=0, minute=0, second=0, microsecond=0)
|
||||||
data = fetch("/weather/range", {
|
days = min((today - start).days + 2, 365)
|
||||||
"start": start.isoformat(),
|
data = fetch("/weather/rain-daily", {"days": days})
|
||||||
"end": (end + timedelta(days=1)).isoformat(),
|
pairs = []
|
||||||
"limit": 50000,
|
|
||||||
})
|
|
||||||
by_day: dict[str, list[float]] = defaultdict(list)
|
|
||||||
for d in data:
|
for d in data:
|
||||||
if d.get("rain") is not None:
|
day_dt = parse_dt(d["date"]).replace(hour=0, minute=0, second=0, microsecond=0)
|
||||||
by_day[parse_dt(d["datetime"]).strftime("%Y-%m-%d")].append(d["rain"])
|
if start <= day_dt < end:
|
||||||
|
pairs.append((day_dt, round(d["total_rain"], 1)))
|
||||||
dates, rain = [], []
|
pairs.sort()
|
||||||
for day_key in sorted(by_day):
|
if not pairs:
|
||||||
day_dt = datetime.fromisoformat(day_key).replace(tzinfo=timezone.utc)
|
return [], []
|
||||||
if day_dt >= end:
|
dates, rain = zip(*pairs)
|
||||||
break
|
return list(dates), list(rain)
|
||||||
vals = list(by_day[day_key])
|
|
||||||
next_key = (day_dt + timedelta(days=1)).strftime("%Y-%m-%d")
|
|
||||||
if next_key in by_day:
|
|
||||||
vals.append(by_day[next_key][0])
|
|
||||||
daily = max(vals) - min(vals)
|
|
||||||
if daily < 0:
|
|
||||||
daily = max(vals)
|
|
||||||
dates.append(day_dt)
|
|
||||||
rain.append(round(daily, 1))
|
|
||||||
return dates, rain
|
|
||||||
|
|
||||||
|
|
||||||
def create_combined_chart(start: datetime, end: datetime, label: str) -> bytes:
|
def create_combined_chart(start: datetime, end: datetime, label: str) -> bytes:
|
||||||
|
|||||||
Reference in New Issue
Block a user