diff options
author | Arthur Darcet <arthur.darcet@m4x.org> | 2014-12-12 16:11:32 +0100 |
---|---|---|
committer | Arthur Darcet <arthur.darcet@m4x.org> | 2014-12-12 17:32:43 +0100 |
commit | e8d02ea0bbc05042e618a7ca115f4fca7b2deeb9 (patch) | |
tree | 44a1224b7f2ffcb47c71b4df4f499b98c1b5ac1c | |
parent | e23bf10cf4ecc62f6c3dd6284043516fb833d9ce (diff) | |
download | python-requests-e8d02ea0bbc05042e618a7ca115f4fca7b2deeb9.tar.gz |
utils.guess_filename fails if the given parameter looks like a file object but has a non-string name attribute
e.g. a cherrypy uploaded file behave like a regular file, except that its name attribute is an int and passing it directly to requests fails because of that
-rw-r--r-- | AUTHORS.rst | 1 | ||||
-rw-r--r-- | requests/utils.py | 2 | ||||
-rwxr-xr-x | test_requests.py | 8 |
3 files changed, 10 insertions, 1 deletions
diff --git a/AUTHORS.rst b/AUTHORS.rst index 71171d08..3f2a4d30 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -158,3 +158,4 @@ Patches and Suggestions - Joe Alcorn (`@buttscicles <https://github.com/buttscicles>`_) - Syed Suhail Ahmed <ssuhail.ahmed93@gmail.com> (`@syedsuhail <https://github.com/syedsuhail>`_) - Scott Sadler (`@ssadler <https://github.com/ssadler>`_) +- Arthur Darcet (`@arthurdarcet <https://github.com/arthurdarcet>`_) diff --git a/requests/utils.py b/requests/utils.py index aa5c140e..74679414 100644 --- a/requests/utils.py +++ b/requests/utils.py @@ -115,7 +115,7 @@ def get_netrc_auth(url): 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] != '>': + if name and isinstance(name, builtin_str) and name[0] != '<' and name[-1] != '>': return os.path.basename(name) diff --git a/test_requests.py b/test_requests.py index 2d3ee628..68ee08c5 100755 --- a/test_requests.py +++ b/test_requests.py @@ -928,6 +928,14 @@ class RequestsTestCase(unittest.TestCase): assert 'multipart/form-data' in p.headers['Content-Type'] + def test_can_send_file_object_with_non_string_filename(self): + f = io.BytesIO() + f.name = 2 + r = requests.Request('POST', httpbin('post'), files={'f': f}) + p = r.prepare() + + assert 'multipart/form-data' in p.headers['Content-Type'] + def test_autoset_header_values_are_native(self): data = 'this is a string' length = '16' |