Skip to main content

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)