diff options
| author | Frederick Muriuki Muriithi | 2026-01-08 11:02:02 -0600 |
|---|---|---|
| committer | Frederick Muriuki Muriithi | 2026-01-08 11:02:02 -0600 |
| commit | d93d98802dff81487eaf56ddd8446d51bef6f992 (patch) | |
| tree | e4ed91329793dbdf9555d9db16a9c20b09b1ccef | |
| parent | ee40f1a1212118db155b9b5964de2c5268ec20f2 (diff) | |
| download | gn-uploader-d93d98802dff81487eaf56ddd8446d51bef6f992.tar.gz | |
Bug: Move, and fix fetching of logged in user's ID.
| -rw-r--r-- | uploader/background_jobs.py | 7 | ||||
| -rw-r--r-- | uploader/phenotypes/views.py | 8 | ||||
| -rw-r--r-- | uploader/session.py | 14 |
3 files changed, 18 insertions, 11 deletions
diff --git a/uploader/background_jobs.py b/uploader/background_jobs.py index fc534dc..ad321f3 100644 --- a/uploader/background_jobs.py +++ b/uploader/background_jobs.py @@ -90,13 +90,6 @@ 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): diff --git a/uploader/phenotypes/views.py b/uploader/phenotypes/views.py index f636fba..60d5775 100644 --- a/uploader/phenotypes/views.py +++ b/uploader/phenotypes/views.py @@ -680,7 +680,7 @@ def load_data_to_database( "uploader.phenotypes.views" ".load_phenotypes_success_handler") }, - external_id=str(gnlibs_jobs.logged_in_user_id())) + external_id=session.logged_in_user_id()) ).then( lambda job: gnlibs_jobs.launch_job( job, @@ -1060,8 +1060,8 @@ def recompute_means(# pylint: disable=[unused-argument] "success_handler": ( "uploader.phenotypes.views." "recompute_phenotype_means_success_handler") - }, - external_id=str(gnlibs_jobs.logged_in_user_id())), + }, + external_id=session.logged_in_user_id()), _jobs_db, Path(f"{app.config['UPLOAD_FOLDER']}/job_errors"), worker_manager="gn_libs.jobs.launcher", @@ -1141,7 +1141,7 @@ def rerun_qtlreaper(# pylint: disable=[unused-argument] "uploader.phenotypes.views." "rerun_qtlreaper_success_handler") }, - external_id=str(gnlibs_jobs.logged_in_user_id())), + external_id=session.logged_in_user_id()), _jobs_db, Path(f"{app.config['UPLOAD_FOLDER']}/job_errors"), worker_manager="gn_libs.jobs.launcher", diff --git a/uploader/session.py b/uploader/session.py index 5af5827..9cb305b 100644 --- a/uploader/session.py +++ b/uploader/session.py @@ -1,4 +1,5 @@ """Deal with user sessions""" +import logging from uuid import UUID, uuid4 from datetime import datetime from typing import Any, Optional, TypedDict @@ -7,6 +8,8 @@ from authlib.jose import KeySet from flask import request, session from pymonad.either import Left, Right, Either +logger = logging.getLogger(__name__) + class UserDetails(TypedDict): """Session information relating specifically to the user.""" @@ -91,6 +94,17 @@ def user_details() -> UserDetails: """Retrieve user details.""" return session_info()["user"] + +def logged_in_user_id() -> Optional[UUID]: + """Get user id for logged in user. If user has not logged in, return None.""" + return user_token().then( + lambda _tok: user_details() + ).then( + lambda _user: Either(_user["user_id"], + (None, _user["email"] != "anon@ymous.user")) + ).either(lambda _err: None, lambda uid: uid) + + def user_token() -> Either: """Retrieve the user token.""" return session_info()["user"]["token"] |
