class Weekly(Trigger, mixin.Single("offset")): """Trigger affects weekly.""" def __call__(self, env): return (datetime.datetime.today() - self.offset).weekday() == 0
class Daily(Trigger, mixin.Single("offset")): """Trigger affects daily.""" def __call__(self, env): return (datetime.datetime.today() - self.offset).hour == 0
class FunctionTrigger(Trigger, mixin.Single("function")): """Use a function as a trigger.""" def __call__(self, env): return self.function(env)
class Time(Trigger, mixin.Single("time")): """Time trigger.""" def __call__(self, env): return datetime.datetime.today() >= self.time
class Randomly(Trigger, mixin.Single("probability")): """Trigger affects randomly.""" def __call__(self, env): return random.random() < self.probability