diff --git a/celery/app/base.py b/celery/app/base.py index cf2a3ac3671..842e3416070 100644 --- a/celery/app/base.py +++ b/celery/app/base.py @@ -733,7 +733,8 @@ def send_task(self, name, args=None, kwargs=None, countdown=None, options, route_name or name, args, kwargs, task_type) if expires is not None: if isinstance(expires, datetime): - expires_s = (maybe_make_aware(expires) - self.now()).total_seconds() + expires_s = (maybe_make_aware( + expires) - self.now()).total_seconds() else: expires_s = expires diff --git a/requirements/test-ci-default.txt b/requirements/test-ci-default.txt index 953ed9aecc7..e6a3014cf7f 100644 --- a/requirements/test-ci-default.txt +++ b/requirements/test-ci-default.txt @@ -18,6 +18,7 @@ -r extras/cosmosdbsql.txt -r extras/cassandra.txt -r extras/azureblockblob.txt +git+https://github.com/celery/kombu.git # SQS dependencies other than boto pycurl==7.43.0.5 # Latest version with wheel built (for appveyor) diff --git a/t/unit/tasks/test_tasks.py b/t/unit/tasks/test_tasks.py index 89689914f26..ebfe89e1ad7 100644 --- a/t/unit/tasks/test_tasks.py +++ b/t/unit/tasks/test_tasks.py @@ -983,6 +983,17 @@ def test_regular_task(self): name='George Costanza', test_eta=True, test_expires=True, ) + # With ETA, absolute expires in the past in ISO format. + presult2 = self.mytask.apply_async( + kwargs={'name': 'George Costanza'}, + eta=self.now() + timedelta(days=1), + expires=self.now() - timedelta(days=2), + ) + self.assert_next_task_data_equal( + consumer, presult2, self.mytask.name, + name='George Costanza', test_eta=True, test_expires=True, + ) + # Default argsrepr/kwargsrepr behavior presult2 = self.mytask.apply_async( args=('spam',), kwargs={'name': 'Jerry Seinfeld'}