Skip to content

Commit f77e794

Browse files
jdufresnecarltongibson
authored andcommitted
Fix all BytesWarning caught during tests (#5561)
Running the tests with bytes warning enabled shows some bytes/str mixups. Fix them all. Some examples of mixing usage: str(b'foo') -- calling str() on bytes b'foo' == 'foo' -- compare str with bytes 'foo' + b'bar' -- concatenating str and bytes
1 parent 331c313 commit f77e794

File tree

4 files changed

+7
-9
lines changed

4 files changed

+7
-9
lines changed

rest_framework/renderers.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,8 @@ def get_raw_data_form(self, data, view, method, request):
567567
if isinstance(field, serializers.HiddenField):
568568
data.pop(name, None)
569569
content = renderer.render(data, accepted, context)
570+
# Renders returns bytes, but CharField expects a str.
571+
content = content.decode('utf-8')
570572
else:
571573
content = None
572574

rest_framework/utils/mediatypes.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,5 +83,5 @@ def precedence(self):
8383
def __str__(self):
8484
ret = "%s/%s" % (self.main_type, self.sub_type)
8585
for key, val in self.params.items():
86-
ret += "; %s=%s" % (key, val)
86+
ret += "; %s=%s" % (key, val.decode('ascii'))
8787
return ret

tests/test_negotiation.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,7 @@ def test_mediatype_precedence_with_wildcard_subtype(self):
7777

7878
def test_mediatype_string_representation(self):
7979
mediatype = _MediaType('test/*; foo=bar')
80-
params_str = ''
81-
for key, val in mediatype.params.items():
82-
params_str += '; %s=%s' % (key, val)
83-
expected = 'test/*' + params_str
84-
assert str(mediatype) == expected
80+
assert str(mediatype) == 'test/*; foo=bar'
8581

8682
def test_raise_error_if_no_suitable_renderers_found(self):
8783
class MockRenderer(object):

tests/test_renderers.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -676,7 +676,7 @@ def get(self, request):
676676
request = factory.get('/')
677677
response = view(request)
678678
response.render()
679-
self.assertInHTML('<tr><th>Foo</th><td>a string</td></tr>', str(response.content))
679+
self.assertContains(response, '<tr><th>Foo</th><td>a string</td></tr>', html=True)
680680

681681
def test_render_dict_with_items_key(self):
682682
factory = APIRequestFactory()
@@ -691,7 +691,7 @@ def get(self, request):
691691
request = factory.get('/')
692692
response = view(request)
693693
response.render()
694-
self.assertInHTML('<tr><th>Items</th><td>a string</td></tr>', str(response.content))
694+
self.assertContains(response, '<tr><th>Items</th><td>a string</td></tr>', html=True)
695695

696696
def test_render_dict_with_iteritems_key(self):
697697
factory = APIRequestFactory()
@@ -706,7 +706,7 @@ def get(self, request):
706706
request = factory.get('/')
707707
response = view(request)
708708
response.render()
709-
self.assertInHTML('<tr><th>Iteritems</th><td>a string</td></tr>', str(response.content))
709+
self.assertContains(response, '<tr><th>Iteritems</th><td>a string</td></tr>', html=True)
710710

711711

712712
class TestDocumentationRenderer(TestCase):

0 commit comments

Comments
 (0)