Permalink
Browse files

Refactor response.content into a property. This makes content attribu…

…te discoverable through dir(response) and also guards from errors like forgetting to raise AttributeError in __getattr__. Also you don't have to create fake self.content to fool Sphinx any more.
  • Loading branch information...
1 parent d4bdd84 commit 6a96652396515631bb72ba7c363e96c27edd769a @densh densh committed Aug 21, 2011
Showing with 22 additions and 26 deletions.
  1. +22 −26 requests/models.py
View
@@ -396,9 +396,6 @@ def __init__(self):
#: Content of the response, in bytes or unicode (if available).
self.content = None
- # Hack for Sphinx.
- del self.content
-
#: Integer Code of responded HTTP Status.
self.status_code = None
@@ -430,8 +427,6 @@ def __init__(self):
#: A dictionary of Cookies the server sent back.
self.cookies = None
- self._content = None
-
def __repr__(self):
return '<Response [%s]>' % (self.status_code)
@@ -443,33 +438,34 @@ def __nonzero__(self):
return not self.error
- def __getattr__(self, name):
- """Read and returns the full stream when accessing to
- :attr: `content`
- """
+ @property
+ def content(self):
+ """Content of the response, in bytes or unicode
+ (if available)."""
+
+ if self._content is not None:
+ return self._content
- if name == 'content':
- if self._content is not None:
- return self._content
+ # Read the contents.
+ self._content = self.fo.read()
- # Read the contents.
- self._content = self.fo.read()
+ # Decode GZip'd content.
+ if 'gzip' in self.headers.get('content-encoding', ''):
+ try:
+ self._content = decode_gzip(self._content)
+ except zlib.error:
+ pass
- # Decode GZip'd content.
- if 'gzip' in self.headers.get('content-encoding', ''):
- try:
- self._content = decode_gzip(self._content)
- except zlib.error:
- pass
+ # Decode unicode content.
+ if settings.decode_unicode:
+ self._content = get_unicode_from_response(self)
- # Decode unicode content.
- if settings.decode_unicode:
- self._content = get_unicode_from_response(self)
+ return self._content
- return self._content
- else:
- raise AttributeError
+ @content.setter
+ def content(self, value):
+ self._content = value
def raise_for_status(self):

0 comments on commit 6a96652

Please sign in to comment.