Refactor response.content into a property. This makes content attribute discoverable...
authorDen Shabalin <den.shabalin@gmail.com>
Sun, 21 Aug 2011 08:57:03 +0000 (11:57 +0300)
committerDen Shabalin <den.shabalin@gmail.com>
Sun, 21 Aug 2011 08:57:03 +0000 (11:57 +0300)
requests/models.py

index 4121481..03b853c 100644 (file)
@@ -396,9 +396,6 @@ class Response(object):
         #: 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 @@ class Response(object):
         #: 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 @@ class Response(object):
         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):