Files
pdf_oralia_vibe/pyproject.toml
Bertrand Benjamin a90d1c4f64 feat: mode application de bureau + packaging Windows autonome
Permet de distribuer l'application en executable Windows double-clic,
sans Python/Node/terminal pour l'utilisateur final.

- `desktop.py` : demarre le serveur sur un port libre dans un thread et
  ouvre une fenetre native (pywebview). `PLESNA_DEBUG=1` active les
  DevTools. Commande `plesna-gerance desktop` (import paresseux).
- `paths.py` : resolution centralisee des chemins selon le contexte
  (dev, executable PyInstaller, surcharge par variables d'env). Les
  donnees vont dans un dossier utilisateur inscriptible (%APPDATA%),
  les ressources dans le bundle. connection.py/storage.py utilisent
  `get_data_dir()`, app.py `resource_path()`.
- app.py : type MIME `.mjs` force (modules ES / worker PDF.js sous
  Windows).
- Groupes de deps optionnels desktop / desktop-linux / build.
- packaging/ : spec PyInstaller, build_windows.ps1, installeur Inno
  Setup. Workflow GitHub build-windows.yml (runner Windows).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 17:21:27 +02:00

75 lines
1.8 KiB
TOML

[project]
name = "plesna-gerance"
version = "0.1.0"
description = "Extracteur de comptes rendus de gérance Oralia/ICS"
requires-python = ">=3.10"
dependencies = [
"click>=8.0",
"fastapi>=0.100.0",
"uvicorn[standard]>=0.20.0",
"python-multipart>=0.0.6",
"sqlalchemy>=2.0.0",
"httpx>=0.24.0",
"pdfplumber>=0.11.9",
]
[project.scripts]
plesna-gerance = "plesna_gerance.cli:main"
[dependency-groups]
dev = [
"pytest>=8.0",
"ruff>=0.6",
]
# Mode application de bureau (fenêtre native). Sous Windows, pywebview
# s'appuie sur WebView2 (Edge Chromium), présent par défaut sur Windows 10/11.
desktop = [
"pywebview>=5.0",
]
# Backend de rendu pour tester le mode bureau SOUS LINUX (Qt, pip-installable).
# Inutile sous Windows (WebView2) : ne pas inclure dans le build empaqueté.
desktop-linux = [
"pywebview>=5.0",
"qtpy>=2.4",
"PyQt6>=6.6",
"PyQt6-WebEngine>=6.6",
]
# Outils pour produire l'exécutable autonome (à lancer sur Windows).
build = [
"pyinstaller>=6.0",
]
[tool.pytest.ini_options]
testpaths = ["tests"]
pythonpath = ["src"]
addopts = "-q"
[tool.ruff]
target-version = "py310"
line-length = 88
src = ["src", "tests"]
[tool.ruff.lint]
# E/W: pycodestyle, F: pyflakes, I: isort, UP: pyupgrade, B: bugbear
select = ["E", "W", "F", "I", "UP", "B"]
ignore = [
"E501", # longueur de ligne gérée par le formateur, pas bloquante
"B904", # raise sans `from` : on traduit volontairement les exceptions en HTTP
]
[tool.ruff.lint.flake8-bugbear]
# Appels idiomatiques FastAPI en argument par défaut (injection de dépendances)
extend-immutable-calls = [
"fastapi.Depends",
"fastapi.File",
"fastapi.Form",
"fastapi.Query",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["src/plesna_gerance"]