]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-128982: Revert "#128982: Substitute regular expression in http.cookiejar.join_head...
authorPetr Viktorin <encukou@gmail.com>
Wed, 26 Feb 2025 14:42:39 +0000 (15:42 +0100)
committerGitHub <noreply@github.com>
Wed, 26 Feb 2025 14:42:39 +0000 (15:42 +0100)
* Revert "gh-128982: Substitute regular expression in `http.cookiejar.join_header_words` for an efficient alternative (GH-128983)"

This reverts commit 56e190068177855266f32a7efa329d145b279f94.

* Add tests

Lib/http/cookiejar.py
Lib/test/test_http_cookiejar.py
Misc/NEWS.d/next/Library/2025-01-18-11-40-11.gh-issue-128982.557lS5.rst [deleted file]

index 4ebb1601b4dd82d333db30b16a1a22ddb3d82ff9..fb0fd2e97999af1af515a20d8d1f465677fb714e 100644 (file)
@@ -448,7 +448,7 @@ def join_header_words(lists):
         attr = []
         for k, v in pairs:
             if v is not None:
-                if not v.isalnum() and '_' not in v:
+                if not re.search(r"^\w+$", v):
                     v = HEADER_JOIN_ESCAPE_RE.sub(r"\\\1", v)  # escape " and \
                     v = '"%s"' % v
                 k = "%s=%s" % (k, v)
index dbf9ce10f76f91fd89a30c7ed5d1cd75d94002a3..25a671809d4499a697bf6cdec85be509d2de2c7a 100644 (file)
@@ -227,10 +227,19 @@ class HeaderTests(unittest.TestCase):
         self.assertEqual(parse_ns_headers([hdr]), expected)
 
     def test_join_header_words(self):
-        joined = join_header_words([[("foo", None), ("bar", "baz")]])
-        self.assertEqual(joined, "foo; bar=baz")
-
-        self.assertEqual(join_header_words([[]]), "")
+        for src, expected in [
+            ([[("foo", None), ("bar", "baz")]], "foo; bar=baz"),
+            (([]), ""),
+            (([[]]), ""),
+            (([[("a", "_")]]), "a=_"),
+            (([[("a", ";")]]), 'a=";"'),
+            ([[("n", None), ("foo", "foo;_")], [("bar", "foo_bar")]],
+             'n; foo="foo;_", bar=foo_bar'),
+            ([[("n", "m"), ("foo", None)], [("bar", "foo_bar")]],
+             'n=m; foo, bar=foo_bar'),
+        ]:
+            with self.subTest(src=src):
+                self.assertEqual(join_header_words(src), expected)
 
     def test_split_header_words(self):
         tests = [
@@ -286,7 +295,10 @@ Got:          '%s'
              'foo=bar; port="80,81"; discard, bar=baz'),
 
             (r'Basic realm="\"foo\\\\bar\""',
-             r'Basic; realm="\"foo\\\\bar\""')
+             r'Basic; realm="\"foo\\\\bar\""'),
+
+            ('n; foo="foo;_", bar=foo!_',
+             'n; foo="foo;_", bar="foo!_"'),
             ]
 
         for arg, expect in tests:
diff --git a/Misc/NEWS.d/next/Library/2025-01-18-11-40-11.gh-issue-128982.557lS5.rst b/Misc/NEWS.d/next/Library/2025-01-18-11-40-11.gh-issue-128982.557lS5.rst
deleted file mode 100644 (file)
index 44b7a7b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Improve the performance of :func:`!http.cookiejar.join_header_words` by up
-to 35%. Patch by Bénédikt Tran.