grammy-jiang/doe2-sim-parser

View on GitHub
doe2_sim_parser/__main__.py

Summary

Maintainability
A
0 mins
Test Coverage
import argparse
import logging
from collections import defaultdict

from doe2_sim_parser.parse_hourly_report import parse_hourly_report
from doe2_sim_parser.parse_report_beps import parse_beps
from doe2_sim_parser.parse_report_bepu import parse_bepu
from doe2_sim_parser.parse_report_es_d import parse_es_d
from doe2_sim_parser.parse_report_ps_e import parse_ps_e
from doe2_sim_parser.split_sim import split_sim
from doe2_sim_parser.update_google_spreadsheet import update_report
from doe2_sim_parser.utils.data_types import Report
from doe2_sim_parser.write_sim import write_sim

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)

PARSERS = {
    "BEPS": parse_beps,
    "BEPU": parse_bepu,
    "ES-D": parse_es_d,
    "PS-E": parse_ps_e,
    "Hourly Report": parse_hourly_report,
}


def parse_args():
    parser = argparse.ArgumentParser(
        description="Parse SIM reports, and upload the parsed reports to "
                    "Google Spreadsheet."
    )
    parser.add_argument(
        "-s", "--sim",
        help="the path to sim file",
        required=True,
        type=str
    )
    return parser.parse_args()


def main():
    args = parse_args()

    logger.info("Receive sim: %s", args.sim)

    sim = split_sim(args.sim)

    write_sim(sim)

    dict_sim_report = defaultdict(list)
    for report in sim.normal_reports:
        dict_sim_report[report.code].append(report)

    for code, reports in dict_sim_report.items():
        if code in PARSERS:
            logger.info(
                "Start parsing the sim report %s",
                "{code}".format(code=code),
            )
            parsed_report = PARSERS[code](reports)
            logger.info(
                "Start update the parsed sim report %s on Google Spreadsheet.",
                "{code}".format(code=code),
            )
            update_report(
                report=Report(
                    type_=reports[0].type_,
                    code=reports[0].code,
                    name=reports[0].name,
                    report=parsed_report,
                    report_no=None,
                    page_no=None
                )
            )

    try:
        parsed_hourly_report = parse_hourly_report(sim.hourly_reports)
        logger.info(
            "Start update the parsed sim hourly report %s on Google Spreadsheet.",
            "{code}".format(code="Hourly Report"),
        )
        update_report(
            report=Report(
                type_='hourly report',
                code=None,
                name='hourly report',
                report=parsed_hourly_report,
                report_no=0,
                page_no=0
            )
        )
    except Exception as exc:
        logger.exception(exc)


if __name__ == "__main__":
    main()