Skip to main content

Object-oriented URL from `urllib.parse` and `pathlib`

Project description

urlpath provides URL manipulator class that extends pathlib.PurePath.

Dependencies

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


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)

Uploaded Source

Built Distribution

urlpath-1.0.1-py3.4.egg (12.4 kB view details)

Uploaded Source

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

Hashes for urlpath-1.0.1.zip
Algorithm Hash digest
SHA256 f40616df699db1f62cf48c22c2f58dd26b69b5cd503e09e71f420a3f2ee7a2fa
MD5 8526e7b21618ca93af9c1187e55abaa6
BLAKE2b-256 ea7d3bb3e5027be78fc70d3fe730584adc993305cddc2cc015f1725ceac50873

See more details on using hashes here.

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

Hashes for urlpath-1.0.1-py3.4.egg
Algorithm Hash digest
SHA256 da81705af78726af5258b21a6968e1f25b9de9d601cf33fb1bbb9b94ab25cfed
MD5 4e534d0db1464891b7cfb066d0d94375
BLAKE2b-256 27781b8bb5f4975234488421cf80ef245d62ab4d1d9db1616a51cdfe8887224c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page