Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
 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
Beispiel #6
0
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
Beispiel #7
0
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