all: remove httpx as a dependency
- ID
6f5f6e3- date
2026-03-28 22:56:39+00:00- author
Alex Chan <alex@alexwlchan.net>- parent
a222945- message
all: remove httpx as a dependency- changed files
6 files, 36 additions, 54 deletions
Changed files
.gitignore (0) → .gitignore (10)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6350e98
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.coverage
dev_requirements.in (76) → dev_requirements.in (80)
diff --git a/dev_requirements.in b/dev_requirements.in
index a3a9eed..30b9bfa 100644
--- a/dev_requirements.in
+++ b/dev_requirements.in
@@ -2,7 +2,7 @@
mypy
pymediainfo
-pytest
+pytest-cov
pytest-xdist
ruff
types-yt-dlp
dev_requirements.txt (2180) → dev_requirements.txt (1981)
diff --git a/dev_requirements.txt b/dev_requirements.txt
index 8e0c5e5..82488aa 100644
--- a/dev_requirements.txt
+++ b/dev_requirements.txt
@@ -1,51 +1,35 @@
# This file was autogenerated by uv via the following command:
# uv pip compile dev_requirements.in --output-file dev_requirements.txt
-alexwlchan-chives==23
+alexwlchan-chives==28
# via -r requirements.txt
-anyio==4.12.1
- # via
- # -r requirements.txt
- # httpx
brotli==1.2.0
# via -r requirements.txt
certifi==2026.2.25
# via
# -r requirements.txt
# curl-cffi
- # httpcore
- # httpx
# requests
cffi==2.0.0
# via
# -r requirements.txt
# curl-cffi
-charset-normalizer==3.4.4
+charset-normalizer==3.4.6
# via
# -r requirements.txt
# requests
+coverage==7.13.5
+ # via pytest-cov
curl-cffi==0.14.0
# via -r requirements.txt
execnet==2.1.2
# via pytest-xdist
-gallery-dl==1.31.7
- # via -r requirements.txt
-h11==0.16.0
- # via
- # -r requirements.txt
- # httpcore
-httpcore==1.0.9
- # via
- # -r requirements.txt
- # httpx
-httpx==0.28.1
+gallery-dl==1.31.10
# via -r requirements.txt
hyperlink==21.0.0
# via -r requirements.txt
idna==3.11
# via
# -r requirements.txt
- # anyio
- # httpx
# hyperlink
# requests
iniconfig==2.3.0
@@ -65,7 +49,9 @@ pathspec==1.0.4
pillow==12.1.1
# via -r requirements.txt
pluggy==1.6.0
- # via pytest
+ # via
+ # pytest
+ # pytest-cov
pycparser==3.0
# via
# -r requirements.txt
@@ -78,17 +64,19 @@ pymediainfo==7.0.1
# via -r dev_requirements.in
pytest==9.0.2
# via
- # -r dev_requirements.in
+ # pytest-cov
# pytest-xdist
+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.0
# via
# -r requirements.txt
# gallery-dl
-ruff==0.15.4
+ruff==0.15.8
# via -r dev_requirements.in
-types-yt-dlp==2026.2.21.20260223
+types-yt-dlp==2026.3.17.20260318
# via -r dev_requirements.in
typing-extensions==4.15.0
# via mypy
@@ -100,7 +88,7 @@ websockets==16.0
# via
# -r requirements.txt
# types-yt-dlp
-yt-dlp==2026.2.21
+yt-dlp==2026.3.17
# via -r requirements.txt
-yt-dlp-ejs==0.5.0
+yt-dlp-ejs==0.8.0
# via -r requirements.txt
requirements.in (78) → requirements.in (80)
diff --git a/requirements.in b/requirements.in
index 75070fa..be495a7 100644
--- a/requirements.in
+++ b/requirements.in
@@ -1,5 +1,5 @@
alexwlchan-chives[media]
+certifi
gallery-dl
-httpx
hyperlink
yt-dlp[curl-cffi,default]
requirements.txt (1128) → requirements.txt (961)
diff --git a/requirements.txt b/requirements.txt
index e916f0a..50a4138 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,38 +1,27 @@
# This file was autogenerated by uv via the following command:
# uv pip compile requirements.in --output-file requirements.txt
-alexwlchan-chives==23
+alexwlchan-chives==28
# via -r requirements.in
-anyio==4.12.1
- # via httpx
brotli==1.2.0
# via yt-dlp
certifi==2026.2.25
# via
+ # -r requirements.in
# curl-cffi
- # httpcore
- # httpx
# requests
# yt-dlp
cffi==2.0.0
# via curl-cffi
-charset-normalizer==3.4.4
+charset-normalizer==3.4.6
# via requests
curl-cffi==0.14.0
# via yt-dlp
-gallery-dl==1.31.7
- # via -r requirements.in
-h11==0.16.0
- # via httpcore
-httpcore==1.0.9
- # via httpx
-httpx==0.28.1
+gallery-dl==1.31.10
# via -r requirements.in
hyperlink==21.0.0
# via -r requirements.in
idna==3.11
# via
- # anyio
- # httpx
# hyperlink
# requests
mutagen==1.47.0
@@ -43,7 +32,7 @@ pycparser==3.0
# via cffi
pycryptodomex==3.23.0
# via yt-dlp
-requests==2.32.5
+requests==2.33.0
# via
# gallery-dl
# yt-dlp
@@ -53,7 +42,7 @@ urllib3==2.6.3
# yt-dlp
websockets==16.0
# via yt-dlp
-yt-dlp==2026.2.21
+yt-dlp==2026.3.17
# via -r requirements.in
-yt-dlp-ejs==0.5.0
+yt-dlp-ejs==0.8.0
# via yt-dlp
yt-dlp_alexwlchan.py (8610) → yt-dlp_alexwlchan.py (8729)
diff --git a/yt-dlp_alexwlchan.py b/yt-dlp_alexwlchan.py
index 9bf40a4..4c702a7 100755
--- a/yt-dlp_alexwlchan.py
+++ b/yt-dlp_alexwlchan.py
@@ -4,13 +4,15 @@ from datetime import datetime, timezone
import json
from pathlib import Path
import re
+import ssl
import subprocess
import sys
import tempfile
from typing import Any, TypedDict
+import urllib.request
+import certifi
from chives.media import create_video_entity, VideoEntity
-import httpx
import hyperlink
from yt_dlp import YoutubeDL
from yt_dlp.networking.exceptions import HTTPError as YouTubeDLHTTPError
@@ -66,16 +68,18 @@ def download_file(out_dir: Path, url: str, basename: str) -> Path:
"""
Download an image, and pick a file extension based on the image type.
"""
- # Download the bytes, and save them to a file.
- resp = httpx.get(url)
- resp.raise_for_status()
+ ssl_context = ssl.create_default_context(cafile=certifi.where())
- suffix = _choose_filename_suffix(resp.headers["content-type"])
+ with urllib.request.urlopen(url, context=ssl_context) as resp:
+ img_data = resp.read()
+ resp.close()
+
+ suffix = _choose_filename_suffix(resp.headers["content-type"])
out_path = out_dir / (basename + suffix)
with open(out_path, "xb") as out_file:
- out_file.write(resp.content)
+ out_file.write(img_data)
return out_path