Files
Tatami/pyproject.toml
T
lars 6b0fca0100 Move Participant/Group to pydantic and add a saveable/editable Plan model
Participant and Group are now pydantic BaseModels. Group.hosts can form
cycles between groups, so it's kept as a private, non-persisted live list
(set via set_hosts()/add_host()) backed by a serializable host_uuids field,
re-linked via resolve_hosts() after a reload.

A new Plan model (src/tatami/plan.py) bundles groups, the after-party group,
and the event config (course_times, organizer_contacts, info_text,
spreadsheet_id) and supports save()/load() to/from JSON. tatami_masterplan's
__main__ now saves to masterplan.json (PLAN_FILE env var to override) on
first run and loads it on later runs instead of recomputing, so the plan can
be hand-edited (move a member between groups, change a course, fill in
spreadsheet_id) and picked up on rerun without hitting the Routes API again.
spreadsheet_id moves out of .env (GOOGLE_SHEETS_SPREADSHEET_ID) onto the plan
itself, since it's part of the plan rather than a secret.
2026-06-19 16:07:47 +02:00

38 lines
865 B
TOML

[project]
name = "tatami"
version = "0.1.0"
description = "Tool for Arranging Tasty Appointments, Meetings & Invitations"
readme = "README.md"
requires-python = ">=3.13"
dependencies = [
"gspread>=6.2.1",
"numpy>=2.2.4",
"pandas>=2.2.3",
"pandas-stubs>=2.2.3.250308",
"pydantic>=2.13.4",
"python-dotenv>=1.2.2",
"requests>=2.32.3",
"tqdm>=4.67.1",
"types-requests>=2.32.0.20250328",
"types-tqdm>=4.67.0.20250404",
]
[dependency-groups]
dev = [
"mypy>=1.15.0",
"pytest>=9.1.1",
"ruff>=0.11.5",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.pytest.ini_options]
testpaths = ["tests"]
# Deselect live API tests by default; run them with `pytest -m e2e`.
addopts = "-q -m 'not e2e'"
markers = [
"e2e: live tests that call the real Google Routes API (opt-in, costs quota)",
]