Skip to content

Commit f7dd269

Browse files
authored
fixing issues from 2021.07 (#3128)
* fixing issues from 2021.07 * adding recommended test from @ElDeveloper
1 parent e582e82 commit f7dd269

File tree

6 files changed

+128
-32
lines changed

6 files changed

+128
-32
lines changed

qiita_db/metadata_template/prep_template.py

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -884,25 +884,24 @@ def _get_predecessors(workflow, node):
884884
job_params = qdb.software.Parameters.load(
885885
cmd, values_dict=params)
886886

887-
if job_params in previous_jobs.values():
887+
if params in previous_jobs.values():
888888
for x, y in previous_jobs.items():
889-
if job_params == y:
889+
if params == y:
890890
current_job = x
891-
continue
892-
893-
if workflow is None:
894-
PW = qdb.processing_job.ProcessingWorkflow
895-
workflow = PW.from_scratch(user, job_params)
896-
current_job = [j for j in workflow.graph.nodes()][0]
897891
else:
898-
if previous_job is None:
899-
current_job = workflow.add(
900-
job_params, req_params=req_params)
892+
if workflow is None:
893+
PW = qdb.processing_job.ProcessingWorkflow
894+
workflow = PW.from_scratch(user, job_params)
895+
current_job = [
896+
j for j in workflow.graph.nodes()][0]
901897
else:
902-
current_job = workflow.add(
903-
job_params, req_params=req_params,
904-
connections={previous_job: connections})
905-
906-
previous_jobs[current_job] = job_params
898+
if previous_job is None:
899+
current_job = workflow.add(
900+
job_params, req_params=req_params)
901+
else:
902+
current_job = workflow.add(
903+
job_params, req_params=req_params,
904+
connections={previous_job: connections})
905+
previous_jobs[current_job] = params
907906

908907
return workflow

qiita_db/metadata_template/test/test_prep_template.py

Lines changed: 56 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1346,13 +1346,64 @@ def test_artifact_setter(self):
13461346
self.filepaths, "FASTQ", prep_template=pt)
13471347
self.assertEqual(pt.artifact, artifact)
13481348

1349-
# here we can test that we can properly create a workflow
1349+
# here we can test that we can properly create a workflow but we are
1350+
# going to add lot more steps to make it more complex by adding a
1351+
# couple of new scenarios
1352+
# 1/2. adds a new path that should be kept separate all the way; this
1353+
# is to emulate what happens with different trimming (different
1354+
# default parameter) and deblur (same for each of the previous
1355+
# steps)
1356+
sql = """
1357+
INSERT INTO qiita.default_workflow_node (
1358+
default_workflow_id, default_parameter_set_id)
1359+
VALUES (1, 2), (1, 10);
1360+
INSERT INTO qiita.default_workflow_edge (
1361+
parent_id, child_id)
1362+
VALUES (7, 8);
1363+
INSERT INTO qiita.default_workflow_edge_connections (
1364+
default_workflow_edge_id, parent_output_id, child_input_id)
1365+
VALUES (4, 1, 3)"""
1366+
qdb.sql_connection.perform_as_transaction(sql)
1367+
# 2/2. adds a new path that should be kept together and then separate;
1368+
# this is to simulate what happens with MTX/WGS processing, one
1369+
# single QC step (together) and 2 separete profilers
1370+
sql = """
1371+
INSERT INTO qiita.default_parameter_set (
1372+
command_id, parameter_set_name, parameter_set)
1373+
VALUES (3, '100%',
1374+
('{"reference":1,"sortmerna_e_value":1,'
1375+
|| '"sortmerna_max_pos":'
1376+
|| '10000,"similarity":1.0,"sortmerna_coverage":1.00,'
1377+
|| '"threads":1}')::json);
1378+
INSERT INTO qiita.default_workflow_node (
1379+
default_workflow_id, default_parameter_set_id)
1380+
VALUES (1, 17);
1381+
INSERT INTO qiita.default_workflow_edge (
1382+
parent_id, child_id)
1383+
VALUES (7, 9);
1384+
INSERT INTO qiita.default_workflow_edge_connections (
1385+
default_workflow_edge_id, parent_output_id, child_input_id)
1386+
VALUES (5, 1, 3)
1387+
"""
1388+
qdb.sql_connection.perform_as_transaction(sql)
1389+
# Finally, we need to "activate" the merging scheme values of the
1390+
# commands so they are actually different:
1391+
# 31->'Pick closed-reference OTUs', 6->'Split libraries FASTQ'
1392+
sql = """
1393+
UPDATE qiita.command_parameter
1394+
SET check_biom_merge = true
1395+
WHERE command_parameter_id IN (31, 6)"""
1396+
qdb.sql_connection.perform_as_transaction(sql)
1397+
13501398
wk = pt.add_default_workflow(qdb.user.User('test@foo.bar'))
1351-
self.assertEqual(len(wk.graph.nodes), 2)
1352-
self.assertEqual(len(wk.graph.edges), 1)
1353-
self.assertEqual(
1399+
self.assertEqual(len(wk.graph.nodes), 5)
1400+
self.assertEqual(len(wk.graph.edges), 3)
1401+
self.assertCountEqual(
13541402
[x.command.name for x in wk.graph.nodes],
1355-
['Split libraries FASTQ', 'Pick closed-reference OTUs'])
1403+
# we should have 2 split libraries and 3 close reference
1404+
['Split libraries FASTQ', 'Split libraries FASTQ',
1405+
'Pick closed-reference OTUs', 'Pick closed-reference OTUs',
1406+
'Pick closed-reference OTUs'])
13561407

