diff options
Diffstat (limited to 'uploader')
-rw-r--r-- | uploader/__init__.py | 2 | ||||
-rw-r--r-- | uploader/background_jobs.py | 35 | ||||
-rw-r--r-- | uploader/templates/jobs/job-not-found.html | 11 | ||||
-rw-r--r-- | uploader/templates/jobs/job-status.html | 26 |
4 files changed, 74 insertions, 0 deletions
diff --git a/uploader/__init__.py b/uploader/__init__.py index 23e66c1..24c45a5 100644 --- a/uploader/__init__.py +++ b/uploader/__init__.py @@ -19,6 +19,7 @@ from .species import speciesbp from .oauth2.views import oauth2 from .expression_data import exprdatabp from .errors import register_error_handlers +from .background_jobs import background_jobs_bp def override_settings_with_envvars( app: Flask, ignore: tuple[str, ...]=tuple()) -> None: @@ -102,6 +103,7 @@ def create_app(config: dict = {}): app.register_blueprint(files, url_prefix="/files") app.register_blueprint(oauth2, url_prefix="/oauth2") app.register_blueprint(speciesbp, url_prefix="/species") + app.register_blueprint(background_jobs_bp, url_prefix="/background-jobs/") register_error_handlers(app) gnlibs_jobs.init_app(app) diff --git a/uploader/background_jobs.py b/uploader/background_jobs.py new file mode 100644 index 0000000..ac47ff2 --- /dev/null +++ b/uploader/background_jobs.py @@ -0,0 +1,35 @@ +import uuid + +from flask import request, Blueprint, render_template, current_app as app + +from gn_libs import jobs +from gn_libs.jobs.jobs import JobNotFound +from gn_libs import sqlite3 + +from uploader.authorisation import require_login + +background_jobs_bp = Blueprint("background-jobs", __name__) + +@background_jobs_bp.route("/status/<uuid:job_id>") +@require_login +def job_status(job_id: uuid.UUID): + """View the job status.""" + with sqlite3.connection(app.config["ASYNCHRONOUS_JOBS_SQLITE_DB"]) as conn: + try: + job = jobs.job(conn, job_id, fulldetails=True) + stdout = "" + stderr = "" + # with (open(job["metadata"]["stdout-file"], encoding="utf-8") as stdout_file, + # open(job["metadata"]["stderr-file"], encoding="utf-8") as stderr_file): + # stdout = stdout_file.read() + # stderr = stderr_file.read() + + return render_template( + f"jobs/job-status.html", + job=job, + stdout=stdout, + stderr=stderr) + except JobNotFound as jnf: + return render_template( + "jobs/job-not-found.html", + job_id=job_id) diff --git a/uploader/templates/jobs/job-not-found.html b/uploader/templates/jobs/job-not-found.html new file mode 100644 index 0000000..a71e66f --- /dev/null +++ b/uploader/templates/jobs/job-not-found.html @@ -0,0 +1,11 @@ +{%extends "base.html"%} + +{%from "flash_messages.html" import flash_all_messages%} + +{%block title%}Background Jobs{%endblock%} + +{%block pagetitle%}Background Jobs{%endblock%} + +{%block contents%} +<p>Could not find job with ID: {{job_id}}</p> +{%endblock%} diff --git a/uploader/templates/jobs/job-status.html b/uploader/templates/jobs/job-status.html new file mode 100644 index 0000000..2750fcd --- /dev/null +++ b/uploader/templates/jobs/job-status.html @@ -0,0 +1,26 @@ +{%extends "base.html"%} + +{%from "flash_messages.html" import flash_all_messages%} + +{%block extrameta%} +<meta http-equiv="refresh" content="5" /> +{%endblock%} + +{%block title%}Background Jobs{%endblock%} + +{%block pagetitle%}Background Jobs{%endblock%} + +{%block contents%} + +<p>Status: {{job["metadata"]["status"]}}</p> +<p>Status: {{job_type}}</p> + +<h2>STDOUT</h2> +<pre>{{job["stdout"]}}</pre> + +<h2>STDERR</h2> +<pre>{{job["stderr"]}}</pre> + +<hr /> +<p>The Job: {{job["metadata"]}}</p> +{%endblock%} |