aboutsummaryrefslogtreecommitdiff
path: root/wqflask/utility
diff options
context:
space:
mode:
authorzsloan2020-05-07 14:36:50 -0500
committerzsloan2020-05-07 14:36:50 -0500
commit67ecc774ac70c5ba528f0ac1536d8d35f7301dac (patch)
tree164138c8afc1ca6a4171d4bba976e27788eb2249 /wqflask/utility
parent8a2f61a999e6dc653a9ca2de802137a1a4107e35 (diff)
downloadgenenetwork2-67ecc774ac70c5ba528f0ac1536d8d35f7301dac.tar.gz
Committing current progress on group manager + a minor fix in dataset.py
Diffstat (limited to 'wqflask/utility')
-rw-r--r--wqflask/utility/redis_tools.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/wqflask/utility/redis_tools.py b/wqflask/utility/redis_tools.py
index 573f9945..16bf911a 100644
--- a/wqflask/utility/redis_tools.py
+++ b/wqflask/utility/redis_tools.py
@@ -96,3 +96,75 @@ def get_user_groups(user_id):
continue
return admin_group_ids, user_group_ids
+
+def get_group_info(group_id):
+ group_json = Redis.hget("groups", group_id)
+ group_info = None
+ if group_json:
+ group_info = json.loads(group_json)
+
+ return group_info
+
+def create_group(admin_member_ids, user_member_ids = [], group_name = ""):
+ group_id = str(uuid.uuid4())
+ new_group = {
+ "id" : group_id
+ "admins": admin_member_ids,
+ "users" : user_member_ids,
+ "name" : group_name,
+ "created_timestamp": datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
+ "changed_timestamp": datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
+ }
+
+ Redis.hset("groups", group_id, new_group)
+
+ return new_group
+
+def delete_group(user_id, group_id):
+ #ZS: If user is an admin of a group, remove it from the groups hash
+ group_info = get_group_info(group_id)
+ if user_id in group_info["admins"]:
+ Redis.hdel("groups", group_id)
+ return get_user_groups(user_id)
+ else:
+ None
+
+def add_users_to_group(user_id, group_id, user_emails = [], admins = False): #ZS "admins" is just to indicate whether the users should be added to the groups admins or regular users set
+ group_info = get_group_info(group_id)
+ if user_id in group_info["admins"]: #ZS: Just to make sure that the user is an admin for the group, even though they shouldn't be able to reach this point unless they are
+ if admins:
+ group_users = set(group_info["admins"])
+ else:
+ group_users = set(group_info["users"])
+
+ for email in user_emails:
+ user_id = get_user_id("email_address", email)
+ group_users.add(user_id)
+
+ if admins:
+ group_info["admins"] = list(group_users)
+ else:
+ group_info["users"] = list(group_users)
+
+ group_info["changed_timestamp"] = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
+ Redis.hset("groups", group_id, json.dumps(group_info))
+ return group_info
+ else:
+ return None
+
+def remove_users_from_group(user_id, users_to_remove_ids, group_id, user_type = "users"): #ZS: User type is because I assume admins can remove other admins
+ group_info = get_group_info(group_id)
+ if user_id in group_info["admins"]:
+ group_users = set(group_info[user_type])
+ group_users -= set(users_to_remove_ids)
+ group_info[user_type] = list(group_users)
+ group_info["changed_timestamp"] = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
+ Redis.hset("groups", group_id, json.dumps(group_info))
+
+def change_group_name(user_id, group_id, new_name):
+ group_info = get_group_info(group_id)
+ if user_id in group_info["admins"]:
+ group_info["name"] = new_name
+ return group_info
+ else:
+ return None \ No newline at end of file