Programming
1. ingest snapshot
"""Load one monthly file (or a full history file) into the parquet lake."""
from pathlib import Path
import pandas as pd
from django.core.management.base import BaseCommand, CommandError
from lending_analytics import io_layer as io
from portfolio.bridge import sha256
from portfolio.models import Snapshot
class Command(BaseCommand):
help = "Ingest a raw loan tape into the parquet lake."
def add_arguments(self, parser):
parser.add_argument("path")
parser.add_argument("--force", action="store_true",
help="re-ingest even if this exact file was already loaded")
def handle(self, *args, **o):
path = Path(o["path"])
if not path.exists():
raise CommandError(f"not found: {path}")
digest = sha256(path)
if not o["force"] and Snapshot.objects.filter(source_sha256=digest).exists():
self.stdout.write(self.style.WARNING(
f"{path.name} already ingested (sha256 match) — nothing to do"))
return
written = io.ingest(path, verbose=self.stdout.write)
for rd in written:
as_of = rd - pd.Timedelta(days=1)
Snapshot.objects.update_or_create(
report_date=rd.date(),
defaults=dict(
period=as_of.year * 100 + as_of.month,
source_name=path.name,
source_sha256=digest,
status="stale", # marts not rebuilt yet
))
self.stdout.write(self.style.SUCCESS(
f"ingested {len(written)} snapshot(s): {written[0]:%Y-%m} … {written[-1]:%Y-%m}"))
self.stdout.write("next: python manage.py build_marts")
PO
powerty
Author
· Staff
Aug. 26, 2026
Aug. 26, 2026
4
Views
0
Likes
1m
Read