Refactored implementation of Request.replace() and Response.replace()

This commit is contained in:
Pablo Hoffman 2010-03-31 16:29:53 -03:00
parent 2ed8a5bfb5
commit de896fa62d
2 changed files with 11 additions and 26 deletions

View File

@ -96,20 +96,12 @@ class Request(object_ref):
"""Return a copy of this Request"""
return self.replace()
def replace(self, url=None, callback=None, method=None, headers=None, body=None, \
cookies=None, meta=None, encoding=None, priority=None, \
dont_filter=None, errback=None):
def replace(self, *args, **kwargs):
"""Create a new Request with the same attributes except for those
given new values.
"""
return self.__class__(url=self.url if url is None else url,
callback=callback,
method=self.method if method is None else method,
headers=copy.deepcopy(self.headers) if headers is None else headers,
body=self.body if body is None else body,
cookies=self.cookies if cookies is None else cookies,
meta=self.meta if meta is None else meta,
encoding=self.encoding if encoding is None else encoding,
priority=self.priority if priority is None else priority,
dont_filter=self.dont_filter if dont_filter is None else dont_filter,
errback=errback)
for x in ['url', 'method', 'headers', 'body', 'cookies', 'meta', \
'encoding', 'priority', 'dont_filter']:
kwargs.setdefault(x, getattr(self, x))
cls = kwargs.pop('cls', self.__class__)
return cls(*args, **kwargs)

View File

@ -71,18 +71,11 @@ class Response(object_ref):
"""Return a copy of this Response"""
return self.replace()
def replace(self, url=None, status=None, headers=None, body=None, meta=None, \
flags=None, cls=None, **kwargs):
def replace(self, *args, **kwargs):
"""Create a new Response with the same attributes except for those
given new values.
"""
if cls is None:
cls = self.__class__
new = cls(url=self.url if url is None else url,
status=self.status if status is None else status,
headers=copy.deepcopy(self.headers) if headers is None else headers,
body=self.body if body is None else body,
meta=self.meta if meta is None else meta,
flags=self.flags if flags is None else flags,
**kwargs)
return new
for x in ['url', 'status', 'headers', 'body', 'meta', 'flags']:
kwargs.setdefault(x, getattr(self, x))
cls = kwargs.pop('cls', self.__class__)
return cls(*args, **kwargs)