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:
rxf
2026-05-26 11:29:59 +02:00
parent 0a30d79f71
commit 97fdc8e2ad
+19 -6
View File
@@ -2,6 +2,8 @@
"""Erstellt einen kombinierten Wetterbericht für den letzten Kalendermonat."""
import os
import pathlib
import re
import smtplib
import tempfile
from collections import defaultdict
@@ -18,6 +20,10 @@ from dotenv import 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")
MAIL_SERVER = os.getenv("MAIL_SERVER")
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")
ax.legend(framealpha=0.8)
# Watermark im letzten Chart
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])
fig.tight_layout(rect=[0.015, 0.055, 0.985, 0.975])
# Rahmen um die gesamte Figure
border = mpatches.FancyBboxPatch(
@@ -166,6 +167,18 @@ def create_combined_chart(start: datetime, end: datetime, label: str) -> bytes:
)
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:
fig.savefig(f.name, dpi=150, bbox_inches="tight")
path = f.name