Skip to content
Snippets Groups Projects
workflow.py 1.02 KiB
Newer Older
from typing import Iterator, Iterable, Sequence, Union
Todd Dembrey's avatar
Todd Dembrey committed
from django.forms import Form


class Workflow(Iterable['Stage']):
    def __init__(self, name: str, stages: Sequence['Stage']) -> None:
        self.name = name
        self.stages = stages
    def __iter__(self) -> Iterator['Stage']:
        yield from self.stages

    def next(self, current_stage: Union['Stage', None]=None) -> Union['Stage', None]:
        if not current_stage:
            return self.stages[0]

        for i, stage in enumerate(self):
            if stage == current_stage:
                try:
Todd Dembrey's avatar
Todd Dembrey committed
                    return self.stages[i + 1]

class Stage:
Todd Dembrey's avatar
Todd Dembrey committed
    def __init__(self, name: str, form: Form, phases: Sequence['Phase']) -> None:
        self.name = name
Todd Dembrey's avatar
Todd Dembrey committed
        self.form = form
Todd Dembrey's avatar
Todd Dembrey committed
        self.phases = phases
    def __iter__(self) -> Iterator['Phase']:
        yield from self.phases

Todd Dembrey's avatar
Todd Dembrey committed

class Phase:
    def __init__(self, name: str) -> None:
        self.name = name