[build-system] requires = ["setuptools>=68", "wheel"] build-backend = "setuptools.build_meta" [project] name = "kiwi" version = "0.10.0" description = "Pantry tracking + leftover recipe suggestions" readme = "README.md" requires-python = ">=3.11" dependencies = [ # API "fastapi>=0.110", "uvicorn[standard]>=0.27", "python-multipart>=0.0.9", "aiofiles>=23.0", # Image processing + OCR "opencv-python>=4.8", "numpy>=1.25", "pyzbar>=0.1.9", "Pillow>=10.0", # HTTP clients "httpx>=0.27", "requests>=2.31", # mDNS advertisement (optional; user must opt in) "zeroconf>=0.131", # CircuitForge shared scaffold "circuitforge-core>=0.8.0", ] [tool.setuptools.packages.find] where = ["."] include = ["app*"] [tool.pytest.ini_options] testpaths = ["tests"] asyncio_mode = "auto" [tool.ruff] line-length = 100 target-version = "py311" [tool.ruff.lint] select = ["E", "F", "W", "I"] ignore = [ "E501", # line length — handled by formatter "E402", # module-import-not-at-top — intentional for conditional/lazy imports in endpoints "W293", # whitespace before newline on blank lines — cosmetic, fixed by formatter ] [tool.ruff.lint.per-file-ignores] # tests/: F841 unused variables are the standard mock-patch capture pattern. # E741 ambiguous names and E402 conditional imports are common in test fixtures. "tests/**" = ["F841", "E741", "E702"] # scripts/: E741 ambiguous loop vars are common in data pipeline scripts. "scripts/**" = ["E741"]