import argparse import copy import pathlib import sys from jinja2 import TemplateNotFound import teachingdates.calendars as calendars import teachingdates.config as configuration from teachingdates import PROG def run(): args = configuration.parse_command_line() if args.debug: print("{prog}: debug: args: {a}".format(prog=PROG, a=args)) try: dates_config = configuration.Configuration(args) if args.debug: print("{prog}: debug: period config: {c}".format( prog=PROG, c=dates_config.get_period_config())) print("{prog}: debug: paper config: {c}".format( prog=PROG, c=dates_config.get_paper_config())) cal = calendars.TeachingCalendar.from_configuration(dates_config) if args.debug: print("Calendar: {cal}".format(cal=cal.calendar())) print("Lectures: {lec}".format(lec=cal.lecture_dates())) print(cal.render(args.style, args.format)) except configuration.ConfigurationError as e: print("{prog}: error: failed to load configuration from " "'{file}'".format(prog=PROG, file=e)) except configuration.PaperKeyError as e: print("{prog}: error: paper '{paper}' in '{file}' is missing " "required key '{key}'".format(prog=PROG, paper=e.parent, file=e.file, key=e.key)) except configuration.PeriodKeyError as e: print("{prog}: error: teaching period '{period}' in '{file}' is " "missing required key '{key}'".format(prog=PROG, period=e.parent, file=e.file, key=e.key)) except configuration.PaperError as e: print("{prog}: error: no entry for paper '{paper}' ({period}) in " "'{file}.'".format(prog=PROG, file=e, paper=args.paper, period=args.period)) except configuration.PeriodError as e: print("{prog}: error: no entry for teaching period '{period}' in " "'{file}'".format(prog=PROG, file=e, period=args.period)) except TemplateNotFound as e: print("{prog}: error: no template found for output style '{style}' " "and output format '{format}' (expected '{file}')".format( prog=PROG, style=args.style, format=args.format, file=e))