Skip to content

Commit

Permalink
Add skipped errors field
Browse files Browse the repository at this point in the history
  • Loading branch information
yalef committed Feb 5, 2024
1 parent 20c1526 commit 965b8bc
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 0 deletions.
5 changes: 5 additions & 0 deletions import_export_extensions/api/serializers/import_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ class ImportJobSerializer(serializers.ModelSerializer):
source="*",
read_only=True,
)
skipped_errors = details.SkippedErrorsSerializer(
source="*",
read_only=True,
)
importing_data = details.ImportingDataSerializer(
read_only=True,
source="*",
Expand All @@ -67,6 +71,7 @@ class Meta:
"totals",
"parse_error",
"input_error",
"skipped_errors",
"is_all_rows_shown",
"importing_data",
"input_errors_file",
Expand Down
32 changes: 32 additions & 0 deletions import_export_extensions/api/serializers/import_job_details.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,3 +153,35 @@ def to_representation(self, instance):
if instance.import_status not in models.ImportJob.success_statuses:
return False
return instance.result.total_rows == len(instance.result.rows)


class SkippedErrorsSerializer(serializers.Serializer):
"""Serializer for import job skipped rows."""

non_field_skipped_errors = serializers.ListField(
child=serializers.CharField(),
)
field_skipped_errors = serializers.DictField(
child=serializers.ListField(child=serializers.CharField()),
)

def to_representation(self, instance: models.ImportJob):
"""Parse skipped errors from import job result."""
if (
instance.import_status
not in models.ImportJob.results_statuses
):
return super().to_representation(self.get_initial())
skipped_errors = {
"non_field_skipped_errors": [],
"field_skipped_errors": {},
}
for row in instance.result.skipped_rows:
non_field_errors = [
error.error for error in row.non_field_skipped_errors
]
skipped_errors["non_field_skipped_errors"].extend(non_field_errors)
for field, errors in row.field_skipped_errors.items():
errors = [error.messages for error in errors]
skipped_errors["field_skipped_errors"][field] = errors
return super().to_representation(skipped_errors)

0 comments on commit 965b8bc

Please sign in to comment.