summaryrefslogtreecommitdiff
path: root/ishtar_common/views.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2023-10-23 12:36:44 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2024-04-16 16:38:32 +0200
commit94a4a57148d2c81dbbc1251b7e79ba09282af217 (patch)
treee37714d36079e8af4d8e972d16859c6bc338b406 /ishtar_common/views.py
parent406252c203e6863aa4ae02619037f13439706f98 (diff)
downloadIshtar-94a4a57148d2c81dbbc1251b7e79ba09282af217.tar.bz2
Ishtar-94a4a57148d2c81dbbc1251b7e79ba09282af217.zip
✨ imports: allow errors to be pointed out line by line
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r--ishtar_common/views.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 8f8ecb5a6..b91f3202c 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -2075,6 +2075,7 @@ def import_get_status(request, current_right=None):
"full_id": ("group-" if key == "group" else "") + str(item.id),
"state": item.state,
"status": str(item.status),
+ "has_error": item.has_error
}
if key == "import":
item_dct.update({
@@ -2182,6 +2183,16 @@ class ImportCSVView(IshtarMixin, LoginRequiredMixin, TemplateView):
encoding = self.import_item.encoding
data["icon"], data["target"] = self.TITLES[self.kwargs["target"]]
data["title"] = str(self.import_item)
+ line_errors = []
+ has_line_errors = False
+ if self.kwargs["target"] == "error":
+ has_line_errors = True
+ q = models.ImportLineError.objects.filter(import_item=self.import_item)
+ if not q.count():
+ self.import_item.parse_error_file()
+ line_errors = models.ImportLineError.objects.filter(
+ import_item=self.import_item).values_list("pk", "ignored")
+ data["has_line_errors"] = has_line_errors
data["content"] = []
with open(self.csv_file.path, "r", encoding=encoding) as f:
reader = csv.reader(f)
@@ -2189,11 +2200,33 @@ class ImportCSVView(IshtarMixin, LoginRequiredMixin, TemplateView):
if not idx:
data["header"] = line
continue
+ if line_errors and len(line_errors) >= idx:
+ line = [line_errors[idx - 1]] + line
data["content"].append(line)
data["window_id"] = "csv-view-" + (self.kwargs.get("group", "") or "") + str(self.import_item.pk)
+ data["import_id"] = self.import_item.pk
return data
+def line_error(request, line_id):
+ """
+ Set or unset ignored state of a csv error file
+ """
+ user = request.user
+ if not user.pk:
+ raise Http404()
+ q = models.ImportLineError.objects.filter(pk=line_id)
+ if not q.count():
+ return
+ line = q.all()[0]
+ q = models.Import.query_can_access(request.user).filter(pk=line.import_item_id)
+ if not q.count():
+ raise Http404()
+ line.ignored = not line.ignored
+ line.save()
+ return HttpResponse(content_type="text/plain")
+
+
class PersonCreate(LoginRequiredMixin, CreateView):
model = models.Person
form_class = forms.BasePersonForm