aboutsummaryrefslogtreecommitdiff
path: root/gn3/auth
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2023-03-20 12:09:00 +0300
committerFrederick Muriuki Muriithi2023-03-20 12:09:00 +0300
commit133021096a9d21151de16d364ed5864ac6a3aaa1 (patch)
tree9094f376c946fe133f167e5988ac4b06a27ebd23 /gn3/auth
parent40db1f395821785fe2c09d5cde56fb7241ee05c3 (diff)
downloadgenenetwork3-133021096a9d21151de16d364ed5864ac6a3aaa1.tar.gz
auth: data: Enable offset in queries
Enable the 'OFFSET' clause in the queries to allow for progressive fetching of data from the database using the 'Previous' and 'Next' buttons.
Diffstat (limited to 'gn3/auth')
-rw-r--r--gn3/auth/authorisation/groups/data.py19
-rw-r--r--gn3/auth/authorisation/groups/views.py4
2 files changed, 11 insertions, 12 deletions
diff --git a/gn3/auth/authorisation/groups/data.py b/gn3/auth/authorisation/groups/data.py
index 073449c..fd76648 100644
--- a/gn3/auth/authorisation/groups/data.py
+++ b/gn3/auth/authorisation/groups/data.py
@@ -20,8 +20,7 @@ def __fetch_grouped_data__(
return tuple(dict(row) for row in cursor.fetchall())
def __fetch_ungrouped_mrna_data__(
- conn: gn3db.Connection, grouped_data,
- offset: int = 0) -> Sequence[dict]:
+ conn: gn3db.Connection, grouped_data, offset: int) -> Sequence[dict]:
"""Fetch ungrouped mRNA Assay data."""
query = ("SELECT psf.Id, psf.Name AS dataset_name, "
"psf.FullName AS dataset_fullname, "
@@ -39,8 +38,7 @@ def __fetch_ungrouped_mrna_data__(
return tuple(dict(row) for row in cursor.fetchall())
def __fetch_ungrouped_geno_data__(
- conn: gn3db.Connection, grouped_data,
- offset: int = 0) -> Sequence[dict]:
+ conn: gn3db.Connection, grouped_data, offset: int) -> Sequence[dict]:
"""Fetch ungrouped Genotype data."""
query = ("SELECT gf.Id, gf.Name AS dataset_name, "
"gf.FullName AS dataset_fullname, "
@@ -58,8 +56,7 @@ def __fetch_ungrouped_geno_data__(
return tuple(dict(row) for row in cursor.fetchall())
def __fetch_ungrouped_pheno_data__(
- conn: gn3db.Connection, grouped_data,
- offset: int = 0) -> Sequence[dict]:
+ conn: gn3db.Connection, grouped_data, offset: int) -> Sequence[dict]:
"""Fetch ungrouped Phenotype data."""
query = ("SELECT "
"pxf.Id, iset.InbredSetName, pf.Name AS dataset_name, "
@@ -83,14 +80,15 @@ def __fetch_ungrouped_pheno_data__(
def __fetch_ungrouped_data__(
conn: gn3db.Connection, dataset_type: str,
- ungrouped: Sequence[dict[str, Any]]) -> Sequence[dict[str, Any]]:
+ ungrouped: Sequence[dict[str, Any]],
+ offset) -> Sequence[dict[str, Any]]:
"""Fetch any ungrouped data."""
fetch_fns = {
"mrna": __fetch_ungrouped_mrna_data__,
"genotype": __fetch_ungrouped_geno_data__,
"phenotype": __fetch_ungrouped_pheno_data__
}
- return fetch_fns[dataset_type](conn, ungrouped)
+ return fetch_fns[dataset_type](conn, ungrouped, offset)
@authorised_p(("system:data:link-to-group",),
error_description=(
@@ -100,14 +98,15 @@ def __fetch_ungrouped_data__(
def retrieve_ungrouped_data(
authconn: authdb.DbConnection,
gn3conn: gn3db.Connection,
- dataset_type: str) -> Sequence[dict]:
+ dataset_type: str,
+ offset: int = 0) -> Sequence[dict]:
"""Retrieve any data not linked to any group."""
if dataset_type not in ("mrna", "genotype", "phenotype"):
raise InvalidData(
"Requested dataset type is invalid. Expected one of "
"'mrna', 'genotype' or 'phenotype'.")
grouped_data = __fetch_grouped_data__(authconn, dataset_type)
- return __fetch_ungrouped_data__(gn3conn, dataset_type, grouped_data)
+ return __fetch_ungrouped_data__(gn3conn, dataset_type, grouped_data, offset)
def __fetch_mrna_data_by_id__(conn: gn3db.Connection, dataset_id: str) -> dict:
"""Fetch mRNA Assay data by ID."""
diff --git a/gn3/auth/authorisation/groups/views.py b/gn3/auth/authorisation/groups/views.py
index 7b967d7..0b21800 100644
--- a/gn3/auth/authorisation/groups/views.py
+++ b/gn3/auth/authorisation/groups/views.py
@@ -177,7 +177,6 @@ def unlinked_data(resource_type: str) -> Response:
f") {type_filter}")
cursor.execute(ids_query)
ids = cursor.fetchall()
- print(f"THE IDS: {ids} ==> {type_filter}")
if ids:
clause = ", ".join(["(?, ?, ?)"] * len(ids))
@@ -204,7 +203,8 @@ def ungrouped_data(dataset_type: str) -> Response:
with gn3dbutils.database_connection() as gn3conn:
return jsonify(with_db_connection(partial(
retrieve_ungrouped_data, gn3conn=gn3conn,
- dataset_type=dataset_type)))
+ dataset_type=dataset_type,
+ offset = int(request.args.get("offset", 0)))))
@groups.route("/data/link", methods=["POST"])
@require_oauth("profile group resource")