Skip to content

Commit

Permalink
Correctly handle payloads that are empty lists or dictionaries (fixes #5
Browse files Browse the repository at this point in the history
)
  • Loading branch information
miguelgrinberg committed Nov 22, 2015
1 parent 3cb904c commit a72f2df
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
5 changes: 3 additions & 2 deletions socketio/packet.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,10 +146,11 @@ def _data_is_binary(self, data):
elif isinstance(data, list):
return functools.reduce(
lambda a, b: a or b, [self._data_is_binary(item)
for item in data])
for item in data], False)
elif isinstance(data, dict):
return functools.reduce(
lambda a, b: a or b, [self._data_is_binary(item)
for item in six.itervalues(data)])
for item in six.itervalues(data)],
False)
else:
return False
15 changes: 15 additions & 0 deletions tests/test_packet.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,3 +172,18 @@ def test_decode_many_binary_ack(self):
self.assertEqual(pkt.data['a'], '123')
self.assertEqual(pkt.data['b'], b'456')
self.assertEqual(pkt.data['c'], [b'789', 123])

def test_data_is_binary_list(self):
pkt = packet.Packet()
self.assertFalse(pkt._data_is_binary([six.text_type('foo')]))
self.assertFalse(pkt._data_is_binary([]))
self.assertTrue(pkt._data_is_binary([b'foo']))
self.assertTrue(pkt._data_is_binary([six.text_type('foo'), b'bar']))

def test_data_is_binary_dict(self):
pkt = packet.Packet()
self.assertFalse(pkt._data_is_binary({'a': six.text_type('foo')}))
self.assertFalse(pkt._data_is_binary({}))
self.assertTrue(pkt._data_is_binary({'a': b'foo'}))
self.assertTrue(pkt._data_is_binary({'a': six.text_type('foo'),
'b': b'bar'}))

0 comments on commit a72f2df

Please sign in to comment.