diff --git a/requests_toolbelt/multipart/encoder.py b/requests_toolbelt/multipart/encoder.py index 2d539617..c2a28389 100644 --- a/requests_toolbelt/multipart/encoder.py +++ b/requests_toolbelt/multipart/encoder.py @@ -127,6 +127,12 @@ def __init__(self, fields, boundary=None, encoding='utf-8'): # Load boundary into buffer self._write_boundary() + def __eq__(self, other) -> bool: + if isinstance(other, bytes): + return self.to_string() == other + else: + super().__eq__(other) + @property def len(self): """Length of the multipart/form-data body. @@ -227,6 +233,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 f864487c..27884f06 100644 --- a/tests/test_multipart_encoder.py +++ b/tests/test_multipart_encoder.py @@ -1,15 +1,18 @@ # -*- coding: utf-8 -*- -import unittest import io +import unittest import requests -import pytest -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} @@ -273,6 +276,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.