Skip to content

Commit fc17977

Browse files
Merge pull request #3294 from antgonza/fix-3227
fix #3227
2 parents 87c2e51 + e159ee4 commit fc17977

File tree

3 files changed

+37
-23
lines changed

3 files changed

+37
-23
lines changed

qiita_pet/handlers/admin_processing_job.py

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
from qiita_db.software import Software
1616
from qiita_db.study import Study
17+
from qiita_db.exceptions import QiitaDBUnknownIDError
1718

1819
from json import dumps
1920

@@ -101,32 +102,39 @@ class SampleValidation(AdminProcessingJobBaseClass):
101102
def get(self):
102103
self._check_access()
103104

104-
self.render("sample_validation.html", input=True)
105+
self.render("sample_validation.html", input=True, error=None)
105106

106107
@execute_as_transaction
107108
def post(self):
108-
109109
# Get user-inputted qiita id and sample names
110110
qid = self.get_argument("qid")
111111
snames = self.get_argument("snames").split()
112+
error, matching, missing, extra, blank = [None]*5
112113

113114
# Stripping leading qiita id from sample names
114115
# Example: 1.SKB1.640202 -> SKB1.640202
115-
qsnames = list(Study(qid).sample_template)
116-
for i, qsname in enumerate(qsnames):
117-
if qsname.startswith(qid):
118-
qsnames[i] = qsname.replace(f'{qid}.', "", 1)
119-
120-
# Remove blank samples from sample names
121-
blank = [x for x in snames if x.lower().startswith('blank')]
122-
snames = [x for x in snames if 'blank' not in x.lower()]
123-
124-
# Validate user's sample names against qiita study
125-
qsnames = set(qsnames)
126-
snames = set(snames)
127-
matching = qsnames.intersection(snames)
128-
missing = qsnames.difference(snames)
129-
extra = snames.difference(qsnames)
116+
try:
117+
qsnames = list(Study(qid).sample_template)
118+
except TypeError:
119+
error = f'Study {qid} seems to have no sample template'
120+
except QiitaDBUnknownIDError:
121+
error = f'Study {qid} does not exist'
122+
123+
if error is None:
124+
for i, qsname in enumerate(qsnames):
125+
if qsname.startswith(qid):
126+
qsnames[i] = qsname.replace(f'{qid}.', "", 1)
127+
128+
# Remove blank samples from sample names
129+
blank = [x for x in snames if x.lower().startswith('blank')]
130+
snames = set(snames) - set(blank)
131+
132+
# Validate user's sample names against qiita study
133+
qsnames = set(qsnames)
134+
snames = set(snames)
135+
matching = qsnames.intersection(snames)
136+
missing = qsnames.difference(snames)
137+
extra = snames.difference(qsnames)
130138

131139
self.render("sample_validation.html", input=False, matching=matching,
132-
missing=missing, extra=extra, blank=blank)
140+
missing=missing, extra=extra, blank=blank, error=error)

qiita_pet/templates/sample_validation.html

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,13 @@
1414
</style>
1515
{% end %}
1616
{% block content %}
17-
<h1>Sample Validation</h1><br>
18-
{% if input %}
19-
<form action="{% raw qiita_config.portal_dir %}/admin/sample_validation/" method="post" id="sample_validation_form">
17+
{% if input or error is not None %}
18+
{% if error is not None %}
19+
<div class="alert alert-danger" role="alert">
20+
{{error}}
21+
</div>
22+
{% end %}
23+
<form action="{% raw qiita_config.portal_dir %}/admin/sample_validation/" method="post" id="sample_validation_form">
2024
<label for="qid">Qiita id:</label><br>
2125
<input type="text" id="qid" name="qid"><br>
2226
<label for="snames">Sample names:</label><br>
@@ -32,7 +36,7 @@ <h2>Matching</h2>
3236
<li>{{ sample }}</li>
3337
{% end %}
3438
</ul>
35-
</div>
39+
</div>
3640
<div class="column">
3741
<h2>Missing</h2>
3842
<ul>

qiita_pet/test/test_admin_processing_job_handlers.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,15 @@ def test_post(self):
6262
body = response.body.decode('ascii')
6363
for name in snames:
6464
self.assertIn(name, body)
65+
6566
# Check failure: invalid qiita id
6667
post_args = {
6768
'qid': 2,
6869
'snames': 'SKB1.640202 SKB2.640194 BLANK.1A BLANK.1B'
6970
}
7071
response = self.post('/admin/sample_validation/', post_args)
71-
self.assertEqual(response.code, 500)
72+
self.assertEqual(response.code, 200)
73+
self.assertIn('Study 2 does not exist', response.body.decode('ascii'))
7274

7375

7476
if __name__ == "__main__":

0 commit comments

Comments
 (0)