[build-system] requires = ["hatchling", "hatch-vcs"] build-backend = "hatchling.build" [project] name = "mediapreview" dynamic = ["version"] description = "Low-level media preview converters and a worker pool framework" readme = "README.md" requires-python = ">=3.11" dependencies = [ "docopt-ng>=0.9.0", "msgspec>=0.19.0", "pyvips[binary]>=3.1.1", ] [project.scripts] mediapreview = "mediapreview.__main__:main" [project.optional-dependencies] worker = [ "blake3>=1.0.5", "tracerite>=2.3.1", ] pdf = [ "pymupdf>=1.26.3", ] video = [ "av>=15.0.0", "numpy>=2.3.2", ] office = [ "httpx>=0.28.0", "pyjwt>=2.10.1", ] standard = [ "mediapreview[worker]", "mediapreview[pdf]", "mediapreview[video]", "mediapreview[office]", ] [dependency-groups] dev = [ "pytest>=8.4.1", "pytest-asyncio>=0.25.0", "pytest-cov>=6.0.0", "ruff>=0.8.0", "mypy>=1.13.0", ] [tool.hatch.version] source = "vcs" [tool.hatch.build.targets.wheel] packages = ["mediapreview"] [tool.ruff] target-version = "py311" [tool.ruff.lint] select = ["ALL"] ignore = [ "COM812", "ANN001", "ANN002", "ANN201", "ANN202", "ANN204", "BLE001", "C901", "CPY", "D100", "D101", "D102", "D103", "D104", "D105", "D107", "D200", "D203", "D212", "D213", "D400", "D401", "D413", "D415", "E501", "EM101", "EM102", "INP001", "PLR0911", "PLR0912", "PLR0915", "PLR2004", "PLW0603", "TRY003", ] isort.known-first-party = ["mediapreview"] per-file-ignores."tests/*" = ["S", "ARG001", "SLF001"] [tool.pytest.ini_options] asyncio_mode = "auto"