[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "pywidevine" version = "1.9.0" description = "Widevine CDM (Content Decryption Module) implementation in Python." authors = [{ name = "rlaphoenix", email = "rlaphoenix@pm.me" }] requires-python = ">=3.9" readme = "README.md" license = "GPL-3.0-only" keywords = [ "python", "drm", "widevine", "google", ] classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "Natural Language :: English", "Operating System :: OS Independent", "Topic :: Multimedia :: Video", "Topic :: Security :: Cryptography", "Topic :: Software Development :: Libraries :: Python Modules", ] dependencies = [ "protobuf~=6.33.0", "pymp4~=1.4.0", "pycryptodome~=3.23.0", "click~=8.1.7", "requests~=2.32.5", "Unidecode~=1.3.7", "PyYAML~=6.0.3", ] [project.optional-dependencies] serve = ["aiohttp~=3.13.1"] [project.urls] Repository = "https://github.com/devine-dl/pywidevine" Issues = "https://github.com/devine-dl/pywidevine/issues" Discussions = "https://github.com/devine-dl/pywidevine/discussions" Changelog = "https://github.com/devine-dl/pywidevine/blob/master/CHANGELOG.md" [project.scripts] pywidevine = "pywidevine.main:main" [dependency-groups] dev = [ "pre-commit~=4.3.0", "mypy~=1.18.2", "mypy-protobuf~=3.6.0", "types-protobuf~=6.32.1.20250918", "types-requests~=2.32.4.20250913", "types-PyYAML~=6.0.12.20250915", "isort~=6.1.0", "ruff~=0.14.2", ] [tool.hatch.build.targets.sdist] include = [ "pywidevine", "CHANGELOG.md", ] [tool.hatch.build.targets.wheel] packages = ["pywidevine"] [tool.ruff] extend-exclude = [ "*_pb2.py", "*.pyi", ] force-exclude = true line-length = 120 select = ["E4", "E7", "E9", "F", "W"] [tool.ruff.extend-per-file-ignores] "pywidevine/__init__.py" = ["F403"] [tool.isort] line_length = 118 extend_skip_glob = ["*_pb2.py", "*.pyi"] [tool.mypy] check_untyped_defs = true disallow_incomplete_defs = true disallow_untyped_defs = true exclude = [ '_pb2.pyi?$' # generated protobuffer files ] follow_imports = "silent" ignore_missing_imports = true no_implicit_optional = true