Я использую django-viewflow для программного создания рабочего процесса.
Это мой класс потока.
class Workflow(Flow):
start = (
flow.StartFunction(function1)
.Next(this.shipment_create)
)
shipment_create = (
flow.Function(function2)
.Next(this.request_quotes)
)
request_quotes = (
flow.Handler(function3)
.Next(this.move_package)
)
move_package = (
flow.Function(function4)
.Next(this.end)
)
end = flow.End()
Что я делаю, я запускаю поток программно, когда на конечную точку E1 делается запрос POST, я запускаю
WorkFLow.start.run(**some_kwargs)
Он запускается правильно, и после обработки start
, затем ответ возвращается клиенту.
Теперь shipment_create
запускается, когда в конечной точке E2 выполняется запрос POST, и я снова запускаю его программно через
activation.flow_task.run(**some_kwargs)
. Он работает правильно и завершает поток до move_package
.
ПРОБЛЕМА
Я обновляю детали shipment
через запрос PUT на конечной точке E3, и я хочу повторно запустить весь поток после узла shipment_create
. Как я могу это сделать?
1) Как я могу повторно запустить поток после определенного узла?
2) Точка (1) - это шаг вручную, то есть программно перезапустить узлы после. Есть ли способ, я могу включить узел shipment_update
в сам класс Workflow, чтобы он автоматически перезапускал после-узлы? Как и где я бы упомянул узел update_shipment
?
Проблема, которую я вижу в пункте (2), заключается в том, что в одной ситуации я объявляю узел shipment_create
после запуска (а остальные обработчики будут обрабатывать), и в другой ситуации я должен упомянуть узел shipment_update
после запуска (остальные обработчики будут обрабатывать). Как класс рабочего процесса будет работать в соответствии с типом метода HTTP?
Обновлено
Как вернуть ответ обработчика (т. Е. function4
)?
def function1():
return 1
def function2():
return 2
def function3():
return 3
def function4():
return 4
Когда запускается shipment_create
, обработчик выполняется автоматически. Тем не менее, возвращаемым ответом является ответ узла shipment_create
, т.е. function2.
Как вернуть ответ из function3(Handler)
или Как получить ответ последнего выполненного узла перед отправкой его обратно клиенту?