Skip to content

Commit a596a9b

Browse files
committed
Fix comparing offset-naive and offset-aware datetimes
Replaced `datetime.datetime.utcnow()` with `datetime_utcnow()` to ensure consistent offset-aware datetime comparisons when sorting jobs by `enqueued_at` and avoid errors. Replace all creations of utc datetime with the grimoirelab_toolkit datetime_utcnow method for consistency. Signed-off-by: Jose Javier Merchante <[email protected]>
1 parent 9c55384 commit a596a9b

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

sortinghat/core/jobs.py

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

3232
from django.core.exceptions import ObjectDoesNotExist
3333
from django.db import IntegrityError, transaction, connection
34+
from grimoirelab_toolkit.datetime import datetime_utcnow
3435
from rq.job import Job
3536

3637
from .db import find_individual_by_uuid, find_organization
@@ -136,7 +137,7 @@ def job_in_tenant(job, tenant):
136137
jobs = (queue.jobs + started_jobs + deferred_jobs + finished_jobs + failed_jobs + scheduled_jobs)
137138
jobs = (job for job in jobs if job_in_tenant(job, tenant))
138139

139-
sorted_jobs = sorted(jobs, key=lambda x: x.enqueued_at if x.enqueued_at else datetime.datetime.utcnow(), reverse=True)
140+
sorted_jobs = sorted(jobs, key=lambda x: x.enqueued_at if x.enqueued_at else datetime_utcnow(), reverse=True)
140141

141142
logger.debug(f"List of jobs retrieved; total jobs: {len(sorted_jobs)};")
142143

@@ -881,7 +882,7 @@ def schedule_task(ctx, fn, task, scheduled_datetime=None, **kwargs):
881882
"""Schedule a task at a specific time and return the job created"""
882883

883884
if not scheduled_datetime:
884-
scheduled_datetime = datetime.datetime.now(datetime.timezone.utc)
885+
scheduled_datetime = datetime_utcnow()
885886

886887
job = get_tenant_queue(ctx.tenant).enqueue_at(datetime=scheduled_datetime,
887888
f=fn,
@@ -942,7 +943,7 @@ def on_success_job(job, connection, result, *args, **kwargs):
942943
logger.error("ScheduledTask not found. Not rescheduling.")
943944
return
944945

945-
task.last_execution = datetime.datetime.now(datetime.timezone.utc)
946+
task.last_execution = datetime_utcnow()
946947
task.executions = task.executions + 1
947948
task.failed = False
948949

@@ -958,7 +959,7 @@ def on_success_job(job, connection, result, *args, **kwargs):
958959
task.scheduled_datetime = None
959960
task.job_id = None
960961
else:
961-
scheduled_datetime = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(minutes=task.interval)
962+
scheduled_datetime = datetime_utcnow() + datetime.timedelta(minutes=task.interval)
962963
ctx = job.kwargs.pop('ctx')
963964
schedule_task(ctx, job.func, task, scheduled_datetime=scheduled_datetime, **job.kwargs)
964965

@@ -979,7 +980,7 @@ def on_failed_job(job, connection, result, *args, **kwargs):
979980
logger.error("ScheduledTask not found. Not rescheduling.")
980981
return
981982

982-
task.last_execution = datetime.datetime.now(datetime.timezone.utc)
983+
task.last_execution = datetime_utcnow()
983984
task.executions = task.executions + 1
984985
task.failures = task.failures + 1
985986
task.failed = True
@@ -989,7 +990,7 @@ def on_failed_job(job, connection, result, *args, **kwargs):
989990
task.scheduled_datetime = None
990991
task.job_id = None
991992
else:
992-
scheduled_datetime = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(minutes=task.interval)
993+
scheduled_datetime = datetime_utcnow() + datetime.timedelta(minutes=task.interval)
993994
ctx = job.kwargs.pop('ctx')
994995
schedule_task(ctx, job.func, task, scheduled_datetime=scheduled_datetime, **job.kwargs)
995996
logger.info(f"Reschedule task ID '{task.id}' at '{scheduled_datetime}'.")

0 commit comments

Comments
 (0)