Skip to main content

一个不可变的 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> https://secure.travis-ci.org/codeinthehole/purl.png https://img.shields.io/pypi/v/purl.svg

文档

http://purl.readthedocs.org/en/latest/

安装

来自 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

下载文件

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

源分布

purl-1.6.tar.gz (12.2 kB 查看哈希)

已上传 source

内置分布

purl-1.6-py2.py3-none-any.whl (10.4 kB 查看哈希

已上传 3 7