提交 de896fa6 编写于 作者: P Pablo Hoffman

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

上级 2ed8a5bf
...@@ -96,20 +96,12 @@ class Request(object_ref): ...@@ -96,20 +96,12 @@ class Request(object_ref):
"""Return a copy of this Request""" """Return a copy of this Request"""
return self.replace() return self.replace()
def replace(self, url=None, callback=None, method=None, headers=None, body=None, \ def replace(self, *args, **kwargs):
cookies=None, meta=None, encoding=None, priority=None, \
dont_filter=None, errback=None):
"""Create a new Request with the same attributes except for those """Create a new Request with the same attributes except for those
given new values. given new values.
""" """
return self.__class__(url=self.url if url is None else url, for x in ['url', 'method', 'headers', 'body', 'cookies', 'meta', \
callback=callback, 'encoding', 'priority', 'dont_filter']:
method=self.method if method is None else method, kwargs.setdefault(x, getattr(self, x))
headers=copy.deepcopy(self.headers) if headers is None else headers, cls = kwargs.pop('cls', self.__class__)
body=self.body if body is None else body, return cls(*args, **kwargs)
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)
...@@ -71,18 +71,11 @@ class Response(object_ref): ...@@ -71,18 +71,11 @@ class Response(object_ref):
"""Return a copy of this Response""" """Return a copy of this Response"""
return self.replace() return self.replace()
def replace(self, url=None, status=None, headers=None, body=None, meta=None, \ def replace(self, *args, **kwargs):
flags=None, cls=None, **kwargs):
"""Create a new Response with the same attributes except for those """Create a new Response with the same attributes except for those
given new values. given new values.
""" """
if cls is None: for x in ['url', 'status', 'headers', 'body', 'meta', 'flags']:
cls = self.__class__ kwargs.setdefault(x, getattr(self, x))
new = cls(url=self.url if url is None else url, cls = kwargs.pop('cls', self.__class__)
status=self.status if status is None else status, return cls(*args, **kwargs)
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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册