81 lines
2.8 KiB
Markdown
81 lines
2.8 KiB
Markdown
# Fatimas Calendar
|
|
|
|
A mobile-first Flask calendar with session authentication and infinite week scrolling.
|
|
|
|
Amounts and worked/vacation/sick statuses selected for dates are stored persistently in `instance/calendar.sqlite`, which is created automatically on first launch.
|
|
|
|
## Run it
|
|
|
|
```sh
|
|
python3 -m venv .venv
|
|
source .venv/bin/activate
|
|
pip install -r requirements.txt
|
|
waitress-serve --host=0.0.0.0 --port=9009 fatima:app
|
|
```
|
|
|
|
To use a different port, substitute it in the command (for example,
|
|
`--port=8080`). The application exposes its WSGI callable as `fatima:app`, so it
|
|
can also be used by platforms that ask for an application entry point.
|
|
|
|
Set the username, password, and Flask signing key in `config.yaml` before starting. This file is excluded from Git. Use `config.example.yaml` as the documented template when setting up another machine.
|
|
|
|
The two paid quick-choice buttons are configured in the same file:
|
|
|
|
```yaml
|
|
amounts:
|
|
presets:
|
|
- "55"
|
|
- "27.50"
|
|
```
|
|
|
|
The €0 and custom-amount controls remain available automatically.
|
|
|
|
## Reverse proxy path
|
|
|
|
The app is served below `/fatima` by default. Configure the external path in
|
|
`config.yaml`:
|
|
|
|
```yaml
|
|
flask:
|
|
url_prefix: "/fatima"
|
|
```
|
|
|
|
Set `URL_PREFIX` in the environment to override this value at deployment time.
|
|
Use an empty value (`url_prefix: ""` or `URL_PREFIX=`) to serve from `/` instead.
|
|
The reverse proxy must preserve the prefix when forwarding requests to Waitress.
|
|
|
|
## Import the Excel calendar
|
|
|
|
Preview an import without changing the database:
|
|
|
|
```sh
|
|
python scripts/import_excel.py /path/to/fatima.xlsx
|
|
```
|
|
|
|
The preview prints the absolute workbook and database paths, current database
|
|
row counts and date range, discovered workbook values, and overwrite counts.
|
|
Check that the printed database path is the same file used by the production
|
|
app before applying the import.
|
|
|
|
Add `--apply` to import:
|
|
|
|
```sh
|
|
python scripts/import_excel.py /path/to/fatima.xlsx --apply
|
|
```
|
|
|
|
The importer refuses to write if the database is missing, has the wrong schema,
|
|
or the workbook contains no importable data. It creates a consistent SQLite
|
|
backup before writing, reads every imported value back after committing, and
|
|
prints the final row counts and date range. If production uses a non-default
|
|
database location, specify it explicitly:
|
|
|
|
```sh
|
|
python scripts/import_excel.py /path/to/fatima.xlsx --database /absolute/path/calendar.sqlite --apply
|
|
```
|
|
|
|
On the iPhone, visit `http://<your-computer-on-the-local-network>:9009/fatima/`.
|
|
Waitress listens on all network interfaces with the command above. For anything
|
|
exposed beyond a trusted home network, put it behind an HTTPS reverse proxy.
|
|
|
|
For deployments, `APP_CONFIG` can point to a YAML file elsewhere. `SECRET_KEY`, `APP_USERNAME`, and `APP_PASSWORD` environment variables optionally override the corresponding YAML values.
|