Exemple #1
0
class ShippingWorkflow(models.Shipment):
    checkout = tasks.StartView(fields=["shipping_address", "email"])

    ship = tasks.UpdateView(fields=["tracking_code"])

    def has_email(self, task):
        if self.email:
            return [self.send_tracking_code]

    def send_tracking_code(self, task):
        send_mail(
            subject="Your tracking code",
            message=self.tracking_code,
            from_email=None,
            recipient_list=[self.email],
        )

    def end(self, task):
        pass

    edges = [
        (checkout, ship),
        (ship, has_email),
        (has_email, send_tracking_code),
        (has_email, end),
        (send_tracking_code, end),
    ]

    class Meta:
        proxy = True
Exemple #2
0
class WelcomeWorkflow(models.WelcomeWorkflowState):
    start = tasks.StartView(fields=["user"])

    def has_user(self):
        if self.user:
            return [self.send_welcome_email]
        else:
            return [self.end]

    def send_welcome_email(self):
        self.user.email_user(
            subject="Welcome",
            message="Hello %s!" % self.user.get_short_name(),
        )

    def end(self):
        pass

    edges = [
        (start, has_user),
        (has_user, end),
        (has_user, send_welcome_email),
        (send_welcome_email, end),
    ]

    class Meta:
        proxy = True
Exemple #3
0
class SplitJoinWorkflow(models.SplitJoinWorkflowState):
    start = tasks.StartView(fields=[])

    def split(self):
        return [self.batman, self.robin]

    def batman(self):
        self.parallel_task_value += 1
        self.save(update_fields=["parallel_task_value"])

    def robin(self):
        self.parallel_task_value += 1
        self.save(update_fields=["parallel_task_value"])

    join = tasks.Join("batman", "robin")

    edges = (
        (start, split),
        (split, batman),
        (split, robin),
        (batman, join),
        (robin, join),
    )

    class Meta:
        proxy = True
Exemple #4
0
class WelcomeWorkflow(Workflow):
    # state
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        blank=True,
        null=True,
    )

    # behavior
    start = tasks.StartView(fields=["user"])

    def has_user(self):
        if self.user:
            return [self.send_welcome_email]
        else:
            return [self.end]

    def send_welcome_email(self):
        self.user.email_user(
            subject="Welcome",
            message="Hello %s!" % self.user.get_short_name(),
        )

    def end(self):
        pass

    edges = [
        (start, has_user),
        (has_user, end),
        (has_user, send_welcome_email),
        (send_welcome_email, end),
    ]
Exemple #5
0
class SimpleWorkflow(models.SimpleWorkflowState):
    start_view = tasks.StartView(fields="__all__", path="custom/postfix/")
    start_method = tasks.Start()
    save_the_princess = tasks.UpdateView(fields="__all__")

    def end(self):
        pass

    edges = (
        (start_view, save_the_princess),
        (start_method, save_the_princess),
        (save_the_princess, end),
    )

    class Meta:
        proxy = True
Exemple #6
0
class GatewayWorkflow(models.GatewayWorkflowState):
    start = tasks.StartView(fields="__all__")

    save_the_princess = tasks.UpdateView()

    def is_princess_safe(self):
        return [self.happy_end]

    happy_end = lambda s, task: s.finish()
    bad_end = lambda s, task: s.finish()

    edges = (
        (start, is_princess_safe),
        (is_princess_safe, happy_end),
        (is_princess_safe, bad_end),
    )

    class Meta:
        proxy = True
Exemple #7
0
class LoopWorkflow(models.LoopWorkflowState):
    start = tasks.StartView(fields=[])

    def increment_counter(self):
        self.counter += 1
        self.save(update_fields=["counter"])

    def is_counter_10(self):
        if self.counter == 10:
            return [self.end]
        return [self.increment_counter]

    def end(self):
        pass

    edges = (
        (start, increment_counter),
        (increment_counter, is_counter_10),
        (is_counter_10, increment_counter),
        (is_counter_10, end),
    )

    class Meta:
        proxy = True
Exemple #8
0
class WelcomeProcess(WelcomeProcessState, Process):
    start = tasks.StartView(fields=['user'])

    def has_user(self):
        if self.user:
            return [self.send_welcome_email]
        else:
            return [self.end]

    def send_welcome_email(self):
        self.user.email_user(
            subject='Welcome',
            message='Hello %s!' % self.user.get_short_name(),
        )

    def end(self):
        pass

    edges = (
        (start, has_user),
        (has_user, end),
        (has_user, send_welcome_email),
        (send_welcome_email, end),
    )