示例#1
0
 def tornado_routes(server):
     return [
         (
             "/v1/ws",
             WSHandler,
             {
                 "commander": Commander(store, final_future=server.final_future),
                 "server_time": time.time(),
                 "wsconnections": server.wsconnections,
             },
         ),
     ]
示例#2
0
文件: server.py 项目: delfick/photons
    async def setup(self,
                    server_options,
                    *,
                    tasks,
                    sender,
                    cleaners,
                    animation_options=None):
        self.sender = sender
        self.cleaners = cleaners
        self.server_options = server_options
        self.animation_options = animation_options

        self.tasks = tasks
        self.tasks._merged_options_formattable = True

        self.database = DB(self.server_options.database.uri)
        self.database._merged_options_formattable = True
        self.cleaners.append(self.database.finish)
        await self.database.start()

        self.finder = Finder(sender, final_future=self.final_future)
        self.finder._merged_options_formattable = True
        self.cleaners.append(self.finder.finish)

        self.daemon = DeviceFinderDaemon(sender,
                                         finder=self.finder,
                                         **self.server_options.daemon_options)
        self.cleaners.append(self.daemon.finish)
        await self.daemon.start()

        self.animations = Animations(self.final_future, self.tasks,
                                     self.sender, self.animation_options)
        self.animations._merged_options_formattable = True

        self.commander = Commander(
            self.store,
            tasks=self.tasks,
            sender=self.sender,
            finder=self.finder,
            zeroconf=self.server_options.zeroconf,
            database=self.database,
            animations=self.animations,
            final_future=self.final_future,
            server_options=self.server_options,
        )
示例#3
0
文件: server.py 项目: delfick/photons
    async def setup(self, server_options, ts, sender, reference, cleaners):
        self.sender = sender
        self.cleaners = cleaners
        self.server_options = server_options

        self.tasks = ts
        self.tasks._merged_options_formattable = True

        self.arranger = Arranger(self.final_future, self.sender, reference,
                                 server_options.animation_options, cleaners)
        self.arranger._merged_options_formattable = True
        self.tasks.add(self.arranger.run())

        self.commander = Commander(
            self.store,
            tasks=self.tasks,
            arranger=self.arranger,
            final_future=self.final_future,
            server_options=self.server_options,
        )
示例#4
0
    async def setup(self, server_options, cleaners, target_register,
                    protocol_register, animation_options):
        self.cleaners = cleaners
        self.server_options = server_options
        self.target_register = target_register
        self.protocol_register = protocol_register

        test_devices = None
        if self.server_options.fake_devices:
            from photons_interactor.commander import test_helpers as cthp
            from photons_control import test_helpers as chp

            runner = chp.MemoryTargetRunner(self.final_future,
                                            cthp.fakery.devices)
            target = runner.target
            await runner.start()

            async def clean_memory_target():
                await runner.close()

            self.cleaners.append(clean_memory_target)
        else:
            target = self.target_register.resolve("lan")

        self.db_queue = DBQueue(self.final_future, 5, lambda exc: 1,
                                self.server_options.database.uri)
        self.cleaners.append(self.db_queue.finish)
        self.db_queue.start()

        self.finder = DeviceFinder(target,
                                   **self.server_options.device_finder_options)

        self.arranger = ArrangeState()
        self.animations = AnimationsStore(
            self.server_options.animations_presets, self.arranger,
            animation_options)
        self.cleaners.append(self.animations.finish)

        await self.finder.start()

        async def clean_finder():
            await self.finder.finish()

        self.cleaners.append(clean_finder)

        # Make sure to wait for the wsconnections
        async def waiter():
            self.final_future.cancel()
            await wait_for_futures(self.wsconnections)

        self.cleaners.append(waiter)

        self.commander = Commander(
            self.store,
            finder=self.finder,
            db_queue=self.db_queue,
            arranger=self.arranger,
            animations=self.animations,
            test_devices=test_devices,
            final_future=self.final_future,
            server_options=self.server_options,
            target_register=self.target_register,
            protocol_register=self.protocol_register,
        )
示例#5
0
    value = dictobj.Field(sb.string_spec, wrapper=sb.required)

    store = store.injected("store")

    async def execute(self):
        assert not self.request_future.done()
        return self, self.value


describe "Commander":

    async it "works":
        other = mock.Mock(name="other")
        progress_cb = mock.Mock(name="progress_cb")
        request_handler = mock.Mock(name="request_handler")
        commander = Commander(store, other=other)

        value = str(uuid.uuid1())
        thing, val = await commander.executor(progress_cb, request_handler).execute(
            "/v1", {"command": "thing", "args": {"value": value}}
        )

        assert val == value

        assert thing.other is other
        assert thing.commander is commander
        assert thing.progress_cb is progress_cb
        assert thing.request_handler is request_handler
        assert thing.path == "/v1"
        assert thing.store is store
示例#6
0
 async def setup(self, tornado_routes, store, wsconnections, server_time):
     self.commander = Commander(store)
     self.server_time = server_time
     self.wsconnections = wsconnections
     self._tornado_routes = tornado_routes