celery-once icon indicating copy to clipboard operation
celery-once copied to clipboard

Support graceful at config.ONCE level

Open gigatesseract opened this issue 4 months ago • 2 comments

I am writing a django app with celery once and if a task is already queued, I dont want to raise an exception, so I want to add graceful option to the task.

Now, I want that config for all the tasks that I have written, so that I dont have to specify that config evertytime.

From the code,

once_graceful = once_options.get(
            'graceful', self.once.get('graceful', False))

So I can override this in the following places - * At the apply_async call level * When I am defining the once property for my task

The problems I think will arise with respect to maintenance - * I have to do that for all the tasks I have coded * Since I will have to override the entire once object, in the future, if any defaults are added by the package maintainers, it will be overwritten.

I want to override it at the config.ONCE level so that I can just add it to the app.

I was looking at timeout, and I see something like this-

        once_timeout = once_options.get(
            'timeout', self.once.get('timeout', self.default_timeout))


    @property
    def once_config(self):
        return self.config.ONCE

    @property
    def default_timeout(self):
        return self.once_config['settings'].get('default_timeout', 60 * 60)

So, what I want to do is something like

in the app, have a property for graceful

    @property
    def graceful(self):
        return self.once_config['settings'].get('graceful', False)

Then overwrite it during apply_Async from the property as default. This will help anyone override the graceful config at app level

Let me know yuour thoughts

gigatesseract avatar Sep 30 '24 20:09 gigatesseract