diff options
| author | Frederick Muriuki Muriithi | 2026-01-07 15:02:11 -0600 |
|---|---|---|
| committer | Frederick Muriuki Muriithi | 2026-01-07 15:02:11 -0600 |
| commit | d7214ad257dc0d0bc08175809b41f8dbd0b1f566 (patch) | |
| tree | dfbff5317d95d934da34482ce0886015521eefb8 /uploader | |
| parent | ba5f5b710e2ac562822febdec38161328c37f657 (diff) | |
| download | gn-uploader-main.tar.gz | |
Diffstat (limited to 'uploader')
| -rw-r--r-- | uploader/background_jobs.py | 28 | ||||
| -rw-r--r-- | uploader/templates/base.html | 2 |
2 files changed, 26 insertions, 4 deletions
diff --git a/uploader/background_jobs.py b/uploader/background_jobs.py index 2c55272..da3c8ed 100644 --- a/uploader/background_jobs.py +++ b/uploader/background_jobs.py @@ -1,22 +1,24 @@ """Generic views and utilities to handle background jobs.""" import uuid +import datetime import importlib -from typing import Callable from functools import partial +from typing import Union, Callable, Optional from werkzeug.wrappers.response import Response from flask import ( redirect, Blueprint, - render_template, current_app as app) from gn_libs import jobs from gn_libs import sqlite3 from gn_libs.jobs.jobs import JobNotFound -from uploader.flask_extensions import url_for +from uploader import session from uploader.authorisation import require_login +from uploader.oauth2.client import user_logged_in +from uploader.flask_extensions import url_for, render_template background_jobs_bp = Blueprint("background-jobs", __name__) HandlerType = Callable[[dict], Response] @@ -88,6 +90,13 @@ error_handler = partial(handler, handler_type="error") success_handler = partial(handler, handler_type="success") +def logged_in_user_id() -> Optional[Union[uuid.UUID, str]]: + """Get user id for logged in user.""" + if user_logged_in(): + return session.user_details()["user_id"] + return None + + @background_jobs_bp.route("/status/<uuid:job_id>") @require_login def job_status(job_id: uuid.UUID): @@ -119,3 +128,16 @@ def job_error(job_id: uuid.UUID): return render_template("jobs/job-error.html", job=job) except JobNotFound as _jnf: return render_template("jobs/job-not-found.html", job_id=job_id) + + +@background_jobs_bp.route("/list") +@require_login +def list_jobs(): + """List background jobs.""" + with sqlite3.connection(app.config["ASYNCHRONOUS_JOBS_SQLITE_DB"]) as conn: + return render_template( + "background-jobs/list-jobs.html", + jobs=jobs.jobs_by_external_id( + conn, session.user_details()["user_id"]), + display_datetime=lambda val: datetime.datetime.fromisoformat( + val).strftime("%A, %d %B %Y at %H:%M %Z")) diff --git a/uploader/templates/base.html b/uploader/templates/base.html index fd345b9..dd097de 100644 --- a/uploader/templates/base.html +++ b/uploader/templates/base.html @@ -34,7 +34,7 @@ {%if user_logged_in()%} {%if view_under_construction%} <li> - <a href="#" + <a href="{{url_for('background-jobs.list_jobs')}}" title="User's background jobs."> <!-- https://icons.getbootstrap.com/icons/back/ --> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-back" viewBox="0 0 16 16"> |
