From 1f315d8e5aa9280bfc90d64b5cb692ded2fe494d Mon Sep 17 00:00:00 2001 From: Jeff Dairiki Date: Thu, 9 Nov 2023 10:58:22 -0800 Subject: [PATCH] chore: disuse deprecated `cgi` module The `cgi` module is deprecated as of python 3.11 and is to be removed in python 3.13. --- packages/project-data/lektor_project_data.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/project-data/lektor_project_data.py b/packages/project-data/lektor_project_data.py index 6f252168..b3ea5401 100644 --- a/packages/project-data/lektor_project_data.py +++ b/packages/project-data/lektor_project_data.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -import cgi import re +from email.policy import EmailPolicy import readme_renderer.markdown import readme_renderer.rst @@ -36,6 +36,17 @@ def normalize_url(url): return url +def parse_header(ct: str) -> tuple[str, dict[str, str]]: + """Parse a content-type string into a main value and a dictionary of + parameters. + + This is a replacement for the deprecated ``cgi.parse_header`` function. + + """ + header = EmailPolicy.header_factory("Content-Type", ct) + return (header.content_type, dict(header.params)) + + class ProjectDataPlugin(Plugin): name = 'Project Data' description = u'Retrieve project information from PyPI.' @@ -51,7 +62,7 @@ class ProjectDataPlugin(Plugin): want to be creative here. """ - content_type, parameters = cgi.parse_header(content_type or '') + content_type, parameters = parse_header(content_type or '') # Get the appropriate renderer renderer = _RENDERERS.get(content_type, readme_renderer.txt)