diff options
Diffstat (limited to 'uploader/publications/views.py')
-rw-r--r-- | uploader/publications/views.py | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/uploader/publications/views.py b/uploader/publications/views.py index ebb8740..0608a35 100644 --- a/uploader/publications/views.py +++ b/uploader/publications/views.py @@ -1,6 +1,7 @@ """Endpoints for publications""" import json +from MySQLdb.cursors import DictCursor from gn_libs.mysqldb import database_connection from flask import ( flash, @@ -14,11 +15,12 @@ from flask import ( from uploader.authorisation import require_login from .models import ( - fetch_publications, fetch_publication_by_id, create_new_publications, fetch_publication_phenotypes) +from .datatables import fetch_publications + from gn_libs.debug import __pk__ pubbp = Blueprint("publications", __name__) @@ -35,12 +37,25 @@ def index(): @pubbp.route("/list", methods=["GET"]) @require_login def list_publications(): - with database_connection(app.config["SQL_URI"]) as conn: + # request breakdown: + # https://datatables.net/manual/server-side + _page = int(request.args.get("draw")) + _length = int(request.args.get("length") or '-1') + _start = int(request.args.get("start") or '0') + _search = request.args["search[value]"] + with (database_connection(app.config["SQL_URI"]) as conn, + conn.cursor(cursorclass=DictCursor) as cursor): + _publications, _current_rows, _totalfiltered, _totalrows = fetch_publications( + conn, + _search, + offset=_start, + limit=_length) + return json.dumps({ - "publications": tuple({ - **row, "index": idx - } for idx,row in enumerate( - fetch_publications(conn), start=1)), + "draw": _page, + "recordsTotal": _totalrows, + "recordsFiltered": _totalfiltered, + "publications": _publications, "status": "success" }) @@ -71,7 +86,7 @@ def create_publication(): with database_connection(app.config["SQL_URI"]) as conn: publications = create_new_publications(conn, ({ - "pubmed_id": form.get("pubmed-id"), + "pubmed_id": form.get("pubmed-id") or None, "abstract": form.get("publication-abstract").encode("utf8") or None, "authors": authors, "title": form.get("publication-title").encode("utf8") or None, |