diff options
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 |
commit | 94a4a57148d2c81dbbc1251b7e79ba09282af217 (patch) | |
tree | e37714d36079e8af4d8e972d16859c6bc338b406 /ishtar_common/views.py | |
parent | 406252c203e6863aa4ae02619037f13439706f98 (diff) | |
download | Ishtar-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.py | 33 |
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 |