Skip to content
This repository was archived by the owner on Sep 8, 2024. It is now read-only.

Commit 4a8e0e9

Browse files
Steve Penrodforslund
authored andcommitted
Add ability to schedule event in seconds (#1813)
* Add ability to schedule event in seconds The MycroftSkill.schedule_event() method now accepts an integer in addition to a datetime for the 'when' parameter. The integer represents the number of seconds in the future to fire off the event. E.g. ```python self.schedule_event(some_handler, 7) ``` Will invoke some_handler() seven seconds from now. Also unified language used in event docstrings.
1 parent 81f174b commit 4a8e0e9

File tree

1 file changed

+22
-13
lines changed

1 file changed

+22
-13
lines changed

mycroft/skills/core.py

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,7 +1050,7 @@ def __stop_timeout():
10501050
self.bus.emit(Message("mycroft.stop.handled",
10511051
{"by": "skill:"+str(self.skill_id)}))
10521052
timer.cancel()
1053-
except: # noqa
1053+
except Exception:
10541054
timer.cancel()
10551055
LOG.error("Failed to stop skill: {}".format(self.name),
10561056
exc_info=True)
@@ -1132,16 +1132,22 @@ def _schedule_event(self, handler, when, data=None, name=None,
11321132

11331133
def schedule_event(self, handler, when, data=None, name=None):
11341134
"""
1135-
Schedule a single event.
1135+
Schedule a single-shot event.
11361136
11371137
Args:
11381138
handler: method to be called
1139-
when (datetime): when the handler should be called
1140-
(local time)
1139+
when (datetime/int): local datetime or number of seconds in
1140+
the future when the handler should be
1141+
called
11411142
data (dict, optional): data to send when the handler is called
1142-
name (str, optional): friendly name parameter
1143+
name (str, optional): reference name
1144+
NOTE: This will not warn or replace a
1145+
previously scheduled event of the same
1146+
name.
11431147
"""
11441148
data = data or {}
1149+
if isinstance(when, int):
1150+
when = datetime.now() + timedelta(seconds=when)
11451151
self._schedule_event(handler, when, data, name)
11461152

11471153
def schedule_repeating_event(self, handler, when, frequency,
@@ -1151,12 +1157,12 @@ def schedule_repeating_event(self, handler, when, frequency,
11511157
11521158
Args:
11531159
handler: method to be called
1154-
when (datetime): time for calling the handler or None
1155-
to initially trigger <frequency>
1156-
seconds from now
1160+
when (datetime): local time for first calling the
1161+
handler, or None to initially trigger
1162+
<frequency> seconds from now
11571163
frequency (float/int): time in seconds between calls
1158-
data (dict, optional): data to send along to the handler
1159-
name (str, optional): friendly name parameter
1164+
data (dict, optional): data to send when the handler is called
1165+
name (str, optional): reference name, must be unique
11601166
"""
11611167
# Do not schedule if this event is already scheduled by the skill
11621168
if name not in self.scheduled_repeats:
@@ -1173,7 +1179,7 @@ def update_scheduled_event(self, name, data=None):
11731179
Change data of event.
11741180
11751181
Args:
1176-
name (str): Name of event
1182+
name (str): reference name of event (from original scheduling)
11771183
"""
11781184
data = data or {}
11791185
data = {
@@ -1188,7 +1194,7 @@ def cancel_scheduled_event(self, name):
11881194
to be executed
11891195
11901196
Args:
1191-
name (str): Name of event
1197+
name (str): reference name of event (from original scheduling)
11921198
"""
11931199
unique_name = self._unique_name(name)
11941200
data = {'event': unique_name}
@@ -1203,10 +1209,13 @@ def get_scheduled_event_status(self, name):
12031209
Get scheduled event data and return the amount of time left
12041210
12051211
Args:
1206-
name (str): Name of event
1212+
name (str): reference name of event (from original scheduling)
12071213
12081214
Return:
12091215
int: the time left in seconds
1216+
1217+
Raises:
1218+
Exception: Raised if event is not found
12101219
"""
12111220
event_name = self._unique_name(name)
12121221
data = {'name': event_name}

0 commit comments

Comments
 (0)