Merge pull request 'bugfix/136-messages-errors-validation' (#155) from bugfix/136-messages-errors-validation into release
Reviewed-on: https://gitea.pangea.org/trustchain-oc1-orchestral/IdHub/pulls/155
This commit is contained in:
commit
4706644826
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -4,6 +4,7 @@ import jsonschema
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
from nacl.exceptions import CryptoError
|
from nacl.exceptions import CryptoError
|
||||||
|
from openpyxl import load_workbook
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
@ -164,7 +165,8 @@ class ImportForm(forms.Form):
|
||||||
self.fields['did'].choices = [
|
self.fields['did'].choices = [
|
||||||
(x.did, x.label) for x in dids.filter(eidas1=False)
|
(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()
|
(x.id, x.name) for x in Schemas.objects.filter()
|
||||||
]
|
]
|
||||||
if dids.filter(eidas1=True).exists():
|
if dids.filter(eidas1=True).exists():
|
||||||
|
@ -184,7 +186,7 @@ class ImportForm(forms.Form):
|
||||||
)
|
)
|
||||||
|
|
||||||
if not did.exists():
|
if not did.exists():
|
||||||
raise ValidationError("Did is not valid!")
|
raise ValidationError(_("Did not valid!"))
|
||||||
|
|
||||||
self._did = did.first()
|
self._did = did.first()
|
||||||
|
|
||||||
|
@ -204,13 +206,13 @@ class ImportForm(forms.Form):
|
||||||
id=data
|
id=data
|
||||||
)
|
)
|
||||||
if not schema.exists():
|
if not schema.exists():
|
||||||
raise ValidationError("Schema is not valid!")
|
raise ValidationError(_("Schema is not valid!"))
|
||||||
|
|
||||||
self._schema = schema.first()
|
self._schema = schema.first()
|
||||||
try:
|
try:
|
||||||
self.json_schema = self._schema.get_credential_subject_schema()
|
self.json_schema = self._schema.get_credential_subject_schema()
|
||||||
except Exception:
|
except Exception:
|
||||||
raise ValidationError("Schema is not valid!")
|
raise ValidationError(_("Schema not valid!"))
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
@ -224,31 +226,47 @@ class ImportForm(forms.Form):
|
||||||
df = pd.read_excel(data)
|
df = pd.read_excel(data)
|
||||||
df.fillna('', inplace=True)
|
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
|
# convert dates to iso 8601
|
||||||
for col in df.select_dtypes(include='datetime').columns:
|
for col in df.select_dtypes(include='datetime').columns:
|
||||||
df[col] = df[col].dt.strftime("%Y-%m-%d")
|
df[col] = df[col].dt.strftime("%Y-%m-%d")
|
||||||
|
|
||||||
# convert numbers to strings if this is indicate in schema
|
# convert numbers to strings if this is indicate in schema
|
||||||
props = self.json_schema.get("properties", {})
|
props = self.json_schema.get("properties", {})
|
||||||
|
|
||||||
for col in df.select_dtypes(include=['number']).columns:
|
for col in df.select_dtypes(include=['number']).columns:
|
||||||
type_col = props.get(col, {}).get("type")
|
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)
|
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:
|
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 = {}
|
row = {}
|
||||||
for k in data_pd.keys():
|
d = data_pd[n]
|
||||||
if data_pd[k][n] or data_pd[k][n] == 0:
|
for k, v in d.items():
|
||||||
row[k] = data_pd[k][n]
|
if d[k] or d[k] == 0:
|
||||||
|
row[k] = d[k]
|
||||||
|
|
||||||
user = self.validate_jsonld(n, row)
|
if row:
|
||||||
self.rows[user] = row
|
user = self.validate_jsonld(n+2, row)
|
||||||
|
if user:
|
||||||
|
self.rows[user] = row
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
@ -273,7 +291,7 @@ class ImportForm(forms.Form):
|
||||||
format_checker=jsonschema.Draft202012Validator.FORMAT_CHECKER
|
format_checker=jsonschema.Draft202012Validator.FORMAT_CHECKER
|
||||||
)
|
)
|
||||||
except jsonschema.exceptions.ValidationError as err:
|
except jsonschema.exceptions.ValidationError as err:
|
||||||
msg = "line {}: {}".format(line+1, err)
|
msg = "line {}: {}".format(line, err.message)
|
||||||
return self.exception(msg)
|
return self.exception(msg)
|
||||||
|
|
||||||
user, new = User.objects.get_or_create(email=row.get('email'))
|
user, new = User.objects.get_or_create(email=row.get('email'))
|
||||||
|
|
|
@ -1071,6 +1071,6 @@ class ImportAddView(NotifyActivateUserByEmail, ImportExport, FormView):
|
||||||
try:
|
try:
|
||||||
self.send_email(user)
|
self.send_email(user)
|
||||||
except SMTPException as e:
|
except SMTPException as e:
|
||||||
messages.error(self.request, e)
|
messages.error(self.request, e.message)
|
||||||
|
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
|
|
Loading…
Reference in New Issue