[tool.poetry] name = "bookshelf" version = "0.1.0" description = "Photo-based book cataloger with AI identification" authors = [] packages = [ {include = "app.py", from = "src"}, {include = "api.py", from = "src"}, {include = "config.py", from = "src"}, {include = "db.py", from = "src"}, {include = "errors.py", from = "src"}, {include = "files.py", from = "src"}, {include = "models.py", from = "src"}, {include = "logic", from = "src"}, {include = "plugins", from = "src"}, {include = "presubmit.py", from = "scripts"}, ] [tool.poetry.dependencies] python = "^3.11" fastapi = ">=0.111.0" uvicorn = { version = ">=0.29.0", extras = ["standard"] } python-multipart = ">=0.0.9" openai = ">=1.0" pyyaml = ">=6.0" Pillow = ">=10.0" aiofiles = ">=23.2.1" httpx = ">=0.27" mashumaro = "^3.20" [tool.poetry.group.dev.dependencies] black = ">=24.0.0" flake8 = ">=7.0.0" flake8-pyproject = ">=1.2.0" pyright = ">=1.1" pytest = ">=8.0" numpy = "^2.4.2" [tool.poetry.scripts] serve = "app:main" fmt = "presubmit:fmt" presubmit = "presubmit:presubmit" [tool.black] line-length = 120 [tool.flake8] max-line-length = 120 extend-ignore = ["E203"] exclude = "node_modules/*" [tool.pyright] pythonVersion = "3.14" typeCheckingMode = "strict" include = ["src", "tests", "scripts"] [tool.pytest.ini_options] pythonpath = ["src"] markers = ["network: live HTTP requests to external services (deselect with -m 'not network')"] [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"