Object-oriented URL from `urllib.parse` and `pathlib`
Project description
urlpath provides URL manipulator class that extends pathlib.PurePath.
Dependencies
Python 3
pathlib (Standard library in Python 3.4)
unittest.mock (Standard library in Python 3.3, or install mock)
WebOb (Optional)
Install
pip install urlpath
Examples
Import:
>>> from urlpath import URL
Create object:
>>> url = URL( ... 'https://username:password@secure.example.com:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment')
Representation:
>>> url URL('https://username:password@secure.example.com:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment') >>> print(url) https://username:password@secure.example.com:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment >>> url.as_uri() 'https://username:password@secure.example.com:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment' >>> url.as_posix() 'https://username:password@secure.example.com:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment'
Access pathlib.PurePath compatible properties:
>>> url.drive 'https://username:password@secure.example.com:1234' >>> url.root '/' >>> url.anchor 'https://username:password@secure.example.com:1234/' >>> url.path '/path/to/file.ext' >>> url.name 'file.ext' >>> url.suffix '.ext' >>> url.suffixes ['.ext'] >>> url.stem 'file' >>> url.parts ('https://username:password@secure.example.com:1234/', 'path', 'to', 'file.ext') >>> url.parent URL('https://username:password@secure.example.com:1234/path/to')
Access scheme:
>>> url.scheme 'https'
Access netloc:
>>> url.netloc 'username:password@secure.example.com:1234' >>> url.username 'username' >>> url.password 'password' >>> url.hostname 'secure.example.com' >>> url.port 1234
Access query:
>>> url.query 'field1=1&field2=2&field1=3' >>> url.form_fields (('field1', '1'), ('field2', '2'), ('field1', '3')) >>> url.form <FrozenMultiDict {'field1': ['1', '3'], 'field2': ['2']}> >>> url.form.get_one('field1') '1' >>> url.form.get_one('field3') is None True
Access fragment:
>>> url.fragment 'fragment'
Path operation:
>>> url / 'suffix' URL('https://username:password@secure.example.com:1234/path/to/file.ext/suffix') >>> url / '../../rel' URL('https://username:password@secure.example.com:1234/path/to/file.ext/../../rel') >>> (url / '../../rel').resolve() URL('https://username:password@secure.example.com:1234/path/rel') >>> url / '/' URL('https://username:password@secure.example.com:1234/') >>> url / 'http://example.com/' URL('http://example.com/')
Replace components:
>>> url.with_scheme('http') URL('http://username:password@secure.example.com:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment') >>> url.with_netloc('www.example.com') URL('https://www.example.com/path/to/file.ext?field1=1&field2=2&field1=3#fragment') >>> url.with_userinfo('joe', 'pa33') URL('https://joe:pa33@secure.example.com:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment') >>> url.with_hostinfo('example.com', 8080) URL('https://username:password@example.com:8080/path/to/file.ext?field1=1&field2=2&field1=3#fragment') >>> url.with_fragment('new fragment') URL('https://username:password@secure.example.com:1234/path/to/file.ext?field1=1&field2=2&field1=3#new fragment') >>> url.with_components(username=None, password=None, query='query', fragment='frag') URL('https://secure.example.com:1234/path/to/file.ext?query#frag')
Replace query:
>>> url.with_query({'field3': '3', 'field4': [1, 2, 3]}) URL('https://username:password@secure.example.com:1234/path/to/file.ext?field3=3&field4=1&field4=2&field4=3#fragment') >>> url.with_query(field3='3', field4=[1, 2, 3]) URL('https://username:password@secure.example.com:1234/path/to/file.ext?field3=3&field4=1&field4=2&field4=3#fragment') >>> url.with_query('query') URL('https://username:password@secure.example.com:1234/path/to/file.ext?query#fragment') >>> url.with_query(None) URL('https://username:password@secure.example.com:1234/path/to/file.ext#fragment')
Jail:
>>> root = 'http://www.example.com/app/' >>> current = 'http://www.example.com/app/path/to/content' >>> url = URL(root).jailed / current >>> url / '/root' JailedURL('http://www.example.com/app/root') >>> (url / '../../../../../../root').resolve() JailedURL('http://www.example.com/app/root') >>> url / 'http://localhost/' JailedURL('http://www.example.com/app/') >>> url / 'http://www.example.com/app/file' JailedURL('http://www.example.com/app/file')
Trailing separator will be remained:
>>> url = URL('http://www.example.com/path/with/trailing/sep/') >>> str(url).endswith('/') True >>> url.trailing_sep '/' >>> url.name 'sep' >>> url.path '/path/with/trailing/sep/' >>> url.parts[-1] 'sep' >>> url = URL('http://www.example.com/path/with/trailing/sep') >>> str(url).endswith('/') False >>> url.trailing_sep '' >>> url.name 'sep' >>> url.path '/path/with/trailing/sep' >>> url.parts[-1] 'sep'
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
urlpath-1.0.2.zip
(11.6 kB
view details)
Built Distribution
urlpath-1.0.2-py3.4.egg
(12.5 kB
view details)
File details
Details for the file urlpath-1.0.2.zip
.
File metadata
- Download URL: urlpath-1.0.2.zip
- Upload date:
- Size: 11.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 43731f7f03e2d235d8b060d0cecdd01c1bbd8730ce06af1e9ffa8446e7eea868 |
|
MD5 | 65a5bd429ffeabe34de462773fbc54de |
|
BLAKE2b-256 | bb2eff329f78308c3d493df7428bbf4853ede44c97b234af2ccd8e5e67ef1ebf |
File details
Details for the file urlpath-1.0.2-py3.4.egg
.
File metadata
- Download URL: urlpath-1.0.2-py3.4.egg
- Upload date:
- Size: 12.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 821e2763485ef977d9dae2070b5502ed312a01ca34eb80fac454c26fdce682f1 |
|
MD5 | af8c4527715dbf6a48af4443c5d38f20 |
|
BLAKE2b-256 | da5032f1ebbf9aedc8ed1fc9d73416763464eba30921465d080cd8c9824cbb37 |