[build-system] requires = ["hatchling>=1.25"] build-backend = "hatchling.build" [project] name = "packetstation" dynamic = ["version"] description = "Packet Station: PESCO shop packet tracking (server)" requires-python = ">=3.12" license = { text = "Proprietary - PESCO internal use" } authors = [{ name = "Spencer McGuire", email = "spencerm@pescoinc.biz" }] classifiers = ["Private :: Do Not Upload", "Programming Language :: Python :: 3"] # Exact pins live in server/requirements.txt (public PyPI) and server/requirements-pesco.txt (Gitea). dependencies = [ "fastapi>=0.143", "uvicorn[standard]>=0.54", "psycopg[binary,pool]>=3.3,<4", "pydantic>=2.14", "pydantic-settings>=2.16", "ldap3>=2.9.1", "argon2-cffi>=25.1", "apscheduler>=3.11,<4", "httpx>=0.28", "tzdata>=2026.5", "pypdf==6.21.2", "python-multipart==0.0.32", "pypdfium2==5.14.0", "openpyxl==3.1.5", "reportlab==5.0.1", "pillow==13.0.0", "visualkit==0.3.0", "mfileskit==0.1.3", ] [project.optional-dependencies] dev = ["pytest>=9.1", "anyio>=4.15", "ruff>=0.17", "mypy>=2.4"] [project.scripts] packetstation = "packetstation.cli:main" [tool.hatch.version] path = "server/packetstation/__init__.py" [tool.hatch.build.targets.wheel] packages = ["server/packetstation"] [tool.pytest.ini_options] testpaths = ["tests"] addopts = "-ra" [tool.ruff] line-length = 120 target-version = "py312" src = ["server", "tests"] extend-exclude = ["frontend", ".venv"] [tool.ruff.lint] select = ["E", "F", "W", "I", "B", "UP", "S", "RUF"] ignore = ["S101", "S104", "S603", "S607", "RUF001"] [tool.ruff.lint.per-file-ignores] "tests/**" = ["S105", "S106", "S108", "S311"] [tool.mypy] python_version = "3.12" files = ["server/packetstation"] ignore_missing_imports = true warn_unused_ignores = true check_untyped_defs = true