d8558eca89
Introduce timetracker/config.py with a single config() helper that resolves settings from a fixed priority chain: NAME__FILE (opt-in secret) -> env var -> .env -> settings.ini -> in-code default. Supports type casting (bool/list/int/Path), file-based secrets with .strip(), and required_in_prod validation. Migrate settings.py off the previous ad-hoc idioms: - DEBUG via config() (PROD kept as deprecated alias) - SECRET_KEY required in prod, supports SECRET_KEY__FILE - APP_URL derives ALLOWED_HOSTS and CSRF_TRUSTED_ORIGINS (kept separate, each independently overridable); ALLOWED_HOSTS is now configurable - TZ and DATA_DIR via config() Fix DATA_DIR inconsistency: entrypoint.sh now reads DATA_DIR (was hardcoded) so the bash bootstrap and Django agree on the database directory. Document the container/entrypoint-only flags (PUID/PGID/ CREATE_DEFAULT_SUPERUSER/STAGING/LOAD_SAMPLE_DATA) as bash concerns. Update deployment configs to set APP_URL (and DEBUG), add docs/configuration.md, settings.ini.example, regrouped .env.example, CLAUDE.md, and tests. https://claude.ai/code/session_01FFn8BiGrQpEJarC8xGse8s
24 lines
379 B
Plaintext
24 lines
379 B
Plaintext
__pycache__
|
|
.mypy_cache
|
|
.pytest_cache
|
|
.venv/
|
|
node_modules
|
|
package-lock.json
|
|
db.sqlite3
|
|
data/
|
|
/static/
|
|
dist/
|
|
.DS_Store
|
|
.python-version
|
|
|
|
# Local configuration (may contain secrets); examples are committed instead
|
|
.env
|
|
/settings.ini
|
|
.direnv
|
|
.hermes/
|
|
|
|
# Build artifacts: generated in CI/Docker assets stage, not committed
|
|
/games/static/base.css
|
|
/games/static/js/dist/
|
|
/ts/generated/
|