Python 64.6%
TypeScript 33.7%
CSS 0.8%
1[project]2name = "uqo-chat"3version = "0.1.0"4description = "UQO-Chat — tuteur IA pour IMM1003 / IMM1033 (UQO)"5requires-python = ">=3.12"6dependencies = [7 "fastapi>=0.115",8 "uvicorn[standard]>=0.30",9 "gunicorn>=22",10 "pydantic[email]>=2.7",11 "pydantic-settings>=2.3",12 "sqlalchemy[asyncio]>=2.0",13 "aiosqlite>=0.20",14 "asyncpg>=0.29",15 "httpx[http2]>=0.27",16 "structlog>=24.1",17 "python-jose[cryptography]>=3.3",18 "passlib>=1.7",19 "python-multipart>=0.0.9",20 "openpyxl>=3.1",21 "pandas>=2.2",22 "numpy>=1.26",23 "numpy-financial>=1.0",24 "matplotlib>=3.9",25 "pdfplumber>=0.11",26 "python-docx>=1.1",27 "python-pptx>=0.6",28 "selectolax>=0.3",29 "markdown-it-py>=3.0",30 "aiosmtplib>=3.0",31 "orjson>=3.10",32]3334[project.optional-dependencies]35dev = ["pytest>=8", "pytest-asyncio>=0.23", "respx>=0.21", "ruff>=0.5", "mypy>=1.10"]3637[build-system]38requires = ["setuptools>=68"]39build-backend = "setuptools.build_meta"4041[tool.setuptools.packages.find]42include = ["app*"]4344[tool.ruff]45line-length = 10046target-version = "py312"4748[tool.ruff.lint]49select = ["E", "F", "I", "B", "UP"]50# B008: FastAPI `Depends()` in defaults is idiomatic; E501: long f-strings in French prompts.51ignore = ["B008", "E501"]5253[tool.pytest.ini_options]54asyncio_mode = "auto"55testpaths = ["tests"]56