2024-04-05 02:45:27 +00:00
|
|
|
import redis
|
|
|
|
import json
|
2024-04-05 04:53:31 +00:00
|
|
|
import traceback
|
2024-07-17 10:16:01 +00:00
|
|
|
from . launchpad_singleton import get_launchpad
|
2024-04-05 02:45:27 +00:00
|
|
|
|
|
|
|
# Connect to Redis
|
|
|
|
cache = redis.Redis(host='localhost', port=6379, db=0)
|
|
|
|
|
2024-04-05 03:49:37 +00:00
|
|
|
|
2024-04-05 20:04:37 +00:00
|
|
|
def fetch_group_members(group_name, recurse=False):
|
2024-04-05 02:45:27 +00:00
|
|
|
try:
|
2024-04-05 03:49:37 +00:00
|
|
|
#Try to fetch from cache first
|
2024-04-05 02:45:27 +00:00
|
|
|
cached_result = cache.get(f"group_members_{group_name}")
|
|
|
|
if cached_result:
|
|
|
|
return json.loads(cached_result)
|
|
|
|
|
|
|
|
launchpad = get_launchpad()
|
|
|
|
group = launchpad.people[group_name]
|
2024-04-05 03:49:37 +00:00
|
|
|
|
2024-04-05 04:53:31 +00:00
|
|
|
group_members = set()
|
2024-04-05 03:49:37 +00:00
|
|
|
for person in group.members:
|
2024-04-05 20:04:37 +00:00
|
|
|
print(person)
|
|
|
|
if not person.is_team:
|
|
|
|
group_members.add(person.name)
|
|
|
|
continue
|
|
|
|
|
2024-04-05 03:49:37 +00:00
|
|
|
# MXIDs should be generated for individuals only
|
2024-04-05 04:53:31 +00:00
|
|
|
print(group_members)
|
|
|
|
mxids = ['@' + member + ':ubuntu.com' for member in group_members]
|
|
|
|
result = {'group_members': tuple(group_members), 'group_name': group_name, 'mxids': mxids}
|
2024-04-05 02:45:27 +00:00
|
|
|
|
|
|
|
# Cache the result with expiration time of 30 minutes (1800 seconds)
|
|
|
|
cache.setex(f"group_members_{group_name}", 1800, json.dumps(result))
|
|
|
|
|
|
|
|
return result
|
|
|
|
except KeyError as e:
|
|
|
|
print(f"Group with name {group_name} was not found. Error: {e}")
|
2024-04-05 04:53:31 +00:00
|
|
|
print(traceback.format_exc())
|
2024-04-05 02:45:27 +00:00
|
|
|
return False
|
|
|
|
except Exception as e:
|
|
|
|
print(f"An error occurred: {e}")
|
2024-04-05 04:53:31 +00:00
|
|
|
print(traceback.format_exc())
|
2024-04-05 02:45:27 +00:00
|
|
|
return False
|