# ────────────────────────────────────────────────────────────────────────── # GuichetOI ML — Python project metadata # ────────────────────────────────────────────────────────────────────────── # Install for development: # pip install -e .[dev] # # Install runtime only: # pip install -e . # # then: pip install -r requirements.txt (for exact pins) # # `requirements.txt` remains the source of truth for fully-pinned versions # used in CI and the Dockerfile. `pyproject.toml` declares loose runtime # bounds so the library is `pip install`-friendly. # ────────────────────────────────────────────────────────────────────────── [build-system] requires = ["setuptools>=68", "wheel"] build-backend = "setuptools.build_meta" [project] name = "guichetoi" version = "1.0.0" description = "Inference + recommendation + CMS generation for Orange Guichet Accueil Infrastructures (demande de localisation PAR)." readme = "README.md" requires-python = ">=3.11" license = { text = "MIT" } authors = [{ name = "Aziz Mohamed Miladi", email = "medazizmiledi@ieee.org" }] keywords = ["layoutlmv3", "document-ai", "ocr", "fiber", "orange"] classifiers = [ "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Operating System :: POSIX :: Linux", "Operating System :: Microsoft :: Windows", "License :: OSI Approved :: MIT License", ] dependencies = [ "torch>=2.0", "transformers>=4.35", "tokenizers>=0.20", "safetensors>=0.4", "pytesseract>=0.3.10", "PyMuPDF>=1.24", "pillow>=10.0", "openpyxl>=3.1", "fastapi>=0.110", "uvicorn[standard]>=0.30", "python-multipart>=0.0.9", ] [project.optional-dependencies] dev = [ "pytest>=8.0", "ruff>=0.6", "mypy>=1.10", ] ui = ["streamlit>=1.30", "altair>=5.0"] [project.urls] Homepage = "https://github.com/MedAziz012/GuichetOI_ML" Issues = "https://github.com/MedAziz012/GuichetOI_ML/issues" # ────────────────────────────────────────────────────────────────────────── # Packaging — src/ layout # ────────────────────────────────────────────────────────────────────────── [tool.setuptools.packages.find] where = ["src"] # ────────────────────────────────────────────────────────────────────────── # Ruff — linting # ────────────────────────────────────────────────────────────────────────── [tool.ruff] line-length = 100 target-version = "py311" extend-exclude = ["scripts", "tools", "apps"] # legacy scripts, not lib code [tool.ruff.lint] select = ["E", "F", "I", "B", "UP"] ignore = [ "E501", # line length — codebase has long French strings "B008", # function-call-in-default-arg — used intentionally with FastAPI Depends/File "E701", # multiple-statements-on-one-line — cms.py uses column-aligned # `if cond: ws.cell(row=r, column=N, value=…)` as a visual table # mapping conditions → spreadsheet columns. Splitting destroys the grid. ]