feat: initial dashboard implementation and robust attendance parsing
- Added a Makefile to easily run project scripts (fees, match, web, image) - Modified attendance.py to dynamically handle a variable number of header rows from the Google Sheet - Updated both attendance calculations and calculate_fees terminal output to show actual attendance counts (e.g., '750 CZK (3)') - Created a Flask web dashboard (app.py and templates/fees.html) to view member fees in an attractive, condensed, terminal-like UI - Bound the Flask server to port 5000 and added a routing alias from '/' to '/fees' - Configured Python virtual environment (.venv) creation directly into the Makefile to resolve global pip install errors on macOS Co-authored-by: Antigravity <antigravity@deepmind.com>
This commit is contained in:
6
build/.dockerignore
Normal file
6
build/.dockerignore
Normal file
@@ -0,0 +1,6 @@
|
||||
.git
|
||||
.venv
|
||||
__pycache__
|
||||
*.pyc
|
||||
.claude
|
||||
.gemini
|
||||
25
build/Dockerfile
Normal file
25
build/Dockerfile
Normal file
@@ -0,0 +1,25 @@
|
||||
FROM python:3.13-alpine
|
||||
|
||||
RUN apk add --no-cache bash tzdata \
|
||||
&& cp /usr/share/zoneinfo/Europe/Prague /etc/localtime \
|
||||
&& echo "Europe/Prague" > /etc/timezone
|
||||
|
||||
ENV PYTHONUNBUFFERED=1
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN pip install --no-cache-dir flask
|
||||
|
||||
COPY app.py Makefile ./
|
||||
COPY scripts/ ./scripts/
|
||||
COPY templates/ ./templates/
|
||||
|
||||
COPY build/entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
EXPOSE 5001
|
||||
|
||||
HEALTHCHECK --interval=60s --timeout=5s --start-period=5s \
|
||||
CMD wget -q -O /dev/null http://localhost:5001/ || exit 1
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
8
build/entrypoint.sh
Executable file
8
build/entrypoint.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "[entrypoint] Starting Flask app on port 5001..."
|
||||
|
||||
# Running the app directly via python
|
||||
# For a production setup, we would ideally use gunicorn/waitress, but sticking to what's in app.py for now.
|
||||
exec python3 /app/app.py
|
||||
Reference in New Issue
Block a user