13571408
# now let's try to generate again and it should fail cause the jobs
13581409
# are alrady created

qiita_pet/handlers/study_handlers/processing.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ class ListOptionsHandler(BaseHandler):
3030
def get(self):
3131
command_id = self.get_argument("command_id")
3232
artifact_id = self.get_argument("artifact_id")
33+
# if the artifact id has ':' it means that it's a job in construction
34+
if ':' in artifact_id:
35+
artifact_id = None
3336
self.write(list_options_handler_get_req(command_id, artifact_id))
3437

3538

qiita_pet/handlers/study_handlers/tests/test_processing.py

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,54 @@
1515

1616

1717
class TestListCommandsHandler(TestHandlerBase):
18-
# TODO: Missing tests
19-
pass
18+
def test_get(self):
19+
response = self.get('/study/process/commands/',
20+
{'artifact_id': '8', 'include_analysis': 'true'})
21+
self.assertEqual(response.code, 200)
22+
exp = {'status': 'success', 'message': '', 'commands': [
23+
{'id': 9, 'command': 'Summarize Taxa',
24+
'output': [['taxa_summary', 'taxa_summary']]},
25+
{'id': 10, 'command': 'Beta Diversity', 'output': [
26+
['distance_matrix', 'beta_div_plots']]},
27+
{'id': 11, 'command': 'Alpha Rarefaction', 'output': [
28+
['rarefaction_curves', 'rarefaction_curves']]},
29+
{'id': 12, 'command': 'Single Rarefaction', 'output': [
30+
['rarefied_table', 'BIOM']]}]}
31+
32+
response = self.get('/study/process/commands/',
33+
{'artifact_id': '3', 'include_analysis': 'false'})
34+
self.assertEqual(response.code, 200)
35+
exp = {'status': 'success', 'message': '', 'commands': [
36+
{'id': 3, 'command': 'Pick closed-reference OTUs', 'output': [
37+
['OTU table', 'BIOM']]}]}
38+
self.assertEqual(loads(response.body), exp)
2039

2140

2241
class TestListOptionsHandler(TestHandlerBase):
23-
# TODO: Missing tests
24-
pass
42+
def test_get(self):
43+
response = self.get('/study/process/commands/options/',
44+
{'command_id': '3', 'artifact_id': '8'})
45+
self.assertEqual(response.code, 200)
46+
exp = {'status': 'success', 'message': '', 'options': [
47+
{'id': 10, 'name': 'Defaults', 'values':
48+
{'reference': 1, 'sortmerna_e_value': 1,
49+
'sortmerna_max_pos': 10000, 'similarity': 0.97,
50+
'sortmerna_coverage': 0.97, 'threads': 1}}],
51+
'req_options': {'input_data': ['artifact', ['Demultiplexed']]},
52+
'opt_options': {'reference': ['reference', '1'],
53+
'sortmerna_e_value': ['float', '1'],
54+
'sortmerna_max_pos': ['integer', '10000'],
55+
'similarity': ['float', '0.97'],
56+
'sortmerna_coverage': ['float', '0.97'],
57+
'threads': ['integer', '1']}}
58+
self.assertEqual(loads(response.body), exp)
59+
60+
# test that it works fine with a job_id:artifact_type
61+
response = self.get('/study/process/commands/options/',
62+
{'command_id': '3',
63+
'artifact_id': 'job_id:artifact_type'})
64+
self.assertEqual(response.code, 200)
65+
self.assertEqual(loads(response.body), exp)
2566

