From 91ae8dd17ac689549d91f33479231b77745164b1 Mon Sep 17 00:00:00 2001 From: Stefan Janssen Date: Wed, 5 Nov 2025 09:50:52 +0100 Subject: [PATCH 01/11] enable protocol specification --- scripts/configure_qtp_job_output_folder | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/configure_qtp_job_output_folder b/scripts/configure_qtp_job_output_folder index 815b728..2be7c26 100755 --- a/scripts/configure_qtp_job_output_folder +++ b/scripts/configure_qtp_job_output_folder @@ -17,11 +17,13 @@ from qtp_job_output_folder import plugin @click.option('--env-script', prompt='Environment script', default='conda activate qtp-job-output-folder') @click.option('--ca-cert', prompt='Server certificate', default='None') -def config(env_script, ca_cert): +@click.argument('plugincoupling', required=False, default='filesystem') +def config(env_script, ca_cert, plugincoupling): """Generates the Qiita configuration files""" if ca_cert == 'None': ca_cert = None - plugin.generate_config(env_script, 'start_qtp_job_output_folder', ca_cert) + plugin.generate_config(env_script, 'start_qtp_job_output_folder', ca_cert, + plugin_coupling=plugincoupling) if __name__ == '__main__': From 34bb1b0e3c35c1a4be5ad4322b17b44f2ca7cc54 Mon Sep 17 00:00:00 2001 From: Stefan Janssen Date: Mon, 10 Nov 2025 09:21:33 +0100 Subject: [PATCH 02/11] fetch / push files in tests --- qtp_job_output_folder/summary.py | 7 +++++-- qtp_job_output_folder/tests/test_summary.py | 4 ++-- qtp_job_output_folder/validate.py | 4 +++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/qtp_job_output_folder/summary.py b/qtp_job_output_folder/summary.py index 3892ff1..d522c1c 100644 --- a/qtp_job_output_folder/summary.py +++ b/qtp_job_output_folder/summary.py @@ -74,7 +74,8 @@ def generate_html_summary(qclient, job_id, parameters, out_dir): artifact_info = qclient.get(qclient_url) # [0] there is only one directory - folder = artifact_info['files']['directory'][0]['filepath'] + folder = qclient.fetch_file_from_central( + artifact_info['files']['directory'][0]['filepath']) # 2. Generate summary index_fp, viz_fp = _generate_html_summary(job_id, folder, out_dir) @@ -83,7 +84,9 @@ def generate_html_summary(qclient, job_id, parameters, out_dir): success = True error_msg = '' try: - fps = dumps({'html': index_fp, 'dir': viz_fp}) + fps = dumps({'html': qclient.push_file_to_central(index_fp), + 'dir': qclient.push_file_to_central(viz_fp) \ + if viz_fp is not None else None}) qclient.patch(qclient_url, 'add', '/html_summary/', value=fps) except Exception as e: success = False diff --git a/qtp_job_output_folder/tests/test_summary.py b/qtp_job_output_folder/tests/test_summary.py index a4aae89..52bf0ea 100644 --- a/qtp_job_output_folder/tests/test_summary.py +++ b/qtp_job_output_folder/tests/test_summary.py @@ -63,10 +63,10 @@ def test_summary(self): # cleaning artifact files, to avoid errors [self._clean_up_files.extend([ff['filepath']]) for f in res['files'].values() for ff in f] - html_fp = res['files']['html_summary'][0]['filepath'] + html_fp = self.qclient.fetch_file_from_central( + res['files']['html_summary'][0]['filepath']) with open(html_fp) as html_f: html = html_f.read() - self.assertCountEqual( sorted(html.replace('
', '').split('\n')), sorted(EXP_HTML.format(aid=aid).replace('
', '').split('\n'))) diff --git a/qtp_job_output_folder/validate.py b/qtp_job_output_folder/validate.py index cc6678c..d3eb8e8 100644 --- a/qtp_job_output_folder/validate.py +++ b/qtp_job_output_folder/validate.py @@ -40,7 +40,7 @@ def validate(qclient, job_id, parameters, out_dir): files = loads(parameters['files']) # [0] we only expect one directory - folder = files['directory'][0] + folder = qclient.fetch_file_from_central(files['directory'][0]) success = False ainfo = None @@ -55,8 +55,10 @@ def validate(qclient, job_id, parameters, out_dir): # let's generate the summary so it's ready to be displayed index_fp, viz_fp = _generate_html_summary(job_id, folder, out_dir) + qclient.push_file_to_central(index_fp) filepaths.append((index_fp, 'html_summary')) if viz_fp is not None: + qclient.qclient.push_file_to_central(viz_fp) filepaths.append((viz_fp, 'html_summary_dir')) ainfo = [ArtifactInfo(None, 'job-output-folder', filepaths)] From 995be52fe4d666fab631d3ea361a79a071cba3aa Mon Sep 17 00:00:00 2001 From: Stefan Janssen Date: Mon, 10 Nov 2025 09:32:40 +0100 Subject: [PATCH 03/11] codestyle --- qtp_job_output_folder/summary.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qtp_job_output_folder/summary.py b/qtp_job_output_folder/summary.py index d522c1c..2cd8865 100644 --- a/qtp_job_output_folder/summary.py +++ b/qtp_job_output_folder/summary.py @@ -85,8 +85,8 @@ def generate_html_summary(qclient, job_id, parameters, out_dir): error_msg = '' try: fps = dumps({'html': qclient.push_file_to_central(index_fp), - 'dir': qclient.push_file_to_central(viz_fp) \ - if viz_fp is not None else None}) + 'dir': qclient.push_file_to_central(viz_fp) + if viz_fp is not None else None}) qclient.patch(qclient_url, 'add', '/html_summary/', value=fps) except Exception as e: success = False From f604e26caa802c13c26783c069c0a0984c094613 Mon Sep 17 00:00:00 2001 From: Stefan Janssen Date: Thu, 13 Nov 2025 08:28:15 +0100 Subject: [PATCH 04/11] leaves clean test dirs --- qtp_job_output_folder/tests/test_plugin.py | 35 +++++++++++++++++----- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/qtp_job_output_folder/tests/test_plugin.py b/qtp_job_output_folder/tests/test_plugin.py index bc30158..25f93a2 100644 --- a/qtp_job_output_folder/tests/test_plugin.py +++ b/qtp_job_output_folder/tests/test_plugin.py @@ -23,10 +23,19 @@ class PluginTests(PluginTestCase): def setUp(self): self.out_dir = mkdtemp() - self.source_dir = join(mkdtemp(), 'test_data') + # need to refer to a valid mountpoint (here: job) and a directory + # that exists in Qiita DB as 'directory' as fetching via https will + # fail otherwise. To avoid collisions, a mid-level directory name is + # a random string (= _get_candidate_names()) + self.mountpoint = 'job' + # only adapt filepaths + self.source_dir = self.deposite_in_qiita_basedir( + join(self.mountpoint, '2_test_folder'), True) source = join(dirname(abspath(getfile(currentframe()))), 'test_data') copytree(source, self.source_dir) - self._clean_up_files = [self.out_dir] + self.qclient.push_file_to_central(self.source_dir) + self._clean_up_files = [self.out_dir, dirname(self.source_dir)] + self._clean_up_remote_files = [] def tearDown(self): for fp in self._clean_up_files: @@ -35,6 +44,8 @@ def tearDown(self): rmtree(fp) else: remove(fp) + for fp in self._clean_up_remote_files: + self.qclient.delete_file_from_central(fp) def _wait_job(self, job_id): for i in range(20): @@ -47,7 +58,8 @@ def _wait_job(self, job_id): def test_plugin_summary(self): # creating new artifact files = [(self.source_dir, 'directory')] - data = {'filepaths': dumps(files), 'type': 'job-output-folder', + atype = 'job-output-folder' + data = {'filepaths': dumps(files), 'type': atype, 'name': "A name", 'data_type': 'Job Output Folder'} aid = self.qclient.post('/apitest/artifact/', data=data)['artifact'] data = {'command': dumps(['qtp-job-output-folder', __version__, @@ -56,7 +68,11 @@ def test_plugin_summary(self): 'status': 'running'} job_id = self.qclient.post( '/apitest/processing_job/', data=data)['job'] - plugin("https://localhost:21174", job_id, self.out_dir) + plugin("https://tinqiita-qiita-1:21174", job_id, self.out_dir) + fp_target_dir = '%s/%s' % (self.source_dir.split( + '/%s/' % self.mountpoint)[0], atype) + self._clean_up_remote_files.append(fp_target_dir) + self._clean_up_files.append(fp_target_dir) self._wait_job(job_id) obs = self.qclient.get_job_info(job_id) self.assertEqual(obs['status'], 'success') @@ -64,10 +80,11 @@ def test_plugin_summary(self): def test_plugin_validate(self): # test success files = {'directory': [self.source_dir]} + atype = 'job-output-folder' parameters = {'template': None, 'analysis': None, 'files': dumps(files), - 'artifact_type': 'job-output-folder'} + 'artifact_type': atype} data = { 'command': dumps( ['qtp-job-output-folder', __version__, 'Validate']), @@ -75,7 +92,11 @@ def test_plugin_validate(self): 'status': 'running'} job_id = self.qclient.post( '/apitest/processing_job/', data=data)['job'] - plugin("https://localhost:21174", job_id, self.out_dir) + plugin("https://tinqiita-qiita-1:21174", job_id, self.out_dir) + fp_target_dir = '%s/%s' % (self.source_dir.split( + '/%s/' % self.mountpoint)[0], atype) + self._clean_up_remote_files.append(fp_target_dir) + self._clean_up_files.append(fp_target_dir) self._wait_job(job_id) obs = self.qclient.get_job_info(job_id) self.assertEqual(obs['status'], 'success') @@ -86,7 +107,7 @@ def test_plugin_validate(self): data['parameters'] = dumps(parameters) job_id = self.qclient.post( '/apitest/processing_job/', data=data)['job'] - plugin("https://localhost:21174", job_id, self.out_dir) + plugin("https://tinqiita-qiita-1:21174", job_id, self.out_dir) self._wait_job(job_id) obs = self.qclient.get_job_info(job_id) self.assertEqual(obs['status'], 'error') From e7f743b774ee00f6479eae5af23e994c5a17b25a Mon Sep 17 00:00:00 2001 From: Stefan Janssen Date: Thu, 13 Nov 2025 08:33:54 +0100 Subject: [PATCH 05/11] revert URLs --- qtp_job_output_folder/tests/test_plugin.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/qtp_job_output_folder/tests/test_plugin.py b/qtp_job_output_folder/tests/test_plugin.py index 25f93a2..28c464f 100644 --- a/qtp_job_output_folder/tests/test_plugin.py +++ b/qtp_job_output_folder/tests/test_plugin.py @@ -68,7 +68,7 @@ def test_plugin_summary(self): 'status': 'running'} job_id = self.qclient.post( '/apitest/processing_job/', data=data)['job'] - plugin("https://tinqiita-qiita-1:21174", job_id, self.out_dir) + plugin("https://localhost:21174", job_id, self.out_dir) fp_target_dir = '%s/%s' % (self.source_dir.split( '/%s/' % self.mountpoint)[0], atype) self._clean_up_remote_files.append(fp_target_dir) @@ -92,7 +92,7 @@ def test_plugin_validate(self): 'status': 'running'} job_id = self.qclient.post( '/apitest/processing_job/', data=data)['job'] - plugin("https://tinqiita-qiita-1:21174", job_id, self.out_dir) + plugin("https://localhost:21174", job_id, self.out_dir) fp_target_dir = '%s/%s' % (self.source_dir.split( '/%s/' % self.mountpoint)[0], atype) self._clean_up_remote_files.append(fp_target_dir) @@ -107,7 +107,7 @@ def test_plugin_validate(self): data['parameters'] = dumps(parameters) job_id = self.qclient.post( '/apitest/processing_job/', data=data)['job'] - plugin("https://tinqiita-qiita-1:21174", job_id, self.out_dir) + plugin("https://localhost:21174", job_id, self.out_dir) self._wait_job(job_id) obs = self.qclient.get_job_info(job_id) self.assertEqual(obs['status'], 'error') From 096ca545cd0a5a343babc487654e4ed1a3f1b311 Mon Sep 17 00:00:00 2001 From: Stefan Janssen Date: Thu, 13 Nov 2025 09:12:13 +0100 Subject: [PATCH 06/11] proper clean up after test --- qtp_job_output_folder/tests/test_validate.py | 27 ++++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/qtp_job_output_folder/tests/test_validate.py b/qtp_job_output_folder/tests/test_validate.py index 0c67e84..f333170 100644 --- a/qtp_job_output_folder/tests/test_validate.py +++ b/qtp_job_output_folder/tests/test_validate.py @@ -25,10 +25,17 @@ class ValidateTests(PluginTestCase): def setUp(self): self.out_dir = mkdtemp() - self.source_dir = join(mkdtemp(), 'test_data') + # need to refer to a valid mountpoint (here: job) and a directory + # that exists in Qiita DB as 'directory' as fetching via https will + # fail otherwise + self.mountpoint = 'job' + self.source_dir = self.deposite_in_qiita_basedir( + join(self.mountpoint, '2_test_folder'), True) source = join(dirname(abspath(getfile(currentframe()))), 'test_data') copytree(source, self.source_dir) - self._clean_up_files = [self.out_dir] + self.qclient.push_file_to_central(self.source_dir) + self._clean_up_files = [self.out_dir, dirname(self.source_dir)] + self._clean_up_remote_files = [] def tearDown(self): for fp in self._clean_up_files: @@ -37,13 +44,16 @@ def tearDown(self): rmtree(fp) else: remove(fp) + for fp in self._clean_up_remote_files: + self.qclient.delete_file_from_central(fp) def test_validate(self): files = {'directory': [self.source_dir]} + atype = 'job-output-folder' parameters = {'template': None, 'analysis': None, 'files': dumps(files), - 'artifact_type': 'job-output-folder'} + 'artifact_type': atype} data = { 'command': dumps( ['qtp-job-output-folder', __version__, 'Validate']), @@ -52,15 +62,16 @@ def test_validate(self): job_id = self.qclient.post( '/apitest/processing_job/', data=data)['job'] - out_dir = mkdtemp() - self._clean_up_files.append(out_dir) obs_success, obs_ainfo, obs_error = validate( - self.qclient, job_id, parameters, out_dir) - + self.qclient, job_id, parameters, self.out_dir) + for suffix in [atype, self.mountpoint]: + self._clean_up_remote_files.append( + '%s/%s' % (self.source_dir.split('/%s/' % self.mountpoint)[0], + suffix)) self.assertTrue(obs_success) filepaths = [ (f'{self.source_dir}', 'directory'), - (f'{out_dir}/summary.html', 'html_summary')] + (f'{self.out_dir}/summary.html', 'html_summary')] exp = [ArtifactInfo(None, 'job-output-folder', filepaths)] self.assertEqual(obs_ainfo, exp) self.assertEqual(obs_error, "") From e7671c2f85117c1ca24a2d0f59c438db96525f08 Mon Sep 17 00:00:00 2001 From: Stefan Janssen Date: Thu, 13 Nov 2025 10:33:22 +0100 Subject: [PATCH 07/11] fix existing test and traversal function --- qtp_job_output_folder/summary.py | 2 +- qtp_job_output_folder/tests/test_summary.py | 57 +++++++++++++-------- 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/qtp_job_output_folder/summary.py b/qtp_job_output_folder/summary.py index 2cd8865..84714d1 100644 --- a/qtp_job_output_folder/summary.py +++ b/qtp_job_output_folder/summary.py @@ -16,7 +16,7 @@ def _folder_listing(folder): for f in glob(f'{folder}/*'): if isdir(f): results.append(('folder', f)) - results.extend(_folder_listing(f'{f}/*')) + results.extend(_folder_listing(f)) else: results.append(('file', f)) return results diff --git a/qtp_job_output_folder/tests/test_summary.py b/qtp_job_output_folder/tests/test_summary.py index 52bf0ea..3285328 100644 --- a/qtp_job_output_folder/tests/test_summary.py +++ b/qtp_job_output_folder/tests/test_summary.py @@ -23,10 +23,20 @@ class SummaryTests(PluginTestCase): def setUp(self): self.out_dir = mkdtemp() - self.source_dir = join(mkdtemp(), 'test_data') + # need to refer to a valid mountpoint (here: job) and a directory + # that exists in Qiita DB as 'directory' as fetching via https will + # fail otherwise. To avoid collisions, a mid-level directory name is + # a random string (= _get_candidate_names()) + self.mountpoint = 'job' + # only adapt filepaths + self.exp_dirname = '2_test_folder' + self.source_dir = self.deposite_in_qiita_basedir( + join(self.mountpoint, self.exp_dirname), True) source = join(dirname(abspath(getfile(currentframe()))), 'test_data') copytree(source, self.source_dir) - self._clean_up_files = [self.out_dir] + self.qclient.push_file_to_central(self.source_dir) + self._clean_up_files = [self.out_dir, dirname(self.source_dir)] + self._clean_up_remote_files = [] def tearDown(self): for fp in self._clean_up_files: @@ -35,10 +45,13 @@ def tearDown(self): rmtree(fp) else: remove(fp) + for fp in self._clean_up_remote_files: + self.qclient.delete_file_from_central(fp) def test_summary(self): files = [(self.source_dir, 'directory')] - data = {'filepaths': dumps(files), 'type': 'job-output-folder', + atype = 'job-output-folder' + data = {'filepaths': dumps(files), 'type': atype, 'name': "A name", 'data_type': 'Job Output Folder'} aid = self.qclient.post('/apitest/artifact/', data=data)['artifact'] parameters = {'input_data': aid} @@ -52,6 +65,10 @@ def test_summary(self): # Run the test obs_success, obs_ainfo, obs_error = generate_html_summary( self.qclient, job_id, parameters, self.out_dir) + fp_target_dir = '%s/%s' % (self.source_dir.split( + '/%s/' % self.mountpoint)[0], atype) + self._clean_up_remote_files.append(fp_target_dir) + self._clean_up_files.append(fp_target_dir) # asserting reply self.assertTrue(obs_success) @@ -69,27 +86,27 @@ def test_summary(self): html = html_f.read() self.assertCountEqual( sorted(html.replace('
', '').split('\n')), - sorted(EXP_HTML.format(aid=aid).replace('
', '').split('\n'))) + sorted(EXP_HTML.format( + aid=aid, + dir=self.exp_dirname).replace('
', '').split('\n'))) EXP_HTML = ( - '' - 'test_data/folder_a
\n' - 'test_data/folder_a/folder_b/folder_c
\n' - '' - 'test_data/file_2
\n' - '' - 'test_data/file_1
\n' - '' - 'test_data/test_data
\n' - 'test_data/test_data/folder_a/folder_b
\n' - 'test_data/test_data/folder_a/folder_b/' + '' + '{dir}/folder_a
\n' + '{dir}/folder_a/folder_b/folder_c
\n' + '' + '{dir}/file_2
\n' + '' + '{dir}/file_1
\n' + '{dir}/folder_a/folder_b
\n' + '{dir}/folder_a/folder_b/' 'folder_c/file_c
\n' - 'test_data/test_data/folder_a/file_a') + '{dir}/folder_a/file_a') if __name__ == '__main__': From 344ece8516605388c0820a83b31cc468ed1618fc Mon Sep 17 00:00:00 2001 From: Stefan Janssen Date: Thu, 13 Nov 2025 11:39:09 +0100 Subject: [PATCH 08/11] codestyle --- qtp_job_output_folder/tests/test_summary.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qtp_job_output_folder/tests/test_summary.py b/qtp_job_output_folder/tests/test_summary.py index 3285328..137e7f6 100644 --- a/qtp_job_output_folder/tests/test_summary.py +++ b/qtp_job_output_folder/tests/test_summary.py @@ -28,7 +28,7 @@ def setUp(self): # fail otherwise. To avoid collisions, a mid-level directory name is # a random string (= _get_candidate_names()) self.mountpoint = 'job' - # only adapt filepaths + # only adapt filepaths self.exp_dirname = '2_test_folder' self.source_dir = self.deposite_in_qiita_basedir( join(self.mountpoint, self.exp_dirname), True) From d80c1e36c9e01d7041dc3643e5771fff5df33bd5 Mon Sep 17 00:00:00 2001 From: Stefan Janssen Date: Fri, 14 Nov 2025 12:16:10 +0100 Subject: [PATCH 09/11] offload push to client --- qtp_job_output_folder/summary.py | 4 ++-- qtp_job_output_folder/validate.py | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/qtp_job_output_folder/summary.py b/qtp_job_output_folder/summary.py index 84714d1..bbb7ec7 100644 --- a/qtp_job_output_folder/summary.py +++ b/qtp_job_output_folder/summary.py @@ -84,8 +84,8 @@ def generate_html_summary(qclient, job_id, parameters, out_dir): success = True error_msg = '' try: - fps = dumps({'html': qclient.push_file_to_central(index_fp), - 'dir': qclient.push_file_to_central(viz_fp) + fps = dumps({'html': index_fp, + 'dir': viz_fp if viz_fp is not None else None}) qclient.patch(qclient_url, 'add', '/html_summary/', value=fps) except Exception as e: diff --git a/qtp_job_output_folder/validate.py b/qtp_job_output_folder/validate.py index d3eb8e8..b2d7b73 100644 --- a/qtp_job_output_folder/validate.py +++ b/qtp_job_output_folder/validate.py @@ -55,10 +55,8 @@ def validate(qclient, job_id, parameters, out_dir): # let's generate the summary so it's ready to be displayed index_fp, viz_fp = _generate_html_summary(job_id, folder, out_dir) - qclient.push_file_to_central(index_fp) filepaths.append((index_fp, 'html_summary')) if viz_fp is not None: - qclient.qclient.push_file_to_central(viz_fp) filepaths.append((viz_fp, 'html_summary_dir')) ainfo = [ArtifactInfo(None, 'job-output-folder', filepaths)] From 79815864aea32d9fbae4bee5a1c8e4f10982afb4 Mon Sep 17 00:00:00 2001 From: Stefan Janssen Date: Fri, 14 Nov 2025 12:17:36 +0100 Subject: [PATCH 10/11] revert --- qtp_job_output_folder/summary.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/qtp_job_output_folder/summary.py b/qtp_job_output_folder/summary.py index bbb7ec7..28a4e84 100644 --- a/qtp_job_output_folder/summary.py +++ b/qtp_job_output_folder/summary.py @@ -84,9 +84,7 @@ def generate_html_summary(qclient, job_id, parameters, out_dir): success = True error_msg = '' try: - fps = dumps({'html': index_fp, - 'dir': viz_fp - if viz_fp is not None else None}) + fps = dumps({'html': index_fp, 'dir': viz_fp}) qclient.patch(qclient_url, 'add', '/html_summary/', value=fps) except Exception as e: success = False From 51572632612e898ab18f7d90f8def6d6b962af40 Mon Sep 17 00:00:00 2001 From: Stefan Janssen Date: Fri, 14 Nov 2025 15:31:53 +0100 Subject: [PATCH 11/11] offload fetching to client --- qtp_job_output_folder/summary.py | 3 +-- qtp_job_output_folder/validate.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/qtp_job_output_folder/summary.py b/qtp_job_output_folder/summary.py index 28a4e84..c9489a2 100644 --- a/qtp_job_output_folder/summary.py +++ b/qtp_job_output_folder/summary.py @@ -74,8 +74,7 @@ def generate_html_summary(qclient, job_id, parameters, out_dir): artifact_info = qclient.get(qclient_url) # [0] there is only one directory - folder = qclient.fetch_file_from_central( - artifact_info['files']['directory'][0]['filepath']) + folder = artifact_info['files']['directory'][0]['filepath'] # 2. Generate summary index_fp, viz_fp = _generate_html_summary(job_id, folder, out_dir) diff --git a/qtp_job_output_folder/validate.py b/qtp_job_output_folder/validate.py index b2d7b73..cc6678c 100644 --- a/qtp_job_output_folder/validate.py +++ b/qtp_job_output_folder/validate.py @@ -40,7 +40,7 @@ def validate(qclient, job_id, parameters, out_dir): files = loads(parameters['files']) # [0] we only expect one directory - folder = qclient.fetch_file_from_central(files['directory'][0]) + folder = files['directory'][0] success = False ainfo = None