Skip to content
Snippets Groups Projects
workflow.py 963 B
Newer Older
  • Learn to ignore specific revisions
  • 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
    
    Todd Dembrey's avatar
    Todd Dembrey committed
    
    
    class Phase:
        def __init__(self, name: str) -> None:
            self.name = name