diff --git a/examples/excel_examples/course-credential.xlsx b/examples/excel_examples/course-credential.xlsx new file mode 100644 index 0000000..e2216a4 Binary files /dev/null and b/examples/excel_examples/course-credential.xlsx differ diff --git a/examples/excel_templates/e-operator-claim.xlsx b/examples/excel_examples/e-operator-claim.xlsx similarity index 100% rename from examples/excel_templates/e-operator-claim.xlsx rename to examples/excel_examples/e-operator-claim.xlsx diff --git a/examples/excel_templates/federation-membership.xlsx b/examples/excel_examples/federation-membership.xlsx similarity index 100% rename from examples/excel_templates/federation-membership.xlsx rename to examples/excel_examples/federation-membership.xlsx diff --git a/examples/excel_templates/financial-vulnerability.xlsx b/examples/excel_examples/financial-vulnerability.xlsx similarity index 100% rename from examples/excel_templates/financial-vulnerability.xlsx rename to examples/excel_examples/financial-vulnerability.xlsx diff --git a/examples/excel_templates/membership-card.xlsx b/examples/excel_examples/membership-card.xlsx similarity index 100% rename from examples/excel_templates/membership-card.xlsx rename to examples/excel_examples/membership-card.xlsx diff --git a/examples/excel_templates/course-credential.xlsx b/examples/excel_templates/course-credential.xlsx deleted file mode 100644 index 9f4eb45..0000000 Binary files a/examples/excel_templates/course-credential.xlsx and /dev/null differ diff --git a/examples/excel_templates/device-purchase.xlsx b/examples/excel_templates/device-purchase.xlsx deleted file mode 100644 index 0a0a924..0000000 Binary files a/examples/excel_templates/device-purchase.xlsx and /dev/null differ diff --git a/examples/financial-vulnerability.xlsx b/examples/financial-vulnerability.xlsx deleted file mode 100644 index eb016f3..0000000 Binary files a/examples/financial-vulnerability.xlsx and /dev/null differ diff --git a/examples/membership-card.xls b/examples/membership-card.xls deleted file mode 100644 index bd10538..0000000 Binary files a/examples/membership-card.xls and /dev/null differ diff --git a/idhub/admin/forms.py b/idhub/admin/forms.py index 35ba89c..1da752d 100644 --- a/idhub/admin/forms.py +++ b/idhub/admin/forms.py @@ -4,6 +4,7 @@ import jsonschema import pandas as pd from nacl.exceptions import CryptoError +from openpyxl import load_workbook from django import forms from django.core.cache import cache from django.utils.translation import gettext_lazy as _ @@ -164,7 +165,8 @@ class ImportForm(forms.Form): self.fields['did'].choices = [ (x.did, x.label) for x in dids.filter(eidas1=False) ] - self.fields['schema'].choices = [(0, _('Select one'))] + [ + txt_select_one = _("Please choose a data schema ...") + self.fields['schema'].choices = [(0,txt_select_one)] + [ (x.id, x.name) for x in Schemas.objects.filter() ] if dids.filter(eidas1=True).exists(): @@ -184,7 +186,7 @@ class ImportForm(forms.Form): ) if not did.exists(): - raise ValidationError("Did is not valid!") + raise ValidationError(_("Did not valid!")) self._did = did.first() @@ -204,13 +206,13 @@ class ImportForm(forms.Form): id=data ) if not schema.exists(): - raise ValidationError("Schema is not valid!") + raise ValidationError(_("Schema is not valid!")) self._schema = schema.first() try: self.json_schema = self._schema.get_credential_subject_schema() except Exception: - raise ValidationError("Schema is not valid!") + raise ValidationError(_("Schema not valid!")) return data @@ -224,31 +226,47 @@ class ImportForm(forms.Form): df = pd.read_excel(data) df.fillna('', inplace=True) + try: + workbook = load_workbook(data) + # if no there are schema meen than is a excel costum and you + # don't have control abour that + if 'Schema' in workbook.custom_doc_props.names: + excel_schema = workbook.custom_doc_props['Schema'].value + file_schema = self._schema.file_schema.split('.json')[0] + assert file_schema in excel_schema + except Exception: + txt = _("This File does not correspond to this scheme!") + raise ValidationError(txt) + # convert dates to iso 8601 for col in df.select_dtypes(include='datetime').columns: df[col] = df[col].dt.strftime("%Y-%m-%d") # convert numbers to strings if this is indicate in schema props = self.json_schema.get("properties", {}) + for col in df.select_dtypes(include=['number']).columns: type_col = props.get(col, {}).get("type") - if "string" in type_col: + if type_col and "string" in type_col: df[col] = df[col].astype(str) - data_pd = df.to_dict() + data_pd = df.to_dict(orient='index') if not data_pd or df.last_valid_index() is None: - self.exception("The file you try to import is empty!") + self.exception(_("The file you try to import is empty!")) - for n in range(df.last_valid_index()+1): + for n in data_pd.keys(): row = {} - for k in data_pd.keys(): - if data_pd[k][n] or data_pd[k][n] == 0: - row[k] = data_pd[k][n] + d = data_pd[n] + for k, v in d.items(): + if d[k] or d[k] == 0: + row[k] = d[k] - user = self.validate_jsonld(n, row) - self.rows[user] = row + if row: + user = self.validate_jsonld(n+2, row) + if user: + self.rows[user] = row return data @@ -273,7 +291,7 @@ class ImportForm(forms.Form): format_checker=jsonschema.Draft202012Validator.FORMAT_CHECKER ) except jsonschema.exceptions.ValidationError as err: - msg = "line {}: {}".format(line+1, err) + msg = "line {}: {}".format(line, err.message) return self.exception(msg) user, new = User.objects.get_or_create(email=row.get('email')) diff --git a/idhub/admin/views.py b/idhub/admin/views.py index b670889..e2dd58f 100644 --- a/idhub/admin/views.py +++ b/idhub/admin/views.py @@ -1071,6 +1071,6 @@ class ImportAddView(NotifyActivateUserByEmail, ImportExport, FormView): try: self.send_email(user) except SMTPException as e: - messages.error(self.request, e) + messages.error(self.request, e.message) return super().form_valid(form)