MCPcopy Create free account
hub / github.com/StackStorm/st2 / St2Timer

Class St2Timer

st2reactor/st2reactor/timer/base.py:40–204  ·  view source on GitHub ↗

A timer interface that uses APScheduler 3.0.

Source from the content-addressed store, hash-verified

38
39
40class St2Timer(object):
41 """
42 A timer interface that uses APScheduler 3.0.
43 """
44
45 def __init__(self, local_timezone=None):
46 self._timezone = local_timezone
47 self._scheduler = BlockingScheduler(timezone=self._timezone)
48 self._jobs = {}
49 self._trigger_types = list(TIMER_TRIGGER_TYPES.keys())
50 self._trigger_watcher = TriggerWatcher(
51 create_handler=self._handle_create_trigger,
52 update_handler=self._handle_update_trigger,
53 delete_handler=self._handle_delete_trigger,
54 trigger_types=self._trigger_types,
55 queue_suffix=self.__class__.__name__,
56 exclusive=True,
57 )
58 self._trigger_dispatcher = TriggerDispatcher(LOG)
59
60 def start(self):
61 self._register_timer_trigger_types()
62 self._trigger_watcher.start()
63 self._scheduler.start()
64
65 def cleanup(self):
66 self._scheduler.shutdown(wait=True)
67
68 def add_trigger(self, trigger):
69 self._add_job_to_scheduler(trigger)
70
71 def update_trigger(self, trigger):
72 self.remove_trigger(trigger)
73 self.add_trigger(trigger)
74
75 def remove_trigger(self, trigger):
76 trigger_id = trigger["id"]
77
78 try:
79 job_id = self._jobs[trigger_id]
80 except KeyError:
81 LOG.info("Job not found: %s", trigger_id)
82 return
83
84 self._scheduler.remove_job(job_id)
85 del self._jobs[trigger_id]
86
87 def _add_job_to_scheduler(self, trigger):
88 trigger_type_ref = trigger["type"]
89 trigger_type = TIMER_TRIGGER_TYPES[trigger_type_ref]
90 try:
91 util_schema.validate(
92 instance=trigger["parameters"],
93 schema=trigger_type["parameters_schema"],
94 cls=util_schema.CustomValidator,
95 use_default=True,
96 allow_default_none=True,
97 )

Calls

no outgoing calls