一个用于简化URL构建和操作的不可变URL类
项目描述
一个简单、不可变的URL类,具有清晰的API以进行查询和操作。支持Python 2.7、3.3、3.4、3.5、3.6、3.7、3.8和pypy。
还支持根据RFC 6570的模板URL
内容
文档
安装
从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对象是不可变的 - 所有的修改方法都返回一个新的实例。
查询
>>> 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'
请注意,每个访问方法都是重载的修改方法,类似于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类是不可变的,因此它可以作为字典的键使用
它可以进行序列化和恢复
它支持等价操作
它支持等价操作
可以通过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'
或expand函数
>>> from purl import expand
>>> expand(u"{/list*}", {'list': ['red', 'green', 'blue']})
'/red/green/blue'
可以进行广泛的扩展 - 请参阅RFC获取更多详细信息。
变更日志
v1.6 - 2021-05-15
使用pytest而不是nose。
修复有关正则字符串的警告。
v1.5 - 2019-03-10
允许密码中使用 @ 符号。
v1.4 - 2018-03-11
允许从URL中删除用户名和密码。
v1.3.1
确保路径始终以正斜杠开头。
v1.3
允许将绝对URL转换为相对URL。
v1.2
支持无密码的URL。
允许斜杠作为路径段传递。
v1.1
支持通过修改器方法设置用户名和密码
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
添加了对比较和相等性的支持
添加了对 pickling 的支持
添加了 __slots__,以便实例可以用作字典中的键
贡献
克隆,创建一个虚拟环境,然后安装 purl 和测试所需的包
$ git clone git@github.com:codeinthehole/purl.git $ cd purl $ mkvirtualenv purl # requires virtualenvwrapper (purl) $ make
确保使用以下方法通过测试
(purl) $ pytest
或
$ tox
项目详情
下载文件
为您的平台下载文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。