From 477c3f34f8af919592c722cc1a71b2602cb7ac82 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Wed, 12 Jul 2023 14:32:23 +0300 Subject: Use new session to get user (author) information * wqflask/utility/json/__init__.py: Custom JSON for serialising UUIDs into a JSON representantion * wqflask/utility/json/encoders.py: Custom JSON for serialising UUIDs into a JSON representation * wqflask/wqflask/metadata_edits.py: Use new sessions for author information --- wqflask/utility/json/__init__.py | 3 +++ wqflask/utility/json/encoders.py | 17 +++++++++++++++++ wqflask/wqflask/metadata_edits.py | 13 +++++++------ 3 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 wqflask/utility/json/__init__.py create mode 100644 wqflask/utility/json/encoders.py (limited to 'wqflask') diff --git a/wqflask/utility/json/__init__.py b/wqflask/utility/json/__init__.py new file mode 100644 index 00000000..b1141a34 --- /dev/null +++ b/wqflask/utility/json/__init__.py @@ -0,0 +1,3 @@ +"""Local JSON utilities.""" + +from .encoders import CustomJSONEncoder diff --git a/wqflask/utility/json/encoders.py b/wqflask/utility/json/encoders.py new file mode 100644 index 00000000..7c5839ac --- /dev/null +++ b/wqflask/utility/json/encoders.py @@ -0,0 +1,17 @@ +"""Custom JSON encoders""" +from uuid import UUID +from json import JSONEncoder + +# Do not use this `__ENCODERS__` variable outside of this module. +__ENCODERS__ = { + UUID: lambda obj: str(obj) +} + +class CustomJSONEncoder(JSONEncoder): + """Custom JSONEncoder class.""" + def default(self, obj): + """Serialise `obj` to a JSON representation.""" + obj_type = type(obj) + if obj_type in __ENCODERS__: + return __ENCODERS__[obj_type](obj) + return JSONEncoder.default(self, obj) diff --git a/wqflask/wqflask/metadata_edits.py b/wqflask/wqflask/metadata_edits.py index d6751e3a..69732dfe 100644 --- a/wqflask/wqflask/metadata_edits.py +++ b/wqflask/wqflask/metadata_edits.py @@ -23,12 +23,15 @@ from flask import render_template from flask import request from flask import url_for +from utility.json import CustomJSONEncoder + from wqflask.database import database_connection from wqflask.decorators import login_required from wqflask.decorators import required_access from wqflask.decorators import edit_admins_access_required from wqflask.oauth2 import client +from wqflask.oauth2 import session from wqflask.oauth2.request_utils import flash_error, process_error from gn3.authentication import AdminRole @@ -123,6 +126,7 @@ def edit_probeset(conn, name): @metadata_edit.route("//traits/") @required_access( ("group:resource:view-resource", "group:resource:edit-resource")) +@login_required(pagename="phenotype edit") def display_phenotype_metadata(dataset_id: str, name: str): from utility.tools import get_setting with database_connection(get_setting("SQL_URI")) as conn: @@ -167,15 +171,12 @@ def display_probeset_metadata(name: str): @metadata_edit.route("//traits/", methods=("POST",)) @required_access( ("group:resource:view-resource", "group:resource:edit-resource")) +@login_required(pagename="phenotype update") def update_phenotype(dataset_id: str, name: str): from utility.tools import get_setting data_ = request.form.to_dict() TMPDIR = current_app.config.get("TMPDIR") - author = ( - (g.user_session.record.get(b"user_id") or b"").decode("utf-8") - or g.user_session.record.get("user_id") - or "" - ) + author = session.session_info()["user"]["user_id"] phenotype_id = str(data_.get("phenotype-id")) if not (file_ := request.files.get("file")) and data_.get('edited') == "false": flash("No sample-data has been uploaded", "warning") @@ -272,7 +273,7 @@ def update_phenotype(dataset_id: str, name: str): ), } ) - f.write(json.dumps(diff_data)) + f.write(json.dumps(diff_data, cls=CustomJSONEncoder)) url = url_for("metadata_edit.list_diffs") flash(f"Sample-data has been successfully uploaded. \ View the diffs here", "success") -- cgit v1.2.3