- Login and Reports pages: eCare logo, Waystar and Aquilaehr logos (light versions for the dark pages), eCare favicon. - Excel reports: faded eCare/Waystar/Aquila watermark as the sheet background on both sheets. Report writer moves to xlsxwriter, the only engine that can set a sheet background. - Reports page: animated run progress (both download lanes piped into the Excel sheet) and a plain-language activity feed built from the run log; the raw log stays under "Technical log". /status now returns the location count. - Dependencies move from requirements.txt to pyproject.toml + uv.lock; Dockerfile installs uv from PyPI and runs uv sync --frozen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
23 lines
994 B
Docker
23 lines
994 B
Docker
# python slim + Debian chromium: pulls of the mcr.microsoft.com Playwright image get reset on our
|
|
# Dokploy server (same fix as Capitation Amount Updater)
|
|
FROM python:3.12-slim
|
|
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends chromium fonts-liberation tzdata \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /app
|
|
# uv from PyPI rather than its ghcr.io image, for the same registry-reset reason as above
|
|
RUN pip install --no-cache-dir uv==0.11.28
|
|
ENV UV_PYTHON_DOWNLOADS=never UV_NO_CACHE=1 PATH="/app/.venv/bin:$PATH"
|
|
COPY pyproject.toml uv.lock ./
|
|
RUN uv sync --frozen
|
|
COPY . .
|
|
|
|
# headless, system Chromium (Playwright's own browser download is not used)
|
|
# TZ: IST like the team's PCs (also what the browser uses, see BROWSER_TZ in mek_recon.py)
|
|
ENV HEADLESS=1 CHROME_PATH=/usr/bin/chromium PYTHONUNBUFFERED=1 TZ=Asia/Kolkata
|
|
EXPOSE 8000
|
|
# one worker: run state is kept in memory
|
|
CMD ["gunicorn", "-w", "1", "--threads", "8", "-b", "0.0.0.0:8000", "--timeout", "120", "app:app"]
|