diff --git a/src/socketio/base_client.py b/src/socketio/base_client.py index 0232dca..2bcaafc 100644 --- a/src/socketio/base_client.py +++ b/src/socketio/base_client.py @@ -38,7 +38,8 @@ class BaseClient: def __init__(self, reconnection=True, reconnection_attempts=0, reconnection_delay=1, reconnection_delay_max=5, randomization_factor=0.5, logger=False, serializer='default', - json=None, handle_sigint=True, **kwargs): + json=None, handle_sigint=True, serializer_args=None, + **kwargs): global original_signal_handler if handle_sigint and original_signal_handler is None and \ threading.current_thread() == threading.main_thread(): @@ -63,6 +64,7 @@ class BaseClient: self.packet_class = msgpack_packet.MsgPackPacket else: self.packet_class = serializer + self.packet_class_args = serializer_args or {} if json is not None: self.packet_class.json = json engineio_options['json'] = json @@ -283,6 +285,9 @@ class BaseClient: self.callbacks[namespace][id] = callback return id + def _create_packet(self, *args, **kwargs): + return self.packet_class(*args, **kwargs, **self.packet_class_args) + def _handle_eio_connect(self): # pragma: no cover raise NotImplementedError() diff --git a/src/socketio/base_server.py b/src/socketio/base_server.py index d134eba..873e969 100644 --- a/src/socketio/base_server.py +++ b/src/socketio/base_server.py @@ -15,7 +15,7 @@ class BaseServer: def __init__(self, client_manager=None, logger=False, serializer='default', json=None, async_handlers=True, always_connect=False, - namespaces=None, **kwargs): + namespaces=None, serializer_args=None, **kwargs): engineio_options = kwargs engineio_logger = engineio_options.pop('engineio_logger', None) if engineio_logger is not None: @@ -27,6 +27,7 @@ class BaseServer: self.packet_class = msgpack_packet.MsgPackPacket else: self.packet_class = serializer + self.packet_class_args = serializer_args or {} if json is not None: self.packet_class.json = json engineio_options['json'] = json @@ -252,6 +253,10 @@ class BaseServer: handler = self.namespace_handlers['*'] args = (namespace, *args) return handler, args + + def _create_packet(self, *args, **kwargs): + return self.packet_class(*args, **kwargs, + **self.packet_class_args) def _handle_eio_connect(self): # pragma: no cover raise NotImplementedError()