30 lines
872 B
Python
30 lines
872 B
Python
import logging
|
|
import re
|
|
|
|
|
|
_logger = logging.getLogger('utils:{0}'.format(__name__))
|
|
|
|
|
|
_uri_re = re.compile((r'^(?P<scheme>[\w]+)://'
|
|
r'(?:(?P<user>[^:@]+)(?::(?P<password>[^@]+)?)?@)?'
|
|
r'(?P<base>[^/:]+)?'
|
|
r'(?::(?P<port>[0-9]+))?'
|
|
r'(?P<path>/.*)$'),
|
|
re.IGNORECASE)
|
|
|
|
|
|
class URI(object):
|
|
def __init__(self, uri):
|
|
self.orig_uri = uri
|
|
r = _uri_re.search(self.orig_uri)
|
|
if not r:
|
|
raise ValueError('Not a valid URI')
|
|
for k, v in dict(zip(list(_uri_re.groupindex.keys()), r.groups())).items():
|
|
setattr(self, k, v)
|
|
if self.port:
|
|
self.port = int(self.port)
|
|
for a in ('base', 'scheme'):
|
|
v = getattr(self, a)
|
|
if v:
|
|
setattr(self, a, v.lower())
|