Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chrono-meter/urlpath
Object-oriented URL from `urllib.parse` and `pathlib`
https://github.com/chrono-meter/urlpath
Last synced: about 1 month ago
JSON representation
Object-oriented URL from `urllib.parse` and `pathlib`
- Host: GitHub
- URL: https://github.com/chrono-meter/urlpath
- Owner: chrono-meter
- Created: 2015-01-23T05:43:04.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2020-06-23T23:09:53.000Z (over 4 years ago)
- Last Synced: 2023-08-09T23:12:14.085Z (over 1 year ago)
- Language: Python
- Homepage: https://pypi.python.org/pypi/urlpath
- Size: 82 KB
- Stars: 47
- Watchers: 4
- Forks: 5
- Open Issues: 4
-
Metadata Files:
- Readme: README.rst
Awesome Lists containing this project
README
urlpath provides URL manipulator class that extends `pathlib.PurePath `_.
====================================================================================================================================.. image:: https://img.shields.io/travis/chrono-meter/urlpath.svg
:target: https://travis-ci.org/chrono-meter/urlpath.. image:: https://img.shields.io/pypi/v/urlpath.svg
:target: https://pypi.python.org/pypi/urlpath.. image:: https://img.shields.io/pypi/l/urlpath.svg
:target: http://python.org/psf/licenseDependencies
------------* Python 3.4, 3.5, 3.6, 3.7, 3.8
* `pathlib `_ (Standard library in Python 3.4)
* `unittest.mock `_ (Standard library in Python 3.3, or install
`mock `_)
* `Requests `_
* `JMESPath `_ (Optional)
* `WebOb `_ (Optional)Install
-------``pip install urlpath``
Examples
--------Import::
>>> from urlpath import URL
Create object::
>>> url = URL(
... 'https://username:[email protected]:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment')Representation::
>>> url
URL('https://username:[email protected]:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment')
>>> print(url)
https://username:[email protected]:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment
>>> url.as_uri()
'https://username:[email protected]:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment'
>>> url.as_posix()
'https://username:[email protected]:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment'Access `pathlib.PurePath` compatible properties::
>>> url.drive
'https://username:[email protected]:1234'
>>> url.root
'/'
>>> url.anchor
'https://username:[email protected]:1234/'
>>> url.path
'/path/to/file.ext'
>>> url.name
'file.ext'
>>> url.suffix
'.ext'
>>> url.suffixes
['.ext']
>>> url.stem
'file'
>>> url.parts
('https://username:[email protected]:1234/', 'path', 'to', 'file.ext')
>>> url.parent
URL('https://username:[email protected]:1234/path/to')Access scheme::
>>> url.scheme
'https'Access netloc::
>>> url.netloc
'username:[email protected]:1234'
>>> url.username
'username'
>>> url.password
'password'
>>> url.hostname
'secure.example.com'
>>> url.port
1234Access query::
>>> url.query
'field1=1&field2=2&field1=3'
>>> url.form_fields
(('field1', '1'), ('field2', '2'), ('field1', '3'))
>>> url.form
>>> url.form.get_one('field1')
'1'
>>> url.form.get_one('field3') is None
TrueAccess fragment::
>>> url.fragment
'fragment'Path operation::
>>> url / 'suffix'
URL('https://username:[email protected]:1234/path/to/file.ext/suffix')
>>> url / '../../rel'
URL('https://username:[email protected]:1234/path/to/file.ext/../../rel')
>>> (url / '../../rel').resolve()
URL('https://username:[email protected]:1234/path/rel')
>>> url / '/'
URL('https://username:[email protected]:1234/')
>>> url / 'http://example.com/'
URL('http://example.com/')Replace components::
>>> url.with_scheme('http')
URL('http://username:[email protected]: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:[email protected]:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment')
>>> url.with_hostinfo('example.com', 8080)
URL('https://username:[email protected]:8080/path/to/file.ext?field1=1&field2=2&field1=3#fragment')
>>> url.with_fragment('new fragment')
URL('https://username:[email protected]: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:[email protected]: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:[email protected]:1234/path/to/file.ext?field3=3&field4=1&field4=2&field4=3#fragment')
>>> url.with_query('query')
URL('https://username:[email protected]:1234/path/to/file.ext?query#fragment')
>>> url.with_query(None)
URL('https://username:[email protected]:1234/path/to/file.ext#fragment')Ammend query::
>>> url.with_query(field1='1').add_query(field2=2)
URL('https://username:[email protected]:1234/path/to/file.ext?field1=1&field2=2#fragment')
Do HTTP requests::>>> url = URL('https://httpbin.org/get')
>>> url.get()
>>> url = URL('https://httpbin.org/post')
>>> url.post(data={'key': 'value'})
>>> url = URL('https://httpbin.org/delete')
>>> url.delete()
>>> url = URL('https://httpbin.org/patch')
>>> url.patch(data={'key': 'value'})
>>> url = URL('https://httpbin.org/put')
>>> url.put(data={'key': 'value'})
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/without/trailing/sep')
>>> str(url).endswith('/')
False
>>> url.trailing_sep
''
>>> url.name
'sep'
>>> url.path
'/path/without/trailing/sep'
>>> url.parts[-1]
'sep'