Files
Priceflow/pyproject.toml
T
Claude d6c39252f2 feat: Rebranding PriceFlow + OpenRouter + i18n FR + Docker
Modifications majeures:

1. Rebranding: Pricecious → PriceFlow
   - Mise à jour du titre, logo et noms de projet

2. Intégration OpenRouter
   - Ajout comme provider IA avec filtres (chat, vision, code, reasoning, free)
   - Récupération dynamique des modèles et coûts
   - Service et router dédiés (/api/openrouter/models)

3. Internationalisation (i18n)
   - Installation i18next + react-i18next
   - Application entièrement traduite en français
   - Fichier de traduction: fr.json

4. Configuration Docker
   - docker-compose.yml avec réseau nginx_default (external)
   - PostgreSQL sur port 5488:5432
   - Browserless sur port 3012:3000
   - init.sql pour initialisation de la base de données
   - .env.example avec variables documentées

5. Favicon
   - Documentation ajoutée dans index.html pour faciliter le remplacement
2025-11-22 09:22:39 +00:00

99 lines
1.8 KiB
TOML

[project]
name = "priceflow-backend"
version = "0.1.0"
description = "Backend for PriceFlow Price Tracker"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"fastapi",
"uvicorn",
"sqlalchemy",
"psycopg2-binary",
"playwright",
"requests",
"pydantic",
"apprise",
"Pillow",
"apscheduler",
"python-multipart",
"pydantic-settings",
"aiofiles",
"litellm",
"alembic",
"tenacity",
"slowapi",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["app"]
[project.optional-dependencies]
dev = [
"pytest",
"pytest-asyncio",
"pytest-cov",
"ruff",
"httpx",
"mypy",
"bandit",
"pip-audit",
"pre-commit",
]
[tool.hatch.envs.default]
dependencies = [
"pytest",
"ruff",
"httpx",
]
[tool.ruff]
line-length = 120
target-version = "py312"
[tool.ruff.lint]
select = ["E", "F", "I", "W", "B", "UP", "PL", "RUF"]
ignore = []
[tool.ruff.lint.per-file-ignores]
"tests/*" = ["PLR2004"]
"app/routers/*" = ["B008"]
"app/main.py" = ["B008"]
[tool.pytest.ini_options]
pythonpath = ["."]
testpaths = ["tests"]
addopts = "--cov=app --cov-report=html --cov-report=term-missing"
asyncio_mode = "auto"
[tool.coverage.run]
source = ["app"]
omit = ["*/tests/*", "*/alembic/*"]
[tool.coverage.report]
exclude_lines = [
"pragma: no cover",
"def __repr__",
"raise AssertionError",
"raise NotImplementedError",
"if __name__ == .__main__.:",
"if TYPE_CHECKING:",
"@abstractmethod",
]
[tool.mypy]
python_version = "3.12"
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = false # Enable gradually
ignore_missing_imports = true
[tool.bandit]
exclude_dirs = ["tests", "app/alembic"]
skips = ["B101"] # Skip assert_used (common in tests)