From 80828d7163f914abe187cd2508007fa38e56f396 Mon Sep 17 00:00:00 2001 From: walotta Date: Sat, 10 Jun 2023 18:48:04 +0000 Subject: [PATCH] finish example file_transfer --- .gitignore | 3 +- example/file_transfer/convert_param.py | 8 ++++ example/file_transfer/example.txt | 1 + example/file_transfer/playbook.toml | 64 ++++++++++++++++++++++++++ example/file_transfer/run_example.py | 30 ++++++++++++ 5 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 example/file_transfer/convert_param.py create mode 100644 example/file_transfer/example.txt create mode 100644 example/file_transfer/playbook.toml create mode 100644 example/file_transfer/run_example.py diff --git a/.gitignore b/.gitignore index 1de5659..579add8 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -target \ No newline at end of file +target +example/*/run \ No newline at end of file diff --git a/example/file_transfer/convert_param.py b/example/file_transfer/convert_param.py new file mode 100644 index 0000000..7241782 --- /dev/null +++ b/example/file_transfer/convert_param.py @@ -0,0 +1,8 @@ +import json +import base64 + +with open("param.json",'r') as f: + param = json.load(f) + file_name = base64.b64decode(param["param"]) +with open("file_name",'w') as f: + f.write(file_name.decode()) diff --git a/example/file_transfer/example.txt b/example/file_transfer/example.txt new file mode 100644 index 0000000..30f51a3 --- /dev/null +++ b/example/file_transfer/example.txt @@ -0,0 +1 @@ +hello, world! \ No newline at end of file diff --git a/example/file_transfer/playbook.toml b/example/file_transfer/playbook.toml new file mode 100644 index 0000000..b7665b1 --- /dev/null +++ b/example/file_transfer/playbook.toml @@ -0,0 +1,64 @@ +[file_transfer] + workdir = "$PLAYBOOK_TRANSFER/run" + name = "file_transfer" + + [file_transfer.roles] + [file_transfer.roles.sender] + max_num = 1 + [file_transfer.roles.sender.playbook] + workdir = "$PLAYBOOK_TRANSFER/run/{{user_id[..8]}}/{{task_id[..8]}}" + + [[file_transfer.roles.sender.playbook.steps]] + step_name = "convert_param" + process = "python3 $PLAYBOOK_TRANSFER/convert_param.py" + process_wait = "convert_param" + check_exit_code = 0 + + [[file_transfer.roles.sender.playbook.steps]] + step_name = "load_file" + process = "cp $PLAYBOOK_TRANSFER/$(cat file_name) send_file" + process_wait = "load_file" + check_exit_code = 0 + + [[file_transfer.roles.sender.playbook.steps]] + send_variable = "file_content" + file = "send_file" + to_role = "receiver" + + [[file_transfer.roles.sender.playbook.steps]] + step_name = "remove_tmp" + process = "rm send_file file_name" + process_wait = "remove_tmp" + check_exit_code = 0 + + [file_transfer.roles.receiver] + [file_transfer.roles.receiver.playbook] + workdir = "$PLAYBOOK_TRANSFER/run/{{user_id[..8]}}/{{task_id[..8]}}" + + [[file_transfer.roles.receiver.playbook.steps]] + step_name = "convert_param" + process = "python3 $PLAYBOOK_TRANSFER/convert_param.py" + process_wait = "convert_param" + check_exit_code = 0 + + [[file_transfer.roles.receiver.playbook.steps]] + recv_variable = "file_content" + from_role = "sender" + file = "receive_file" + index = 0 + + [[file_transfer.roles.receiver.playbook.steps]] + step_name = "store_file" + process = "cp receive_file $(cat file_name)" + process_wait = "store_file" + check_exit_code = 0 + + [[file_transfer.roles.receiver.playbook.steps]] + create_entry = "example:file_transfer:receive_file_content" + file = "receive_file" + + [[file_transfer.roles.receiver.playbook.steps]] + step_name = "remove_tmp" + process = "rm receive_file file_name" + process_wait = "remove_tmp" + check_exit_code = 0 diff --git a/example/file_transfer/run_example.py b/example/file_transfer/run_example.py new file mode 100644 index 0000000..008113f --- /dev/null +++ b/example/file_transfer/run_example.py @@ -0,0 +1,30 @@ +import colink as CL +import subprocess +from typing import List +import os + +if __name__ == "__main__": + colink_home = os.environ["COLINK_HOME"] + assert colink_home != None, "Please set COLINK_HOME environment variable" + ir = CL.InstantRegistry() + cls:List[CL.CoLink] = [] + roles = ["sender", "receiver"] + participants = [] + threads = [] + for i in range(2): + cl:CL.CoLink = CL.InstantServer().get_colink().switch_to_generated_user() + threads.append(subprocess.Popen( + [f"{colink_home}/colink-playbook","--addr",cl.core_addr,"--jwt",cl.jwt], + env={ + "PLAYBOOK_TRANSFER": os.path.abspath("./example/file_transfer"), + "COLINK_PLAYBOOK_CONFIG": os.path.abspath("./example/file_transfer/playbook.toml")}, + )) + participants.append(CL.Participant(user_id=cl.get_user_id(), role=roles[i])) + cls.append(cl) + task_id = cls[0].run_task("file_transfer", "example.txt", participants, True) + cls[1].wait_task(task_id) + recv_file = cls[1].read_entry("example:file_transfer:receive_file_content") + print("Received file: ", recv_file) + for t in threads: + t:subprocess.Popen + t.terminate() \ No newline at end of file