import_csv.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. from django.contrib import messages
  2. from django.contrib.auth.decorators import login_required, user_passes_test
  3. from django.http import HttpResponse
  4. from django.shortcuts import redirect, render, reverse
  5. from tickets.operations.csv_importer import CSVImporter
  6. from tickets.utils import staff_check
  7. @login_required
  8. @user_passes_test(staff_check)
  9. def import_csv(request) -> HttpResponse:
  10. """Import a specifically formatted CSV into stored tasks.
  11. """
  12. ctx = {"results": None}
  13. if request.method == "POST":
  14. filepath = request.FILES.get("csvfile")
  15. if not filepath:
  16. messages.error(request, "You must supply a CSV file to import.")
  17. return redirect(reverse("tickets:import_csv"))
  18. importer = CSVImporter()
  19. results = importer.upsert(filepath)
  20. if results:
  21. ctx["results"] = results
  22. else:
  23. messages.error(request, "Could not parse provided CSV file.")
  24. return redirect(reverse("tickets:import_csv"))
  25. return render(request, "tickets/import_csv.html", context=ctx)