Skip to main content

viewlflow that support django rest framework

Project description

viewflow-rest

provide restful viewflow

many of code in the project looks like django-viewflow. I want to keep the interface as same as the django viewflow.

Thanks you for all the contributors of viewflow.

The project is under ONLY USER NO PRIVATE CHANGE LICENSE, any one who change the source code (even if you just use it in intranet of just at home) should publish his code to public

Example

source code

class HireFlow(flows.Flow):

    process_class = models.HireProcess
    task_class = models.HireTask

    start = nodes.Start(
        viewclass=rest_extensions.AutoCreateAPIView,
        serializer_class=serializers.AddCandidateSerializer,
    ).Permission(
        group=Group.objects.get_or_create(name="hr")[0]
    ).Next(
        this.split_to_3rd_and_direct_leader
    )

    split_to_3rd_and_direct_leader = nodes.Split(
    ).Always(
        this.approve
    ).Always(
        this.background_research
    )

    background_research = nodes.View(
        viewclass=rest_extensions.AutoUpdateAPIView,
        fields=["background_ok"],
    ).Next(
        this.check_background
    )

    check_background = nodes.If(
        cond=lambda activation: activation.process.background_ok
    ).Then(
        this.join_on_both_approve
    ).Else(
        this.end
            )

    join_on_both_approve = nodes.Join().Next(
        this.notify
    )

    notify = nodes.View(
        viewclass=rest_extensions.AutoUpdateAPIView,
        fields=["notified"],
    ).Next(
        this.end
    )

    approve = nodes.View(
        viewclass=rest_extensions.AutoUpdateAPIView,
        serializer_class = serializers.ApproveSerializer,
        # fields=["approved"],
    ).Permission(
        group=Group.objects.get_or_create(name="leader")[0]
    ).Next(
        this.check_if_approve
    )

    check_if_approve = nodes.If(
        cond=lambda activation: activation.process.approved
    ).Then(
        this.set_salary
    ).Else(
        this.notify
    )

    set_salary = nodes.View(
        viewclass=rest_extensions.AutoUpdateAPIView,
        fields=["salary"],
    ).Permission(
        group=Group.objects.get_or_create(name="hr")[0]
    ).Next(
        this.join_on_both_approve
    )

    end = nodes.End()
  • 中文版
  • English

Quick Start

use the example_project as a example

git clone git@github.com:ramwin/viewflow-rest.git
cd vieflow-rest/example_project/
sudo pip3 install -r ./requirements.txt
python3 manage.py migrate
python3 manage.py runserver
# visit http://localhost:8000/exam/ or http://localhost:8000/hire/ to get the api

FAQ

  • How To Update the Task manually
task = models.FlowTaskModel.objects.get(id=4)
task.auto_finish(operator=User) or operator=None

The develop vedio can been seen here

  1. create project
  2. create Flow
  3. Create Start & End Node
  4. Create ViewActivation
  5. Create If Node
  6. Create Split Node
  7. Create Join Node
  8. Create Permission
  9. 0.3.0
    • one task for every flow_task
    • add serializer_class parameters for rest_extentions.views
    • add operator for every task

term

workflow

A flow contains many flow_tasks/nodes

# here exam_flow is a workflow
# it contains three flow_tasks, which were register, do, end
class ExamFlow(flows.Flow):
    register = nodes.Start(
        ...
    ).Next(this.do)
    do.nodes.View(
        ...
    ).Next(this.end)
    end = nodes.End()
exam_flow = ExamFlow()

every flow_task is a instance of Node every flow_task have a activation_class
every action_class instance will activate_next by

self.flow_task._next  // the next node instance
self.flow_task._next.activate // 

flow_task

Edge

  • src: source Node instance
  • dst: target Node instance

activations

  • Attribute
    • flow_class
    • flow_task: Node Instance defined in the flows.py
    • task: Current Task

Nodes

  • Function
    • _incoming: Edge Instance list
    • _outgoing: Edge Instance list
  1. models

  2. Views

  3. Flow

  4. rest_extensions

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

viewflow-rest-2.1.0.tar.gz (12.6 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page