Skip to content

andrewjsledge/purl

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

purl - A simple Python URL class

A simple, immutable URL class with a clean API for interrogation and manipulation.

image

Install

From PyPI (stable):

pip install purl

From Github (unstable):

pip install git+git://github.com/codeinthehole/purl.git#egg=purl

Use

Construct:

from purl import URL

# Explicit constructor
u = URL(scheme='https', host='www.google.com', path='/search', query='q=testing')

# Use factory
u = URL.from_string('https://www.google.com/search?q=testing')

# Combine
u = URL.from_string('http://www.google.com').path('search') \
                                            .query_param('q', 'testing')

URL objects are immutable - all mutator methods return a new instance.

Interrogate:

u.scheme()      # 'https'
u.host()        # 'www.google.com' 
u.domain()      # 'www.google.com' - alias of host
u.port()        # None - only returns value if explicitly set
u.path()        # '/search'
u.query()       # 'q=testing'
u.fragment()    # 'q=testing'

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.subdmains()   # ['www', 'google', 'com']
u.subdmain(0)   # 'www'

Note that each accessor method is overloaded to be a mutator method too, similar to the jQuery API. Eg:

u = URL.from_string('https://github.com/codeinthehole')

# Access
u.path_segment(0) # returns 'codeinthehole'

# Mutate (creates a new instance)
new_url = u.path_segment(0, 'tangentlabs') # returns new URL object

Contribute

Clone and install testing dependencies:

pip install -r requirements.txt

Ensure tests pass:

nosetests

Hack away

About

A Python URL class for easy URL-building and manipulation

Resources

Stars

Watchers

Forks

Packages

No packages published