Programming

1. Render report

"""Render the standalone HTML deliverable from marts already in the database."""
from pathlib import Path

from django.core.management.base import BaseCommand

from lending_analytics import config as C
from lending_analytics import report as R
from portfolio import bridge
from portfolio.models import QualityCheck, ReportRun


class Command(BaseCommand):
    help = "Render the self-contained HTML report."

    def add_arguments(self, parser):
        parser.add_argument("--lang", default="ru")
        parser.add_argument("--fx", default="nominal")
        parser.add_argument("--units", default="mlrd")

    def handle(self, *args, **o):
        import pandas as pd

        marts = bridge.get_marts()
        period = bridge.latest_period()
        checks = pd.DataFrame(list(
            QualityCheck.objects.filter(run_period=period)
            .values("check_name", "severity", "status", "detail")))
        checks = checks.rename(columns={"check_name": "check"})
        if checks.empty:
            checks = pd.DataFrame(columns=["check", "severity", "status", "detail"])

        spec = C.ReportSpec(lang=o["lang"], fx_mode=o["fx"], units=o["units"])
        out = R.build_report(marts, checks, spec)

        ReportRun.objects.update_or_create(
            period=period, lang=o["lang"],
            defaults=dict(fx_mode=o["fx"], html_path=str(Path(out).resolve())))
        self.stdout.write(self.style.SUCCESS(f"report → {out}"))
Helpful? Dislike 0 Log in to react