Запустить узел обновления Django-Viewflow?

Я использую 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) или Как получить ответ последнего выполненного узла перед отправкой его обратно клиенту?

11
задан PythonEnthusiast 15 September 2018 в 14:03
поделиться