Add lockfile and pinned extras (#16421)

* Add `pin`, `pin-curl-cffi`, `pin-secretstorage` and `pin-deno` extras
* Check in a `uv.lock` for devs
* Add `devscripts/update_requirements.py` for dependency upgrades

Authored by: bashonly, Grub4K

Co-authored-by: Simon Sawicki <contact@grub4k.dev>
This commit is contained in:
bashonly
2026-04-06 22:58:27 +00:00
committed by GitHub
co-authored by Simon Sawicki
parent 565dcfec4e
commit 5f6a214616
24 changed files with 2429 additions and 1576 deletions
+57 -7
View File
@@ -47,8 +47,8 @@ dependencies = []
[project.optional-dependencies]
default = [
"brotli; implementation_name=='cpython' and sys_platform!='ios'",
"brotlicffi; implementation_name!='cpython' and sys_platform!='ios'",
"brotli ; implementation_name == 'cpython' and sys_platform != 'ios'",
"brotlicffi ; implementation_name != 'cpython'",
"certifi",
"mutagen",
"pycryptodomex",
@@ -58,20 +58,55 @@ default = [
"yt-dlp-ejs==0.8.0",
]
curl-cffi = [
"curl-cffi>=0.5.10,!=0.6.*,!=0.7.*,!=0.8.*,!=0.9.*,<0.16; implementation_name=='cpython'",
"curl-cffi>=0.5.10,!=0.6.*,!=0.7.*,!=0.8.*,!=0.9.*,<0.16 ; implementation_name == 'cpython'",
]
secretstorage = [
"secretstorage",
]
deno = [
"deno>=2.6.6", # v2.6.5 fixes compatibility, v2.6.6 adds integrity check
"deno>=2.6.6",
]
pin = [
"brotli==1.2.0 ; implementation_name == 'cpython' and sys_platform != 'ios'",
"brotlicffi==1.2.0.1 ; implementation_name != 'cpython'",
"certifi @ https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl#sha256=027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa",
"cffi==2.0.0 ; implementation_name != 'cpython'",
"charset-normalizer==3.4.6",
"idna @ https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl#sha256=771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea",
"mutagen @ https://files.pythonhosted.org/packages/b0/7a/620f945b96be1f6ee357d211d5bf74ab1b7fe72a9f1525aafbfe3aee6875/mutagen-1.47.0-py3-none-any.whl#sha256=edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719",
"pycparser @ https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl#sha256=b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 ; implementation_name != 'PyPy' and implementation_name != 'cpython'",
"pycryptodomex==3.23.0",
"requests @ https://files.pythonhosted.org/packages/56/5d/c814546c2333ceea4ba42262d8c4d55763003e767fa169adc693bd524478/requests-2.33.0-py3-none-any.whl#sha256=3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b",
"urllib3 @ https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl#sha256=bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4",
"websockets==16.0",
"yt-dlp-ejs @ https://files.pythonhosted.org/packages/e3/bd/520769863744b669440a924271a6159ddd82ad5ae26b4ac4d4b69e9f8d44/yt_dlp_ejs-0.8.0-py3-none-any.whl#sha256=79300e5fca7f937a1eeede11f0456862c1b41107ce1d726871e0207424f4bdb4",
]
pin-curl-cffi = [
"certifi @ https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl#sha256=027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa ; implementation_name == 'cpython'",
"cffi==2.0.0 ; implementation_name == 'cpython'",
"curl-cffi==0.15.0 ; implementation_name == 'cpython'",
"markdown-it-py @ https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl#sha256=87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 ; implementation_name == 'cpython'",
"mdurl @ https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl#sha256=84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 ; implementation_name == 'cpython'",
"pycparser @ https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl#sha256=b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 ; implementation_name == 'cpython'",
"pygments @ https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl#sha256=86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b ; implementation_name == 'cpython'",
"rich @ https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl#sha256=793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d ; implementation_name == 'cpython'",
]
pin-secretstorage = [
"cffi==2.0.0 ; platform_python_implementation != 'PyPy'",
"cryptography==46.0.6",
"jeepney @ https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl#sha256=97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683",
"pycparser @ https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl#sha256=b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 ; implementation_name != 'PyPy' and platform_python_implementation != 'PyPy'",
"secretstorage @ https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl#sha256=0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137",
"typing-extensions @ https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl#sha256=f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 ; python_full_version < '3.11'",
]
pin-deno = [
"deno==2.7.8",
]
[dependency-groups]
build = [
"build",
"hatchling>=1.27.0",
"pip",
]
static-analysis = [
"autopep8~=2.0",
@@ -87,10 +122,10 @@ dev = [
{include-group = "test"},
]
pyinstaller = [
"pyinstaller>=6.17.0", # 6.17.0+ needed for compat with setuptools 81+
"pyinstaller>=6.17.0",
]
delocate = [
"delocate",
"delocate>=0.13.0 ; sys_platform == 'darwin'",
]
[project.urls]
@@ -145,6 +180,9 @@ exclude = [
path = "yt_dlp/version.py"
pattern = "_pkg_version = '(?P<version>[^']+)'"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.envs.default]
features = [
"curl-cffi",
@@ -160,6 +198,11 @@ installer = "uv"
setup = "pre-commit install --config .pre-commit-hatch.yaml"
yt-dlp = "python -Werror -Xdev -m yt_dlp {args}"
[tool.hatch.envs.hatch-uv]
dependencies = [
"uv>=0.10",
]
[tool.hatch.envs.hatch-static-analysis]
detached = true
dependency-groups = [
@@ -201,6 +244,13 @@ python = [
"pypy3.11",
]
[tool.uv]
exclude-newer = "7 days"
[tool.uv.exclude-newer-package]
protobug = false
yt-dlp-ejs = false
[tool.ruff]
line-length = 120