2667

2768
class TestJobAJAX(TestHandlerBase):

qiita_pet/static/js/networkVue.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,8 +1145,8 @@ Vue.component('processing-graph', {
11451145
'<td>' + circle_statuses.join('') + '</td>' +
11461146
'<td rowspan="2" width="20px">&nbsp;</td>' +
11471147
'<td rowspan="2">&nbsp;&nbsp;&nbsp;</td>' +
1148-
'<td rowspan="2" align="center">' +
1149-
'<a class="btn btn-success form-control" id="add-default-workflow"><span class="glyphicon glyphicon-flash"></span> Add Default Workflow</a>' +
1148+
'<td rowspan="2" align="center" id="add-default-workflow">' +
1149+
'<a class="btn btn-success form-control" id="add-default-workflow-btn"><span class="glyphicon glyphicon-flash"></span> Add Default Workflow</a>' +
11501150
"<br/><br/><a href='https://qiita.ucsd.edu/workflows/' target='_blank'> "+
11511151
'<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-exclamation-triangle" viewBox="0 0 16 16">' +
11521152
'<path d="M7.938 2.016A.13.13 0 0 1 8.002 2a.13.13 0 0 1 .063.016.146.146 0 0 1 .054.057l6.857 11.667c.036.06.035.124.002.183a.163.163 0 0 1-.054.06.116.116 0 0 ' +
@@ -1164,18 +1164,18 @@ Vue.component('processing-graph', {
11641164
'</table>';
11651165
$('#circle-explanation').html(full_text);
11661166

1167-
$('#add-default-workflow').on('click', function () {
1167+
$('#add-default-workflow-btn').on('click', function () {
11681168
$('#add-default-workflow').attr('disabled', true);
1169-
document.getElementById('add-default-workflow').innerHTML = 'Submitting!';
1169+
document.getElementById('add-default-workflow-btn').innerHTML = 'Submitting!';
11701170
$.post(vm.portal + '/study/process/workflow/default/', {prep_id: vm.elementId}, function(data) {
11711171
if (data['msg_error'] !== null){
1172-
$('#add-default-workflow').attr('disabled', false);
1172+
$('#add-default-workflow-btn').attr('disabled', false);
11731173
bootstrapAlert('Error generating workflow: ' + data['msg_error'].replace("\n", "<br/>"));
11741174
} else {
11751175
vm.updateGraph();
11761176
}
11771177
});
1178-
document.getElementById('add-default-workflow').innerHTML = ' Add Default Workflow';
1178+
document.getElementById('add-default-workflow-btn').innerHTML = ' Add Default Workflow';
11791179
});
11801180

11811181
// This call to udpate graph will take care of updating the jobs

qiita_pet/templates/study_ajax/add_artifact.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
// Modify the submit action of the form to use AJAX
5353
$("#create-artifact-form").submit(function(event){
5454
event.preventDefault();
55+
$('#add-files-btn').prop('disabled', true);
5556
// Add the prep template as a parameter
5657
$('<input>').attr({
5758
type: 'hidden',
@@ -82,6 +83,7 @@
8283
bootstrapAlert("Error: " + error_msg + " " + status, "danger");
8384
}
8485
});
86+
$('#add-files-btn').prop('disabled', false);
8587
});
8688
});
8789
</script>
@@ -111,7 +113,7 @@ <h4><i>No files attached to this preparation</i></h4>
111113
</div>
112114
<div class="row" id="submit-div" data-error-count="0" hidden>
113115
<div class="col-md-12" style="margin-top: 5px;">
114-
<input type="submit" class="btn btn-sm btn-success" onclick="this.disabled=true;" value="Add files">
116+
<input type="submit" class="btn btn-sm btn-success" id="add-files-btn" value="Add files">
115117
</div>
116118
</div>
117119
</form>

0 commit comments

Comments
 (0)