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
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