Skip to content

Commit bdcc69e

Browse files
Merge pull request #3203 from antgonza/artifact-archive-gui
add artifact archive GUI
2 parents a372436 + b88d8e0 commit bdcc69e

File tree

9 files changed

+3412
-2978
lines changed

9 files changed

+3412
-2978
lines changed

qiita_db/artifact.py

Lines changed: 53 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from os.path import isfile, relpath
1212
from shutil import rmtree
1313
from collections import namedtuple
14+
from json import dumps
1415
from qiita_db.util import create_nested_path
1516

1617
import networkx as nx
@@ -48,6 +49,7 @@ class Artifact(qdb.base.QiitaObject):
4849
create
4950
delete
5051
being_deleted_by
52+
archive
5153
5254
See Also
5355
--------
@@ -701,6 +703,7 @@ def archive(cls, artifact_id):
701703
fids = [x['fp_id'] for x in artifact.filepaths
702704
if x['fp_type'] == 'log']
703705

706+
archive_data = dumps({"merging_scheme": artifact.merging_scheme})
704707
with qdb.sql_connection.TRN:
705708
artifact._set_visibility('archived', propagate=False)
706709
sql = 'DELETE FROM qiita.parent_artifact WHERE artifact_id = %s'
@@ -715,6 +718,11 @@ def archive(cls, artifact_id):
715718
WHERE filepath_id IN %s'''
716719
qdb.sql_connection.TRN.add(sql, [tuple(fids)])
717720

721+
sql = """UPDATE qiita.{0}
722+
SET archive_data = %s
723+
WHERE artifact_id = %s""".format(cls._table)
724+
qdb.sql_connection.TRN.add(sql, [archive_data, artifact_id])
725+
718726
qdb.sql_connection.TRN.execute()
719727

720728
# cleaning the extra artifacts
@@ -1461,39 +1469,51 @@ def merging_scheme(self):
14611469
The human readable merging scheme and the parent software
14621470
information for this artifact
14631471
"""
1464-
processing_params = self.processing_parameters
1465-
if processing_params is None:
1466-
return '', ''
1467-
1468-
cmd_name = processing_params.command.name
1469-
ms = processing_params.command.merging_scheme
1470-
afps = [x['fp'] for x in self.filepaths if x['fp'].endswith('biom')]
1471-
1472-
merging_schemes = []
1473-
parent_softwares = []
1474-
# this loop is necessary as in theory an artifact can be
1475-
# generated from multiple prep info files
1476-
for p in self.parents:
1477-
pparent = p.processing_parameters
1478-
# if parent is None, then is a direct upload; for example
1479-
# per_sample_FASTQ in shotgun data
1480-
if pparent is None:
1481-
parent_cmd_name = None
1482-
parent_merging_scheme = None
1483-
parent_pp = None
1484-
parent_software = 'N/A'
1485-
else:
1486-
parent_cmd_name = pparent.command.name
1487-
parent_merging_scheme = pparent.command.merging_scheme
1488-
parent_pp = pparent.values
1489-
psoftware = pparent.command.software
1490-
parent_software = '%s v%s' % (
1491-
psoftware.name, psoftware.version)
1492-
1493-
merging_schemes.append(qdb.util.human_merging_scheme(
1494-
cmd_name, ms, parent_cmd_name, parent_merging_scheme,
1495-
processing_params.values, afps, parent_pp))
1496-
parent_softwares.append(parent_software)
1472+
vid = qdb.util.convert_to_id(self.visibility, "visibility")
1473+
if vid in qdb.util.artifact_visibilities_to_skip():
1474+
with qdb.sql_connection.TRN:
1475+
sql = f"""SELECT archive_data
1476+
FROM qiita.{self._table}
1477+
WHERE artifact_id = %s"""
1478+
qdb.sql_connection.TRN.add(sql, [self.id])
1479+
archive_data = qdb.sql_connection.TRN.execute_fetchlast()
1480+
merging_schemes = [archive_data['merging_scheme'][0]]
1481+
parent_softwares = [archive_data['merging_scheme'][1]]
1482+
else:
1483+
processing_params = self.processing_parameters
1484+
if processing_params is None:
1485+
return '', ''
1486+
1487+
cmd_name = processing_params.command.name
1488+
ms = processing_params.command.merging_scheme
1489+
afps = [x['fp'] for x in self.filepaths
1490+
if x['fp'].endswith('biom')]
1491+
1492+
merging_schemes = []
1493+
parent_softwares = []
1494+
# this loop is necessary as in theory an artifact can be
1495+
# generated from multiple prep info files
1496+
for p in self.parents:
1497+
pparent = p.processing_parameters
1498+
# if parent is None, then is a direct upload; for example
1499+
# per_sample_FASTQ in shotgun data
1500+
if pparent is None:
1501+
parent_cmd_name = None
1502+
parent_merging_scheme = None
1503+
parent_pp = None
1504+
parent_software = 'N/A'
1505+
else:
1506+
parent_cmd_name = pparent.command.name
1507+
parent_merging_scheme = pparent.command.merging_scheme
1508+
parent_pp = pparent.values
1509+
psoftware = pparent.command.software
1510+
parent_software = '%s v%s' % (
1511+
psoftware.name, psoftware.version)
1512+
1513+
merging_schemes.append(qdb.util.human_merging_scheme(
1514+
cmd_name, ms, parent_cmd_name, parent_merging_scheme,
1515+
processing_params.values, afps, parent_pp))
1516+
parent_softwares.append(parent_software)
14971517

14981518
return ', '.join(merging_schemes), ', '.join(parent_softwares)
14991519

qiita_db/metadata_template/prep_template.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -923,3 +923,23 @@ def _get_predecessors(workflow, node):
923923
previous_jobs[current_job] = params
924924

925925
return workflow
926+
927+
@property
928+
def archived_artifacts(self):
929+
"""List of archived Artifacts
930+
931+
Returns
932+
-------
933+
list of qiita_db.artifact.Artifact
934+
The list of archivde Artifacts
935+
"""
936+
with qdb.sql_connection.TRN:
937+
938+
sql = """SELECT artifact_id
939+
FROM qiita.preparation_artifact
940+
LEFT JOIN qiita.artifact USING (artifact_id)
941+
WHERE prep_template_id = %s AND visibility_id IN %s"""
942+
qdb.sql_connection.TRN.add(
943+
sql, [self.id, qdb.util.artifact_visibilities_to_skip()])
944+
return [qdb.artifact.Artifact(ai)
945+
for ai in qdb.sql_connection.TRN.execute_fetchflatten()]

qiita_db/support_files/patches/86.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,7 @@ BEGIN
2323
RETURN artifacts;
2424
END
2525
$$ LANGUAGE plpgsql;
26+
27+
-- Jun 13, 2022
28+
-- adding an archive_data column to the artifact
29+
ALTER TABLE qiita.artifact ADD archive_data JSONB DEFAULT NULL;

0 commit comments

Comments
 (0)