[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "xmllm" version = "0.1.0" description = "Document structure engine: image → canonical model → ALTO XML / PAGE XML" readme = "README.md" license = "Apache-2.0" requires-python = ">=3.11" authors = [ { name = "XmLLM contributors" }, ] dependencies = [ "fastapi>=0.115,<1", "uvicorn[standard]>=0.30,<1", "pydantic>=2.7,<3", "pydantic-settings>=2.3,<3", "lxml>=5.2,<6", "Pillow>=10.3,<11", "python-multipart>=0.0.9", "aiosqlite>=0.20,<1", "httpx>=0.27,<1", "paddlepaddle>=2.6,<3", "paddleocr>=2.8", ] [project.optional-dependencies] dev = [ "pytest>=8.2,<9", "pytest-asyncio>=0.23,<1", "pytest-cov>=5,<6", "httpx>=0.27,<1", "ruff>=0.4,<1", "mypy>=1.10,<2", "lxml-stubs>=0.5", ] [tool.hatch.build.targets.wheel] packages = ["src"] [tool.pytest.ini_options] testpaths = ["tests"] asyncio_mode = "auto" markers = [ "unit: unit tests", "integration: integration tests", "e2e: end-to-end tests", ] [tool.ruff] target-version = "py311" line-length = 100 src = ["src", "tests"] [tool.ruff.lint] select = ["E", "F", "I", "N", "W", "UP", "B", "SIM"] [tool.mypy] python_version = "3.11" strict = true warn_return_any = true warn_unused_configs = true plugins = ["pydantic.mypy"] [[tool.mypy.overrides]] module = ["lxml.*"] ignore_missing_imports = true