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(dates_config) if args.debug: print("Calendars: {cal}".format(cal=cal.calendars)) print("{cls}: {dates}".format( cls=dates_config.style.title() + "s", dates=cal.class_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))