Update web/core/views.py
This commit is contained in:
parent
8fbc0c5e29
commit
ecb8e6657c
@ -329,19 +329,11 @@ 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: use global EXPECTED_HEADERS if present; otherwise fall back locally
|
# Safety: expected header list
|
||||||
_EXPECTED_HEADERS = globals().get("EXPECTED_HEADERS", [
|
_EXPECTED_HEADERS = [
|
||||||
"Subject",
|
"Subject", "Illustration", "Application", "Scripture", "Source",
|
||||||
"Illustration",
|
"Talk Title", "Talk Number", "Code", "Date", "Date Edited",
|
||||||
"Application",
|
]
|
||||||
"Scripture",
|
|
||||||
"Source",
|
|
||||||
"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)
|
||||||
@ -349,7 +341,7 @@ def import_wizard(request):
|
|||||||
try:
|
try:
|
||||||
raw = form.cleaned_data["file"].read()
|
raw = form.cleaned_data["file"].read()
|
||||||
|
|
||||||
# --- super‑defensive header peek (never raises) ---
|
# --- super-defensive header peek (never raises) ---
|
||||||
import io, csv as _csv
|
import io, csv as _csv
|
||||||
sio = io.StringIO(raw.decode("utf-8-sig", errors="replace"))
|
sio = io.StringIO(raw.decode("utf-8-sig", errors="replace"))
|
||||||
|
|
||||||
@ -368,27 +360,18 @@ def import_wizard(request):
|
|||||||
|
|
||||||
norm = [_clean(c) for c in first_row]
|
norm = [_clean(c) for c in first_row]
|
||||||
|
|
||||||
# Pull expected headers from globals if defined, else use defaults
|
expected = [h.strip().lower() for h in _EXPECTED_HEADERS]
|
||||||
expected = (
|
header_ok = (norm == expected)
|
||||||
globals().get("_EXPECTED_HEADERS")
|
|
||||||
or globals().get("EXPECTED_HEADERS")
|
|
||||||
or [
|
|
||||||
"Subject", "Illustration", "Application", "Scripture", "Source",
|
|
||||||
"Talk Title", "Talk Number", "Code", "Date", "Date Edited",
|
|
||||||
]
|
|
||||||
)
|
|
||||||
expected_norm = [h.strip().lower() for h in expected]
|
|
||||||
header_ok = (norm == expected_norm)
|
|
||||||
except Exception:
|
except Exception:
|
||||||
header_ok = False
|
header_ok = False
|
||||||
finally:
|
finally:
|
||||||
# Rewind so the real importer reads the full file
|
# Rewind so the real importer reads the full file
|
||||||
sio.seek(0)
|
sio.seek(0)
|
||||||
|
|
||||||
# Make sure the utils module also knows the expected headers
|
# Make sure utils knows the expected headers
|
||||||
from . import utils as core_utils
|
from . import utils as core_utils
|
||||||
if not hasattr(core_utils, "EXPECTED_HEADERS"):
|
if not hasattr(core_utils, "EXPECTED_HEADERS"):
|
||||||
core_utils.EXPECTED_HEADERS = expected
|
core_utils.EXPECTED_HEADERS = _EXPECTED_HEADERS
|
||||||
|
|
||||||
# Hand off to your robust importer
|
# Hand off to your robust importer
|
||||||
report = import_csv_bytes(
|
report = import_csv_bytes(
|
||||||
@ -396,7 +379,7 @@ def import_wizard(request):
|
|||||||
dry_run=form.cleaned_data["dry_run"],
|
dry_run=form.cleaned_data["dry_run"],
|
||||||
)
|
)
|
||||||
|
|
||||||
# Attach header check info for the result template
|
# Attach header check info
|
||||||
report = report or {}
|
report = report or {}
|
||||||
report["header_ok"] = header_ok
|
report["header_ok"] = header_ok
|
||||||
if not header_ok:
|
if not header_ok:
|
||||||
@ -412,9 +395,11 @@ def import_wizard(request):
|
|||||||
)
|
)
|
||||||
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})
|
|
||||||
|
# 👇 stays inside the function
|
||||||
|
return render(request, "import_wizard.html", {"form": form})
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user