Resolves the parts of #1096 in requests proper.
authorMatt McClure <matt.mcclure@mapmyfitness.com>
Fri, 11 Jan 2013 20:04:47 +0000 (15:04 -0500)
committerMatt McClure <matt.mcclure@mapmyfitness.com>
Fri, 11 Jan 2013 20:04:47 +0000 (15:04 -0500)
requests/models.py

index 5202e6f..b7d52cd 100644 (file)
@@ -375,13 +375,7 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin):
                     else:
                         content_type = 'application/x-www-form-urlencoded'
 
-            self.headers['Content-Length'] = '0'
-            if hasattr(body, 'seek') and hasattr(body, 'tell'):
-                body.seek(0, 2)
-                self.headers['Content-Length'] = str(body.tell())
-                body.seek(0, 0)
-            elif body is not None:
-                self.headers['Content-Length'] = str(len(body))
+            self.prepare_content_length(body)
 
             # Add content-type if it wasn't explicitly provided.
             if (content_type) and (not 'content-type' in self.headers):
@@ -389,6 +383,15 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin):
 
         self.body = body
 
+    def prepare_content_length(self, body):
+        self.headers['Content-Length'] = '0'
+        if hasattr(body, 'seek') and hasattr(body, 'tell'):
+            body.seek(0, 2)
+            self.headers['Content-Length'] = str(body.tell())
+            body.seek(0, 0)
+        elif body is not None:
+            self.headers['Content-Length'] = str(len(body))
+
     def prepare_auth(self, auth):
         """Prepares the given HTTP auth data."""
         if auth:
@@ -402,6 +405,9 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin):
             # Update self to reflect the auth changes.
             self.__dict__.update(r.__dict__)
 
+            # Recompute Content-Length
+            self.prepare_content_length(self.body)
+
     def prepare_cookies(self, cookies):
         """Prepares the given HTTP cookie data."""