From ab480084007bf4fec39d54b833d602716d3178f2 Mon Sep 17 00:00:00 2001 From: Jose Javier Merchante Date: Wed, 29 Oct 2025 10:24:52 +0100 Subject: [PATCH 1/2] Handle DataError in IdentitiesImporter Skip identities that raise DataError exceptions in the Importer class. This could be raised for example when a field is too big. Signed-off-by: Jose Javier Merchante --- .../importing-identities-with-oversized-fields-failed.yml | 8 ++++++++ sortinghat/core/importer/backend.py | 4 ++++ 2 files changed, 12 insertions(+) create mode 100644 releases/unreleased/importing-identities-with-oversized-fields-failed.yml diff --git a/releases/unreleased/importing-identities-with-oversized-fields-failed.yml b/releases/unreleased/importing-identities-with-oversized-fields-failed.yml new file mode 100644 index 00000000..ba37d22d --- /dev/null +++ b/releases/unreleased/importing-identities-with-oversized-fields-failed.yml @@ -0,0 +1,8 @@ +--- +title: Importing identities with oversized fields failed +category: fixed +author: Jose Javier Merchante +issue: null +notes: > + Fix a bug where importing identities with a large field (e.g., username) + caused the whole process to fail. Now, such identities are skipped instead. diff --git a/sortinghat/core/importer/backend.py b/sortinghat/core/importer/backend.py index 33cee083..ce32cfd2 100644 --- a/sortinghat/core/importer/backend.py +++ b/sortinghat/core/importer/backend.py @@ -21,6 +21,8 @@ import logging +from django.db import DataError + import sortinghat.core.importer.backends from grimoirelab_toolkit.introspect import inspect_signature_parameters from .. import api @@ -151,6 +153,8 @@ def __load_identities(self, identities): nidentities += 1 except InvalidValueError as e: logger.warning(str(e)) + except DataError as e: + logger.warning(f"Data error inserting identity: {e}") except AlreadyExistsError as e: stored_identity = Identity.objects.get(source=identity.source, email=identity.email, From 9d0e8df1ef08e691d09db1bdc538015c40bd64b4 Mon Sep 17 00:00:00 2001 From: Jose Javier Merchante Date: Wed, 29 Oct 2025 10:51:49 +0100 Subject: [PATCH 2/2] Fix importer from_date not JSON serializable Fix a bug that causes importer to not reschedule tasks because the from_date was not JSON serializable when inserting in the database. Signed-off-by: Jose Javier Merchante --- .../unreleased/importer-failed-to-reschedule-tasks.yml | 9 +++++++++ sortinghat/core/jobs.py | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 releases/unreleased/importer-failed-to-reschedule-tasks.yml diff --git a/releases/unreleased/importer-failed-to-reschedule-tasks.yml b/releases/unreleased/importer-failed-to-reschedule-tasks.yml new file mode 100644 index 00000000..987026ab --- /dev/null +++ b/releases/unreleased/importer-failed-to-reschedule-tasks.yml @@ -0,0 +1,9 @@ +--- +title: Importer failed to reschedule tasks +category: fixed +author: Jose Javier Merchante +issue: null +notes: > + Fix a bug that prevented the importer from rescheduling tasks + because `from_date` was not JSON serializable when inserting into + the database. diff --git a/sortinghat/core/jobs.py b/sortinghat/core/jobs.py index 8e3470c4..dcdb74a3 100644 --- a/sortinghat/core/jobs.py +++ b/sortinghat/core/jobs.py @@ -952,8 +952,8 @@ def on_success_job(job, connection, result, *args, **kwargs): backends = find_import_identities_backends() backend_name = task.args['backend_name'] if 'from_date' in backends[backend_name]['args']: - job.kwargs['from_date'] = task.scheduled_datetime - task.args['from_date'] = task.scheduled_datetime + job.kwargs['from_date'] = task.scheduled_datetime.isoformat() + task.args['from_date'] = task.scheduled_datetime.isoformat() if not task.interval: logger.info("Interval not defined, not rescheduling task.")