подкласс сельдерея Задача

Я пишу много задач, которые очень похожи, и хочу знать, как лучше создать подкласс Task, чтобы уменьшить шаблон. Поскольку задача запускается только один раз, вы не можете помещать вещи в __init__, как показано ниже, но это должно проиллюстрировать суть.

что я пытаюсь выполнить:

class EmailTaskOne(Task):
    def run(self, object_id):
        email_data = EmailData.objects.get(pk=object_id)
        data = self.do_common_stuff(email_data)
        self.do_unique_stuff(data)

class EmailTaskTwo(Task):
    def run(self, object_id):
        email_data = EmailData.objects.get(pk=object_id)
        data = self.do_common_stuff(email_data)
        self.do_unique_stuff2(data)

# lots more tasks like this

То, что я хотел бы иметь, это:

class BaseEmailTask(Task):
     abstract = True
     #...Insert Magic Here...

class EmailTaskOne(BaseEmailTask):
     def run(self, object_id):
         self.do_unique_stuff(self.data)

Итак, поскольку __init__ уже готово, где мне настроить класс в абстрактном классе. Я могу довольно легко определить кучу функций, если все, что я хочу сделать, это выделить некоторые вещи, но некоторые (многие) шаблоны зависят от object_id.


person yarbelk    schedule 13.12.2012    source источник
comment
возможный дубликат задачи сельдерея и настройки декоратора   -  person Louis    schedule 26.02.2015
comment
Пока решение применимо - вопрос задан другой. Таким образом, я не думаю, что это дубликат. Если бы я пытался увеличить СУХОСТЬ своих задач, используя миксины и подклассы задач, я бы не искал «настроить декоратор», а «подкласс» или «миксин» или что-то в этом роде.   -  person yarbelk    schedule 27.02.2015


Ответы (1)


Помогает ли вам мой ответ и ответ MauroRocco?

см. задачу сельдерея и настройте декоратор

Там мне удалось передать аргументы расширенной задаче

person michel.iamit    schedule 05.03.2013
comment
Хотя мне не нравится принимать ответы по ссылкам, это хороший ответ. короче - переопределить метод __call__ вместо __init__ - person yarbelk; 13.10.2014
comment
Это ссылка на мой собственный ответ... здесь тоже подходит - person michel.iamit; 26.02.2015