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))