解析和序列化 HTTP 结构化字段值
项目描述
Python 中的 HTTP 结构化字段值
这是一个Python 3库,实现了HTTP 结构化字段的解析和序列化。
该库的最初目的是证明规范中的算法;结果,它根本没有优化。它密切跟踪规范,但由于它还不是 RFC,可能随时更改。
目前,这实现了规范草案 19。
Python API
结构化字段值有三种顶级类型;Dictionary
,List
和Item
. 实例化后,每个都可以通过调用来解析一个字符串 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
查看哈希)
内置分布
http_sfv-0.9.8-py3-none-any.whl
(15.2 kB
查看哈希)