diff --git a/pusher/pusher_client.py b/pusher/pusher_client.py index 1f77b61..ee13b5b 100644 --- a/pusher/pusher_client.py +++ b/pusher/pusher_client.py @@ -90,7 +90,7 @@ def trigger(self, channels, event_name, data, socket_id=None): raise ValueError("event_name too long") data = data_to_string(data, self._json_encoder) - if len(data) > 10240: + if sys.getsizeof(data) > 10240: raise ValueError("Too much data") channels = list(map(validate_channel, channels)) @@ -130,7 +130,7 @@ def trigger_batch(self, batch=[], already_encoded=False): event['data'] = data_to_string(event['data'], self._json_encoder) - if len(event['data']) > 10240: + if sys.getsizeof(event['data']) > 10240: raise ValueError("Too much data") if is_encrypted_channel(event['channel']): diff --git a/pusher_tests/test_pusher_client.py b/pusher_tests/test_pusher_client.py index 0c9c973..8c8f9d2 100644 --- a/pusher_tests/test_pusher_client.py +++ b/pusher_tests/test_pusher_client.py @@ -204,6 +204,26 @@ def test_trigger_with_private_encrypted_channel_string_fail_case_no_encryption_m with self.assertRaises(ValueError): pc.trigger(u'private-encrypted-tst', u'some_event', {u'message': u'hello worlds'}) + def test_trigger_too_much_data(self): + pc = PusherClient(app_id=u'4', key=u'key', secret=u'secret', ssl=True) + + self.assertRaises(ValueError, lambda: pc.trigger(u'private-tst', u'some_event', u'a' * 10241)) + + def test_trigger_batch_too_much_data(self): + pc = PusherClient(app_id=u'4', key=u'key', secret=u'secret', ssl=True) + + self.assertRaises(ValueError, lambda: pc.trigger_batch( + [{u'channel': u'private-tst', u'name': u'some_event', u'data': u'a' * 10241}])) + + def test_trigger_str_shorter_than_10240_but_more_than_10kb_raising(self): + pc = PusherClient(app_id=u'4', key=u'key', secret=u'secret', ssl=True) + + self.assertRaises(ValueError, lambda: pc.trigger.make_request(u'private-tst', u'some_event', u'你' * 10000)) + + def test_trigger_batch_str_shorter_than_10240_but_more_than_10kb_raising(self): + pc = PusherClient(app_id=u'4', key=u'key', secret=u'secret', ssl=True) + + self.assertRaises(ValueError, lambda: pc.trigger_batch.make_request([{u'channel': u'private-tst', u'name': u'some_event', u'data': u'你' * 10000}])) def test_trigger_with_public_channel_with_encryption_master_key_specified_success(self): json_dumped = u'{"message": "something"}'