Skip to content

Commit d691729

Browse files
committed
Added error rows import handling
1 parent cd6d64d commit d691729

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

src/signals/resources.py

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from import_export import resources
44
from import_export.fields import Field, widgets
5+
from import_export.results import RowResult
56

67
from datasources.models import SourceSubdivision
78
from datasources.resources import process_links
@@ -152,7 +153,35 @@ def process_base(row) -> None:
152153
row["base"] = base_signal.id
153154

154155

155-
class SignalBaseResource(resources.ModelResource):
156+
class ModelResource(resources.ModelResource):
157+
def get_field_names(self):
158+
names = []
159+
for field in self.get_fields():
160+
names.append(self.get_field_name(field))
161+
return names
162+
163+
def import_row(self, row, instance_loader, **kwargs):
164+
# overriding import_row to ignore errors and skip rows that fail to import
165+
# without failing the entire import
166+
import_result = super(ModelResource, self).import_row(
167+
row, instance_loader, **kwargs
168+
)
169+
170+
if import_result.import_type in [RowResult.IMPORT_TYPE_ERROR, RowResult.IMPORT_TYPE_INVALID]:
171+
import_result.diff = [row.get(name, "") for name in self.get_field_names()]
172+
173+
# Add a column with the error message
174+
import_result.diff.append(
175+
"Errors: {}".format([err.error for err in import_result.errors])
176+
)
177+
# clear errors and mark the record to skip
178+
import_result.errors = []
179+
import_result.import_type = RowResult.IMPORT_TYPE_SKIP
180+
181+
return import_result
182+
183+
184+
class SignalBaseResource(ModelResource):
156185
"""
157186
Resource class for importing Signals base.
158187
"""
@@ -180,7 +209,7 @@ def before_import_row(self, row, **kwargs) -> None:
180209
process_base(row)
181210

182211

183-
class SignalResource(resources.ModelResource):
212+
class SignalResource(ModelResource):
184213
"""
185214
Resource class for importing and exporting Signal models
186215
"""

0 commit comments

Comments
 (0)