able-battery-82852
09/19/2025, 9:01 AMvictorious-lawyer-58417
09/19/2025, 2:32 PMdry-beach-38304
09/19/2025, 3:01 PMable-battery-82852
09/22/2025, 6:10 AMdry-beach-38304
09/22/2025, 6:19 AMschedule decorator, it doesn’t actually do anything itself but it is used by other things to change their behavior. If you look at the schedule decorator, it just sets self.schedule which is then used in argo like so for example: schedule = _self_.flow._flow_decorators.get("schedule").
To modify stuff like that without actually changing the users (ie: argo), you may have to “pretend” to be a schedule decorator. You can definitely do it with an extension and create a new decorator (as long as its name is schedule it will override the built-in one) but you can also use pre_mutate on FlowMutators that can add a schedule decorator with your own custom cron string (since that is what Argo expects for example).
I am not sure what exactly what you want to do but if it boils down to constructing a cron string from different arguments than the ones given in schedule, that may be the easiest way.able-battery-82852
09/22/2025, 6:23 AMdry-beach-38304
09/22/2025, 6:29 AMclass MyMutator(FlowMutator):
def pre_mutate(self, mutable_flow):
my_env_var = os.environ.get("...")
# Do some fun stuff
cron_string = ...
mutable_flow.add_decorator(schedule, cron=cron_string, duplicates=mutable_flow.OVERRIDE)
or something like that.able-battery-82852
09/22/2025, 6:30 AMdry-beach-38304
09/22/2025, 6:30 AM@MyMutator
class MyFlow(FlowSpec):
...
You can also totally hide if from users by using either the BaseFlow pattern (and having your users derive from YourBaseFlow isntead of FlowSpec or by setting DEFAULT_DECOSPECSdry-beach-38304
09/22/2025, 6:32 AMable-battery-82852
09/22/2025, 6:33 AMvictorious-lawyer-58417
09/22/2025, 6:58 AM