def __init__(self): """ """ ObservableMixin.__init__(self) # this is for library level debugging self.debug = False # this is for app level debugging. exceptions raised in user code # will get logged (that is, when invoking remoted procedures or # when invoking event handlers) self.debug_app = False # this is for marshalling traceback from exceptions thrown in user # code within WAMP error messages (that is, when invoking remoted # procedures) self.traceback_app = False # mapping of exception classes to WAMP error URIs self._ecls_to_uri_pat = {} # mapping of WAMP error URIs to exception classes self._uri_to_ecls = { ApplicationError.INVALID_PAYLOAD: SerializationError } # session authentication information self._authid = None self._authrole = None self._authmethod = None self._authprovider = None # generator for WAMP request IDs self._request_id_gen = IdGenerator()
def __init__(self, main=None, setup=None, transports=None, config=None): """ :param main: A callable that runs user code for the component. The component will be started with a "main-like" procedure. When a transport has been connected and a session has been established and joined a realm, the user code will be run until it finishes which signals that the component has run to completion. :type main: callable :param setup: A callable that runs user code for the component. The component will be started with a "setup-like" procedure. When a transport has been connected and a session has been established and joined a realm, the user code will be run until it finishes which signals that the component is now "ready". The component will continue to run until it explicitly closes the session or the underlying transport closes. :type setup: callable :param transports: Transport configurations for creating transports. :type transports: None or unicode or list :param config: Session configuration. :type config: None or dict """ ObservableMixin.__init__(self) if main is None and setup is None: raise RuntimeError( 'either a "main" or "setup" procedure must be provided for a component' ) if main is not None and setup is not None: raise RuntimeError( 'either a "main" or "setup" procedure must be provided for a component (not both)' ) if main is not None and not callable(main): raise RuntimeError('"main" must be a callable if given') if setup is not None and not callable(setup): raise RuntimeError('"setup" must be a callable if given') if setup: self._entry = setup self._entry_type = Component.TYPE_SETUP elif main: self._entry = main self._entry_type = Component.TYPE_MAIN else: assert (False), 'logic error' # use WAMP-over-WebSocket to localhost when no transport is specified at all if transports is None: transports = u'ws://127.0.0.1:8080/ws' # allows to provide an URL instead of a list of transports if type(transports) == six.text_type: url = transports is_secure, host, port, resource, path, params = parse_url(url) transport = { 'type': 'websocket', 'url': url, 'endpoint': { 'type': 'tcp', 'host': host, 'port': port } } if is_secure: # FIXME transport['endpoint']['tls'] = {} transports = [transport] # now check and save list of transports self._transports = [] idx = 0 for transport in transports: check_transport(transport) self._transports.append(Transport(idx, transport)) idx += 1 self._realm = u'realm1' self._extra = None
def __init__(self, main=None, setup=None, transports=None, config=None): """ :param main: A callable that runs user code for the component. The component will be started with a "main-like" procedure. When a transport has been connected and a session has been established and joined a realm, the user code will be run until it finishes which signals that the component has run to completion. :type main: callable :param setup: A callable that runs user code for the component. The component will be started with a "setup-like" procedure. When a transport has been connected and a session has been established and joined a realm, the user code will be run until it finishes which signals that the component is now "ready". The component will continue to run until it explicitly closes the session or the underlying transport closes. :type setup: callable :param transports: Transport configurations for creating transports. :type transports: None or unicode or list :param config: Session configuration. :type config: None or dict """ ObservableMixin.__init__(self) if main is None and setup is None: raise RuntimeError('either a "main" or "setup" procedure must be provided for a component') if main is not None and setup is not None: raise RuntimeError('either a "main" or "setup" procedure must be provided for a component (not both)') if main is not None and not callable(main): raise RuntimeError('"main" must be a callable if given') if setup is not None and not callable(setup): raise RuntimeError('"setup" must be a callable if given') if setup: self._entry = setup self._entry_type = Component.TYPE_SETUP elif main: self._entry = main self._entry_type = Component.TYPE_MAIN else: assert(False), 'logic error' # use WAMP-over-WebSocket to localhost when no transport is specified at all if transports is None: transports = u'ws://127.0.0.1:8080/ws' # allows to provide an URL instead of a list of transports if type(transports) == six.text_type: url = transports is_secure, host, port, resource, path, params = parseWsUrl(url) transport = { 'type': 'websocket', 'url': url, 'endpoint': { 'type': 'tcp', 'host': host, 'port': port } } if is_secure: # FIXME transport['endpoint']['tls'] = {} transports = [transport] # now check and save list of transports self._transports = [] idx = 0 for transport in transports: check_transport(transport) self._transports.append(Transport(idx, transport)) idx += 1 self._realm = u'realm1' self._extra = None