一个不可变的 URL 类,用于轻松构建和操作 URL
项目描述
一个简单的、不可变的 URL 类,具有用于查询和操作的干净 API。支持 Python 2.7、3.3、3.4、3.5、3.6、3.7、3.8 和 pypy。
还支持按照RFC 6570的模板 URL
内容:
<nav class="contents local" id="contents" role="doc-toc"> </nav>文档
安装
来自 PyPI(稳定):
$ pip install purl
来自 Github(不稳定):
$ pip install git+git://github.com/codeinthehole/purl.git#egg=purl
利用
构造:
>>> from purl import URL
# String constructor
>>> from_str = URL('https://www.google.com/search?q=testing')
# Keyword constructor
>>> from_kwargs = URL(scheme='https', host='www.google.com', path='/search', query='q=testing')
# Combine
>>> from_combo = URL('https://www.google.com').path('search').query_param('q', 'testing')
URL 对象是不可变的 - 所有 mutator 方法都返回一个新实例。
审问:
>>> u = URL('https://www.google.com/search?q=testing')
>>> u.scheme()
'https'
>>> u.host()
'www.google.com'
>>> u.domain()
'www.google.com'
>>> u.username()
>>> u.password()
>>> u.netloc()
'www.google.com'
>>> u.port()
>>> u.path()
'/search'
>>> u.query()
'q=testing'
>>> u.fragment()
''
>>> u.path_segment(0)
'search'
>>> u.path_segments()
('search',)
>>> u.query_param('q')
'testing'
>>> u.query_param('q', as_list=True)
['testing']
>>> u.query_param('lang', default='GB')
'GB'
>>> u.query_params()
{'q': ['testing']}
>>> u.has_query_param('q')
True
>>> u.has_query_params(('q', 'r'))
False
>>> u.subdomains()
['www', 'google', 'com']
>>> u.subdomain(0)
'www'
请注意,每个访问器方法也被重载为 mutator 方法,类似于 jQuery API。例如:
>>> u = URL.from_string('https://github.com/codeinthehole')
# Access
>>> u.path_segment(0)
'codeinthehole'
# Mutate (creates a new instance)
>>> new_url = u.path_segment(0, 'tangentlabs')
>>> new_url is u
False
>>> new_url.path_segment(0)
'tangentlabs'
因此,您可以逐步构建 URL:
>>> u = URL().scheme('http').domain('www.example.com').path('/some/path').query_param('q', 'search term')
>>> u.as_string()
'http://www.example.com/some/path?q=search+term'
除了上面的重载方法外,还有一个add_path_segment 方法用于在当前路径的末尾添加一个段:
>>> new_url = u.add_path_segment('here')
>>> new_url.as_string()
'http://www.example.com/some/path/here?q=search+term'
其他几件事:
由于 URL 类是不可变的,它可以用作字典中的键
它可以腌制和恢复
它支持相等操作
它支持相等操作
URL 模板可以通过Template类使用:
>>> from purl import Template
>>> tpl = Template("http://example.com{/list*}")
>>> url = tpl.expand({'list': ['red', 'green', 'blue']})
>>> url.as_string()
'http://example.com/red/green/blue'
或扩展功能:
>>> from purl import expand
>>> expand(u"{/list*}", {'list': ['red', 'green', 'blue']})
'/red/green/blue'
可以进行多种扩展 - 有关详细信息,请参阅RFC 。
变更日志
v1.6 - 2021-05-15
使用pytest代替鼻子。
修复正则表达式字符串周围的警告。
v1.5 - 2019-03-10
在密码中允许@ 。
v1.4 - 2018-03-11
允许从 URL 中删除用户名和密码。
v1.3.1
确保路径始终具有前导斜杠。
v1.3
允许将绝对 URL 转换为相对 URL。
v1.2
支持无密码 URL。
允许斜杠作为路径段传递。
v1.1
支持通过 mutator 方法设置用户名和密码
v1.0.3
处理一些 unicode 兼容性边缘情况
v1.0.2
修复模板扩展错误,没有传入匹配的变量。这确保purl.Template与从 Github API 返回的 URL 正常工作。
v1.0.1
修复路径中特殊字符未转义的错误。
v1.0
稍微整理一下。PyPy 和 Python 3.4 的文档支持。
v0.8
支持 RFC 6570 URI 模板
v0.7
所有内部字符串都是 unicode。
添加了对路径、片段、查询、身份验证中的 unicode 字符的支持。
v0.6
添加了 append_query_param方法
添加了 remove_query_param方法
v0.5
添加了对 Python 3.2/3.3 的支持(感谢 @pmcnr 和 @mitchellrj)
v0.4.1
添加了 API 文档
添加到 readthedocs.org
v0.4
修改构造函数以接受完整的 URL 字符串作为第一个参数
添加了 add_path_segment方法
v0.3.2
修复了使用 from_string 构造函数时字符串中的错误端口号
v0.3.1
修复了将列表传递给查询参数设置方法的错误
v0.3
添加了对比较和相等的支持
添加了对酸洗的支持
添加了__slots__以便实例可以用作字典中的键
贡献
克隆,创建一个 virtualenv 然后安装 purl 和测试所需的包:
$ git clone git@github.com:codeinthehole/purl.git $ cd purl $ mkvirtualenv purl # requires virtualenvwrapper (purl) $ make
使用以下方法确保测试通过:
(purl) $ pytest
或者:
$ tox
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。