Allow components to pass WebSocket/RawSocket options

This commit is contained in:
meejah 2017-06-01 15:58:35 -06:00
parent a9362174be
commit 6465cd4ce4
2 changed files with 23 additions and 3 deletions

View File

@ -150,7 +150,16 @@ def _create_transport_factory(reactor, transport, session_factory):
if transport.type == 'websocket':
# FIXME: forward WebSocket options
serializers = _create_transport_serializers(transport)
return WampWebSocketClientFactory(session_factory, url=transport.url, serializers=serializers)
factory = WampWebSocketClientFactory(session_factory, url=transport.url, serializers=serializers)
# set the options one at a time so we can give user better feedback
for k, v in transport.options.items():
try:
factory.setProtocolOptions(**{k: v})
except (TypeError, KeyError) as e:
raise Exception(
"Unknown transport option: {}={}".format(k, v)
)
return factory
elif transport.type == 'rawsocket':
# FIXME: forward RawSocket options

View File

@ -116,7 +116,7 @@ def _create_transport(index, transport, check_native_endpoint=None):
if type(transport) != dict:
raise ValueError('invalid type {} for transport configuration - must be a dict'.format(type(transport)))
valid_transport_keys = ['type', 'url', 'endpoint', 'serializer', 'serializers']
valid_transport_keys = ['type', 'url', 'endpoint', 'serializer', 'serializers', 'options']
for k in transport.keys():
if k not in valid_transport_keys:
raise ValueError(
@ -131,6 +131,14 @@ def _create_transport(index, transport, check_native_endpoint=None):
else:
transport['type'] = 'websocket'
options = dict()
if 'options' in transport:
options = transport['options']
if not isinstance(options, dict):
raise ValueError(
'options must be a dict, not {}'.format(type(options))
)
if kind == 'websocket':
for key in ['url']:
if key not in transport:
@ -200,6 +208,7 @@ def _create_transport(index, transport, check_native_endpoint=None):
url=transport['url'],
endpoint=endpoint_config,
serializers=serializer_config,
options=options,
**kw
)
@ -214,7 +223,8 @@ class _Transport(object):
max_retry_delay=300,
initial_retry_delay=1.5,
retry_delay_growth=1.5,
retry_delay_jitter=0.1):
retry_delay_jitter=0.1,
options=dict()):
"""
"""
self.idx = idx
@ -222,6 +232,7 @@ class _Transport(object):
self.type = kind
self.url = url
self.endpoint = endpoint
self.options = options
self.serializers = serializers
if self.type == 'rawsocket' and len(serializers) != 1: