[project] name = "beefy-player" version = "0.1.0" description = "A flashy terminal player for internet radio — live spectrum analyser, MPRIS / macOS Now Playing support, song history and pluggable station catalogues (SomaFM included)" readme = "README.md" license = "WTFPL" license-files = ["LICENSE"] requires-python = ">=3.10" authors = [{ name = "beefy-player contributors" }] keywords = ["radio", "internet-radio", "tui", "terminal", "mpris", "audio", "somafm"] classifiers = [ "Environment :: Console", "Intended Audience :: End Users/Desktop", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Multimedia :: Sound/Audio", "Operating System :: POSIX :: Linux", "Operating System :: MacOS", "Environment :: MacOS X", ] dependencies = [ "textual>=8.0,<9", "rich>=14.2", "httpx>=0.27", "numpy>=2.0", "pillow>=10.0", "dbus-next>=0.2.3; sys_platform == 'linux'", ] [project.scripts] beefy-player = "beefy_player.__main__:main" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["beefy_player"] [tool.hatch.build.targets.wheel.force-include] "beefy_player/theme.tcss" = "beefy_player/theme.tcss" [dependency-groups] dev = [ "pytest>=8.0", "pytest-asyncio>=0.24", ] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] [tool.ruff] target-version = "py310" line-length = 100 extend-exclude = ["dist", ".venv", "build"] [tool.ruff.lint] select = ["E4", "E7", "E9", "F", "I", "UP", "B", "SIM", "RUF"] ignore = ["RUF001"] # en/em dashes are part of real station metadata # dbus-next needs short signature strings ("s", "a{sv}", "x", …) in # annotations; they are not Python names. [tool.ruff.lint.per-file-ignores] "beefy_player/mpris.py" = ["F821", "F722", "UP037"]