Skip to content

Commit 5164534

Browse files
twz915auvipy
authored andcommitted
fix _default_now is_aware bug (#216)
Traceback (most recent call last): File "/home/tu/.virtualenvs/auto-ci/lib/python2.7/site-packages/billiard/process.py", line 327, in _bootstrap self.run() File "/home/tu/.virtualenvs/auto-ci/lib/python2.7/site-packages/celery/beat.py", line 664, in run self.service.start(embedded_process=True) File "/home/tu/.virtualenvs/auto-ci/lib/python2.7/site-packages/celery/beat.py", line 588, in start interval = self.scheduler.tick() File "/home/tu/.virtualenvs/auto-ci/lib/python2.7/site-packages/celery/beat.py", line 293, in tick self.populate_heap() File "/home/tu/.virtualenvs/auto-ci/lib/python2.7/site-packages/celery/beat.py", line 267, in populate_heap is_due, next_call_delay = entry.is_due() File "/home/tu/workspace/auto-ci/django_celery_beat/schedulers.py", line 119, in is_due if now < self.model.start_time: TypeError: can't compare offset-naive and offset-aware datetimes
1 parent 832525a commit 5164534

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

django_celery_beat/schedulers.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,10 @@ def is_due(self):
112112

113113
# START DATE: only run after the `start_time`, if one exists.
114114
if self.model.start_time is not None:
115-
now = maybe_make_aware(self._default_now())
115+
now = self._default_now()
116+
if getattr(settings, 'DJANGO_CELERY_BEAT_TZ_AWARE', True):
117+
now = maybe_make_aware(self._default_now())
118+
116119
if now < self.model.start_time:
117120
# The datetime is before the start date - don't run.
118121
# send a delay to retry on start_time
@@ -133,12 +136,14 @@ def is_due(self):
133136
return self.schedule.is_due(self.last_run_at)
134137

135138
def _default_now(self):
136-
now = self.app.now()
137139
# The PyTZ datetime must be localised for the Django-Celery-Beat
138140
# scheduler to work. Keep in mind that timezone arithmatic
139141
# with a localized timezone may be inaccurate.
140142
if getattr(settings, 'DJANGO_CELERY_BEAT_TZ_AWARE', True):
143+
now = self.app.now()
141144
now = now.tzinfo.localize(now.replace(tzinfo=None))
145+
else:
146+
now = datetime.datetime.now()
142147
return now
143148

144149
def __next__(self):

0 commit comments

Comments
 (0)