Newer
Older
Handbook / calendar / generate_dates / config / config.py
from .errors import LectureStyleError, PaperError, PeriodError


def parse_config(config, args):
    """Validate and filter the top-level configuration.

    Returns separate references to the period configuration and the
    paper configuration, as applicable. (Yes, the period configuration
    includes the paper configuration, but it may also include other
    papers, so it's more convenient to return a separate reference
    for the specified paper.)

    The configuration file will normally contain specifications for
    several teaching periods and papers. We don't need all of this:
    usually we're only interested in one teaching period and one
    paper (if relevant).
    """
    period_config = paper_config = None
    # this is all irrelevant if we're going ISO style
    if args.style != "iso":
        if args.period not in config.keys():
            raise PeriodError()

        period_config = config[args.period]
        # raises KeyError if source key is missing
        period_config["name"] and period_config["weeks"]

        # papers are irrelevant in "calendar" style
        if args.style == "lecture":
            if "papers" in period_config.keys():
                if args.paper in period_config["papers"].keys():
                    paper_config = period_config["papers"][args.paper]
                    # we expect at least a "lectures" entry
                    paper_config["lectures"]
                else:
                    raise PaperError()
            else:
                raise LectureStyleError()
    
    return period_config, paper_config