Skip to content

Commit 6f0dd71

Browse files
committed
generalizing this functionality
1 parent 19a9dda commit 6f0dd71

File tree

4 files changed

+34
-31
lines changed

4 files changed

+34
-31
lines changed

qiita_pet/handlers/api_proxy/studies.py

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -248,34 +248,28 @@ def study_files_get_req(user_id, study_id, prep_template_id, artifact_type):
248248
if any(ftypes_if) and 'run_prefix' in pt.columns:
249249
prep_prefixes = tuple(set(pt['run_prefix']))
250250
num_prefixes = len(prep_prefixes)
251-
# special case for per_sample_FASTQ
252-
if artifact_type == 'per_sample_FASTQ':
253-
# sorting prefixes by length to avoid collisions like: 100 1002
254-
# 10003
255-
prep_prefixes = sorted(prep_prefixes, key=len, reverse=True)
256-
# group files by prefix
257-
sfiles = {p: [f for _, f in uploaded if f.startswith(p)]
258-
for p in prep_prefixes}
259-
for k, v in viewitems(sfiles):
260-
len_files = len(v)
261-
if len_files != 1 and len_files != 2:
262-
remaining.extend(v)
263-
else:
264-
v.sort()
265-
selected.append(v)
266-
else:
267-
len_files = 1
268-
for _, filename in uploaded:
269-
if filename.startswith(prep_prefixes):
270-
selected.append(filename)
271-
else:
272-
remaining.append(filename)
251+
# sorting prefixes by length to avoid collisions like: 100 1002
252+
# 10003
253+
prep_prefixes = sorted(prep_prefixes, key=len, reverse=True)
254+
# group files by prefix
255+
sfiles = {p: [f for _, f in uploaded if f.startswith(p)]
256+
for p in prep_prefixes}
257+
inuse = [y for x in sfiles.values() for y in x]
258+
remaining.extend([f for _, f in uploaded if f not in inuse])
259+
260+
for k, v in viewitems(sfiles):
261+
len_files = len(v)
262+
if len_files != 1 and len_files != 2:
263+
remaining.extend(v)
264+
else:
265+
v.sort()
266+
selected.append(v)
273267
else:
274268
num_prefixes = 0
275269
remaining = [f for _, f in uploaded]
276270

277271
# get file_types, format: filetype, required, list of files
278-
file_types = [(t, req, [x[i] for x in selected if i+1 <= len_files])
272+
file_types = [(t, req, [x[i] for x in selected if i+1 <= len(x)])
279273
for i, (t, req) in enumerate(supp_file_types)]
280274

281275
# Create a list of artifacts that the user has access to, in case that

qiita_pet/handlers/api_proxy/tests/test_studies.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,8 @@ def test_study_prep_get_req(self):
238238
for i in range(4, 0, -1):
239239
qdb.artifact.Artifact(i).visibility = "private"
240240

241+
qdb.metadata_template.prep_template.PrepTemplate.delete(pt.id)
242+
241243
def test_study_prep_get_req_failed_EBI(self):
242244
temp_dir = mkdtemp()
243245
self._clean_up_files.append(temp_dir)
@@ -337,6 +339,8 @@ def test_study_prep_get_req_failed_EBI(self):
337339
'status': 'success'}
338340
self.assertEqual(obs, exp)
339341

342+
qdb.metadata_template.prep_template.PrepTemplate.delete(pt.id)
343+
340344
def test_study_prep_get_req_no_access(self):
341345
obs = study_prep_get_req(1, 'demo@microbio.me')
342346
exp = {'status': 'error',
@@ -463,7 +467,7 @@ def test_study_files_get_req_per_sample_FASTQ(self):
463467
'shared@foo.bar', 1, pt.id, 'per_sample_FASTQ')
464468
exp = {
465469
'status': 'success', 'num_prefixes': 2, 'artifacts': [],
466-
'remaining': [], 'message': '',
470+
'remaining': ['uploaded_file.txt'], 'message': '',
467471
'file_types': [
468472
('raw_forward_seqs', True,
469473
['test_2.R1.fastq.gz', 'test_1.R1.fastq.gz']),
@@ -479,7 +483,7 @@ def test_study_files_get_req_per_sample_FASTQ(self):
479483
obs = study_files_get_req(
480484
'shared@foo.bar', 1, pt.id, 'per_sample_FASTQ')
481485
exp = {'status': 'success', 'num_prefixes': 2, 'artifacts': [],
482-
'remaining': [], 'message': '',
486+
'remaining': ['uploaded_file.txt'], 'message': '',
483487
'file_types': [('raw_forward_seqs', True,
484488
['test_2.R1.fastq.gz', 'test_1.R1.fastq.gz']),
485489
('raw_reverse_seqs', False,
@@ -496,7 +500,7 @@ def test_study_files_get_req_per_sample_FASTQ(self):
496500
'shared@foo.bar', 1, pt.id, 'per_sample_FASTQ')
497501
exp = {'status': 'success', 'num_prefixes': 2, 'artifacts': [],
498502
'remaining': ['test_1.R1.fastq.gz', 'test_1.R2.fastq.gz',
499-
'test_1.R3.fastq.gz'],
503+
'test_1.R3.fastq.gz', 'uploaded_file.txt'],
500504
'message': '',
501505
'file_types': [('raw_forward_seqs', True,
502506
['test_2.R1.fastq.gz']),

qiita_pet/templates/study_ajax/add_artifact.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,6 @@ <h4><i>No files attached to this preparation</i></h4>
9090

9191
<form action="{% raw qiita_config.portal_dir %}/study/new_artifact/" method="POST" id="create-artifact-form">
9292
<div class="row">
93-
<div class="col-md-12">
94-
<b>Name:</b> <input type="text" id="name" name="name" maxlength="35" required>
95-
</div>
9693
<div class="col-md-12">
9794
<b>Select type:</b>
9895
<select name="artifact-type" id="artifact-type">
@@ -102,6 +99,9 @@ <h4><i>No files attached to this preparation</i></h4>
10299
{% end %}
103100
</select>
104101
</div>
102+
<div class="col-md-12">
103+
<b>Add a name for the file:</b> <input type="text" id="name" name="name" maxlength="35" required>
104+
</div>
105105
</div>
106106
<div id="files-selector" hidden>
107107
</div>

qiita_pet/templates/study_ajax/artifact_file_selector.html

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@
183183
</style>
184184
<div class="row">
185185
<div class="col-md-12">
186-
<b>Import files from other studies:</b>
186+
<b>Now, you can import files from other studies</b>
187187
<select id="import-artifact" name="import-artifact">
188188
<option value="">Choose an artfact to import...</option>
189189
{% for a_id, label in artifacts %}
@@ -195,7 +195,12 @@
195195
</div>
196196
<div id="drag-files-div" class="row">
197197
<div class="col-md-12">
198-
<b>Or click and drag your uploaded files to the correct file type:</b><br/>
198+
<b>or click and drag your uploaded files to the correct file type</b><br/>
199+
<div class="blinking-message">
200+
Note: the system will try to auto select the files based on run_prefix, if that doesn't work, either the type you selected doesn't support
201+
it or the run_prefix is wrong
202+
</div>
203+
199204
</div>
200205
<div class="col-md-3" id="files-div">
201206
<p style="text-align: center;"><i>Available Files</i></p>

0 commit comments

Comments
 (0)