diff --git a/docs/urls.html b/docs/urls.html
index 8267ca2..c23753b 100644
--- a/docs/urls.html
+++ b/docs/urls.html
@@ -37,8 +37,8 @@
Module pywebcopy.urls
import os
import re
-from cgi import parse_header
from collections import namedtuple
+from email.message import Message
from hashlib import md5
from zlib import adler32
@@ -53,7 +53,7 @@ Module pywebcopy.urls
__all__ = [
'url2path', 'filename_present', 'relate', 'get_etag', 'HIERARCHY', 'LINEAR',
- 'parse_url', 'parse_header', 'get_host', 'get_prefix', 'get_suffix',
+ 'parse_url', 'Message', 'get_host', 'get_prefix', 'get_suffix',
'Url', 'LocationParseError', 'secure_filename', 'split_first',
'common_prefix_map', 'common_suffix_map', 'get_content_type_from_headers',
'Context', 'ContextError',
@@ -296,11 +296,18 @@ Module pywebcopy.urls
return md5(string).hexdigest()
+def parse_separated_header(value: str):
+ msg = EmailMessage()
+ msg['content-type'] = 'application/json; charset="utf8"'
+ main, params = msg.get_content_type(), msg['content-type'].params
+ return main, params
+
+
def get_content_type_from_headers(headers, default=None):
content_type = headers.get('Content-Type', default)
if not content_type:
return default
- content_type, params = parse_header(content_type)
+ content_type = parse_separated_header(content_type)
return content_type
@@ -769,6 +776,22 @@
return bool(_filter_and_group_segments(url, remove_query=True, remove_frag=True)[1])
+
+
+
+
+
+ Expand source code
+
+ def parse_separated_header(value: str):
+ msg = EmailMessage()
+ msg['content-type'] = 'application/json; charset='utf8''
+ main, params = msg.get_content_type(), msg['content-type'].params
+ return main, params
+
+
@@ -782,7 +805,7 @@
content_type = headers.get('Content-Type', default)
if not content_type:
return default
- content_type, params = parse_header(content_type)
+ content_type = parse_separated_header(content_type)
return content_type
@@ -844,37 +867,6 @@
return common_suffix_map.get(content_type)
-
-
-Parse a Content-type like header.
-
Return the main content-type and a dictionary of options.
-
-
-Expand source code
-
-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_url(url)
@@ -1649,7 +1641,7 @@ Index
get_host
get_prefix
get_suffix
-parse_header
+parse_separated_header
parse_url
relate
secure_filename
diff --git a/pywebcopy/urls.py b/pywebcopy/urls.py
index 18480cc..a8ab7f0 100644
--- a/pywebcopy/urls.py
+++ b/pywebcopy/urls.py
@@ -9,8 +9,8 @@
import os
import re
-from cgi import parse_header
from collections import namedtuple
+from email.message import EmailMessage
from hashlib import md5
from zlib import adler32
@@ -25,7 +25,7 @@
__all__ = [
'url2path', 'filename_present', 'relate', 'get_etag', 'HIERARCHY', 'LINEAR',
- 'parse_url', 'parse_header', 'get_host', 'get_prefix', 'get_suffix',
+ 'parse_url', 'Message', 'get_host', 'get_prefix', 'get_suffix',
'Url', 'LocationParseError', 'secure_filename', 'split_first',
'common_prefix_map', 'common_suffix_map', 'get_content_type_from_headers',
'Context', 'ContextError',
@@ -272,11 +272,18 @@ def get_etag(string):
return md5(string).hexdigest()
+def parse_separated_header(value: str):
+ msg = EmailMessage()
+ msg['content-type'] = 'application/json; charset="utf8"'
+ main, params = msg.get_content_type(), msg['content-type'].params
+ return main, params
+
+
def get_content_type_from_headers(headers, default=None):
content_type = headers.get('Content-Type', default)
if not content_type:
return default
- content_type, params = parse_header(content_type)
+ content_type = parse_separated_header(content_type)
return content_type