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