Files
CCMA/pyproject.toml
T
Marcel PeterkauandClaude Opus 5 d6cd58a788 Render every outgoing e-mail from an editable text template
The wording of the dunning and SEPA pre-notification mails was hard-coded in
Python, so adjusting a single sentence required a new release. Both texts now
live in plain text templates that ship as defaults, are copied into the store's
templates/mail/ directory on first start and can be edited there or under
Optionen -> E-Mail-Vorlagen; an existing file is never overwritten and a deleted
one is restored from the shipped default.

A template carries its subject in the first line and the body after a blank
line. Placeholders use the same {{ ... }} syntax as the document templates and
share their member/organization values, so a name means the same thing in a
letter and in the mail that carries it. Unknown placeholders are rejected while
editing instead of during a send run, a line holding nothing but placeholders
that render empty is dropped, and {{#claims}} ... {{/claims}} repeats per entry.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 20:49:08 +02:00

61 lines
1.2 KiB
TOML

[build-system]
requires = ["setuptools>=69"]
build-backend = "setuptools.build_meta"
[project]
name = "ccma"
dynamic = ["version"]
description = "Chaotic Creature Member Administration for Chaos Computer Club Mannheim e.V."
readme = "README.md"
requires-python = ">=3.11"
license = "MIT"
authors = [{name = "Chaos Computer Club Mannheim e.V."}]
dependencies = [
"screeninfo>=0.8.1,<1",
"ttkbootstrap-icons",
"ttkbootstrap-icons-mat",
]
[project.optional-dependencies]
dev = [
"pytest>=8",
"ruff>=0.6",
]
build = [
"pyinstaller>=6",
"pillow>=9",
]
[project.scripts]
ccma = "ccma.app:main"
[tool.setuptools]
package-dir = {"" = "src"}
include-package-data = true
[tool.setuptools.packages.find]
where = ["src"]
[tool.setuptools.package-data]
ccma = [
"VERSION",
"assets/CHANGELOG.json",
"assets/splash.png",
"assets/templates/*",
"assets/mail_templates/*",
"assets/themes/forest/**/*",
"assets/themes/forest/*",
]
[tool.pytest.ini_options]
testpaths = ["tests"]
pythonpath = ["src"]
[tool.ruff]
line-length = 110
target-version = "py311"
extend-exclude = ["ci-templates"]
[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B"]