def make_jsonrpc_wrapper(core_actor): inspector = jsonrpc.JsonRpcInspector( objects={ 'core.get_uri_schemes': core.Core.get_uri_schemes, 'core.get_version': core.Core.get_version, 'core.history': core.HistoryController, 'core.library': core.LibraryController, 'core.mixer': core.MixerController, 'core.playback': core.PlaybackController, 'core.playlists': core.PlaylistsController, 'core.tracklist': core.TracklistController, }) return jsonrpc.JsonRpcWrapper(objects={ 'core.describe': inspector.describe, 'core.get_uri_schemes': core_actor.get_uri_schemes, 'core.get_version': core_actor.get_version, 'core.history': core_actor.history, 'core.library': core_actor.library, 'core.mixer': core_actor.mixer, 'core.playback': core_actor.playback, 'core.playlists': core_actor.playlists, 'core.tracklist': core_actor.tracklist, }, decoders=[models.model_json_decoder], encoders=[models.ModelJSONEncoder])
def onJoin(self, details): ''' Executed when the session is joined a realm Registers all API calles from the core actor proxy on the WAMP router ''' assert self.factory._client == None, \ 'WAMPFrontend: A client session has already been created' self.factory._client = self class ResultWrapper(object): ''' Unwraps a methods future result and provides an model encoded dictonary ''' def __init__(self, call): self._call = call def get(self, *args, **kwargs): result = self._call(*args, **kwargs).get() return json.loads(json.dumps(result, cls=jsonrpc.get_combined_json_encoder([models.ModelJSONEncoder]))) logger.info("Connected to WAMP router") core_actor = self.config.extra['core'] inspector = jsonrpc.JsonRpcInspector( objects={ 'core.get_uri_schemes': core.Core.get_uri_schemes, 'core.get_version': core.Core.get_version, 'core.history': core.HistoryController, 'core.library': core.LibraryController, 'core.mixer': core.MixerController, 'core.playback': core.PlaybackController, 'core.playlists': core.PlaylistsController, 'core.tracklist': core.TracklistController, }) wrapper = jsonrpc.JsonRpcWrapper( objects={ 'core.describe': inspector.describe, 'core.get_uri_schemes': core_actor.get_uri_schemes, 'core.get_version': core_actor.get_version, 'core.history': core_actor.history, 'core.library': core_actor.library, 'core.mixer': core_actor.mixer, 'core.playback': core_actor.playback, 'core.playlists': core_actor.playlists, 'core.tracklist': core_actor.tracklist, }) count = 0 yield self.register(inspector.describe, 'core.describe') for func in inspector.describe().keys(): func_name = self.config.extra['name'] + func[len('core'):] yield self.register(ResultWrapper(wrapper._get_method(func)).get, func_name) count = count + 1 logger.info("WAMPFrontend: Registered %d API calls" % count)
def setUp(self): # noqa: N802 self.backend = dummy_backend.create_proxy() self.core = core.Core.start(backends=[self.backend]).proxy() self.calc = Calculator() self.jrw = jsonrpc.JsonRpcWrapper( objects={ 'hello': lambda: 'Hello, world!', 'calc': self.calc, 'core': self.core, 'core.playback': self.core.playback, 'core.tracklist': self.core.tracklist, 'get_uri_schemes': self.core.get_uri_schemes, }, encoders=[models.ModelJSONEncoder], decoders=[models.model_json_decoder])
def __init__(self, core_proxy): self._core = core_proxy inspector = jsonrpc.JsonRpcInspector( objects={ 'core.get_uri_schemes': core.Core.get_uri_schemes, 'core.library': core.LibraryController, 'core.playback': core.PlaybackController, 'core.playlists': core.PlaylistsController, 'core.tracklist': core.TracklistController, }) self.jsonrpc = jsonrpc.JsonRpcWrapper( objects={ 'core.describe': inspector.describe, 'core.get_uri_schemes': self._core.get_uri_schemes, 'core.library': self._core.library, 'core.playback': self._core.playback, 'core.playlists': self._core.playlists, 'core.tracklist': self._core.tracklist, }, decoders=[models.model_json_decoder], encoders=[models.ModelJSONEncoder])
def test_empty_object_mounts_is_not_allowed(self): test = lambda: jsonrpc.JsonRpcWrapper(objects={'': Calculator()}) self.assertRaises(AttributeError, test)