[project] name = "mediahive" dynamic = ["version"] description = "MediaHive - Media scanning, indexing, and Netflix-style streaming" readme = "README.md" requires-python = ">=3.14" dependencies = [ "aiofiles>=25.1.0", "aiopathlib>=0.6.0", "bencodepy>=0.9.5", "fastapi-vue~=1.7.2", "fastapi[standard]>=0.128.0", "httpx[http2]>=0.28.1", "msgspec>=0.19", "parse-torrent-title>=2.8.1", "platformdirs>=4.0", "tomli-w>=1.2.0", "uvicorn[standard]>=0.40.0", ] [project.scripts] mediahive = "mediahive.__main__:main" [project.urls] Repository = "https://git.zi.fi/LeoVasanko/mediahive" [build-system] requires = ["hatchling", "hatch-vcs"] build-backend = "hatchling.build" [tool.hatch.version] source = "vcs" [tool.hatch.build] packages = ["mediahive"] artifacts = ["mediahive/frontend-build"] only-packages = true [tool.hatch.build.targets.sdist.hooks.custom] path = "scripts/fastapi-vue/buildhook.py" [tool.hatch.build.targets.sdist.force-include] "scripts/fastapi-vue/buildhook.py" = "scripts/fastapi-vue/buildhook.py" "scripts/fastapi-vue/buildutil.py" = "scripts/fastapi-vue/buildutil.py" [tool.uv] package = true [tool.uv.sources] parse-torrent-title = { git = "https://github.com/platelminto/parse-torrent-title.git" } [project.optional-dependencies] gui = [ # pywebview's qt extra is Qt6-only (QtPy + PyQt6 + PyQt6-WebEngine); # Qt5 would come from its separate qt5 extra, which we do not use. "pywebview[qt]>=6.2.1; platform_system != 'Windows'", "pywebview>=6.2.1; platform_system == 'Windows'", "velopack>=1.2", "pythonnet>=3.1.0rc0; platform_system == 'Windows' and python_version >= '3.14'", "pyinstaller>=6.0", ] [dependency-groups] dev = [ "httpx>=0.28.1", "ruff>=0.15.14", "setuptools-scm>=8", ] [tool.ruff] preview = true [tool.ruff.lint] select = ["ALL"] ignore = [ "incorrect-blank-line-before-class", "multi-line-summary-second-line", "docstring-missing-returns", "missing-trailing-comma", "print", "EM", "TC", "raise-vanilla-args", "S", "missing-copyright-notice", "PLR", "PLW", # TEMP suppressions - revisit and remove after focused cleanup passes. "complex-structure", "docstring-missing-exception", "missing-return-type-undocumented-public-function", "undocumented-public-function", "boolean-type-hint-positional-argument", "missing-type-function-argument", "undocumented-public-method", "try-consider-else", "undocumented-public-init", "missing-return-type-private-function", "raise-without-from-inside-except", "create-subprocess-in-async-function", "line-too-long", "implicit-namespace-package", "boolean-default-value-positional-argument", "import-outside-top-level", "undocumented-public-class", "asyncio-dangling-task", "private-member-access", "blocking-path-method-in-async-function", "invalid-class-name", "collapsible-if", "call-datetime-now-without-tzinfo", "useless-if-else", "missing-terminal-punctuation", "missing-trailing-period", "any-type", # Allow en-dash in docstrings (used for list formatting) "ambiguous-unicode-character-docstring", # Allow ctypes COM variable names (CLSID_*, IID_*, etc.) "non-lowercase-variable-in-function", # Allow inline comments that describe output formats "commented-out-code", # Allow unused local variables in ctypes COM boilerplate "unused-variable", ]