refactors and more tests, all tests passing
changed miniuri.py changed test_miniuri.py
This commit is contained in:
parent
b2e669d4dc
commit
0843cc1f2b
2 changed files with 56 additions and 16 deletions
43
miniuri.py
43
miniuri.py
|
|
@ -23,8 +23,7 @@ class Uri( object ):
|
||||||
"""build and return uri from attributes"""
|
"""build and return uri from attributes"""
|
||||||
scheme = path = filename = query = fragment = ''
|
scheme = path = filename = query = fragment = ''
|
||||||
if self.scheme: scheme = self.scheme + '://'
|
if self.scheme: scheme = self.scheme + '://'
|
||||||
if self.path: path = '/'.join(self.path.split('/')[:-1])
|
if self.path: path = self.path
|
||||||
if self.filename: filename = '/' + self.filename
|
|
||||||
if self.query: query = '?' + self.query
|
if self.query: query = '?' + self.query
|
||||||
if self.fragment: fragment = '#' + self.fragment
|
if self.fragment: fragment = '#' + self.fragment
|
||||||
return ''.join([scheme,self.authority,path,filename,query,fragment])
|
return ''.join([scheme,self.authority,path,filename,query,fragment])
|
||||||
|
|
@ -34,7 +33,7 @@ class Uri( object ):
|
||||||
"""parse and set all uri attributes"""
|
"""parse and set all uri attributes"""
|
||||||
self.scheme = self.username = self.password = None
|
self.scheme = self.username = self.password = None
|
||||||
self.hostname = self.port = self.path = None
|
self.hostname = self.port = self.path = None
|
||||||
self.filename = self.query = self.fragment = None
|
self.filename = self.extension = self.query = self.fragment = None
|
||||||
|
|
||||||
if '://' in uri: # attempt to parse scheme
|
if '://' in uri: # attempt to parse scheme
|
||||||
self.scheme, uri = uri.split( '://' )
|
self.scheme, uri = uri.split( '://' )
|
||||||
|
|
@ -47,11 +46,10 @@ class Uri( object ):
|
||||||
if '#' in uri: # set fragment
|
if '#' in uri: # set fragment
|
||||||
uri, self.fragment = uri.split( '#' )
|
uri, self.fragment = uri.split( '#' )
|
||||||
|
|
||||||
if '?' in uri: # set path and possibly query
|
if '?' in uri:
|
||||||
self.path, self.query = uri.split( '?' )
|
self.path, self.query = uri.split( '?' )
|
||||||
else: self.path = uri
|
else:
|
||||||
|
self.path = uri
|
||||||
self.filename = self.path.split( '/' )[-1]
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def authority( self ):
|
def authority( self ):
|
||||||
|
|
@ -91,8 +89,33 @@ class Uri( object ):
|
||||||
self.username, self.password = info.split( ':' )
|
self.username, self.password = info.split( ':' )
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def extension(self):
|
def path(self):
|
||||||
"""return filename extension"""
|
"""return path"""
|
||||||
return self.filename.split('.')[-1] if '.' in self.filename else None
|
p = self._path if self._path is not None else ''
|
||||||
|
f = self.filename if self.filename is not None else ''
|
||||||
|
return p + f
|
||||||
|
|
||||||
|
@path.setter
|
||||||
|
def path(self, new_path):
|
||||||
|
if new_path:
|
||||||
|
self.filename = new_path.split('/')[-1]
|
||||||
|
self._path = new_path.rstrip(self.filename)
|
||||||
|
else:
|
||||||
|
self._path = None
|
||||||
|
self._filename = None
|
||||||
|
self._extension = None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def filename(self):
|
||||||
|
"""return filename"""
|
||||||
|
if self._filename:
|
||||||
|
if self.extension:
|
||||||
|
return self._filename + '.' + self.extension
|
||||||
|
return self._filename
|
||||||
|
|
||||||
|
@filename.setter
|
||||||
|
def filename(self, new_filename):
|
||||||
|
if new_filename:
|
||||||
|
self.extension = new_filename.split('.')[-1] if '.' in new_filename else None
|
||||||
|
self._filename = new_filename.split('.')[0]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,8 +47,26 @@ class TestMiniUri(TestCase):
|
||||||
def test_fragment(self):
|
def test_fragment(self):
|
||||||
self.assertEqual(self.u.fragment, '5')
|
self.assertEqual(self.u.fragment, '5')
|
||||||
|
|
||||||
# test_change_
|
# test edge case URIs
|
||||||
# https://fox:pass@www.foxhop.net:81/path/filename.jpg?p=2#5
|
|
||||||
|
def test_uri_no_path(self):
|
||||||
|
self.u = Uri('https://fox:pass@www.foxhop.net:81?p=2#5')
|
||||||
|
self.assertEqual(self.u.path, '')
|
||||||
|
self.assertEqual(self.u.uri, 'https://fox:pass@www.foxhop.net:81?p=2#5')
|
||||||
|
|
||||||
|
def test_uri_filename_only_path(self):
|
||||||
|
self.u = Uri('https://fox:pass@www.foxhop.net:81/filename.jpg?p=2#5')
|
||||||
|
self.assertEqual(self.u.path, '/filename.jpg')
|
||||||
|
self.assertEqual(self.u.filename, 'filename.jpg')
|
||||||
|
self.assertEqual(self.u.extension, 'jpg')
|
||||||
|
self.assertEqual(self.u.uri, 'https://fox:pass@www.foxhop.net:81/filename.jpg?p=2#5')
|
||||||
|
|
||||||
|
def test_uri_trailing_slash_only_path(self):
|
||||||
|
self.u = Uri('https://fox:pass@www.foxhop.net:81/?p=2#5')
|
||||||
|
self.assertEqual(self.u.path, '/')
|
||||||
|
self.assertEqual(self.u.uri, 'https://fox:pass@www.foxhop.net:81/?p=2#5')
|
||||||
|
|
||||||
|
# test_change_attributes:
|
||||||
|
|
||||||
def test_change_uri(self):
|
def test_change_uri(self):
|
||||||
self.u.uri = 'http://zell:sapp@wwws.foxhop.net:82/my/file.png?p=3#6'
|
self.u.uri = 'http://zell:sapp@wwws.foxhop.net:82/my/file.png?p=3#6'
|
||||||
|
|
@ -93,23 +111,22 @@ class TestMiniUri(TestCase):
|
||||||
self.assertEqual(self.u.uri, 'https://fox:pass@www.foxhop.net:82/path/filename.jpg?p=2#5')
|
self.assertEqual(self.u.uri, 'https://fox:pass@www.foxhop.net:82/path/filename.jpg?p=2#5')
|
||||||
|
|
||||||
def test_change_path(self):
|
def test_change_path(self):
|
||||||
# TODO: filename and extension not updated
|
|
||||||
self.u.path = '/my/file.png'
|
self.u.path = '/my/file.png'
|
||||||
self.assertEqual(self.u.path, '/my/file.png')
|
self.assertEqual(self.u.path, '/my/file.png')
|
||||||
self.assertEqual(self.u.filename, 'file.png')
|
self.assertEqual(self.u.filename, 'file.png')
|
||||||
self.assertEqual(self.u.extension, 'png')
|
self.assertEqual(self.u.extension, 'png')
|
||||||
self.assertEqual(self.u.uri, 'https://fox:pass@www.foxhop.net:82/my/file.png?p=2#5')
|
self.assertEqual(self.u.uri, 'https://fox:pass@www.foxhop.net:81/my/file.png?p=2#5')
|
||||||
|
|
||||||
def test_change_filename(self):
|
def test_change_filename(self):
|
||||||
self.u.filename = 'file.png'
|
self.u.filename = 'file.png'
|
||||||
self.assertEqual(self.u.filename, 'file.png')
|
self.assertEqual(self.u.filename, 'file.png')
|
||||||
|
self.assertEqual(self.u.extension, 'png')
|
||||||
self.assertEqual(self.u.uri, 'https://fox:pass@www.foxhop.net:81/path/file.png?p=2#5')
|
self.assertEqual(self.u.uri, 'https://fox:pass@www.foxhop.net:81/path/file.png?p=2#5')
|
||||||
|
|
||||||
def test_change_extension(self):
|
def test_change_extension(self):
|
||||||
# TODO: attribute error
|
|
||||||
self.u.extension = 'png'
|
self.u.extension = 'png'
|
||||||
self.assertEqual(self.u.extension, 'png')
|
|
||||||
self.assertEqual(self.u.filename, 'filename.png')
|
self.assertEqual(self.u.filename, 'filename.png')
|
||||||
|
self.assertEqual(self.u.extension, 'png')
|
||||||
self.assertEqual(self.u.uri, 'https://fox:pass@www.foxhop.net:81/path/filename.png?p=2#5')
|
self.assertEqual(self.u.uri, 'https://fox:pass@www.foxhop.net:81/path/filename.png?p=2#5')
|
||||||
|
|
||||||
def test_change_query(self):
|
def test_change_query(self):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue