about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBonfaceKilz2021-10-15 13:01:38 +0300
committerBonfaceKilz2021-10-25 14:00:14 +0300
commitda86bc79798c05ec469d76f375741f306213e4d0 (patch)
tree431b0d2488e669cdea195eff8460b505935618c8
parent610335cb3c3030cf39e91ad3232d468b388fc340 (diff)
downloadgenenetwork2-da86bc79798c05ec469d76f375741f306213e4d0.tar.gz
Replace "resource_id" with "resource_info" dict
This avoids calling Redis twice when fetching metadata about the
resource.
-rw-r--r--wqflask/tests/unit/wqflask/test_resource_manager.py36
-rw-r--r--wqflask/wqflask/resource_manager.py10
2 files changed, 28 insertions, 18 deletions
diff --git a/wqflask/tests/unit/wqflask/test_resource_manager.py b/wqflask/tests/unit/wqflask/test_resource_manager.py
index b0b7e6a3..9d5aaf0b 100644
--- a/wqflask/tests/unit/wqflask/test_resource_manager.py
+++ b/wqflask/tests/unit/wqflask/test_resource_manager.py
@@ -58,18 +58,26 @@ class TestCheckUserAccessRole(unittest.TestCase):
     """Test cases for `get_user_access_roles`"""
 
     def setUp(self):
+        self.resource_info = {
+            "owner_id": "8ad942fe-490d-453e-bd37",
+            "default_mask": {
+                "data": "no-access",
+                "metadata": "no-access",
+                "admin": "not-admin",
+            },
+            "group_masks": {
+                "7fa95d07-0e2d-4bc5-b47c-448fdc1260b2": {
+                    "metadata": "edit",
+                    "data": "edit",
+                }},
+            "name": "_14329",
+            "data": {
+                "dataset": 1,
+                "trait": 14329,
+            },
+            "type": "dataset-publish",
+            }
         conn = mock.MagicMock()
-        conn.hget.return_value = (
-            '{"owner_id": "8ad942fe-490d-453e-bd37", '
-            '"default_mask": {"data": "no-access", '
-            '"metadata": "no-access", '
-            '"admin": "not-admin"}, '
-            '"group_masks": '
-            '{"7fa95d07-0e2d-4bc5-b47c-448fdc1260b2": '
-            '{"metadata": "edit", "data": "edit"}}, '
-            '"name": "_14329", "'
-            'data": {"dataset": 1, "trait": 14329}, '
-            '"type": "dataset-publish"}')
 
         conn.hgetall.return_value = {
             '7fa95d07-0e2d-4bc5-b47c-448fdc1260b2': (
@@ -85,7 +93,7 @@ class TestCheckUserAccessRole(unittest.TestCase):
         """Test that the right access roles are set"""
         self.assertEqual(get_user_access_roles(
             conn=self.conn,
-            resource_id="",  # Can be anything
+            resource_info=self.resource_info,
             user_id="8ad942fe-490d-453e-bd37"),
                          {"data": DataRole.EDIT,
                           "metadata": DataRole.EDIT,
@@ -94,7 +102,7 @@ class TestCheckUserAccessRole(unittest.TestCase):
     def test_get_user_access_default_mask(self):
         self.assertEqual(get_user_access_roles(
             conn=self.conn,
-            resource_id="",  # Can be anything
+            resource_info=self.resource_info,
             user_id=""),
                          {"data": DataRole.NO_ACCESS,
                           "metadata": DataRole.NO_ACCESS,
@@ -103,7 +111,7 @@ class TestCheckUserAccessRole(unittest.TestCase):
     def test_get_user_access_group_mask(self):
         self.assertEqual(get_user_access_roles(
             conn=self.conn,
-            resource_id="",  # Can be anything
+            resource_info=self.resource_info,
             user_id="8ad942fe-490d-453e-bd37-56f252e41603"),
                          {"data": DataRole.EDIT,
                           "metadata": DataRole.EDIT,
diff --git a/wqflask/wqflask/resource_manager.py b/wqflask/wqflask/resource_manager.py
index a3a94f9e..57b99296 100644
--- a/wqflask/wqflask/resource_manager.py
+++ b/wqflask/wqflask/resource_manager.py
@@ -66,16 +66,19 @@ def get_user_membership(conn: redis.Redis, user_id: str,
 
 
 def get_user_access_roles(conn: redis.Redis,
-                          resource_id: str,
+                          resource_info: Dict,
                           user_id: str) -> Dict:
     """Get the highest access roles for a given user
 
     Args:
-      - conn: A redis connection with `decoded_responses == True`.
-      - resource_id: The unique id of a given resource.
+      - conn: A redis connection with the responses decoded.
+      - resource_info: A dict containing details(metadata) about a
+        given resource.
+      - user_id: The unique id of a given user.
 
     Returns:
       A dict indicating the highest access role the user has.
+
     """
     # This is the default access role
     access_role = {
@@ -83,7 +86,6 @@ def get_user_access_roles(conn: redis.Redis,
         "metadata": [DataRole.NO_ACCESS],
         "admin": [AdminRole.NOT_ADMIN],
     }
-    resource_info = json.loads(conn.hget('resources', resource_id))
 
     # Check the resource's default mask
     if default_mask := resource_info.get("default_mask"):