Source code for mods.timer
# mods/timer.py
#
#
""" timer command to schedule a text to be printed on a given time. stopwatch to measure elapsed time. """
from mads.time import day, now, elapsed, to_time, get_day, to_day, get_hour
from mads.join import j
from mads.clock import Timer
from mads.storage import Storage
from mads.event import Event
from mads.object import Config
from mids import kernel, runtime
import mads.errors
import time
start = 0
[docs]def init(event):
cfg = Config(default=0).load(j("runtime", "timer"))
for e in kernel.sequence("timer", cfg.last):
if e.done: continue
if "time" not in e: continue
if time.time() < int(e.time):
timer = Timer(int(e.time), e.direct, e.txt)
kernel.launch(timer.start)
else:
cfg.last = int(e.time)
cfg.save()
e.done = True
e.sync()
[docs]def timer(event):
""" echo txt on a given time. """
if not event._parsed.rest:
return
seconds = 0
line = ""
for word in event._parsed.args:
if word.startswith("+"):
try:
seconds = int(word[1:])
except:
event.reply("%s is not an integer" % seconds)
return
else:
line += word + " "
if seconds:
target = time.time() + seconds
else:
try:
target = get_day(event._parsed.rest)
except mads.errors.ENODATE:
try:
target = to_day(day())
except mads.errors.ENODATE:
pass
try:
hour = get_hour(event._parsed.rest)
if hour:
target += hour
except mads.errors.ENODATE:
pass
if not target or time.time() > target:
event.reply("already passed given time.")
return
e = Event(event)
e.services = "clock"
e._prefix = "timer"
e.txt = event._parsed.rest
e.time = target
e.done = False
e.save()
timer = Timer(target - time.time(), e.direct, e.txt)
kernel.launch(timer.start)
event.ok(time.ctime(target))
[docs]def begin(event):
""" begin stopwatch. """
global start
try:
start = to_time(now())
except mads.errors.ENODATE:
event.reply("can't detect date from %s" % event.txt)
return
event.reply("time is %s" % time.ctime(start))
[docs]def end(event):
""" stop stopwatch. """
diff = time.time() - start
if diff:
event.reply("time elapsed is %s" % elapsed(diff))