Footer mit E-Mail, Watermark und Version statt Chart-Watermark
Wetterstation-Text, mailto und v{VERSION} · Datum werden als
dreispaltiger Footer unterhalb des Rahmens angezeigt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+19
-6
@@ -2,6 +2,8 @@
|
|||||||
"""Erstellt einen kombinierten Wetterbericht für den letzten Kalendermonat."""
|
"""Erstellt einen kombinierten Wetterbericht für den letzten Kalendermonat."""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import pathlib
|
||||||
|
import re
|
||||||
import smtplib
|
import smtplib
|
||||||
import tempfile
|
import tempfile
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
@@ -18,6 +20,10 @@ from dotenv import load_dotenv
|
|||||||
|
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
|
||||||
|
_v = re.search(r'^version\s*=\s*"([^"]+)"',
|
||||||
|
pathlib.Path("pyproject.toml").read_text(), re.MULTILINE)
|
||||||
|
VERSION = _v.group(1) if _v else "?"
|
||||||
|
|
||||||
API_BASE_URL = os.getenv("API_BASE_URL", "https://stwwetter.fuerst-stuttgart.de/api")
|
API_BASE_URL = os.getenv("API_BASE_URL", "https://stwwetter.fuerst-stuttgart.de/api")
|
||||||
MAIL_SERVER = os.getenv("MAIL_SERVER")
|
MAIL_SERVER = os.getenv("MAIL_SERVER")
|
||||||
MAIL_PORT = int(os.getenv("MAIL_PORT", "587"))
|
MAIL_PORT = int(os.getenv("MAIL_PORT", "587"))
|
||||||
@@ -150,12 +156,7 @@ def create_combined_chart(start: datetime, end: datetime, label: str) -> bytes:
|
|||||||
plt.setp(ax.get_xticklabels(), rotation=0, ha="center")
|
plt.setp(ax.get_xticklabels(), rotation=0, ha="center")
|
||||||
ax.legend(framealpha=0.8)
|
ax.legend(framealpha=0.8)
|
||||||
|
|
||||||
# Watermark im letzten Chart
|
fig.tight_layout(rect=[0.015, 0.055, 0.985, 0.975])
|
||||||
axes[2].text(0.99, 0.03, "Wetterstation der Sternwarte Welzheim",
|
|
||||||
ha="right", va="bottom", fontsize=9, color="#bbbbbb",
|
|
||||||
transform=axes[2].transAxes)
|
|
||||||
|
|
||||||
fig.tight_layout(rect=[0.015, 0.015, 0.985, 0.975])
|
|
||||||
|
|
||||||
# Rahmen um die gesamte Figure
|
# Rahmen um die gesamte Figure
|
||||||
border = mpatches.FancyBboxPatch(
|
border = mpatches.FancyBboxPatch(
|
||||||
@@ -166,6 +167,18 @@ def create_combined_chart(start: datetime, end: datetime, label: str) -> bytes:
|
|||||||
)
|
)
|
||||||
fig.add_artist(border)
|
fig.add_artist(border)
|
||||||
|
|
||||||
|
# Footer: links E-Mail, Mitte Watermark, rechts Version + Datum
|
||||||
|
footer_y = 0.030
|
||||||
|
footer_kw = dict(va="center", fontsize=9, color="#999999",
|
||||||
|
transform=fig.transFigure)
|
||||||
|
build_date = datetime.now(timezone.utc).strftime("%d.%m.%Y")
|
||||||
|
fig.text(0.022, footer_y, "mailto:rexfue@gmail.com",
|
||||||
|
ha="left", **footer_kw)
|
||||||
|
fig.text(0.5, footer_y, "Wetterstation der Sternwarte Welzheim",
|
||||||
|
ha="center", **footer_kw)
|
||||||
|
fig.text(0.978, footer_y, f"V {VERSION} · {build_date}",
|
||||||
|
ha="right", **footer_kw)
|
||||||
|
|
||||||
with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as f:
|
with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as f:
|
||||||
fig.savefig(f.name, dpi=150, bbox_inches="tight")
|
fig.savefig(f.name, dpi=150, bbox_inches="tight")
|
||||||
path = f.name
|
path = f.name
|
||||||
|
|||||||
Reference in New Issue
Block a user