diff options
author | Frederick Muriuki Muriithi | 2025-04-28 02:11:25 -0500 |
---|---|---|
committer | Frederick Muriuki Muriithi | 2025-04-28 02:37:45 -0500 |
commit | 4a16f580a25aba122a4990a61e0e96f4692b833c (patch) | |
tree | eb3fd65bad0f4bbaa033a0444edb0f0f18d474a7 /uploader | |
parent | 77f18b73276d2bf57b52703b48e3b44b3c89c516 (diff) | |
download | gn-uploader-4a16f580a25aba122a4990a61e0e96f4692b833c.tar.gz |
Initialise entry-point for managing publications.
Diffstat (limited to 'uploader')
-rw-r--r-- | uploader/__init__.py | 2 | ||||
-rw-r--r-- | uploader/publications/__init__.py | 1 | ||||
-rw-r--r-- | uploader/publications/views.py | 34 | ||||
-rw-r--r-- | uploader/templates/base.html | 3 | ||||
-rw-r--r-- | uploader/templates/publications/base.html | 12 | ||||
-rw-r--r-- | uploader/templates/publications/index.html | 83 |
6 files changed, 135 insertions, 0 deletions
diff --git a/uploader/__init__.py b/uploader/__init__.py index 24c45a5..69d34f7 100644 --- a/uploader/__init__.py +++ b/uploader/__init__.py @@ -16,6 +16,7 @@ from . import session from .base_routes import base from .files.views import files from .species import speciesbp +from .publications import pubbp from .oauth2.views import oauth2 from .expression_data import exprdatabp from .errors import register_error_handlers @@ -103,6 +104,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(pubbp, url_prefix="/publications") app.register_blueprint(background_jobs_bp, url_prefix="/background-jobs/") register_error_handlers(app) diff --git a/uploader/publications/__init__.py b/uploader/publications/__init__.py index 57c0cbb..7efcabb 100644 --- a/uploader/publications/__init__.py +++ b/uploader/publications/__init__.py @@ -1 +1,2 @@ """Package for handling publications.""" +from .views import pubbp diff --git a/uploader/publications/views.py b/uploader/publications/views.py new file mode 100644 index 0000000..85d3aef --- /dev/null +++ b/uploader/publications/views.py @@ -0,0 +1,34 @@ +"""Endpoints for publications""" +import json + +from gn_libs.mysqldb import database_connection +from flask import Blueprint, render_template, current_app as app + +from uploader.authorisation import require_login + +from .models import fetch_publications + +from gn_libs.debug import __pk__ + +pubbp = Blueprint("publications", __name__) + + +@pubbp.route("/", methods=["GET"]) +@require_login +def index(): + """Index page for publications.""" + with database_connection(app.config["SQL_URI"]) as conn: + return render_template("publications/index.html") + + +@pubbp.route("/list", methods=["GET"]) +@require_login +def list_publications(): + with database_connection(app.config["SQL_URI"]) as conn: + return json.dumps({ + "publications": tuple({ + **row, "index": idx + } for idx,row in enumerate( + fetch_publications(conn), start=1)), + "status": "success" + }) diff --git a/uploader/templates/base.html b/uploader/templates/base.html index 09e6470..de9c226 100644 --- a/uploader/templates/base.html +++ b/uploader/templates/base.html @@ -46,6 +46,9 @@ <ul class="nav flex-column"> <li {%if activemenu=="home"%}class="activemenu"{%endif%}> <a href="/" >Home</a></li> + <li {%if activemenu=="publications"%}class="activemenu"{%endif%}> + <a href="{{url_for('publications.index')}}" + title="View and manage publications.">Publications</a></li> <li {%if activemenu=="species"%}class="activemenu"{%endif%}> <a href="{{url_for('species.list_species')}}" title="View and manage species information.">Species</a></li> diff --git a/uploader/templates/publications/base.html b/uploader/templates/publications/base.html new file mode 100644 index 0000000..db80bfa --- /dev/null +++ b/uploader/templates/publications/base.html @@ -0,0 +1,12 @@ +{%extends "base.html"%} + +{%block lvl1_breadcrumbs%} +<li {%if activelink=="publications"%} + class="breadcrumb-item active" + {%else%} + class="breadcrumb-item" + {%endif%}> + <a href="{{url_for('publications.index')}}">Publications</a> +</li> +{%block lvl2_breadcrumbs%}{%endblock%} +{%endblock%} diff --git a/uploader/templates/publications/index.html b/uploader/templates/publications/index.html new file mode 100644 index 0000000..f6f6fa0 --- /dev/null +++ b/uploader/templates/publications/index.html @@ -0,0 +1,83 @@ +{%extends "publications/base.html"%} +{%from "flash_messages.html" import flash_all_messages%} + +{%block title%}Publications{%endblock%} + +{%block pagetitle%}Publications{%endblock%} + + +{%block contents%} +{{flash_all_messages()}} + +<div class="row"> + <table id="tbl-list-publications" class="table compact stripe"> + <thead> + <tr> + <th>#</th> + <th>PubMed ID</th> + <th>Title</th> + <th>Authors</th> + </tr> + </thead> + + <tbody></tbody> + </table> +</div> +{%endblock%} + + +{%block javascript%} +<script type="text/javascript"> + $(function() { + var publicationsDataTable = buildDataTable( + "#tbl-list-publications", + [], + [ + {data: "index"}, + { + data: (pub) => { + if(pub.PubMed_ID) { + return `<a href="https://pubmed.ncbi.nlm.nih.gov/` + + `${pub.PubMed_ID}/" target="_blank">` + + `${pub.PubMed_ID}</a>`; + } + return ""; + } + }, + { + data: (pub) => { + var title = "βΈ»"; + if(pub.Title) { + title = pub.Title + } + return `<a href="/publications/view/${pub.Id}" ` + + `target="_blank">${title}</a>`; + } + }, + { + data: (pub) => { + authors = pub.Authors.split(",").map( + (item) => {return item.trim();}); + if(authors.length > 1) { + return authors[0] + ", et. al."; + } + return authors[0]; + } + } + ], + { + ajax: { + url: "/publications/list", + dataSrc: "publications" + }, + scrollY: 700, + paging: false, + deferRender: true, + layout: { + topStart: "info", + topEnd: "search" + } + }); + }); +</script> +{%endblock%} |