gentoo/dev-python/python-mimeparse/files/python-mimeparse-1.6.0-py3.13.patch
Petr Vaněk 2ba096c8e5
dev-python/python-mimeparse: enable py3.13
It was necessary to backport the patch [1].

[1] https://github.com/falconry/python-mimeparse/pull/46

Signed-off-by: Petr Vaněk <arkamar@gentoo.org>
2024-06-15 12:19:25 +02:00

80 lines
2.3 KiB
Diff

From 5427072b12119fe28fd66f19f74beb7da0c1de8b Mon Sep 17 00:00:00 2001
From: Stanis Trendelenburg <stanis.trendelenburg@gmail.com>
Date: Mon, 1 Jan 2024 12:48:19 +0100
Subject: [PATCH] chore(cgi): include `parse_header()` from the deprecated cgi
module (#46)
* Include functions from the deprecated cgi module
* Document source of vendored functions from cgi.py
* Fix linter error
---
Upstream-PR: https://github.com/falconry/python-mimeparse/pull/46
diff --git a/mimeparse.py b/mimeparse.py
index 0de6d57..506e138 100644
--- a/mimeparse.py
+++ b/mimeparse.py
@@ -1,5 +1,3 @@
-import cgi
-
__version__ = '1.6.0'
__author__ = 'Joe Gregorio'
__email__ = 'joe@bitworking.org'
@@ -11,6 +9,44 @@ class MimeTypeParseException(ValueError):
pass
+# Vendored version of cgi._parseparam from Python 3.11 (deprecated and slated
+# for removal in 3.13)
+def _parseparam(s):
+ while s[:1] == ';':
+ s = s[1:]
+ end = s.find(';')
+ while end > 0 and (s.count('"', 0, end) - s.count('\\"', 0, end)) % 2:
+ end = s.find(';', end + 1)
+ if end < 0:
+ end = len(s)
+ f = s[:end]
+ yield f.strip()
+ s = s[end:]
+
+
+# Vendored version of cgi.parse_header from Python 3.11 (deprecated and slated
+# for removal in 3.13)
+def _parse_header(line):
+ """Parse a Content-type like header.
+
+ Return the main content-type and a dictionary of options.
+
+ """
+ parts = _parseparam(';' + line)
+ key = parts.__next__()
+ pdict = {}
+ for p in parts:
+ i = p.find('=')
+ if i >= 0:
+ name = p[:i].strip().lower()
+ value = p[i + 1:].strip()
+ if len(value) >= 2 and value[0] == value[-1] == '"':
+ value = value[1:-1]
+ value = value.replace('\\\\', '\\').replace('\\"', '"')
+ pdict[name] = value
+ return key, pdict
+
+
def parse_mime_type(mime_type):
"""Parses a mime-type into its component parts.
@@ -23,7 +59,7 @@ def parse_mime_type(mime_type):
:rtype: (str,str,dict)
"""
- full_type, params = cgi.parse_header(mime_type)
+ full_type, params = _parse_header(mime_type)
# Java URLConnection class sends an Accept header that includes a
# single '*'. Turn it into a legal wildcard.
if full_type == '*':