コード例 #1
0
    async def dispatch_worker(self, name, args):
        unconstrained = True
        #
        # Argument Constraints
        # (plugins have no args so skip if necessary)
        #
        if name in self.AD.app_management.app_config:
            for arg in self.AD.app_management.app_config[name].keys():
                constrained = await self.check_constraint(
                    arg, self.AD.app_management.app_config[name][arg], self.AD.app_management.objects[name]["object"],
                )
                if not constrained:
                    unconstrained = False
            if not await self.check_time_constraint(self.AD.app_management.app_config[name], name):
                unconstrained = False
            elif not await self.check_days_constraint(self.AD.app_management.app_config[name], name):
                unconstrained = False

        #
        # Callback level constraints
        #
        myargs = utils.deepcopy(args)
        if "kwargs" in myargs:
            for arg in myargs["kwargs"].keys():
                constrained = await self.check_constraint(
                    arg, myargs["kwargs"][arg], self.AD.app_management.objects[name]["object"],
                )
                if not constrained:
                    unconstrained = False
            if not await self.check_time_constraint(myargs["kwargs"], name):
                unconstrained = False
            elif not await self.check_days_constraint(myargs["kwargs"], name):
                unconstrained = False

        if unconstrained:
            #
            # It's going to happen
            #
            if "__silent" in args["kwargs"] and args["kwargs"]["__silent"] is True:
                pass
            else:
                await self.add_to_state("_threading", "admin", "sensor.callbacks_total_fired", 1)
                await self.add_to_attr(
                    "_threading", "admin", "{}_callback.{}".format(myargs["type"], myargs["id"]), "fired", 1,
                )
            #
            # And Q
            #
            if asyncio.iscoroutinefunction(myargs["function"]):
                f = asyncio.ensure_future(self.async_worker(myargs))
                self.AD.futures.add_future(name, f)
            else:
                self.select_q(myargs)
            return True
        else:
            return False
コード例 #2
0
ファイル: threading.py プロジェクト: iAutom8/appdaemon
    async def dispatch_worker(self, name, args):
        unconstrained = True
        #
        # Argument Constraints
        #
        for arg in self.AD.app_management.app_config[name].keys():
            constrained = await self.check_constraint(arg, self.AD.app_management.app_config[name][arg], self.AD.app_management.objects[name]["object"])
            if not constrained:
                unconstrained = False
        if not await self.check_time_constraint(self.AD.app_management.app_config[name], name):
            unconstrained = False
        #
        # Callback level constraints
        #
        myargs = utils.deepcopy(args)
        if "kwargs" in myargs:
            for arg in myargs["kwargs"].keys():
                constrained = await self.check_constraint(arg, myargs["kwargs"][arg], self.AD.app_management.objects[name]["object"])
                if not constrained:
                    unconstrained = False
            if not await self.check_time_constraint(myargs["kwargs"], name):
                unconstrained = False

        if unconstrained:
            #
            # It's going to happen
            #
            await self.add_to_state("_threading", "admin", "sensor.callbacks_total_fired", 1)
            await self.add_to_attr("_threading", "admin", "{}_callback.{}".format(myargs["type"], myargs["id"]), "fired", 1)
            #
            # And Q
            #
            self.select_q(myargs)
            return True
        else:
            return False