Skip to content

Commit 73a78e7

Browse files
committed
fix #1987
1 parent 80c5fea commit 73a78e7

File tree

5 files changed

+49
-5
lines changed

5 files changed

+49
-5
lines changed

qiita_db/artifact.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,15 @@ def create(cls, filepaths, artifact_type, name=None, prep_template=None,
334334
qdb.sql_connection.TRN.add(sql, sql_args, many=True)
335335

336336
instance = cls(a_id)
337+
# inheriting visibility
338+
visibilities = {a.visibility for a in instance.parents}
339+
# set based on the "lowest" visibility
340+
if 'sandbox' in visibilities:
341+
instance.visibility = 'sandbox'
342+
elif 'private' in visibilities:
343+
instance.visibility = 'private'
344+
else:
345+
instance.visibility = 'public'
337346
else:
338347
dtype_id = qdb.util.convert_to_id(prep_template.data_type(),
339348
"data_type")

qiita_db/support_files/patches/47.sql

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
-- Jan 15, 2017
2+
-- Inherit the status of the study to all it's artifacts.
3+
-- This code is much easier using python so check that patch
4+
5+
SELECT 1;
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from qiita_db.study import Study
2+
3+
4+
class ForRecursion(object):
5+
"""for some strange reason, my guess is how we are executing the patches
6+
recursion doesn't work directly so decided to use a class to make it
7+
work"""
8+
9+
@classmethod
10+
def change_status(cls, artifact, status):
11+
for a in artifact.children:
12+
try:
13+
a.visibility = status
14+
except:
15+
# print so we know which changes failed and we can deal by hand
16+
print "failed aid: %d, status %s" % (artifact.id, status)
17+
return
18+
cls.change_status(a, status)
19+
20+
21+
studies = Study.get_by_status('private').union(
22+
Study.get_by_status('public')).union(Study.get_by_status('sandbox'))
23+
# just getting the base artifacts, no parents
24+
artifacts = {a for s in studies for a in s.artifacts() if not a.parents}
25+
26+
# inheriting status
27+
fr = ForRecursion
28+
for a in artifacts:
29+
status = a.visibility
30+
fr.change_status(a, status)

qiita_db/test/test_artifact.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,7 @@ def test_create_processed(self):
668668
self.assertEqual(obs.name, 'noname')
669669
self.assertTrue(before < obs.timestamp < datetime.now())
670670
self.assertEqual(obs.processing_parameters, exp_params)
671-
self.assertEqual(obs.visibility, 'sandbox')
671+
self.assertEqual(obs.visibility, 'private')
672672
self.assertEqual(obs.artifact_type, "Demultiplexed")
673673
self.assertEqual(obs.data_type, qdb.artifact.Artifact(1).data_type)
674674
self.assertTrue(obs.can_be_submitted_to_ebi)
@@ -700,7 +700,7 @@ def test_create_copy_files(self):
700700
self.assertEqual(obs.name, 'noname')
701701
self.assertTrue(before < obs.timestamp < datetime.now())
702702
self.assertEqual(obs.processing_parameters, exp_params)
703-
self.assertEqual(obs.visibility, 'sandbox')
703+
self.assertEqual(obs.visibility, 'private')
704704
self.assertEqual(obs.artifact_type, "Demultiplexed")
705705
self.assertEqual(obs.data_type, qdb.artifact.Artifact(1).data_type)
706706
self.assertTrue(obs.can_be_submitted_to_ebi)
@@ -732,7 +732,7 @@ def test_create_biom(self):
732732
self.assertEqual(obs.name, 'noname')
733733
self.assertTrue(before < obs.timestamp < datetime.now())
734734
self.assertEqual(obs.processing_parameters, exp_params)
735-
self.assertEqual(obs.visibility, 'sandbox')
735+
self.assertEqual(obs.visibility, 'private')
736736
self.assertEqual(obs.artifact_type, 'BIOM')
737737
self.assertEqual(obs.data_type, qdb.artifact.Artifact(2).data_type)
738738
self.assertFalse(obs.can_be_submitted_to_ebi)

qiita_db/test/test_util.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ def test_convert_to_id_bad_value(self):
9898

9999
def test_get_artifact_types(self):
100100
obs = qdb.util.get_artifact_types()
101-
exp = {'SFF': 1, 'FASTA_Sanger': 2, 'FASTQ': 3, 'FASTA': 4,
102-
'per_sample_FASTQ': 5, 'Demultiplexed': 6, 'BIOM': 7}
101+
exp = {'Demultiplexed': 6, 'FASTA_Sanger': 2, 'FASTQ': 3, 'BIOM': 7,
102+
'per_sample_FASTQ': 5, 'SFF': 1, 'FASTA': 4}
103103
self.assertEqual(obs, exp)
104104

105105
obs = qdb.util.get_artifact_types(key_by_id=True)

0 commit comments

Comments
 (0)