Skip to content

Commit

Permalink
Merge pull request #3294 from antgonza/fix-3227
Browse files Browse the repository at this point in the history
fix #3227
  • Loading branch information
charles-cowart committed Jun 2, 2023
2 parents 87c2e51 + e159ee4 commit fc17977
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 23 deletions.
44 changes: 26 additions & 18 deletions qiita_pet/handlers/admin_processing_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

from qiita_db.software import Software
from qiita_db.study import Study
from qiita_db.exceptions import QiitaDBUnknownIDError

from json import dumps

Expand Down Expand Up @@ -101,32 +102,39 @@ class SampleValidation(AdminProcessingJobBaseClass):
def get(self):
self._check_access()

self.render("sample_validation.html", input=True)
self.render("sample_validation.html", input=True, error=None)

@execute_as_transaction
def post(self):

# Get user-inputted qiita id and sample names
qid = self.get_argument("qid")
snames = self.get_argument("snames").split()
error, matching, missing, extra, blank = [None]*5

# Stripping leading qiita id from sample names
# Example: 1.SKB1.640202 -> SKB1.640202
qsnames = list(Study(qid).sample_template)
for i, qsname in enumerate(qsnames):
if qsname.startswith(qid):
qsnames[i] = qsname.replace(f'{qid}.', "", 1)

# Remove blank samples from sample names
blank = [x for x in snames if x.lower().startswith('blank')]
snames = [x for x in snames if 'blank' not in x.lower()]

# Validate user's sample names against qiita study
qsnames = set(qsnames)
snames = set(snames)
matching = qsnames.intersection(snames)
missing = qsnames.difference(snames)
extra = snames.difference(qsnames)
try:
qsnames = list(Study(qid).sample_template)
except TypeError:
error = f'Study {qid} seems to have no sample template'
except QiitaDBUnknownIDError:
error = f'Study {qid} does not exist'

if error is None:
for i, qsname in enumerate(qsnames):
if qsname.startswith(qid):
qsnames[i] = qsname.replace(f'{qid}.', "", 1)

# Remove blank samples from sample names
blank = [x for x in snames if x.lower().startswith('blank')]
snames = set(snames) - set(blank)

# Validate user's sample names against qiita study
qsnames = set(qsnames)
snames = set(snames)
matching = qsnames.intersection(snames)
missing = qsnames.difference(snames)
extra = snames.difference(qsnames)

self.render("sample_validation.html", input=False, matching=matching,
missing=missing, extra=extra, blank=blank)
missing=missing, extra=extra, blank=blank, error=error)
12 changes: 8 additions & 4 deletions qiita_pet/templates/sample_validation.html
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,13 @@
</style>
{% end %}
{% block content %}
<h1>Sample Validation</h1><br>
{% if input %}
<form action="{% raw qiita_config.portal_dir %}/admin/sample_validation/" method="post" id="sample_validation_form">
{% if input or error is not None %}
{% if error is not None %}
<div class="alert alert-danger" role="alert">
{{error}}
</div>
{% end %}
<form action="{% raw qiita_config.portal_dir %}/admin/sample_validation/" method="post" id="sample_validation_form">
<label for="qid">Qiita id:</label><br>
<input type="text" id="qid" name="qid"><br>
<label for="snames">Sample names:</label><br>
Expand All @@ -32,7 +36,7 @@ <h2>Matching</h2>
<li>{{ sample }}</li>
{% end %}
</ul>
</div>
</div>
<div class="column">
<h2>Missing</h2>
<ul>
Expand Down
4 changes: 3 additions & 1 deletion qiita_pet/test/test_admin_processing_job_handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,15 @@ def test_post(self):
body = response.body.decode('ascii')
for name in snames:
self.assertIn(name, body)

# Check failure: invalid qiita id
post_args = {
'qid': 2,
'snames': 'SKB1.640202 SKB2.640194 BLANK.1A BLANK.1B'
}
response = self.post('/admin/sample_validation/', post_args)
self.assertEqual(response.code, 500)
self.assertEqual(response.code, 200)
self.assertIn('Study 2 does not exist', response.body.decode('ascii'))


if __name__ == "__main__":
Expand Down

0 comments on commit fc17977

Please sign in to comment.