diff options
author | Frederick Muriuki Muriithi | 2025-06-09 10:33:15 -0500 |
---|---|---|
committer | Frederick Muriuki Muriithi | 2025-06-09 10:33:15 -0500 |
commit | 22b285becb3d46fe7272870558fbde56396188e2 (patch) | |
tree | f12c7413244f229f1092717a26b1e646947bfbd6 | |
parent | 5cad25d44bc789e3f7de417cbe3b40b5073d2294 (diff) | |
download | gn-auth-22b285becb3d46fe7272870558fbde56396188e2.tar.gz |
Allow linking of data by passing the raw ids too.
-rw-r--r-- | gn_auth/auth/authorisation/data/phenotypes.py | 11 | ||||
-rw-r--r-- | gn_auth/auth/authorisation/data/views.py | 22 |
2 files changed, 23 insertions, 10 deletions
diff --git a/gn_auth/auth/authorisation/data/phenotypes.py b/gn_auth/auth/authorisation/data/phenotypes.py index 08a0524..63b3f12 100644 --- a/gn_auth/auth/authorisation/data/phenotypes.py +++ b/gn_auth/auth/authorisation/data/phenotypes.py @@ -83,7 +83,7 @@ def ungrouped_phenotype_data( return tuple() -def __traits__(gn3conn: gn3db.Connection, params: tuple[dict, ...]) -> tuple[dict, ...]: +def pheno_traits_from_db(gn3conn: gn3db.Connection, params: tuple[dict, ...]) -> tuple[dict, ...]: """An internal utility function. Don't use outside of this module.""" if len(params) < 1: return tuple() @@ -110,21 +110,24 @@ def __traits__(gn3conn: gn3db.Connection, params: tuple[dict, ...]) -> tuple[dic for itm in sublist)) return cursor.fetchall() + @authorised_p(("system:data:link-to-group",), error_description=( "You do not have sufficient privileges to link data to (a) " "group(s)."), oauth2_scope="profile group resource") def link_phenotype_data( - authconn:authdb.DbConnection, gn3conn: gn3db.Connection, group: Group, - traits: tuple[dict, ...]) -> dict: + authconn:authdb.DbConnection, + group: Group, + traits: tuple[dict, ...] +) -> dict: """Link phenotype traits to a user group.""" with authdb.cursor(authconn) as cursor: params = tuple({ "data_link_id": str(uuid.uuid4()), "group_id": str(group.group_id), **item - } for item in __traits__(gn3conn, traits)) + } for item in traits) cursor.executemany( "INSERT INTO linked_phenotype_data " "VALUES (" diff --git a/gn_auth/auth/authorisation/data/views.py b/gn_auth/auth/authorisation/data/views.py index 6d66788..fc20e86 100644 --- a/gn_auth/auth/authorisation/data/views.py +++ b/gn_auth/auth/authorisation/data/views.py @@ -35,8 +35,8 @@ from ..resources.models import ( from ...authentication.users import User from ...authentication.oauth2.resource_server import require_oauth -from ..data.phenotypes import link_phenotype_data from ..data.mrna import link_mrna_data, ungrouped_mrna_data +from ..data.phenotypes import link_phenotype_data, pheno_traits_from_db from ..data.genotypes import link_genotype_data, ungrouped_genotype_data data = Blueprint("data", __name__) @@ -327,14 +327,24 @@ def link_phenotype() -> Response: raise InvalidData("Expected at least one dataset to be provided.") return { "group_id": uuid.UUID(form["group_id"]), - "traits": form["selected"] + "traits": form["selected"], + "using_raw_ids": bool(form.get("using-raw-ids") == "on") } with gn3db.database_connection(app.config["SQL_URI"]) as gn3conn: - def __link__(conn: db.DbConnection, group_id: uuid.UUID, - traits: tuple[dict, ...]) -> dict: - return link_phenotype_data( - conn, gn3conn, group_by_id(conn, group_id), traits) + def __link__( + conn: db.DbConnection, + group_id: uuid.UUID, + traits: tuple[dict, ...], + using_raw_ids: bool = False + ) -> dict: + if using_raw_ids: + return link_phenotype_data(conn, + group_by_id(conn, group_id), + traits) + return link_phenotype_data(conn, + group_by_id(conn, group_id), + pheno_traits_from_db(gn3conn, traits)) return jsonify(with_db_connection( partial(__link__, **__values__(request_json())))) |