Browse Source

Correctly handle payloads that are empty lists or dictionaries (fixes #5)

pull/8/head
Miguel Grinberg 10 years ago
parent
commit
a72f2dfb05
  1. 5
      socketio/packet.py
  2. 15
      tests/test_packet.py

5
socketio/packet.py

@ -146,10 +146,11 @@ class Packet(object):
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
tests/test_packet.py

@ -172,3 +172,18 @@ class TestPacket(unittest.TestCase):
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'}))

Loading…
Cancel
Save