From 4fc719bb106034c2fe1db4aafb616c5ab45e26ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Mon, 2 Jun 2025 23:07:07 +0200 Subject: [PATCH] [util] add 're' helper --- gallery_dl/util.py | 18 +++++++++++++++--- test/test_util.py | 20 ++++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/gallery_dl/util.py b/gallery_dl/util.py index 9fd6e354..3cd6cfab 100644 --- a/gallery_dl/util.py +++ b/gallery_dl/util.py @@ -32,6 +32,19 @@ try: except AttributeError: re_compile = re.sre_compile.compile +CACHE_PATTERN = {} + + +def re(pattern): + """Compile a regular expression pattern""" + try: + return CACHE_PATTERN[pattern] + except KeyError: + pass + + p = CACHE_PATTERN[pattern] = re_compile(pattern) + return p + def bencode(num, alphabet="0123456789"): """Encode an integer into a base-N encoded string""" @@ -360,9 +373,8 @@ Response Headers set_cookie = res_headers.get("Set-Cookie") if set_cookie: - res_headers["Set-Cookie"] = re.sub( - r"(^|, )([^ =]+)=[^,;]*", r"\1\2=***", set_cookie, - ) + res_headers["Set-Cookie"] = re(r"(^|, )([^ =]+)=[^,;]*").sub( + r"\1\2=***", set_cookie) fmt_nv = "{}: {}".format diff --git a/test/test_util.py b/test/test_util.py index 6e8b138b..1cd6c5ae 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -12,6 +12,7 @@ import sys import unittest import io +import re import time import random import string @@ -974,6 +975,25 @@ value = 123 self.assertEqual(response.headers.get("foo"), None) self.assertEqual(response.links.get("next"), None) + def test_re(self): + Pattern = type(re.compile("")) + + p1 = util.re_compile("foo") + p2 = util.re("foo") + p3 = util.re("foo") + + self.assertIsInstance(p1, Pattern) + self.assertIsInstance(p2, Pattern) + self.assertIsInstance(p3, Pattern) + + self.assertIsNot(p1, p2) + self.assertIs(p2, p3) + + if sys.hexversion >= 0x3060000: + self.assertEqual(p1, p2) + else: + self.assertEqual(repr(p1), repr(p2)) + class TestExtractor(): category = "test_category"