[tool.semantic_release] version_source = "tag" commit_version_number = true branch = "main" upload_to_pypi = false upload_to_release = true build_command = "python scripts/update_versions.py {version}" [tool.semantic_release.commit_parser_options] allowed_tags = [ "build", "chore", "ci", "docs", "feat", "fix", "perf", "style", "refactor", "test", ] minor_tags = ["feat"] patch_tags = ["fix", "perf", "chore"] [project] name = "audiovault" description = "Self-hosted application for importing, managing, and downloading music from major streaming platforms" version = "0.6.3" [tool.ruff] line-length = 120 target-version = "py314" # Treat backend/ as a source root so `app` resolves as first-party regardless # of the working directory ruff is invoked from (repo root vs. cd backend in CI). src = ["backend"] [tool.ruff.lint] select = [ "E", "F", "W", # pycodestyle + pyflakes "S", # flake8-bandit (security) "B", # flake8-bugbear (bugs + design issues) "I", # isort "UP", # pyupgrade (modern Python syntax) "N", # pep8-naming ] ignore = [ "S101", # allow assert "S311", # allow random (non-security use) "S603", # subprocess without shell — intentional "S607", # partial path executable — intentional (ffmpeg, aria2) ] [tool.ruff.lint.per-file-ignores] "backend/tests/**" = ["S"] [tool.ruff.lint.isort] known-first-party = ["app"] [tool.mypy] python_version = "3.14" ignore_missing_imports = true disallow_untyped_calls = false disallow_untyped_defs = false check_untyped_defs = true plugins = ["sqlalchemy.ext.mypy.plugin"] [[tool.mypy.overrides]] module = ["app.api.*"] disable_error_code = ["assignment"] [[tool.mypy.overrides]] module = [ "app.services.base_music_service", "app.services.soundcloud_service", "app.providers.generic", "app.api.v1.stream", ] disable_error_code = ["arg-type", "return-value", "union-attr", "operator", "index"] [tool.pyright] include = ["backend/app"] exclude = [ "**/__pycache__", "**/node_modules", "backend/.venv", "backend/tests", ] pythonVersion = "3.14" typeCheckingMode = "basic" venvPath = "." venv = ".venv" reportMissingImports = false reportMissingTypeStubs = false reportUnusedImport = true reportUnusedVariable = true # Dodatkowe wyłączenia dla zgodności z poprzednią konfiguracją reportOptionalSubscript = "none" reportOptionalMemberAccess = "none" reportArgumentType = "none" reportGeneralTypeIssues = "none" reportPrivateImportUsage = "none" reportCallIssue = "none" reportTypedDictNotRequiredAccess = "none" reportReturnType = "none" reportOptionalOperand = "none" reportOperatorIssue = "none" extraPaths = ["backend/app"]