11617 validate bulk import fields

This commit is contained in:
Arthur 2023-04-24 12:57:34 -07:00 committed by Jeremy Stretch
parent ef33aa9fce
commit 18b98e641c
2 changed files with 11 additions and 2 deletions

View File

@ -21,6 +21,7 @@ from utilities.error_handlers import handle_protectederror
from utilities.exceptions import AbortRequest, AbortTransaction, PermissionsViolation from utilities.exceptions import AbortRequest, AbortTransaction, PermissionsViolation
from utilities.forms import BulkRenameForm, ConfirmationForm, restrict_form_fields from utilities.forms import BulkRenameForm, ConfirmationForm, restrict_form_fields
from utilities.forms.bulk_import import BulkImportForm from utilities.forms.bulk_import import BulkImportForm
from utilities.forms.utils import validate_import_headers
from utilities.htmx import is_embedded, is_htmx from utilities.htmx import is_embedded, is_htmx
from utilities.permissions import get_permission_for_model from utilities.permissions import get_permission_for_model
from utilities.utils import get_viewname from utilities.utils import get_viewname
@ -395,6 +396,14 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView):
model_form_kwargs['headers'] = form._csv_headers # Add CSV headers model_form_kwargs['headers'] = form._csv_headers # Add CSV headers
model_form = self.model_form(**model_form_kwargs) model_form = self.model_form(**model_form_kwargs)
# validate the fields (required fields are present and no unknown fields)
form_fields = model_form.fields
required_fields = [
name for name, field in form_fields.items() if field.required
]
headers = list(record.keys())
validate_import_headers(headers, form_fields, required_fields)
# When updating, omit all form fields other than those specified in the record. (No # When updating, omit all form fields other than those specified in the record. (No
# fields are required when modifying an existing object.) # fields are required when modifying an existing object.)
if object_id: if object_id:

View File

@ -18,7 +18,7 @@ __all__ = (
'parse_numeric_range', 'parse_numeric_range',
'restrict_form_fields', 'restrict_form_fields',
'parse_csv', 'parse_csv',
'validate_csv', 'validate_import_headers',
) )
@ -242,7 +242,7 @@ def parse_csv(reader):
return headers, records return headers, records
def validate_csv(headers, fields, required_fields): def validate_import_headers(headers, fields, required_fields):
""" """
Validate that parsed csv data conforms to the object's available fields. Raise validation errors Validate that parsed csv data conforms to the object's available fields. Raise validation errors
if parsed csv data contains invalid headers or does not contain required headers. if parsed csv data contains invalid headers or does not contain required headers.