mirror of
https://github.com/R0m1k3/Priceflow.git
synced 2026-10-11 17:29:14 +02:00
- Add User model with authentication - Create JWT-based auth service - Add login page with admin/admin default credentials - Create admin panel with user management, settings, and site configuration - Move settings to admin section (admin only) - Change search page from multi-site checkboxes to single site selector - Add logout functionality to layout - Protect routes with authentication
103 lines
1.8 KiB
TOML
103 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",
|
|
"httpx",
|
|
"pydantic",
|
|
"apprise",
|
|
"Pillow",
|
|
"apscheduler",
|
|
"python-multipart",
|
|
"pydantic-settings",
|
|
"aiofiles",
|
|
"litellm",
|
|
"alembic",
|
|
"tenacity",
|
|
"slowapi",
|
|
"beautifulsoup4",
|
|
"lxml",
|
|
"pyjwt",
|
|
]
|
|
|
|
[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)
|