Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 38 additions & 2 deletions qiita_client/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from future import standard_library
from json import dumps
import urllib
from qiita_client import QiitaClient
from qiita_client import QiitaClient, ArtifactInfo

import logging

Expand Down Expand Up @@ -100,9 +100,45 @@ def __init__(self, name, description, function, required_parameters,
self.outputs = outputs
self.analysis_only = analysis_only

@staticmethod
def _push_artifacts_files_to_central(qclient, artifacts):
"""Pushes all files of a list of artifacts to BASE_DATA_DIR.

Parameters
----------
qclient : qiita_client.QiitaClient
The Qiita server client
artifacts : [ArtifactInfo]
A list of qiita Artifacts

Returns
-------
The input list of artifacts
"""
if artifacts is None:
return artifacts

for artifact in artifacts:
if isinstance(artifact, ArtifactInfo):
for i in range(len(artifact.files)):
(fp, ftype) = artifact.files[i]
# send file to Qiita central and potentially update
# filepath, which is not done at the moment (2025-11-14)
fp = qclient.push_file_to_central(fp)
artifact.files[i] = (fp, ftype)

def __call__(self, qclient, server_url, job_id, output_dir):
logger.debug('Entered QiitaCommand.__call__()')
return self.function(qclient, server_url, job_id, output_dir)
results = self.function(
qclient, server_url, job_id, output_dir)
# typical, but not all, functions of QiitaCommands return 3-tuple
# status=bool, list of artifacts, error_message=str
if isinstance(results, tuple) and (len(results) == 3) and \
isinstance(results[0], bool) and \
isinstance(results[1], list) and \
isinstance(results[2], str):
QiitaCommand._push_artifacts_files_to_central(qclient, results[1])
return results


class QiitaArtifactType(object):
Expand Down
17 changes: 17 additions & 0 deletions qiita_client/tests/test_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,23 @@ def func(a, b, c, d):
self.exp_opt, self.exp_out, self.exp_dflt)
self.assertEqual(obs('a', 'b', 'c', 'd'), 42)

def test__push_artifacts_files_to_central(self):
class fakeClient():
def push_file_to_central(self, filepath):
return 'pushed:%s' % filepath

artifacts = [
ArtifactInfo("stefArtiName", "Atype", [
("fp1", "preprocessed_fasta"),
("fp2", "preprocessed_fastq")]),
None,
ArtifactInfo("artiName", "artiType", [])]
QiitaCommand._push_artifacts_files_to_central(fakeClient(), artifacts)

self.assertIn('pushed:', artifacts[0].files[0][0])
self.assertIn('pushed:', artifacts[0].files[1][0])
self.assertEqual([], artifacts[2].files)


class QiitaArtifactTypeTest(TestCase):
def test_init(self):
Expand Down
Loading