From f8d7dfec4c7e15e6acebcaf7c7019042d8de33be Mon Sep 17 00:00:00 2001 From: Ruben DI BATTISTA Date: Mon, 24 Jan 2022 01:33:57 +0100 Subject: [PATCH] Strip empty fields in MultipartEncoder This is coherent with what's done in requests --- requests_toolbelt/multipart/encoder.py | 2 ++ tests/test_multipart_encoder.py | 25 ++++++++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/requests_toolbelt/multipart/encoder.py b/requests_toolbelt/multipart/encoder.py index 2d539617..a05585f6 100644 --- a/requests_toolbelt/multipart/encoder.py +++ b/requests_toolbelt/multipart/encoder.py @@ -227,6 +227,8 @@ def _iter_fields(self): file_name, file_pointer, file_type = v else: file_name, file_pointer, file_type, file_headers = v + elif v is None: + continue else: file_pointer = v diff --git a/tests/test_multipart_encoder.py b/tests/test_multipart_encoder.py index 575f54c4..c8351e23 100644 --- a/tests/test_multipart_encoder.py +++ b/tests/test_multipart_encoder.py @@ -1,14 +1,17 @@ # -*- coding: utf-8 -*- -import unittest import io +import unittest import requests - -from requests_toolbelt.multipart.encoder import ( - CustomBytesIO, MultipartEncoder, FileFromURLWrapper, FileNotSupportedError) from requests_toolbelt._compat import filepost -from . import get_betamax +from requests_toolbelt.multipart.encoder import ( + CustomBytesIO, + FileFromURLWrapper, + FileNotSupportedError, + MultipartEncoder, +) +from . import get_betamax preserve_bytes = {'preserve_exact_body_bytes': True} @@ -272,6 +275,18 @@ def test_regression_2(self): assert read_so_far == total_size + def test_empty_files_key(self): + """Ensure empty `fields` keys are stripped from the request""" + + fields = { + "test": "this is a test", + "empty": None + } + + m = MultipartEncoder(fields=fields) + + assert len(m.parts) == 1 + def test_handles_empty_unicode_values(self): """Verify that the Encoder can handle empty unicode strings.