From 567a7b713dfaeb4abfd1e330caa15dbfc1616e89 Mon Sep 17 00:00:00 2001 From: spoksss Date: Fri, 7 Dec 2018 18:55:03 +0100 Subject: [PATCH 1/2] DatabaseScheduler ignores 'expires' option Fix: #393 --- djcelery/schedulers.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/djcelery/schedulers.py b/djcelery/schedulers.py index 29d32b9d..a4aa82e4 100644 --- a/djcelery/schedulers.py +++ b/djcelery/schedulers.py @@ -138,6 +138,13 @@ def from_entry(cls, name, skip_fields=('relative', 'options'), **entry): obj, _ = PeriodicTask._default_manager.update_or_create( name=name, defaults=fields, ) + expires = options.get('expires') + if expires and not obj.expires: + # if expires is not properly recognized from options + # delete django DateTimeField from the model instance + # and use just simple int as attribute for this call + del obj.expires + obj.expires = expires return cls(obj) def __repr__(self): From 29e97c20909c814bd20d9709c120b0b72a60007a Mon Sep 17 00:00:00 2001 From: Asif Saif Uddin Date: Mon, 19 May 2025 11:37:04 +0000 Subject: [PATCH 2/2] Update djcelery/schedulers.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- djcelery/schedulers.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/djcelery/schedulers.py b/djcelery/schedulers.py index a4aa82e4..21dc4cf3 100644 --- a/djcelery/schedulers.py +++ b/djcelery/schedulers.py @@ -141,12 +141,27 @@ def from_entry(cls, name, skip_fields=('relative', 'options'), **entry): expires = options.get('expires') if expires and not obj.expires: # if expires is not properly recognized from options - # delete django DateTimeField from the model instance - # and use just simple int as attribute for this call - del obj.expires - obj.expires = expires + # Use a helper function to handle the deletion and reassignment + # of the `expires` field. This ensures clarity and maintainability. + self._handle_expires_field(obj, expires) return cls(obj) + @staticmethod + def _handle_expires_field(obj, expires): + """ + Safely handle the deletion and reassignment of the `expires` field. + + This is necessary because the `expires` field might not be properly + recognized from options, and we need to reset it as a simple attribute. + + Args: + obj: The model instance (PeriodicTask). + expires: The new value to assign to the `expires` field. + """ + # Delete the `expires` field from the model instance + del obj.expires + # Reassign the `expires` attribute with the provided value + obj.expires = expires def __repr__(self): return ''.format( safe_str(self.name), self.task, safe_repr(self.args),