[project]
name = "rural-dict"
version = "1.0.0"
description = "Privacy-respecting, NoJS-supporting Urban Dictionary frontend."
license = "AGPL-3.0-or-later"
readme = "README.md"
requires-python = ">=3.12"
authors = [
    { name = "Zubarev Grigoriy", email = "thirtysix@thirtysix.pw" },
    { name = "vlnst", email = "vlnst@bloat.cat" },
    { name = "Skylar Astaroth", email = "cobra@vern.cc" },
    { name = "zortazert", email = "zortazert@matthewevan.xyz" },
]
dependencies = [
    "aiohttp~=3.10.3",
    "selectolax~=0.3.21",
    "fastapi~=0.112.1",
    "uvicorn[standard]~=0.30.6",
    "jinja2~=3.1.4",
]

[tool.rye]
virtual = true
managed = true
universal = true
dev-dependencies = [
    "basedpyright>=1.16.0",
]

[tool.rye.scripts]
dev = """uvicorn src.main:app --reload --reload-include 'src/**/*.py'
--reload-include 'templates/**/*.html' --reload-include 'static/**/*.css' --port 5758"""
start = """uvicorn src.main:app --no-access-log --proxy-headers
--forwarded-allow-ips '*' --host 0.0.0.0 --port 5758"""

[tool.ruff]
target-version = "py312"
line-length = 99
exclude = [
    ".git",
    ".venv",
    ".idea",
    ".tests",
    "build",
    "dist",
]

[tool.ruff.lint]
select = [
    "E", # pycodestyle errors
    "W", # pycodestyle warnings
    "F", # pyflakes
    "I", # isort
    "N", # pep8-naming
    "S", # flake8-bandit
    "B", # flake8-bugbear
    "G", # flake8-logging-format
    "C4", # flake8-comprehensions
    "UP", # pyupgrade
    "PLC", # pylint conventions
    "PLE", # pylint errors
    "SIM", # flake8-simplify
    "RET", # flake8-return
    "YTT", # flake8-2020
    "RUF", # ruff-specific rules
    "TCH", # flake8-type-checking
    "PTH", # flake8-use-pathlib
    "ASYNC", # flake8-async
]

[tool.basedpyright]
exclude = [
    ".git",
    ".venv",
    ".idea",
    ".tests",
    "build",
    "dist",
]
typeCheckingMode = "standard"
pythonPlatform = "All"
pythonVersion = "3.12"
reportMissingImports = true
reportMissingTypeStubs = false