Exemple #1
0
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])
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #5
0
 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])
Exemple #6
0
    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)
Exemple #7
0
 def test_empty_object_mounts_is_not_allowed(self):
     test = lambda: jsonrpc.JsonRpcInspector(objects={'': Calculator})
     self.assertRaises(AttributeError, test)