From 67ecc774ac70c5ba528f0ac1536d8d35f7301dac Mon Sep 17 00:00:00 2001 From: zsloan Date: Thu, 7 May 2020 14:36:50 -0500 Subject: Committing current progress on group manager + a minor fix in dataset.py --- wqflask/utility/redis_tools.py | 72 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) (limited to 'wqflask/utility/redis_tools.py') 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 -- cgit v1.2.3