36411c99a7
## 1.7.0 / 2026-05-12 ### New * Add toast notification system with HTMX middleware integration * Add component system (Cotton-based): button, modal, table_row, search_field, gamelink * Add needs_price_update field to Purchase model for reliable price change detection * Add confirmation dialog before deleting a game * Add game status information documentation (STATUSES.md) * Allow directly updating device in session list via inline selector * Migrate from Poetry to uv for Python dependency management * Scope URLs to the games namespace * Start session template shared between add and edit views ### Improved * Major style overhaul: CSS variables, improved dark mode, Flowbite 4.x upgrade * Improve game status evaluation and add abandon prompt on refund * Robustify Docker container and fix default database location * Make component rendering deterministic for improved caching * Component caching: deterministic randomid generation * Component test suite with 1000+ lines of tests * Make tests more robust with django-pytest * Update NameWithIcon component: testable, fixed platform extraction bug * Pin Caddy version and improve make dev-prod * Add .env.example documenting environment variables * Unify A() component with explicit url_name vs href parameters ### Fixed * Fix refund confirmation not working * Fix stats view missing first and last game values * Fix A() component silent fallback on URL typos * Fix secondary submit buttons not working * Fix button not passing attributes * Fix default mutable arguments in component functions * Fix extra submit button when adding purchase * Fix pointer cursor on search field button ### Removed * Remove GraphQL API ### Dependencies * Update django-ninja to 1.6.2
64 lines
1.5 KiB
TOML
64 lines
1.5 KiB
TOML
[project]
|
|
name = "timetracker"
|
|
version = "1.7.0"
|
|
description = "A simple time tracker."
|
|
authors = [{ name = "Lukáš Kucharczyk", email = "lukas@kucharczyk.xyz" }]
|
|
requires-python = ">=3.13,<4"
|
|
readme = "README.md"
|
|
license = "AGPL-3.0-or-later"
|
|
classifiers = [
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3.11",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Programming Language :: Python :: 3.13",
|
|
"Programming Language :: Python :: 3.14",
|
|
]
|
|
dependencies = [
|
|
"django>6.0",
|
|
"gunicorn>=23.0.0,<24",
|
|
"uvicorn>=0.30.1,<0.31",
|
|
"django-htmx>=1.18.0,<2",
|
|
"django-template-partials>=24.2,<25",
|
|
"markdown>=3.6,<4",
|
|
"django-cotton==2.3",
|
|
"django-q2>=1.7.4,<2",
|
|
"croniter>=5.0.1,<6",
|
|
"requests>=2.32.3,<3",
|
|
"pyyaml>=6.0.2,<7",
|
|
"django-ninja>=1.6.2",
|
|
]
|
|
|
|
[project.scripts]
|
|
timetracker-import = "common.import_data:import_from_file"
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"mypy>=1.10.1,<2",
|
|
"pyyaml>=6.0.1,<7",
|
|
"pytest>=8.2.2,<9",
|
|
"django-extensions>=3.2.3,<4",
|
|
"djhtml>=3.0.6,<4",
|
|
"djlint>=1.34.1,<2",
|
|
"isort>=5.13.2,<6",
|
|
"pre-commit>=3.7.1,<4",
|
|
"django-debug-toolbar>=4.4.2,<5",
|
|
"ruff",
|
|
"pytest-django>=4.12.0",
|
|
]
|
|
|
|
[tool.uv]
|
|
|
|
[tool.uv.build-backend]
|
|
module-name = ["timetracker"]
|
|
module-root = ""
|
|
|
|
[build-system]
|
|
requires = ["uv_build>=0.9.26,<0.10.0"]
|
|
build-backend = "uv_build"
|
|
[tool.isort]
|
|
profile = "black"
|
|
|
|
[tool.pytest.ini_options]
|
|
DJANGO_SETTINGS_MODULE = "timetracker.settings"
|
|
python_files = ["test_*.py"]
|