Update web/core/views.py

This commit is contained in:
2025-08-22 03:17:59 +00:00
parent af2de1e779
commit a32d58eec2
+9 -11
View File
@@ -329,21 +329,22 @@ def entry_delete(request, entry_id):
@login_required @login_required
@user_passes_test(is_admin) @user_passes_test(is_admin)
def import_wizard(request): def import_wizard(request):
# Safety: expected header list # Safety: expected header list (matches DB/order the importer expects)
_EXPECTED_HEADERS = [ _EXPECTED_HEADERS = [
"Subject", "Illustration", "Application", "Scripture", "Source", "Subject", "Illustration", "Application", "Scripture", "Source",
"Talk Title", "Talk Number", "Code", "Date", "Date Edited", "Talk Title", "Talk Number", "Code", "Date", "Date Edited",
] ]
if request.method == "POST": if request.method == "POST":
form = ImportForm(request.POST, request.FILES) form = ImportForm(request.POST, request.FILES)
if form.is_valid(): if form.is_valid():
try: try:
raw = form.cleaned_data["file"].read() raw = form.cleaned_data["file"].read()
import io, csv as _csv import io
import csv as _csv
# Decode once (BOM-safe) # Decode once (BOMsafe)
text = raw.decode("utf-8-sig", errors="replace") text = raw.decode("utf-8-sig", errors="replace")
# Try to sniff a dialect; fall back to Excel-style CSV # Try to sniff a dialect; fall back to Excel-style CSV
@@ -358,11 +359,7 @@ if request.method == "POST":
if not rows: if not rows:
raise ValueError("The CSV file appears to be empty.") raise ValueError("The CSV file appears to be empty.")
# Expected header (DB field order) expected = _EXPECTED_HEADERS
expected = [
"Subject", "Illustration", "Application", "Scripture", "Source",
"Talk Title", "Talk Number", "Code", "Date", "Date Edited",
]
expected_norm = [h.lower() for h in expected] expected_norm = [h.lower() for h in expected]
# Header cleaner: fixes r:"Talk Title", stray quotes, spaces, case # Header cleaner: fixes r:"Talk Title", stray quotes, spaces, case
@@ -423,9 +420,10 @@ if request.method == "POST":
) )
except Exception as e: except Exception as e:
messages.error(request, f"Import failed: {e}") messages.error(request, f"Import failed: {e}")
else: else:
form = ImportForm() form = ImportForm()
return render(request, "import_wizard.html", {"form": form})
return render(request, "import_wizard.html", {"form": form})
@login_required @login_required
@user_passes_test(is_admin) @user_passes_test(is_admin)