Revision c3e41146 kamaki/clients/__init__.py

b/kamaki/clients/__init__.py
123 123
            url += _encode(path[1:] if path.startswith('/') else path)
124 124
        delim = '?'
125 125
        for key, val in params.items():
126
            val = quote('' if val in (None, False) else '%s' % val)
126
            val = quote('' if val in (None, False) else '%s' % _encode(val))
127 127
            url += '%s%s%s' % (delim, key, ('=%s' % val) if val else '')
128 128
            delim = '&'
129 129
        parsed = urlparse(url)
130 130
        self.url = _encode(u'%s' % url)
131 131
        self.path = _encode((u'%s' % parsed.path) if parsed.path else '/')
132 132
        if parsed.query:
133
            self.path += _encode(u'?%s' % parsed.query)
133
            self.path += '?%s' % parsed.query
134 134
        return (_encode(parsed.scheme), _encode(parsed.netloc))
135 135

  
136 136
    def __init__(
......
162 162
            sendlog.info('data size: 0%s' % plog)
163 163

  
164 164
    def _encode_headers(self):
165
        headers = self.headers
165
        headers = dict(self.headers)
166 166
        for k, v in self.headers.items():
167
            headers[k] = quote(v)
167
            headers[k] = quote(
168
                v.encode('utf-8') if isinstance(v, unicode) else v)
168 169
        self.headers = headers
169 170

  
170 171
    def perform(self, conn):

Also available in: Unified diff