ubottu-web/ubottu/launchpad/utils.py

61 lines
2 KiB
Python
Raw Normal View History

import redis
import json
from bugtracker.launchpad_singleton import get_launchpad
# Connect to Redis
cache = redis.Redis(host='localhost', port=6379, db=0)
2024-04-05 03:49:37 +00:00
def fetch_individual_or_team_members(person_or_team, launchpad):
members = []
if person_or_team.is_team:
# Recursively fetch members for a team
group = launchpad.people[person_or_team.name]
for person in group.members:
if person.is_team:
ext = fetch_individual_or_team_members(person, launchpad)
if ext and not person.is_team:
members.append({
'name': person_or_team.name,
})
else:
members.append({
'name': person.name,
})
else:
# Append individual member details
members.append({
'name': person_or_team.name,
})
return members
def fetch_group_members(group_name):
try:
2024-04-05 03:49:37 +00:00
#Try to fetch from cache first
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
group_members = []
for person in group.members:
ext = fetch_individual_or_team_members(person, launchpad)
if ext:
group_members.extend(ext)
# MXIDs should be generated for individuals only
mxids = ['@' + member['name'] + ':ubuntu.com' for member in group_members]
result = {'group_members': group_members, 'group_name': group_name, 'mxids': mxids}
# 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}")
return False
except Exception as e:
print(f"An error occurred: {e}")
return False