From 2dcdaaadc595b566870a17ba6f10f886ccb92950 Mon Sep 17 00:00:00 2001 From: Tobias Kremer Date: Tue, 21 May 2024 11:33:47 +0200 Subject: [PATCH 1/4] Fix: Script generation for pyflow resource --- pyflow/nodes.py | 6 +----- pyflow/resource.py | 32 ++++---------------------------- 2 files changed, 5 insertions(+), 33 deletions(-) diff --git a/pyflow/nodes.py b/pyflow/nodes.py index 66c1344..67b5a46 100644 --- a/pyflow/nodes.py +++ b/pyflow/nodes.py @@ -1188,11 +1188,7 @@ def deploy_suite(self, target=FileSystem, node=None, **options): for t in node.all_tasks: script, includes = t.generate_script() - try: - target.deploy_task(t.deploy_path, script, includes) - except Exception as e: - print(f"\nERROR when deploying task: {t.fullname}\n") - raise (e) + target.deploy_task(t.deploy_path, script, includes) for f in node.all_families: manual = self.generate_stub(f.manual) if manual: diff --git a/pyflow/resource.py b/pyflow/resource.py index 7844aac..a1672cc 100644 --- a/pyflow/resource.py +++ b/pyflow/resource.py @@ -81,30 +81,7 @@ def get_resource(self, filename): return [] - def install_file_stub(self, target): - """ - Installs any data associated with the resource object that is going to be deployed from the **ecFlow** server. - - Parameters: - target(Deployment): The target deployment where the resource data should be installed. - """ - - """ - n.b. If a resource does not need to save data at deployment time, it should not do so (e.g. WebResource) - """ - # Install path is for the suite, so we don't need to include the suite name - assert self.fullname.count("/") > 1 - subpath = self.fullname[self.fullname.find("/", 1) + 1 :] - - self._server_filename = os.path.join( - target.files_install_path(), subpath, self.name - ) - - super().install_file_stub(target) - - self.save_data(target, self._server_filename) - - def build_script(self): + def generate_script(self): """ Returns the installer script for the data resource. @@ -129,7 +106,7 @@ def build_script(self): for h in self._hosts: lines += h.copy_file_to(self._server_filename, self.location()).split("\n") - return lines + return lines, [] def location(self): """ @@ -207,9 +184,8 @@ class FileResource(Resource): """ def __init__(self, name, hosts, source_file): - self._source = source_file - super().__init__(name, hosts) + self._server_filename = source_file def md5(self): """ @@ -231,7 +207,7 @@ def data(self): The resource data. """ - with open(self._source, "rb") as f: + with open(self._server_filename, "rb") as f: return f.read() def save_data(self, target, filename): From 469955c1a9c80b348e9907d3b67db135db5dab2a Mon Sep 17 00:00:00 2001 From: Tobias Kremer Date: Tue, 11 Jun 2024 10:52:20 +0200 Subject: [PATCH 2/4] Added test case for pyflow file resource --- tests/file_resource.txt | 1 + tests/test_resource.py | 44 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 tests/file_resource.txt create mode 100644 tests/test_resource.py diff --git a/tests/file_resource.txt b/tests/file_resource.txt new file mode 100644 index 0000000..c53e6c6 --- /dev/null +++ b/tests/file_resource.txt @@ -0,0 +1 @@ +# Example for a file resource diff --git a/tests/test_resource.py b/tests/test_resource.py new file mode 100644 index 0000000..bda8046 --- /dev/null +++ b/tests/test_resource.py @@ -0,0 +1,44 @@ +from os import path +from os.path import join + +from pyflow import FileResource, Notebook, Suite +from pyflow.host import SSHHost + + +def test_file_resource(): + + resouces_directory = "/resources_directory" + + sshhost_1 = SSHHost("example_ssh_host_1", resources_directory=resouces_directory) + sshhost_2 = SSHHost("example_ssh_host_2", resources_directory=resouces_directory) + host_set = [sshhost_1, sshhost_2] + + source_file = path.join(path.dirname(path.abspath(__file__)), "file_resource.txt") + name = "file_resource" + + with Suite("s", host=sshhost_1) as s: + s.resource_file = FileResource(name, hosts=host_set, source_file=source_file) + + # Check that variables are set correctly + assert s.resource_file.host == sshhost_1 + assert s.resource_file.location() == join( + str(sshhost_1.resources_directory), s.name, name + ) + assert s.resource_file._hosts == host_set + + # Check that the deployment scripts have been generated + s.check_definition() + s.generate_node() + + s.deploy_suite(target=Notebook) + + generate_file_resource_script_lines, _ = s.resource_file.generate_script() + assert any(sshhost_1.name in s for s in generate_file_resource_script_lines) + assert any(sshhost_2.name in s for s in generate_file_resource_script_lines) + + +if __name__ == "__main__": + + import pytest + + pytest.main(path.abspath(__file__)) From 3b603b518801b91c93cb5b7acbe0e1b821e08283 Mon Sep 17 00:00:00 2001 From: Tobias Kremer Date: Fri, 12 Jul 2024 11:43:47 +0200 Subject: [PATCH 3/4] Added serverfilename for data resource --- pyflow/resource.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pyflow/resource.py b/pyflow/resource.py index a1672cc..e55e384 100644 --- a/pyflow/resource.py +++ b/pyflow/resource.py @@ -106,7 +106,7 @@ def generate_script(self): for h in self._hosts: lines += h.copy_file_to(self._server_filename, self.location()).split("\n") - return lines, [] + return lines, [] def location(self): """ @@ -161,6 +161,8 @@ def save_data(self, target, filename): filename(str): The filename for the resource data. """ + self._server_filename = filename + """ Resources don't all need to save data at generation time """ From 2fbfa19d4df842d8021dce169c8c798ee353a1e3 Mon Sep 17 00:00:00 2001 From: Juan Colonese Date: Wed, 6 May 2026 15:35:40 +0100 Subject: [PATCH 4/4] fix qa --- pyflow/resource.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyflow/resource.py b/pyflow/resource.py index e55e384..4bc59df 100644 --- a/pyflow/resource.py +++ b/pyflow/resource.py @@ -106,7 +106,7 @@ def generate_script(self): for h in self._hosts: lines += h.copy_file_to(self._server_filename, self.location()).split("\n") - return lines, [] + return lines, [] def location(self): """