# HG changeset patch -- Bitbucket.org # Project django-roa # URL http://bitbucket.org/david/django-roa/overview # User David Larlet # Date 1253004469 -7200 # Node ID 7f0bf6ff404a039a701c9ca8d87500315e5c9c95 # Parent 7e9e0615c76f07f33d42996807cf58c318ed84e2 Update restkit to the latest tip to deal with a bug in headers' handling --- a/restkit/rest.py +++ b/restkit/rest.py @@ -228,10 +228,9 @@ class Resource(object): :param _stream_size: int, size in bytes of response stream block :param params: Optionnal parameterss added to the request """ - _headers = self._headers or {} - _headers.update(headers or {}) + return self.client.request(method, self.uri, path=path, - body=payload, headers=_headers, _stream=_stream, + body=payload, headers=headers, _stream=_stream, _stream_size=_stream_size, **params) def get_response(self): @@ -400,7 +399,12 @@ class RestClient(object): """ # init headers - _headers = self._headers or {} + + if self._headers is not None: + _headers = self._headers.copy() + else: + _headers = {} + _headers.update(headers or {}) self._body_parts = [] @@ -416,7 +420,7 @@ class RestClient(object): body = to_bytestring(body) size = len(body) elif isinstance(body, dict): - content_type = headers.get('Content-Type') + content_type = _headers.get('Content-Type') if content_type is not None and content_type.startswith("multipart/form-data"): type_, opts = cgi.parse_header(content_type) boundary = opts.get('boundary', uuid.uuid4().hex) @@ -426,8 +430,8 @@ class RestClient(object): body = form_encode(body) size = len(body) elif isinstance(body, MultipartForm): - headers['Content-Type'] = "multipart/form-data; boundary=%s" % body.boundary - headers['Content-Length'] = str(body.get_size()) + _headers['Content-Type'] = "multipart/form-data; boundary=%s" % body.boundary + _headers['Content-Length'] = str(body.get_size()) if 'Content-Length' not in _headers and size is not None: _headers['Content-Length'] = size @@ -436,7 +440,7 @@ class RestClient(object): 'the length of the data parameter. Specify a value for ' 'Content-Length') - if 'Content-Type' not in headers: + if 'Content-Type' not in _headers: type_ = None if hasattr(body, 'name'): type_ = mimetypes.guess_type(body.name)[0] --- a/restkit/pool.py +++ b/restkit/pool.py @@ -186,7 +186,7 @@ class Pool(object): def waiting(self): """Return the number of routines waiting for a pool item. """ - return self.channel.qsize() <= self.max_size + return self.max_size - self.channel.qsize() def create(self): """Generate a new pool item --- a/restkit/ext/eventlet_pool.py +++ b/restkit/ext/eventlet_pool.py @@ -20,6 +20,7 @@ from eventlet.green import socket from eventlet.green import httplib from eventlet.pools import Pool from eventlet.util import wrap_socket_with_coroutine_socket + wrap_socket_with_coroutine_socket() def make_proxy_connection(uri):