From 002c25d4179ef07d6d0d9e04f4f4d644cc9587d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Thu, 29 May 2025 20:27:40 +0200 Subject: [PATCH] [util] add 'NullResponse' class --- gallery_dl/util.py | 22 ++++++++++++++++++++++ test/test_util.py | 21 +++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/gallery_dl/util.py b/gallery_dl/util.py index 4f24a66c..9fd6e354 100644 --- a/gallery_dl/util.py +++ b/gallery_dl/util.py @@ -639,6 +639,28 @@ class NullContext(): pass +class NullResponse(): + __slots__ = ("url", "reason") + + ok = is_redirect = is_permanent_redirect = False + cookies = headers = history = links = {} + encoding = apparent_encoding = "utf-8" + content = b"" + text = "" + status_code = 900 + close = noop + + def __init__(self, url, reason=""): + self.url = url + self.reason = str(reason) + + def __str__(self): + return "900 " + self.reason + + def json(self): + return {} + + class CustomNone(): """None-style type that supports more operations than regular None""" __slots__ = () diff --git a/test/test_util.py b/test/test_util.py index 126c2b97..6e8b138b 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -953,6 +953,27 @@ value = 123 except ValueError as exc: self.assertIs(exc, exc_orig) + def test_null_response(self): + response = util.NullResponse("https://example.org") + + self.assertEqual(response.url, "https://example.org") + self.assertEqual(response.status_code, 900) + self.assertEqual(response.reason, "") + self.assertEqual(response.text, "") + self.assertEqual(response.content, b"") + self.assertEqual(response.json(), {}) + + self.assertFalse(response.ok) + self.assertFalse(response.is_redirect) + self.assertFalse(response.is_permanent_redirect) + self.assertFalse(response.history) + + self.assertEqual(response.encoding, "utf-8") + self.assertEqual(response.apparent_encoding, "utf-8") + self.assertEqual(response.cookies.get("foo"), None) + self.assertEqual(response.headers.get("foo"), None) + self.assertEqual(response.links.get("next"), None) + class TestExtractor(): category = "test_category"