[project] name = "trawls" version = "0.1.0" description = "Trawls — moteur de crawling, d'extraction et de navigation web, LLM-ready." readme = "README.md" requires-python = ">=3.12" license = { text = "MIT" } authors = [{ name = "Simon-Pierre Boucher" }] dependencies = [ "fastapi>=0.115", "uvicorn[standard]>=0.30", "pydantic>=2.8", "pydantic-settings>=2.4", "curl_cffi>=0.7", "httpx[http2]>=0.27", "playwright>=1.47", "selectolax>=0.3.21", "lxml>=5.2", "charset-normalizer>=3.3", "pymupdf>=1.24", "tiktoken>=0.7", "structlog>=24.1", "aiosqlite>=0.20", "typer>=0.12", "rich>=13.7", "python-dateutil>=2.9", "sse-starlette>=2.1", "argon2-cffi>=23.1", "orjson>=3.10", ] [project.optional-dependencies] dev = ["pytest>=8", "pytest-asyncio>=0.23", "ruff>=0.5", "mypy>=1.10", "aiohttp>=3.9"] ocr = ["rapidocr-onnxruntime>=1.3"] [project.scripts] trawls = "trawls.cli:app" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["trawls"] [tool.ruff] line-length = 110 target-version = "py312" [tool.ruff.lint] select = ["E", "F", "I", "UP", "B", "ASYNC"] ignore = ["E501", "B008", "E402", "UP047", "ASYNC109", "ASYNC230"] [tool.mypy] python_version = "3.12" strict = true ignore_missing_imports = true [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"]