Revision 23f0f6da

b/kamaki/clients/utils/__init__.py
90 90
    while '//' in r:
91 91
        r = r.replace('//', '/')
92 92
    return ('/%s' % r.strip('/')) if r else ''
93

  
94

  
95
def params4url(params):
96
    """{'key1':'val1', 'key2':None, 'key3':15} --> "?key1=val1&key2&key3=15"
97

  
98
    :param params: (dict) request parameters in the form key:val
99

  
100
    :returns: (str) http-request friendly in the form ?key1=val1&key2=val2&...
101
    """
102

  
103
    assert(type(params) is dict)
104
    result = ''
105
    dlmtr = '?'
106
    for name in params:
107
        result += '%s%s' % (dlmtr, name)
108
        result += '=%s' % params[name] or result
109
        dlmtr = '&'
110
    return result
b/kamaki/clients/utils/test.py
123 123
            else:
124 124
                self.assert_dicts_are_equal(r, dict())
125 125

  
126
    def test_path4url(self):
127
        utf = u'\u03a6\u03bf\u03cd\u03c4\u03c3\u03bf\u03c2'.encode('utf-8')
128
        for expected, args in (
129
                ('', ('')),
130
                ('/path1/path2', ('path1', 'path2')),
131
                ('/1/number/0.28', (1, 'number', 0.28)),
132
                ('/1/n/u/m/b/er/X', ('//1//', '//n//u///m////b/er/', 'X//')),
133
                ('/p1/%s/p2' % utf.decode('utf-8'), ('p1', utf, 'p2'))):
134
            self.assertEqual(utils.path4url(*args), expected)
135

  
126 136

  
127 137
if __name__ == '__main__':
128 138
    from sys import argv

Also available in: Unified diff