# Dépendances OpenEDT (épinglées, compatibles Python 3.9)
#
# Cœur applicatif / données
bottle==0.12.25
pandas==1.3.5
# numpy reste en 1.21.6 : le seul avis qui la vise (GHSA-fpfv-jqm9-f5jm, f2py /
# numpy.core) n'est atteignable par aucun chemin d'OpenEDT, alors qu'une montée
# toucherait le tirage `np.random.choice` sur lequel repose l'équivalence par
# graine avec le solveur d'origine (tests/run_golden.py::TestSeedEquivalence).
numpy==1.21.6
openpyxl==3.0.9
et-xmlfile==1.1.0
python-dateutil==2.8.2
pytz==2024.1
six==1.16.0
typing-extensions==4.12.2

# Rendu HTML + PDF imprimable.
#
# WeasyPrint reste en 54.x : les deux avis pip-audit qui la visent ne sont pas
# atteignables ici — SSRF de `default_url_fetcher` (PYSEC-2026-2034) et injection
# CSS via `presentational_hints` (PYSEC-2026-3412). OpenEDT rend un document
# autonome, sans URL externe, avec `presentational_hints` à sa valeur par défaut
# (False) et tout texte utilisateur échappé. Monter en 66.x changerait le moteur
# de rendu pour un gain de sécurité nul.
weasyprint==54.3
# Pillow 9.0.0 -> 11.3.0 : 22 avis connus sur la 9.0.0 (dont PYSEC-2022-168,
# suppression de fichiers, et le libwebp de CVE-2023-5129). Rendu HTML/PDF/xlsx
# vérifié après montée. Dernière lignée compatible Python 3.9.
Pillow==11.3.0
pydyf==0.11.0
cffi==2.0.0
pycparser==2.23
tinycss2==1.4.0
cssselect2==0.8.0
html5lib==1.1
webencodings==0.5.1
pyphen==0.17.2
fonttools==4.60.2
brotli==1.2.0
zopfli==0.2.3.post1

# Divers (présents historiquement)
qrcode==6.1
pypng==0.20220715.0

# Serveur WSGI de production (derrière nginx).
# 21.2.0 -> 23.0.0 : la 21.2.0 valide mal l'en-tête Transfer-Encoding et permet
# le HTTP request smuggling TE.CL (PYSEC-2026-1433 / PYSEC-2026-1434) — scénario
# directement applicable à une topologie gunicorn derrière un reverse-proxy.
gunicorn==23.0.0
