From 56ed845f01cc4cd63b4fb8ce434f9ffe0131ad13 Mon Sep 17 00:00:00 2001 From: Mano Date: Sun, 20 Jul 2025 19:32:16 +0200 Subject: [PATCH 1/2] Update helpers.py Updated the helper.py file to be compatible with Python 3.13 --- emails/loader/helpers.py | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/emails/loader/helpers.py b/emails/loader/helpers.py index 220ab43..20cf1ec 100644 --- a/emails/loader/helpers.py +++ b/emails/loader/helpers.py @@ -3,9 +3,40 @@ __all__ = ['guess_charset', 'fix_content_type'] import re -import cgi import warnings +# Handle cgi module removal in Python 3.13+ +try: + import cgi + parse_header = cgi.parse_header +except ImportError: + # Python 3.13+ fallback + from email.utils import parseaddr + from email import message_from_string + + def parse_header(value): + """Parse a Content-Type like header. + + This is a replacement for cgi.parse_header() which was removed in Python 3.13. + """ + if not value: + return '', {} + + # Split on semicolon to separate main value from parameters + parts = value.split(';', 1) + main_value = parts[0].strip() + + params = {} + if len(parts) > 1: + # Parse parameters + param_string = parts[1] + # Create a fake email message to use email.message parsing + fake_msg = message_from_string(f"Content-Type: {value}") + params = fake_msg.get_params()[1:] # Skip the main type + params = dict(params) if params else {} + + return main_value, params + try: import charade as chardet warnings.warn("charade module is deprecated, update your requirements to chardet", @@ -60,7 +91,7 @@ def guess_charset(headers, html): if headers: content_type = headers['content-type'] if content_type: - _, params = cgi.parse_header(content_type) + _, params = parse_header(content_type) r = params.get('charset', None) if r: return r From 5c105c8ae61519aac27ab5afd9bcf52e763d0a36 Mon Sep 17 00:00:00 2001 From: Mano Date: Sun, 20 Jul 2025 19:34:40 +0200 Subject: [PATCH 2/2] Update transformer.py Updated the transformer.py to be compatible with Python 3.13