123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- """
- main module to read and get informations about alarms
- """
- from __future__ import print_function
- import sys
- from datetime import datetime
- import argparse
- import json
- from .entrypoints_utils import get_one_entrypoint
- from logging import getLogger
- log = getLogger("timegen")
- def get_timegenerator(kind):
- """Messes with entrypoints to return an timegenerator function"""
- return get_one_entrypoint("larigira.timegenerators", kind)
- def get_parser():
- parser = argparse.ArgumentParser(
- description='Generate "ring times" from a timespec'
- )
- parser.add_argument(
- "timespec",
- metavar="TIMESPEC",
- type=str,
- nargs=1,
- help="filename for timespec, formatted in json",
- )
- parser.add_argument(
- "--now",
- metavar="NOW",
- type=int,
- nargs=1,
- default=None,
- help='Set a different "time", in unix epoch',
- )
- parser.add_argument(
- "--howmany",
- metavar="N",
- type=int,
- nargs=1,
- default=[1],
- help='Set a different "time", in unix epoch',
- )
- return parser
- def read_spec(fname):
- try:
- if fname == "-":
- return json.load(sys.stdin)
- with open(fname) as buf:
- return json.load(buf)
- except ValueError:
- sys.stderr.write("Error: invalid JSON\n")
- sys.exit(1)
- def check_spec(spec):
- if "kind" not in spec:
- yield "Missing field 'kind'"
- def timegenerate(spec, now=None, howmany=1):
- Alarm = get_timegenerator(spec["kind"])
- generator = Alarm(spec)
- if now is not None:
- if type(now) is not datetime:
- now = datetime.fromtimestamp(now)
- for _ in range(howmany):
- now = generator.next_ring(current_time=now)
- yield now
- def main():
- """Main function for the "larigira-timegen" executable"""
- args = get_parser().parse_args()
- spec = read_spec(args.timespec[0])
- errors = tuple(check_spec(spec))
- if errors:
- log.error("Errors in timespec")
- for err in errors:
- sys.stderr.write("Error: {}\n".format(err))
- sys.exit(1)
- now = None if args.now is None else args.now.pop()
- howmany = None if args.howmany is None else args.howmany.pop()
- for time in timegenerate(spec, now=now, howmany=howmany):
- print(time)
|