Programming

1. import marts

"""Unpack a mart bundle on the server and load it. The only write the server does."""
import json
import zipfile
from pathlib import Path

from django.core.management.base import BaseCommand, CommandError

from lending_analytics import config as C
from portfolio import bridge


class Command(BaseCommand):
    help = "Import a mart bundle produced by export_marts."

    def add_arguments(self, parser):
        parser.add_argument("path")

    def handle(self, *args, **o):
        src = Path(o["path"])
        if not src.exists():
            raise CommandError(f"not found: {src}")

        target = Path(C.MART_DIR)
        target.mkdir(parents=True, exist_ok=True)
        with zipfile.ZipFile(src) as z:
            manifest = json.loads(z.read("manifest.json")) if "manifest.json" in z.namelist() else {}
            z.extractall(target)

        self.stdout.write(f"extracted {len(manifest.get('files', []))} marts "
                          f"(built {manifest.get('version', '?')})")
        counts = bridge.sync_all(target, verbose=self.stdout.write)
        self.stdout.write(self.style.SUCCESS(
            f"live: period {bridge.latest_period()}, {sum(counts.values()):,} rows"))
Helpful? Dislike 0 Log in to react