Admin: Departments (name and stations; add shows the three groups IT must create), Profiles (welder stamp, station limits, active) with a CSV import that previews and applies only when clean, Checklists (weld and plain), Security (session, lockout and rate-limit settings with bounds, alerts for the last 24 hours, the integrity result), Access log with filters and a guarded CSV, Who is in, Stamp check, Notifications, and the employeeID flags. Every Admin change is audited. Worker: ad-reconcile (nightly and on "refresh from AD now"), session-refresh (15 minutes), integrity (seals, asset hashes, missing and orphan files, the audit chain), backup-check, notify-send and notify-digest. Notifications route per event type to AD groups, users, mailboxes or the department Supervisor group, immediately or in a daily digest, over STARTTLS verified against the PESCO CA, with dry run on the test stack. Backups: scripts/backup/ps-backup.sh and ps-restore.sh with a systemd timer at 02:00 America/Denver. Restore rehearsed on the test stack 2026-10-21. CI: pip-audit and npm audit. pypdf 6.21.1 and certifi 2026.10.19. Migration 0010. Closes the app part of I6, M3, O1, O2 and S3. Co-Authored-By: Claude Opus 5.5 <[email protected]>
67 lines
1.7 KiB
Plaintext
67 lines
1.7 KiB
Plaintext
# Runtime pins from public PyPI, resolved for linux x86_64 / CPython 3.12 (the image) on 2026-10-15.
|
|
# The two PESCO packages come from the Gitea index: see requirements-pesco.txt.
|
|
# pip install -r server/requirements.txt
|
|
# pip install --index-url https://gt.pescoinc.biz/api/packages/spencerm/pypi/simple/ -r server/requirements-pesco.txt
|
|
# pip install --no-deps .
|
|
|
|
# direct
|
|
fastapi==0.143.2
|
|
uvicorn[standard]==0.54.0
|
|
psycopg[binary,pool]==3.3.6
|
|
pydantic==2.14.1
|
|
pydantic-settings==2.16.0
|
|
ldap3==2.9.1
|
|
argon2-cffi==25.1.0
|
|
apscheduler==3.11.3
|
|
httpx==0.28.1
|
|
tzdata==2026.5
|
|
pypdf==6.21.1
|
|
python-multipart==0.0.32
|
|
pypdfium2==5.14.0
|
|
openpyxl==3.1.5
|
|
reportlab==5.0.1
|
|
pillow==13.0.0
|
|
|
|
# needed by visualkit 0.3.0 and mfileskit 0.1.3
|
|
pyodbc==5.3.0
|
|
keyring==25.7.0
|
|
|
|
# transitive
|
|
annotated-doc==0.0.5
|
|
annotated-types==0.8.0
|
|
anyio==4.15.1
|
|
argon2-cffi-bindings==26.1.0
|
|
certifi==2026.10.19
|
|
cffi==2.1.1
|
|
charset-normalizer==3.5.2
|
|
click==8.5.0
|
|
colorama==0.4.6; platform_system == "Windows"
|
|
cryptography==50.0.2; sys_platform == "linux"
|
|
et-xmlfile==2.0.0
|
|
h11==0.16.0
|
|
httpcore==1.0.9
|
|
httptools==0.9.0
|
|
idna==3.20
|
|
jaraco.classes==3.4.0
|
|
jaraco.context==6.1.2
|
|
jaraco.functools==4.6.0
|
|
jeepney==0.9.0; sys_platform == "linux"
|
|
more-itertools==11.2.1
|
|
opentelemetry-api==1.45.1
|
|
psycopg-binary==3.3.6
|
|
psycopg-pool==3.3.3
|
|
pyasn1==0.6.4
|
|
pycparser==3.11
|
|
pydantic-core==2.50.1
|
|
python-dotenv==1.2.4
|
|
pywin32-ctypes==0.2.3; sys_platform == "win32"
|
|
pyyaml==6.0.3
|
|
secretstorage==3.5.0; sys_platform == "linux"
|
|
starlette==1.8.0
|
|
typing-extensions==4.16.0
|
|
typing-inspection==0.4.4
|
|
tzlocal==5.4.4
|
|
uvloop==0.23.0; sys_platform != "win32" and sys_platform != "cygwin" and platform_python_implementation != "PyPy"
|
|
watchfiles==1.3.0
|
|
websockets==17.2
|