From 80ccf68f55dbb70d7e5ed52ee95b3c9d1b6ce264 Mon Sep 17 00:00:00 2001 From: Jasper Ras Date: Thu, 20 Mar 2025 11:07:49 +0100 Subject: vault backup: 2025-03-20 11:07:48 --- .../Prototype resumable task.md | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 4 Archives/Resumable backup tasks/Prototype resumable task.md (limited to '4 Archives/Resumable backup tasks/Prototype resumable task.md') diff --git a/4 Archives/Resumable backup tasks/Prototype resumable task.md b/4 Archives/Resumable backup tasks/Prototype resumable task.md new file mode 100644 index 0000000..d9fc2ed --- /dev/null +++ b/4 Archives/Resumable backup tasks/Prototype resumable task.md @@ -0,0 +1,64 @@ +--- +tags: + - taskflow + - "#openstack" +references: + - https://github.com/openstack/taskflow/blob/master/taskflow/examples/resume_from_backend.py +--- +```python +import time +import contextlib + +from taskflow.patterns import linear_flow as lf +from taskflow import task, engines +from taskflow.persistence import backends, models +from taskflow.exceptions import NotFound + + +class PrintAndWait(task.Task): + def execute(self, *args, **kwargs): + print(self.name) + time.sleep(10) + return self.name + + +def logbook_and_flow_detail(backend, id): + conn = backend.get_connection() + + try: + logbook = conn.get_logbook(id) + flow_detail = logbook.find(id) + except NotFound: + logbook = models.LogBook("printer_log", uuid=id) + flow_detail = models.FlowDetail("cool flow", uuid=id) + logbook.add(flow_detail) + + with contextlib.closing(backend.get_connection()) as conn: + conn.upgrade() + conn.save_logbook(logbook) + + return logbook, flow_detail + + +def create_flow(): + main_flow = lf.Flow("main_flow") + + for i in range(10): + main_flow.add(PrintAndWait(name=f"print_n_wait_{i}")) + + return main_flow + + +def main(): + backend = backends.fetch(conf=dict(connection="sqlite:///test.db")) + logbook, flow_detail = logbook_and_flow_detail(backend, "1") + + flow = create_flow() + eng = engines.load(flow, flow_detail=flow_detail, backend=backend, book=logbook) + + eng.run() + + +if __name__ == "__main__": + main() +``` \ No newline at end of file -- cgit v1.2.3