about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2026-01-08 11:02:02 -0600
committerFrederick Muriuki Muriithi2026-01-08 11:02:02 -0600
commitd93d98802dff81487eaf56ddd8446d51bef6f992 (patch)
treee4ed91329793dbdf9555d9db16a9c20b09b1ccef
parentee40f1a1212118db155b9b5964de2c5268ec20f2 (diff)
downloadgn-uploader-d93d98802dff81487eaf56ddd8446d51bef6f992.tar.gz
Bug: Move, and fix fetching of logged in user's ID.
-rw-r--r--uploader/background_jobs.py7
-rw-r--r--uploader/phenotypes/views.py8
-rw-r--r--uploader/session.py14
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"]