about summary refs log tree commit diff
path: root/wqflask/maintenance/set_resource_defaults.py
diff options
context:
space:
mode:
authorzsloan2020-06-05 16:52:56 -0500
committerzsloan2020-06-05 16:52:56 -0500
commita302a2b0ac0e7c0f26a0d063c3f2b057f61d47f1 (patch)
treea9f5c88f7d2818bf4e0481b85872c7580a8d577c /wqflask/maintenance/set_resource_defaults.py
parent218576a04f90cc0bc9e53685323e1caa8cffe986 (diff)
downloadgenenetwork2-a302a2b0ac0e7c0f26a0d063c3f2b057f61d47f1.tar.gz
Commiting other current group/resource management code, plus the new files
Diffstat (limited to 'wqflask/maintenance/set_resource_defaults.py')
-rw-r--r--wqflask/maintenance/set_resource_defaults.py155
1 files changed, 155 insertions, 0 deletions
diff --git a/wqflask/maintenance/set_resource_defaults.py b/wqflask/maintenance/set_resource_defaults.py
new file mode 100644
index 00000000..ba102d9c
--- /dev/null
+++ b/wqflask/maintenance/set_resource_defaults.py
@@ -0,0 +1,155 @@
+"""

+

+Script that sets default resource access masks for use with the DB proxy

+

+Defaults will be:

+Owner - omni_gn

+Mask  - Public/non-confidential: { data: "view",

+                                   metadata: "view",

+                                   admin: "not-admin" }

+        Private/confidentia:     { data: "no-access",

+                                   metadata: "no-access",

+                                   admin: "not-admin" }

+

+To run:

+./bin/genenetwork2 ~/my_settings.py -c ./wqflask/maintenance/gen_select_dataset.py

+

+"""

+

+from __future__ import print_function, division

+

+import sys

+import json

+

+# NEW: Note we prepend the current path - otherwise a guix instance of GN2 may be used instead

+sys.path.insert(0,'./')

+

+# NEW: import app to avoid a circular dependency on utility.tools

+from wqflask import app

+

+from utility.tools import SQL_URI

+from utility.redis_tools import get_redis_conn, get_user_id, add_resource, get_resources

+Redis = get_redis_conn()

+

+import MySQLdb

+

+import urlparse

+

+from utility.logger import getLogger

+logger = getLogger(__name__)

+

+def parse_db_uri():

+    """Converts a database URI to the db name, host name, user name, and password"""

+

+    parsed_uri = urlparse.urlparse(SQL_URI)

+

+    db_conn_info = dict(

+                        db = parsed_uri.path[1:],

+                        host = parsed_uri.hostname,

+                        user = parsed_uri.username,

+                        passwd = parsed_uri.password)

+

+    print(db_conn_info)

+    return db_conn_info

+

+def insert_probeset_resources(default_owner_id):

+    current_resources = Redis.hgetall("resources")

+    Cursor.execute("""  SELECT 

+                            ProbeSetFreeze.Id, ProbeSetFreeze.Name, ProbeSetFreeze.confidentiality, ProbeSetFreeze.public

+                        FROM 

+                            ProbeSetFreeze""")

+

+    resource_results = Cursor.fetchall()

+    for i, resource in enumerate(resource_results):

+        if i % 20 == 0:

+            print(i)

+        resource_ob = {}

+        resource_ob['name'] = resource[1]

+        resource_ob['owner_id'] = default_owner_id

+        resource_ob['data'] = { "dataset" : str(resource[0])}

+        resource_ob['type'] = "dataset-probeset"

+        if resource[2] < 1 and resource[3] > 0:

+            resource_ob['default_mask'] = { "data": ["no-access", "view"] }

+        else:

+            resource_ob['default_mask'] = { "data": ["no-access"] }

+        resource_ob['group_masks'] = {}

+

+        add_resource(resource_ob)

+

+def insert_publish_resources(default_owner_id):

+    current_resources = Redis.hgetall("resources")

+    Cursor.execute("""  SELECT 

+                            PublishXRef.Id, PublishFreeze.Id, InbredSet.InbredSetCode

+                        FROM

+                            PublishXRef, PublishFreeze, InbredSet, Publication

+                        WHERE

+                            PublishFreeze.InbredSetId = PublishXRef.InbredSetId AND

+                            InbredSet.Id = PublishXRef.InbredSetId AND

+                            Publication.Id = PublishXRef.PublicationId""")

+

+    resource_results = Cursor.fetchall()

+    for resource in resource_results:

+        if resource[2]:

+            resource_ob = {}

+            if resource[2]:

+                resource_ob['name'] = resource[2] + "_" + str(resource[0])

+            else:

+                resource_ob['name'] = str(resource[0])

+            resource_ob['owner_id'] = default_owner_id

+            resource_ob['data'] = { "dataset" : str(resource[1]) ,

+                                    "trait"   : str(resource[0])}

+            resource_ob['type'] = "dataset-publish"

+            resource_ob['default_mask'] = { "data": "view" }

+

+            resource_ob['group_masks'] = {}

+

+            add_resource(resource_ob)

+        else:

+            continue

+

+def insert_geno_resources(default_owner_id):

+    current_resources = Redis.hgetall("resources")

+    Cursor.execute("""  SELECT 

+                            GenoFreeze.Id, GenoFreeze.ShortName, GenoFreeze.confidentiality

+                        FROM 

+                            GenoFreeze""")

+

+    resource_results = Cursor.fetchall()

+    for i, resource in enumerate(resource_results):

+        if i % 20 == 0:

+            print(i)

+        resource_ob = {}

+        resource_ob['name'] = resource[1]

+        resource_ob['owner_id'] = default_owner_id

+        resource_ob['data'] = { "dataset" : str(resource[0]) }

+        resource_ob['type'] = "dataset-geno"

+        if resource[2] < 1:

+            resource_ob['default_mask'] = { "data": "view" }

+        else:

+            resource_ob['default_mask'] = { "data": "no-access" }

+        resource_ob['group_masks'] = {}

+

+        add_resource(resource_ob)

+

+def insert_resources(default_owner_id):

+    current_resources = get_resources()

+    print("START")

+    insert_publish_resources(default_owner_id)

+    print("AFTER PUBLISH")

+    insert_geno_resources(default_owner_id)

+    print("AFTER GENO")

+    insert_probeset_resources(default_owner_id)

+    print("AFTER PROBESET")

+

+def main():

+    """Generates and outputs (as json file) the data for the main dropdown menus on the home page"""

+

+    Redis.delete("resources")

+

+    owner_id = get_user_id("email_address", "zachary.a.sloan@gmail.com")

+    insert_resources(owner_id)

+

+if __name__ == '__main__':

+    Conn = MySQLdb.Connect(**parse_db_uri())

+    Cursor = Conn.cursor()

+    main()
\ No newline at end of file