Basisimplementierung für Mailversandt.

This commit is contained in:
Frank Agerholm 2026-01-16 20:51:40 +01:00
commit 531b9cb10e
No known key found for this signature in database
14 changed files with 520 additions and 41 deletions

View file

@ -1,6 +1,28 @@
from pydantic import BaseModel
from pydantic import BaseModel, Field, AnyUrl
from typing import Optional
import os
def str_to_bool(value):
"""
Convert a string to a boolean.
Accepts common truthy/falsey string values.
Raises ValueError for unrecognized inputs.
"""
if not isinstance(value, str):
raise TypeError("Input must be a string.")
value_lower = value.strip().lower()
truthy = {"true", "1", "yes", "y", "on"}
falsey = {"false", "0", "no", "n", "off"}
if value_lower in truthy:
return True
elif value_lower in falsey:
return False
else:
raise ValueError(f"Cannot convert '{value}' to boolean.")
class Settings(BaseModel):
DATABASE_URL: str = os.getenv("DATABASE_URL", "postgresql+asyncpg://postgres:postgres@localhost:5432/tasks")
RABBITMQ_URL: str = os.getenv("RABBITMQ_URL", "amqp://guest:guest@localhost/")
@ -12,4 +34,11 @@ class Settings(BaseModel):
SMTP_TIMEOUT: float = float(os.getenv("SMTP_TIMEOUT", "10.0"))
HTTP_TIMEOUT: float = float(os.getenv("HTTP_TIMEOUT", "8.0"))
settings = Settings()
smtp_host: str = os.getenv("SMTP_HOST", "localhost")
smtp_port: int = os.getenv("SMTP_PORT", "587")
smtp_user: Optional[str] = os.getenv("SMTP_USER")
smtp_password: Optional[str] = os.getenv("SMTP_PASSWORD")
smtp_starttls: bool = str_to_bool(os.getenv("SMTP_STARTTLS", "true"))
smtp_sender_fallback: str = os.getenv("SMTP_SENDER", "noreply@example.com")
settings = Settings()