[project] name = "agrovision-mvp" version = "0.1.0" description = "AgroVisión: backend FastAPI (gateway) + UI Astro estática; teledetección NDVI, parcelas y agente RAG (conteo en standby)." requires-python = ">=3.11" dependencies = [ "fastapi>=0.115", "uvicorn[standard]>=0.34", "python-multipart>=0.0.9", # requerido por FastAPI para multipart/form-data "pydantic>=2.7", "httpx>=0.27", "python-dotenv>=1.0", # carga .env en desarrollo local "onnxruntime>=1.18", # inferencia ONNX genérica (agnóstica al modelo) "opencv-python-headless>=4.9", "pillow>=10.0", "numpy>=2.1", # >=2.1 trae wheels para Python 3.13 "supervision>=0.20", # tiling/anotación de cajas (uso futuro al activar el conteo) "huggingface_hub>=0.24", # descarga del modelo desde HF Hub en el build # --- Plataforma completa: persistencia (Fase 2) --- "sqlalchemy>=2.0", # ORM/Core async "asyncpg>=0.29", # driver async PostgreSQL (Supabase) "geoalchemy2>=0.15", # tipo Geometry para PostGIS "shapely>=2.0", # geometría: GeoJSON -> WKT, área "python-dateutil>=2.9", # relativedelta para el rango de 5 años (Fase 3) ] # Nota: la UI es Astro (estática, servida por el gateway). Las antiguas deps de Shiny # (shiny/shinywidgets/ipyleaflet/plotly) se eliminaron en la Fase 10. [dependency-groups] dev = [ "pytest>=8", "ruff>=0.6", "playwright>=1.45", ] [tool.uv] # La carpeta del repo está sincronizada por OneDrive: usar copia evita errores de hardlink. link-mode = "copy" [tool.ruff] line-length = 100 target-version = "py311" [tool.ruff.lint] select = ["E", "F", "I", "UP", "B"] [tool.ruff.lint.flake8-bugbear] # FastAPI usa estas llamadas en valores por defecto de argumentos (patrón idiomático). extend-immutable-calls = ["fastapi.File", "fastapi.Form", "fastapi.Depends", "fastapi.Query"] [tool.pytest.ini_options] pythonpath = ["."] testpaths = ["tests"] addopts = "-q"