Files
Claude 54d88d1d64 refactor notifications to MVC: extract templates, context, and renderer
- Move all email layout to Jinja2 templates (4 files: admin_new,
  admin_update, parent_confirmation html+txt)
- Extract pure helper/context-builder functions to context.py
  (format_types, calculate_age, format_dob, calculate_monthly_fee,
  format_days, build_admin_new_context, build_admin_update_context,
  build_parent_context)
- Move i18n label strings out of Python into YAML locale files
  (i18n/de.yaml, i18n/en.yaml) — admin-editable without code changes
- Add renderer.py as thin Jinja2 wrapper (render_template)
- Reduce notifier.py to routing + SMTP dispatch only
- Update tests to call context functions directly and render
  templates via renderer instead of calling private builder methods
- Add jinja2 and pyyaml as explicit dependencies in pyproject.toml

https://claude.ai/code/session_01LjjK7RjKVnC8bETtccfgna
2026-02-23 10:05:03 +00:00

39 lines
832 B
TOML

[project]
name = "meister-eder"
version = "0.1.0"
description = "AI-powered conversational registration agent for Spielgruppe Pumuckl"
requires-python = ">=3.13"
dependencies = [
# LLM access — supports any provider (Anthropic, OpenAI, Gemini, …)
"litellm>=1.0.0",
# Configuration
"python-dotenv>=1.0.0",
# Registration schema validation
"jsonschema>=4.23.0",
"chainlit>=2.9.6",
"qrbill>=1.2.0",
"pillow>=12.1.1",
"jinja2>=3.0.0",
"pyyaml>=6.0.0",
]
[project.scripts]
meister-eder = "main:main"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["src"]
[tool.uv]
dev-dependencies = [
"pytest>=8.0.0",
"pytest-asyncio>=1.3.0",
"pytest-mock>=3.14.0",
]
[tool.pytest.ini_options]
asyncio_mode = "auto"