Revision 6ad9e577

b/kamaki/clients/__init__.py
210 210
        self.request = request
211 211
        self._request_performed = False
212 212
        self.poolsize = poolsize
213
        self._headers_to_decode, self._header_prefices = [], []
214

  
215
    def _get_headers_to_decode(self, headers):
216
        keys = set([k.lower() for k, v in headers])
217
        encodable = list(keys.intersection(self.headers_to_decode))
218

  
219
        def has_prefix(s):
220
            for k in self.header_prefices:
221
                if s.startswith(k):
222
                    return True
223
            return False
224
        return encodable + filter(has_prefix, keys.difference(encodable))
213 225

  
214 226
    def _get_response(self):
215 227
        if self._request_performed:
......
237 249
                        '%d %s%s' % (
238 250
                            self.status_code, self.status, plog))
239 251
                    self._headers = dict()
240
                    for k, v in r.getheaders():
252

  
253
                    r_headers = r.getheaders()
254
                    enc_headers = self._get_headers_to_decode(r_headers)
255
                    for k, v in r_headers:
241 256
                        if k.lower in ('x-auth-token', ) and (
242 257
                                not self.LOG_TOKEN):
243 258
                            self._token, v = v, '...'
244
                        v = unquote(v).decode('utf-8')
259
                        elif k.lower() in enc_headers:
260
                            v = unquote(v).decode('utf-8')
245 261
                        self._headers[k] = v
246 262
                        recvlog.info('  %s: %s%s' % (k, v, plog))
247 263
                    self._content = r.read()
......
298 314
        return '%s' % self._content
299 315

  
300 316
    @property
317
    def headers_to_decode(self):
318
        return self._headers_to_decode
319

  
320
    @headers_to_decode.setter
321
    def headers_to_decode(self, header_keys):
322
        self._headers_to_decode += [k.lower() for k in header_keys]
323
        self._headers_to_decode = list(set(self._headers_to_decode))
324

  
325
    @property
326
    def header_prefices(self):
327
        return self._header_prefices
328

  
329
    @header_prefices.setter
330
    def header_prefices(self, header_key_prefices):
331
        self._header_prefices += [p.lower() for p in header_key_prefices]
332
        self._header_prefices = list(set(self._header_prefices))
333

  
334
    @property
301 335
    def json(self):
302 336
        """
303 337
        :returns: (dict) squeezed from json-formated content

Also available in: Unified diff