diff --git a/src/modules/site-v2/base/views/tools/genetic_mapping.py b/src/modules/site-v2/base/views/tools/genetic_mapping.py index 912b824e..3e0c5f15 100755 --- a/src/modules/site-v2/base/views/tools/genetic_mapping.py +++ b/src/modules/site-v2/base/views/tools/genetic_mapping.py @@ -97,6 +97,7 @@ def list_results(): # Page info 'title': ('All' if show_all else 'My') + ' Genetic Mappings', 'tool_alt_parent_breadcrumb': {"title": "Tools", "url": url_for('tools.tools')}, + 'user_is_admin': user_is_admin(), # Tool info 'tool_name': 'genetic_mapping', diff --git a/src/modules/site-v2/base/views/tools/heritability_calculator.py b/src/modules/site-v2/base/views/tools/heritability_calculator.py index c85d330d..41715013 100644 --- a/src/modules/site-v2/base/views/tools/heritability_calculator.py +++ b/src/modules/site-v2/base/views/tools/heritability_calculator.py @@ -98,6 +98,7 @@ def list_results(): 'title': ('All' if show_all else 'My') + ' Heritability Results', 'subtitle': 'Report List', 'alt_parent_breadcrumb': {"title": "Tools", "url": url_for('tools.tools')}, + 'user_is_admin': user_is_admin(), # Tool info 'tool_name': 'heritability_calculator', diff --git a/src/modules/site-v2/base/views/tools/pairwise_indel_finder.py b/src/modules/site-v2/base/views/tools/pairwise_indel_finder.py index c7449ef9..6a11860e 100644 --- a/src/modules/site-v2/base/views/tools/pairwise_indel_finder.py +++ b/src/modules/site-v2/base/views/tools/pairwise_indel_finder.py @@ -3,14 +3,14 @@ from caendr.services.logger import logger from flask import Response, Blueprint, render_template, request, url_for, jsonify, redirect, flash, abort -from base.forms import PairwiseIndelForm +from base.forms import PairwiseIndelForm, EmptyForm from base.utils.auth import jwt_required, admin_required, get_current_user, user_is_admin from base.utils.tools import list_reports, try_submit from base.utils.view_decorators import parse_job_id, validate_form from caendr.models.datastore.browser_track import BrowserTrackDefault from caendr.models.datastore import Species, IndelPrimerReport, DatasetRelease -from caendr.models.error import NotFoundError, NonUniqueEntity +from caendr.models.error import NotFoundError, NonUniqueEntity, JobAlreadyScheduledError from caendr.models.job_pipeline import IndelFinderPipeline from caendr.services.dataset_release import get_dataset_release from caendr.services.cloud.storage import BlobURISchema @@ -145,9 +145,11 @@ def list_results(): # Page info 'title': ('All' if show_all else 'My') + ' Primer Reports', 'tool_alt_parent_breadcrumb': { "title": "Tools", "url": url_for('tools.tools'), }, + 'form': EmptyForm(), # User info 'user': user, + 'user_is_admin': user_is_admin(), # Tool info 'tool_name': 'pairwise_indel_finder', @@ -161,6 +163,7 @@ def list_results(): # Table info 'species_list': Species.all(), 'items': list_reports(IndelPrimerReport, None if show_all else user, filter_errs), + 'rerunnable': True, }) @@ -196,6 +199,36 @@ def submit(form_data, no_cache=False): +@pairwise_indel_finder_bp.route('/resubmit/', methods=['POST']) +@admin_required() +@parse_job_id(IndelFinderPipeline, fetch=False) +def resubmit(job: IndelFinderPipeline): + + # Try scheduling the job again + try: + job.schedule(no_cache=True) + return jsonify({ + 'ready': job.is_finished(), + 'data_hash': job.report.data_hash, + 'id': job.report.id, + }) + + # If this job is currently running, abort + except JobAlreadyScheduledError as ex: + return jsonify({ + 'message': 'This job is already running.', + }), 400 + + # Display any other errors to the (admin) user + except Exception as ex: + return jsonify({ + 'message': 'There was a problem resubmitting this job. Please try again later.', + 'full_msg_link': 'See details.', + 'full_msg_body': getattr(ex, 'message', str(ex)), + }), 500 + + + @pairwise_indel_finder_bp.route("/report/", methods=['GET']) @pairwise_indel_finder_bp.route("/report//download/", methods=['GET']) @jwt_required() diff --git a/src/modules/site-v2/base/views/tools/phenotype_database.py b/src/modules/site-v2/base/views/tools/phenotype_database.py index 1564427f..9aa97f01 100644 --- a/src/modules/site-v2/base/views/tools/phenotype_database.py +++ b/src/modules/site-v2/base/views/tools/phenotype_database.py @@ -173,6 +173,7 @@ def list_results(): # User info 'user': user, + 'user_is_admin': user_is_admin(), # Tool info 'tool_name': 'phenotype_database', diff --git a/src/modules/site-v2/templates/tools/report-list.html b/src/modules/site-v2/templates/tools/report-list.html index 8ac11dff..d2139e01 100644 --- a/src/modules/site-v2/templates/tools/report-list.html +++ b/src/modules/site-v2/templates/tools/report-list.html @@ -72,6 +72,9 @@ {{ render_dataTable_result_list_header('Date', extra_classes='ordering') }} {% if all_results %} {{ render_dataTable_result_list_header('Owner', extra_classes='ordering') }} + {%- if user_is_admin and rerunnable %} + {{ render_dataTable_result_list_header('Rerun', extra_classes='ordering') }} + {%- endif %} {% endif %} @@ -96,6 +99,15 @@ {% if all_results %} {{ item.get_display_name() }} + {%- if user_is_admin and rerunnable %} + + {%- if item.status == JobStatus.ERROR %} +