about summary refs log tree commit diff
path: root/gn3/auth/authorisation/resources/models.py
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2023-04-21 05:24:21 +0300
committerFrederick Muriuki Muriithi2023-04-21 05:24:21 +0300
commit2f6f54e215d7618ab9efa4ed17e09c633db07eab (patch)
tree1bb1eda425e276b6c4cdf9550572dd948b8d5443 /gn3/auth/authorisation/resources/models.py
parent95f067a542424b76022595a74d660a7e84158f38 (diff)
downloadgenenetwork3-2f6f54e215d7618ab9efa4ed17e09c633db07eab.tar.gz
auth: Attach linked data to specific resources.
Diffstat (limited to 'gn3/auth/authorisation/resources/models.py')
-rw-r--r--gn3/auth/authorisation/resources/models.py53
1 files changed, 25 insertions, 28 deletions
diff --git a/gn3/auth/authorisation/resources/models.py b/gn3/auth/authorisation/resources/models.py
index 2e2ff53..bc88691 100644
--- a/gn3/auth/authorisation/resources/models.py
+++ b/gn3/auth/authorisation/resources/models.py
@@ -269,56 +269,53 @@ def resource_by_id(
     raise NotFoundError(f"Could not find a resource with id '{resource_id}'")
 
 def __link_mrna_data_to_resource__(
-        conn: db.DbConnection, resource: Resource, dataset_id: str) -> dict:
+        conn: db.DbConnection, resource: Resource, data_link_id: UUID) -> dict:
     """Link mRNA Assay data with a resource."""
     with db.cursor(conn) as cursor:
         params = {
             "group_id": str(resource.group.group_id),
             "resource_id": str(resource.resource_id),
-            "dataset_type": "mRNA",
-            "dataset_id": dataset_id
+            "data_link_id": str(data_link_id)
         }
         cursor.execute(
             "INSERT INTO mrna_resources VALUES"
-            "(:group_id, :resource_id, :dataset_type, :dataset_id)",
+            "(:group_id, :resource_id, :data_link_id)",
             params)
         return params
 
 def __link_geno_data_to_resource__(
-        conn: db.DbConnection, resource: Resource, dataset_id: str) -> dict:
+        conn: db.DbConnection, resource: Resource, data_link_id: UUID) -> dict:
     """Link Genotype data with a resource."""
     with db.cursor(conn) as cursor:
         params = {
             "group_id": str(resource.group.group_id),
             "resource_id": str(resource.resource_id),
-            "dataset_type": "Genotype",
-            "trait_id": dataset_id
+            "data_link_id": str(data_link_id)
         }
         cursor.execute(
             "INSERT INTO genotype_resources VALUES"
-            "(:group_id, :resource_id, :dataset_type, :trait_id)",
+            "(:group_id, :resource_id, :data_link_id)",
             params)
         return params
 
 def __link_pheno_data_to_resource__(
-        conn: db.DbConnection, resource: Resource, dataset_id: str) -> dict:
+        conn: db.DbConnection, resource: Resource, data_link_id: UUID) -> dict:
     """Link Phenotype data with a resource."""
     with db.cursor(conn) as cursor:
         params = {
             "group_id": str(resource.group.group_id),
             "resource_id": str(resource.resource_id),
-            "dataset_type": "Phenotype",
-            "trait_id": dataset_id
+            "data_link_id": str(data_link_id)
         }
         cursor.execute(
             "INSERT INTO phenotype_resources VALUES"
-            "(:group_id, :resource_id, :dataset_type, :trait_id)",
+            "(:group_id, :resource_id, :data_link_id)",
             params)
         return params
 
 def link_data_to_resource(
         conn: db.DbConnection, user: User, resource_id: UUID, dataset_type: str,
-        dataset_id: str):
+        data_link_id: UUID) -> dict:
     """Link data to resource."""
     if not authorised_for(
             conn, user, ("group:resource:edit-resource",),
@@ -333,49 +330,49 @@ def link_data_to_resource(
         "mrna": __link_mrna_data_to_resource__,
         "genotype": __link_geno_data_to_resource__,
         "phenotype": __link_pheno_data_to_resource__,
-    }[dataset_type.lower()](conn, resource, dataset_id)
+    }[dataset_type.lower()](conn, resource, data_link_id)
 
 def __unlink_mrna_data_to_resource__(
-        conn: db.DbConnection, resource: Resource, dataset_id: str) -> dict:
+        conn: db.DbConnection, resource: Resource, data_link_id: UUID) -> dict:
     """Unlink data from mRNA Assay resources"""
     with db.cursor(conn) as cursor:
         cursor.execute("DELETE FROM mrna_resources "
-                       "WHERE resource_id=? AND dataset_id=?",
-                       (str(resource.resource_id), dataset_id))
+                       "WHERE resource_id=? AND data_link_id=?",
+                       (str(resource.resource_id), str(data_link_id)))
         return {
             "resource_id": str(resource.resource_id),
             "dataset_type": resource.resource_category.resource_category_key,
-            "dataset_id": dataset_id
+            "data_link_id": data_link_id
         }
 
 def __unlink_geno_data_to_resource__(
-        conn: db.DbConnection, resource: Resource, trait_id: str) -> dict:
+        conn: db.DbConnection, resource: Resource, data_link_id: UUID) -> dict:
     """Unlink data from Genotype resources"""
     with db.cursor(conn) as cursor:
         cursor.execute("DELETE FROM genotype_resources "
-                       "WHERE resource_id=? AND trait_id=?",
-                       (str(resource.resource_id), trait_id))
+                       "WHERE resource_id=? AND data_link_id=?",
+                       (str(resource.resource_id), str(data_link_id)))
         return {
             "resource_id": str(resource.resource_id),
             "dataset_type": resource.resource_category.resource_category_key,
-            "dataset_id": trait_id
+            "data_link_id": data_link_id
         }
 
 def __unlink_pheno_data_to_resource__(
-        conn: db.DbConnection, resource: Resource, trait_id: str) -> dict:
+        conn: db.DbConnection, resource: Resource, data_link_id: UUID) -> dict:
     """Unlink data from Phenotype resources"""
     with db.cursor(conn) as cursor:
         cursor.execute("DELETE FROM phenotype_resources "
-                       "WHERE resource_id=? AND trait_id=?",
-                       (str(resource.resource_id), trait_id))
+                       "WHERE resource_id=? AND data_link_id=?",
+                       (str(resource.resource_id), str(data_link_id)))
         return {
             "resource_id": str(resource.resource_id),
             "dataset_type": resource.resource_category.resource_category_key,
-            "dataset_id": trait_id
+            "data_link_id": str(data_link_id)
         }
 
 def unlink_data_from_resource(
-        conn: db.DbConnection, user: User, resource_id: UUID, dataset_id: str):
+        conn: db.DbConnection, user: User, resource_id: UUID, data_link_id: UUID):
     """Unlink data from resource."""
     if not authorised_for(
             conn, user, ("group:resource:edit-resource",),
@@ -391,7 +388,7 @@ def unlink_data_from_resource(
         "mrna": __unlink_mrna_data_to_resource__,
         "genotype": __unlink_geno_data_to_resource__,
         "phenotype": __unlink_pheno_data_to_resource__,
-    }[dataset_type.lower()](conn, resource, dataset_id)
+    }[dataset_type.lower()](conn, resource, data_link_id)
 
 def organise_resources_by_category(resources: Sequence[Resource]) -> dict[
         ResourceCategory, tuple[Resource]]: