Skip to main content

解析和序列化 HTTP 结构化字段值

项目描述

Python 中的 HTTP 结构化字段值

操作状态

这是一个Python 3库,实现了HTTP 结构化字段的解析和序列化。

该库的最初目的是证明规范中的算法;结果,它根本没有优化。它密切跟踪规范,但由于它还不是 RFC,可能随时更改。

目前,这实现了规范草案 19。

Python API

结构化字段值有三种顶级类型;Dictionary,ListItem. 实例化后,每个都可以通过调用来解析一个字符串 HTTP 头字段值.parse()

>>> from http_sfv import List
>>> my_list = List()
>>> my_list.parse(b"foo; a=1, bar; b=2")

请注意,它.parse()需要一个类似字节的对象。如果要解析字符串,请先解析.encode()

Lists 和 Dictionaries 的成员分别可以通过普通的 Pythonic list 和 dictionary 方法获得:

>>> my_list
[<http_sfv.item.Item object at 0x106d25190>, <http_sfv.item.Item object at 0x106d25210>]
>>> my_list[0]
<http_sfv.item.Item object at 0x106d25190>

项目(无论是顶级还是在列表或字典值中)可以使用以下.value属性访问其值:

>>> my_list[0].value
'foo'

可以使用.params属性访问项目(和内部列表)上的参数,该属性是一个字典:

>>> my_list[0].params['a']
1

请注意,Tokens 和 Strings 都评估为 Python 字符串,但 Tokens 具有不同的类:

>>> type(my_list[0].value)
<class 'http_sfv.token.Token'>

这意味着您需要显式创建令牌:

>>> from http_sfv import Token
>>> my_list.append(Token('bar'))
>>> my_list[-1]
'bar'

如果您比较两个项目,如果它们的值匹配,即使它们的参数不同,它们也会被认为是等价的:

>>> Token('foo') in my_list  # note that my_list's 'foo' has a parameter
True
>>> my_list.count(Token("foo"))
1

可以通过传递一个列表来添加内部列表:

>>> my_list.append(['another_thing', 'and_another'])
>>> print(my_list)
foo;a=1, bar;b=2, bar, ("another_thing" "and_another")
>>> my_list[-1][-1].params['a'] = True

字典、列表和项目可以用一个值来实例化:

>>> from http_sfv import Dictionary
>>> my_dictionary = Dictionary({'a': '1', 'b': 2, 'c': Token('foo')})
>>> my_dictionary
{'a': <http_sfv.item.Item object at 0x106a94c40>, 'b': <http_sfv.item.Item object at 0x106a94d00>, 'c': <http_sfv.item.Item object at 0x106a94dc0>}

一旦实例化,就可以访问参数:

>>> my_dictionary['b'].params['1'] = 2.0

最后,要序列化字段值,只需将其评估为字符串:

>>> print(my_dictionary)
a=1, b=2;b1=2.0, c=foo

命令行使用

-d您可以通过在命令行上调用库来验证和检查字段值的数据模型,使用-l-i分别表示字典、列表或项目;例如,

> python3 -m http_sfv -i "foo;bar=baz"
[
    {
        "__type": "token",
        "value": "foo"
    },
    {
        "bar": {
            "__type": "token",
            "value": "baz"
        }
    }
]

或者:

> python3 -m http_sfv -i "foo;&bar=baz"
FAIL: Key does not begin with lcalpha or * at: &bar=baz

请注意,如果成功,则输出为测试套件使用的 JSON 格式。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

http_sfv-0.9.8.tar.gz (14.9 kB 查看哈希

已上传 source

内置分布

http_sfv-0.9.8-py3-none-any.whl (15.2 kB 查看哈希

已上传 py3