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.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.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.1.zip
(11.5 kB
view details)
Built Distribution
urlpath-1.0.1-py3.4.egg
(12.4 kB
view details)
File details
Details for the file urlpath-1.0.1.zip
.
File metadata
- Download URL: urlpath-1.0.1.zip
- Upload date:
- Size: 11.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f40616df699db1f62cf48c22c2f58dd26b69b5cd503e09e71f420a3f2ee7a2fa |
|
MD5 | 8526e7b21618ca93af9c1187e55abaa6 |
|
BLAKE2b-256 | ea7d3bb3e5027be78fc70d3fe730584adc993305cddc2cc015f1725ceac50873 |
File details
Details for the file urlpath-1.0.1-py3.4.egg
.
File metadata
- Download URL: urlpath-1.0.1-py3.4.egg
- Upload date:
- Size: 12.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | da81705af78726af5258b21a6968e1f25b9de9d601cf33fb1bbb9b94ab25cfed |
|
MD5 | 4e534d0db1464891b7cfb066d0d94375 |
|
BLAKE2b-256 | 27781b8bb5f4975234488421cf80ef245d62ab4d1d9db1616a51cdfe8887224c |