fix imports
This commit is contained in:
1 parent
2eadc722e9
commit
988f170ea4
1 file changed
+43
-1
+43
-1
@@ -1291,6 +1291,8 @@ def import_ledger_csv(league_ref: str):
|
|||||||
flash(f"CSV header mismatch. Expected: {', '.join(CSV_HEADERS)}", "error")
|
flash(f"CSV header mismatch. Expected: {', '.join(CSV_HEADERS)}", "error")
|
||||||
return redirect(url_for("leagues.ledger", **league_url_values(league)))
|
return redirect(url_for("leagues.ledger", **league_url_values(league)))
|
||||||
|
|
||||||
|
from db_models import PokerSession, make_session
|
||||||
|
|
||||||
sessions = list_sessions_for_league(league.id)
|
sessions = list_sessions_for_league(league.id)
|
||||||
session_by_ref = {session_event_ref(s): s for s in sessions}
|
session_by_ref = {session_event_ref(s): s for s in sessions}
|
||||||
|
|
||||||
@@ -1303,6 +1305,43 @@ def import_ledger_csv(league_ref: str):
|
|||||||
if e.legacy_event_id
|
if e.legacy_event_id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Auto-create any sessions referenced in the CSV that don't exist yet.
|
||||||
|
# Refs are "YYYY-MM-DD-NN" so we can recover exact date and sequence.
|
||||||
|
missing_refs: set[str] = set()
|
||||||
|
for row in csv.DictReader(lines):
|
||||||
|
ref = row.get("session_id", "").strip()
|
||||||
|
if ref and ref not in session_by_ref:
|
||||||
|
missing_refs.add(ref)
|
||||||
|
|
||||||
|
sessions_created = 0
|
||||||
|
for ref in sorted(missing_refs):
|
||||||
|
try:
|
||||||
|
date_part, seq_part = ref.rsplit("-", 1)
|
||||||
|
session_date = date.fromisoformat(date_part)
|
||||||
|
sequence = int(seq_part)
|
||||||
|
except (ValueError, IndexError):
|
||||||
|
continue # malformed ref — row will produce a clear error below
|
||||||
|
|
||||||
|
existing = PokerSession.query.filter_by(
|
||||||
|
league_id=league.id,
|
||||||
|
session_date=session_date,
|
||||||
|
sequence_on_date=sequence,
|
||||||
|
).one_or_none()
|
||||||
|
if existing:
|
||||||
|
session_by_ref[ref] = existing
|
||||||
|
continue
|
||||||
|
|
||||||
|
new_session = make_session(
|
||||||
|
league_id=league.id,
|
||||||
|
session_date=session_date,
|
||||||
|
sequence_on_date=sequence,
|
||||||
|
status="closed",
|
||||||
|
)
|
||||||
|
db.session.add(new_session)
|
||||||
|
db.session.flush()
|
||||||
|
session_by_ref[ref] = new_session
|
||||||
|
sessions_created += 1
|
||||||
|
|
||||||
errors: list[str] = []
|
errors: list[str] = []
|
||||||
queued: list[dict] = []
|
queued: list[dict] = []
|
||||||
skipped = 0
|
skipped = 0
|
||||||
@@ -1373,5 +1412,8 @@ def import_ledger_csv(league_ref: str):
|
|||||||
db.session.commit()
|
db.session.commit()
|
||||||
s_count = f"{len(queued)} event{'s' if len(queued) != 1 else ''}"
|
s_count = f"{len(queued)} event{'s' if len(queued) != 1 else ''}"
|
||||||
s_skip = f"{skipped} duplicate{'s' if skipped != 1 else ''}"
|
s_skip = f"{skipped} duplicate{'s' if skipped != 1 else ''}"
|
||||||
flash(f"Imported {s_count}, skipped {s_skip}.", "success")
|
parts = [f"Imported {s_count}", f"skipped {s_skip}"]
|
||||||
|
if sessions_created:
|
||||||
|
parts.append(f"created {sessions_created} session{'s' if sessions_created != 1 else ''}")
|
||||||
|
flash(", ".join(parts) + ".", "success")
|
||||||
return redirect(url_for("leagues.ledger", **league_url_values(league)))
|
return redirect(url_for("leagues.ledger", **league_url_values(league)))
|
||||||
Reference in new issue
Block a user