[build-system] requires = ["setuptools>=77", "wheel"] build-backend = "setuptools.build_meta" [project] name = "locallens" description = "A tool for finding local images using AI" readme = "README.md" requires-python = ">=3.11" license = "Apache-2.0" license-files = ["LICENSE"] authors = [{ name = "grinnch" }] dynamic = ["version", "dependencies"] [project.urls] Homepage = "https://github.com/meangrinch/LocalLens" Repository = "https://github.com/meangrinch/LocalLens" Issues = "https://github.com/meangrinch/LocalLens/issues" [project.optional-dependencies] dev = ["pytest", "ruff"] [tool.ruff] target-version = "py311" [tool.ruff.lint] extend-select = ["I"] # Broad excepts are deliberate at UI and batch boundaries: errors surface as # Gradio warnings or skip one batch instead of crashing the app or the sync. ignore = ["BLE001"] [tool.ruff.lint.flake8-bugbear] # Gradio injects progress tracking through this default argument. extend-immutable-calls = ["gradio.Progress"] [tool.setuptools] py-modules = [ "app", "build_db", "device", "find_duplicates", "index_store", "model_utils", ] [tool.setuptools.dynamic] version = { attr = "app.__version__" } dependencies = { file = ["requirements.txt"] } [tool.pytest.ini_options] pythonpath = ["."] testpaths = ["tests"]