def parse_request_meta(meta):
"""Parses request metadata from string or dict.
:param meta: request.META
:type meta: str
:return: Parsed request metadata
:rtype: dict
:raise: ValueError
"""
metadata = meta
# Escape double quotes
meta = unicode(metadata)
meta = meta.replace(r'"', r'\"')
meta = re.sub(r'\\"(.*?)\'(.*?)\'(.*?)\\"', r"""'\1\\"\2\\"\3'""", meta)
# Change single quote with double quote
meta = re.sub(r"u?\'(.*?)\'", r'"\1"', meta)
# Remove TERMCAP and LS_COLORS fields
meta = re.sub(r'"TERMCAP": ".*?",\n', "", meta, re.DOTALL)
meta = re.sub(r'"LS_COLORS": ".*?",\n', "", meta, re.DOTALL)
# Change tuples () with lists []
meta = re.sub(r": \((.+?,.*?)\)", r": [\1]", meta)
# Change objects <> with empty strings ""
meta = re.sub(r"<(\w+)(.*?)>(,|\})", r'"<\1>"\3', meta)
# False and True to lowercase
meta = meta.replace("False", "false")
meta = meta.replace("True", "true")
# Change points . with underscores _ in keys
meta = re.sub(r'(".+?":)(.+?(,|\}))', lambda m: m.group(1).replace(".", "_") + m.group(2), meta)
# Parse json
meta_dict = loads(meta)
return filter_request_meta(meta_dict)
评论列表
文章目录