def parse_list_header(value): """Parse lists as described by RFC 2068 Section 2. In particular, parse comma-separated lists where the elements of the list may include quoted-strings. A quoted-string could contain a comma. A non-quoted string could have quotes in the middle. Quotes are removed automatically after parsing. It basically works like :func:`parse_set_header` just that items may appear multiple times and case sensitivity is preserved. The return value is a standard :class:`list`: >>> parse_list_header('token, "quoted value"') ['token', 'quoted value'] To create a header from the :class:`list` again, use the :func:`dump_header` function. :param value: a string with a list header. :return: :class:`list` """ result = [] for item in _parse_list_header(value): if item[:1] == item[-1:] == '"': item = unquote_header_value(item[1:-1]) result.append(item) return result
def parse_list_header(value): """根据RFC 2068 Section 2描述来解析列表。 特别地,解析逗号分割的且列表中的元素可能含有引用的字符串的列表。加引号的字符串可能包含逗号。 未加引号的字符串可能有引号在中间。在解析之后引号被自动移除。 基本上像:func:`parse_set_header`一样的功能,只是那一项可能会出现多次并且区分大小的保留 了下来。 返回值是一个标准的:class:`list`: >>> parse_list_header('token, "quoted value"') ['token', 'quoted value'] 为了再次从这个:class:`list`创建出一个头部,需使用:func:`dump_header`函数。 :param value: 含有头部列表在其中的字符串 :return: :class:`list` """ result = [] for item in _parse_list_header(value): if item[:1] == item[-1:] == '"': # '"quoted value"' -> quoted value item = unquote_header_value(item[1:-1]) result.append(item) return result
def parse_list_header(self, value: str) -> List[str]: result = [] for item in _parse_list_header(value): if item[:1] == item[-1:] == '"': item = self.unquote_header_value(item[1:-1]) result.append(item) return result
def parse_dict_header(value, cls=dict): """Parse lists of key, value pairs as described by RFC 2068 Section 2 and convert them into a python dict (or any other mapping object created from the type with a dict like interface provided by the `cls` argument): >>> d = parse_dict_header('foo="is a fish", bar="as well"') >>> type(d) is dict True >>> sorted(d.items()) [('bar', 'as well'), ('foo', 'is a fish')] If there is no value for a key it will be `None`: >>> parse_dict_header('key_without_value') {'key_without_value': None} To create a header from the :class:`dict` again, use the :func:`dump_header` function. .. versionchanged:: 0.9 Added support for `cls` argument. :param value: a string with a dict header. :param cls: callable to use for storage of parsed results. :return: an instance of `cls` """ result = cls() if not isinstance(value, str): # XXX: validate value = bytes_to_wsgi(value) for item in _parse_list_header(value): if "=" not in item: result[item] = None continue name, value = item.split("=", 1) if value[:1] == value[-1:] == '"': value = unquote_header_value(value[1:-1]) result[name] = value return result
def parse_dict_header(value, cls=dict): """Parse lists of key, value pairs as described by RFC 2068 Section 2 and convert them into a python dict (or any other mapping object created from the type with a dict like interface provided by the `cls` argument): >>> d = parse_dict_header('foo="is a fish", bar="as well"') >>> type(d) is dict True >>> sorted(d.items()) [('bar', 'as well'), ('foo', 'is a fish')] If there is no value for a key it will be `None`: >>> parse_dict_header('key_without_value') {'key_without_value': None} To create a header from the :class:`dict` again, use the :func:`dump_header` function. .. versionchanged:: 0.9 Added support for `cls` argument. :param value: a string with a dict header. :param cls: callable to use for storage of parsed results. :return: an instance of `cls` """ result = cls() if not isinstance(value, text_type): # XXX: validate value = bytes_to_wsgi(value) for item in _parse_list_header(value): if '=' not in item: result[item] = None continue name, value = item.split('=', 1) if value[:1] == value[-1:] == '"': value = unquote_header_value(value[1:-1]) result[name] = value return result
def parse_dict_header(value, cls=dict): """根据RFC 2068 Section 2 的描述解析键值对列表并且将它们转换成python字典(或者通过 含有一个dict的类型,就像是通过`cls`参数来提供的接口一样,来创建的任何其他映射对象): >>> d = parse_dict_header('foo="is a fish", bar="as well"') >>> type(d) is dict True >>> sorted(d.items()) [('bar', 'as well'), ('foo', 'is a fish')] 如果一个键没有对应的值,那么这个键对应的值是`None`: >>> parse_dict_header('key_without_value') {'key_without_value': None} 可以使用:func:`dump_header`函数再次从:class:`dict`创建出一个头部。 .. versionchanged:: 0.9 添加`cls`参数支持。 :param value: 含有字典头部的字符串 :param cls: 用于解析后的结果存储的可调用对象callable to use for storage of parsed results. :return: an instance of `cls` """ result = cls() if not isinstance(value, text_type): # XXX: validate value = bytes_to_wsgi(value) for item in _parse_list_header(value): if "=" not in item: result[item] = None continue name, value = item.split("=", 1) if value[:1] == value[-1:] == '"': value = unquote_header_value(value[1:-1]) result[name] = value return result