From 0086f97b6553ac323565e8653eae678e380219ae Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Sun, 13 Nov 2011 00:36:22 -0500 Subject: [PATCH] Guess filename. Closes #192 --- requests/models.py | 5 +++-- requests/utils.py | 6 ++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/requests/models.py b/requests/models.py index e70d9db8..79a15fc2 100644 --- a/requests/models.py +++ b/requests/models.py @@ -28,7 +28,7 @@ from .exceptions import ( Timeout, URLRequired, TooManyRedirects, HTTPError, ConnectionError) from .utils import ( get_unicode_from_response, stream_decode_response_unicode, - decode_gzip, stream_decode_gzip) + decode_gzip, stream_decode_gzip, guess_filename) @@ -346,7 +346,8 @@ class Request(object): fields = dict(self.data) for (k, v) in self.files.items(): - fields.update({k: (k, v.read())}) + fields.update({k: (guess_filename(k) or k, v.read())}) + (body, content_type) = encode_multipart_formdata(fields) else: pass diff --git a/requests/utils.py b/requests/utils.py index bd7dead4..0249e9d6 100644 --- a/requests/utils.py +++ b/requests/utils.py @@ -20,6 +20,12 @@ import zlib from urllib2 import parse_http_list as _parse_list_header +def guess_filename(obj): + """Tries to guess the filename of the given object.""" + name = getattr(obj, 'name', None) + if name and name[0] != '<' and name[-1] != '>': + return name + # From mitsuhiko/werkzeug (used with permission). def parse_list_header(value): """Parse lists as described by RFC 2068 Section 2.