diff --git a/gluon/html.py b/gluon/html.py index 8833cc36..03941e98 100644 --- a/gluon/html.py +++ b/gluon/html.py @@ -317,7 +317,7 @@ def URL(a=None, response = current.response if response.static_version and response.static_version_urls: args = [function] + args - function = '_'+str(response.static_version) + function = '_' + str(response.static_version) if '.' in function: function, extension = function.rsplit('.', 1) @@ -330,18 +330,16 @@ def URL(a=None, if args: if url_encode: if encode_embedded_slash: - other = '/' + '/'.join([urllib.quote(str( - x), '') for x in args]) + other = '/' + '/'.join([urllib.quote(str(x), '') for x in args]) else: - other = args and urllib.quote( - '/' + '/'.join([str(x) for x in args])) + other = args and urllib.quote('/' + '/'.join([str(x) for x in args])) else: other = args and ('/' + '/'.join([str(x) for x in args])) else: other = '' if other.endswith('/'): - other += '/' # add trailing slash to make last trailing empty arg explicit + other += '/' # add trailing slash to make last trailing empty arg explicit list_vars = [] for (key, vals) in sorted(vars.items()): @@ -364,11 +362,11 @@ def URL(a=None, h_args = '/%s/%s/%s%s' % (application, controller, function2, other) # how many of the vars should we include in our hash? - if hash_vars is True: # include them all + if hash_vars is True: # include them all h_vars = list_vars - elif hash_vars is False: # include none of them + elif hash_vars is False: # include none of them h_vars = '' - else: # include just those specified + else: # include just those specified if hash_vars and not isinstance(hash_vars, (list, tuple)): hash_vars = [hash_vars] h_vars = [(k, v) for (k, v) in list_vars if k in hash_vars] diff --git a/gluon/tests/test_html.py b/gluon/tests/test_html.py index f1d32c7d..3ac41f94 100644 --- a/gluon/tests/test_html.py +++ b/gluon/tests/test_html.py @@ -98,6 +98,11 @@ class TestBareHelpers(unittest.TestCase): self.assertEqual(rtn, '/a/c/f/x/y/z?p=1&p=3&q=2&_signature=5d01b982fd72b39674b012e0288071034e156d7a') rtn = URL('a', 'c', 'f', args=['x', 'y', 'z'], vars={'p': (1, 3), 'q': 2}, hmac_key='key', hash_vars='p') self.assertEqual(rtn, '/a/c/f/x/y/z?p=1&p=3&q=2&_signature=5d01b982fd72b39674b012e0288071034e156d7a') + # test url_encode + rtn = URL('a', 'c', 'f', args=['x', 'y', 'z'], vars={'maï': (1, 3), 'lié': 2}, url_encode=False) + self.assertEqual(rtn, '/a/c/f/x/y/z?li\xc3\xa9=2&ma\xc3\xaf=1&ma\xc3\xaf=3') + rtn = URL('a', 'c', 'f', args=['x', 'y', 'z'], vars={'maï': (1, 3), 'lié': 2}, url_encode=True) + self.assertEqual(rtn, '/a/c/f/x/y/z?li%C3%A9=2&ma%C3%AF=1&ma%C3%AF=3') # test CRLF detection self.assertRaises(SyntaxError, URL, *['a\n', 'c', 'f']) self.assertRaises(SyntaxError, URL, *['a\r', 'c', 'f']) @@ -394,18 +399,12 @@ class TestBareHelpers(unittest.TestCase): self.assertEqual(HR(_a='1', _b='2').xml(), '
') def test_A(self): - self.assertEqual( - A('<>', _a='1', _b='2').xml(), - '<>' - ) - self.assertEqual( - A('a', cid='b').xml(), - 'a' - ) - self.assertEqual( - A('a', callback='b', _id='c').xml(), - 'a' - ) + self.assertEqual(A('<>', _a='1', _b='2').xml(), + '<>') + self.assertEqual(A('a', cid='b').xml(), + 'a') + self.assertEqual(A('a', callback='b', _id='c').xml(), + 'a') # Callback with no id trigger web2py_uuid() call from html import web2pyHTMLParser a = A('a', callback='b').xml() @@ -413,38 +412,22 @@ class TestBareHelpers(unittest.TestCase): uuid_generated = tag.attributes['_id'] self.assertEqual(a, 'a'.format(id=uuid_generated)) - self.assertEqual( - A('a', delete='tr').xml(), - 'a' - ) - self.assertEqual( - A('a', _id='b', target='').xml(), - 'a' - ) - self.assertEqual( - A('a', component='b').xml(), - 'a' - ) - self.assertEqual( - A('a', _id='b', callback='c', noconfirm=True).xml(), - 'a' - ) - self.assertEqual( - A('a', cid='b').xml(), - 'a' - ) - self.assertEqual( - A('a', cid='b', _disable_with='processing...').xml(), - 'a' - ) - self.assertEqual( - A('a', callback='b', delete='tr', noconfirm=True, _id='c').xml(), - 'a' - ) - self.assertEqual( - A('a', callback='b', delete='tr', confirm='Are you sure?', _id='c').xml(), - 'a' - ) + self.assertEqual(A('a', delete='tr').xml(), + 'a') + self.assertEqual(A('a', _id='b', target='').xml(), + 'a') + self.assertEqual(A('a', component='b').xml(), + 'a') + self.assertEqual(A('a', _id='b', callback='c', noconfirm=True).xml(), + 'a') + self.assertEqual(A('a', cid='b').xml(), + 'a') + self.assertEqual(A('a', cid='b', _disable_with='processing...').xml(), + 'a') + self.assertEqual(A('a', callback='b', delete='tr', noconfirm=True, _id='c').xml(), + 'a') + self.assertEqual(A('a', callback='b', delete='tr', confirm='Are you sure?', _id='c').xml(), + 'a') def test_BUTTON(self): self.assertEqual(BUTTON('test', _type='button').xml(),