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 test_inspector_can_describe_a_bunch_of_large_classes(self): inspector = jsonrpc.JsonRpcInspector({ '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, }) methods = inspector.describe() self.assertIn('core.get_uri_schemes', methods) self.assertEqual(len(methods['core.get_uri_schemes']['params']), 0) self.assertIn('core.library.lookup', methods.keys()) self.assertEqual( methods['core.library.lookup']['params'][0]['name'], 'uri') self.assertIn('core.playback.next', methods) self.assertEqual(len(methods['core.playback.next']['params']), 0) self.assertIn('core.playlists.get_playlists', methods) self.assertEqual( len(methods['core.playlists.get_playlists']['params']), 1) self.assertIn('core.tracklist.filter', methods.keys()) self.assertEqual( methods['core.tracklist.filter']['params'][0]['name'], 'criteria') self.assertEqual( methods['core.tracklist.filter']['params'][1]['name'], 'kwargs') self.assertEqual( methods['core.tracklist.filter']['params'][1]['kwargs'], True)
def test_can_describe_method_on_root(self): inspector = jsonrpc.JsonRpcInspector({ 'hello': lambda: 'Hello, world!', }) methods = inspector.describe() self.assertIn('hello', methods) self.assertEqual(len(methods['hello']['params']), 0)
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 __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_inspector_can_describe_an_object_with_methods(self): inspector = jsonrpc.JsonRpcInspector({ 'calc': Calculator, }) methods = inspector.describe() self.assertIn('calc.add', methods) self.assertEqual( methods['calc.add']['description'], 'Returns the sum of the given numbers') self.assertIn('calc.sub', methods) self.assertIn('calc.take_it_all', methods) self.assertNotIn('calc._secret', methods) self.assertNotIn('calc.__init__', methods) method = methods['calc.take_it_all'] self.assertIn('params', method) params = method['params'] self.assertEqual(params[0]['name'], 'a') self.assertNotIn('default', params[0]) self.assertEqual(params[1]['name'], 'b') self.assertNotIn('default', params[1]) self.assertEqual(params[2]['name'], 'c') self.assertEqual(params[2]['default'], True) self.assertEqual(params[3]['name'], 'args') self.assertNotIn('default', params[3]) self.assertEqual(params[3]['varargs'], True) self.assertEqual(params[4]['name'], 'kwargs') self.assertNotIn('default', params[4]) self.assertEqual(params[4]['kwargs'], True)
def test_empty_object_mounts_is_not_allowed(self): test = lambda: jsonrpc.JsonRpcInspector(objects={'': Calculator}) self.assertRaises(AttributeError, test)