requirements: remove the hyperlink dependency
- ID
b21bbd1- date
2026-04-14 07:36:33+00:00- author
Alex Chan <alex@alexwlchan.net>- parent
e995c87- message
requirements: remove the hyperlink dependency- changed files
4 files, 16 additions, 24 deletions
Changed files
dev_requirements.txt (2049) → dev_requirements.txt (1983)
diff --git a/dev_requirements.txt b/dev_requirements.txt
index 0df5591..66e7106 100644
--- a/dev_requirements.txt
+++ b/dev_requirements.txt
@@ -1,6 +1,6 @@
# This file was autogenerated by uv via the following command:
# uv pip compile dev_requirements.in --output-file=dev_requirements.txt --exclude-newer=P7D --exclude-newer-package alexwlchan-chives=false
-alexwlchan-chives==32
+alexwlchan-chives==34
# via -r requirements.txt
brotli==1.2.0
# via -r requirements.txt
@@ -13,7 +13,7 @@ cffi==2.0.0
# via
# -r requirements.txt
# curl-cffi
-charset-normalizer==3.4.6
+charset-normalizer==3.4.7
# via
# -r requirements.txt
# requests
@@ -25,12 +25,9 @@ execnet==2.1.2
# via pytest-xdist
gallery-dl==1.31.10
# via -r requirements.txt
-hyperlink==21.0.0
- # via -r requirements.txt
idna==3.11
# via
# -r requirements.txt
- # hyperlink
# requests
iniconfig==2.3.0
# via pytest
@@ -38,7 +35,7 @@ librt==0.8.1
# via mypy
mutagen==1.47.0
# via -r requirements.txt
-mypy==1.19.1
+mypy==1.20.0
# via -r dev_requirements.in
mypy-extensions==1.1.0
# via mypy
@@ -46,7 +43,7 @@ packaging==26.0
# via pytest
pathspec==1.0.4
# via mypy
-pillow==12.1.1
+pillow==12.2.0
# via -r requirements.txt
pluggy==1.6.0
# via
@@ -58,7 +55,7 @@ pycparser==3.0
# cffi
pycryptodomex==3.23.0
# via -r requirements.txt
-pygments==2.19.2
+pygments==2.20.0
# via pytest
pymediainfo==7.0.1
# via -r dev_requirements.in
@@ -70,13 +67,13 @@ pytest-cov==7.1.0
# via -r dev_requirements.in
pytest-xdist==3.8.0
# via -r dev_requirements.in
-requests==2.32.5
+requests==2.33.1
# via
# -r requirements.txt
# gallery-dl
-ruff==0.15.7
+ruff==0.15.9
# via -r dev_requirements.in
-types-yt-dlp==2026.3.17.20260318
+types-yt-dlp==2026.3.17.20260402
# via -r dev_requirements.in
typing-extensions==4.15.0
# via mypy
requirements.in (78) → requirements.in (68)
diff --git a/requirements.in b/requirements.in
index 289d123..5c61f6f 100644
--- a/requirements.in
+++ b/requirements.in
@@ -1,4 +1,3 @@
alexwlchan-chives[fetch,media]
gallery-dl
-hyperlink
yt-dlp[curl-cffi,default]
requirements.txt (1028) → requirements.txt (955)
diff --git a/requirements.txt b/requirements.txt
index 3b350eb..556c904 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,6 @@
# This file was autogenerated by uv via the following command:
# uv pip compile requirements.in --output-file=requirements.txt --exclude-newer=P7D --exclude-newer-package alexwlchan-chives=false
-alexwlchan-chives==32
+alexwlchan-chives==34
# via -r requirements.in
brotli==1.2.0
# via yt-dlp
@@ -12,27 +12,23 @@ certifi==2026.2.25
# yt-dlp
cffi==2.0.0
# via curl-cffi
-charset-normalizer==3.4.6
+charset-normalizer==3.4.7
# via requests
curl-cffi==0.14.0
# via yt-dlp
gallery-dl==1.31.10
# via -r requirements.in
-hyperlink==21.0.0
- # via -r requirements.in
idna==3.11
- # via
- # hyperlink
- # requests
+ # via requests
mutagen==1.47.0
# via yt-dlp
-pillow==12.1.1
+pillow==12.2.0
# via alexwlchan-chives
pycparser==3.0
# via cffi
pycryptodomex==3.23.0
# via yt-dlp
-requests==2.32.5
+requests==2.33.1
# via
# gallery-dl
# yt-dlp
yt-dlp_alexwlchan.py (7803) → yt-dlp_alexwlchan.py (7823)
diff --git a/yt-dlp_alexwlchan.py b/yt-dlp_alexwlchan.py
index a057cfe..e35e1d0 100755
--- a/yt-dlp_alexwlchan.py
+++ b/yt-dlp_alexwlchan.py
@@ -8,10 +8,10 @@ import subprocess
import sys
import tempfile
from typing import Any, TypedDict
+import urllib.parse
from chives.fetch import download_image
from chives.media import create_video_entity, VideoEntity
-import hyperlink
from yt_dlp import YoutubeDL
from yt_dlp.networking.exceptions import HTTPError as YouTubeDLHTTPError
from yt_dlp.utils import DownloadError
@@ -75,8 +75,8 @@ def get_youtube_avatar(tmp_dir: Path, channel_url: str) -> Path:
# Work out the base filename, e.g. "https://www.youtube.com/@networkrail"
# becomes "networkrail"
- u = hyperlink.parse(channel_url)
- basename = u.path[0].replace("@", "")
+ u = urllib.parse.urlsplit(channel_url)
+ basename = u.path.split("/")[1].replace("@", "")
return download_image(url=thumbnail_url, out_prefix=tmp_dir / basename)