6381dcb312
User-reported issue: server logs were timestamped in UTC ("05:36:20"
when local was ~01:36 EDT), and the PDF report's "Created" footer
similarly showed raw UTC. Inconsistent with the modal which already
converts to browser local via toLocaleString.
Solution: standard Linux TZ env var. Set once in the container, and:
- Python's datetime.now() uses local
- Logging module's timestamps use local
- matplotlib renderers + report_pdf formatters use local
- astimezone() conversions resolve to the configured TZ
DB columns stay UTC (created_at uses SQLite's strftime('%Y-...Z', 'now')
which is always UTC, regardless of TZ env var — proper "store UTC,
display local" pattern).
Changes:
- Dockerfile: install tzdata (python:3.11-slim omits the timezone
database), set default TZ=America/New_York
- sfm/report_pdf.py: _fmt_iso_to_bw and _split_iso_to_date_time now
convert UTC inputs (Z-suffixed) to local via astimezone(); naïve
inputs (BW recorded-at, already unit-local) returned as-is.
New _to_display_local helper centralizes the logic.
- "Created" line in the PDF page footer now uses the converted
timestamp.
Override per-deployment via the TZ env var in docker-compose
(separate commit on terra-view side).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
31 lines
1.0 KiB
Docker
31 lines
1.0 KiB
Docker
FROM python:3.11-slim
|
|
|
|
WORKDIR /app
|
|
|
|
# tzdata is required for the TZ env var to take effect (python:slim
|
|
# omits the timezone database). Without it, datetime.now() / logging
|
|
# / matplotlib all stay in UTC regardless of TZ. Default zone gets
|
|
# set further down via ENV; users override per-deployment via the
|
|
# `TZ` env var in docker-compose.
|
|
RUN apt-get update && \
|
|
apt-get install -y --no-install-recommends curl tzdata && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Default display timezone — applied to server logs, datetime.now(),
|
|
# matplotlib rendered timestamps, and any naïve-vs-aware datetime
|
|
# conversions in the PDF renderer. Override via TZ env var in
|
|
# docker-compose; storage in the DB is always UTC regardless.
|
|
ENV TZ=America/New_York
|
|
|
|
COPY pyproject.toml requirements.txt ./
|
|
COPY minimateplus ./minimateplus
|
|
COPY micromate ./micromate
|
|
COPY sfm ./sfm
|
|
COPY bridges ./bridges
|
|
COPY scripts ./scripts
|
|
|
|
RUN pip install --no-cache-dir -e .
|
|
|
|
EXPOSE 8200
|
|
|
|
CMD ["python", "-m", "uvicorn", "sfm.server:app", "--host", "0.0.0.0", "--port", "8200"] |