recurse teams
This commit is contained in:
parent
6d8d6ff1f2
commit
8b60597340
2 changed files with 34 additions and 6 deletions
|
@ -5,6 +5,29 @@ from bugtracker.launchpad_singleton import get_launchpad
|
||||||
# Connect to Redis
|
# Connect to Redis
|
||||||
cache = redis.Redis(host='localhost', port=6379, db=0)
|
cache = redis.Redis(host='localhost', port=6379, db=0)
|
||||||
|
|
||||||
|
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):
|
def fetch_group_members(group_name):
|
||||||
try:
|
try:
|
||||||
#Try to fetch from cache first
|
#Try to fetch from cache first
|
||||||
|
@ -12,11 +35,17 @@ def fetch_group_members(group_name):
|
||||||
if cached_result:
|
if cached_result:
|
||||||
return json.loads(cached_result)
|
return json.loads(cached_result)
|
||||||
|
|
||||||
# If not cached, fetch from Launchpad
|
|
||||||
launchpad = get_launchpad()
|
launchpad = get_launchpad()
|
||||||
group = launchpad.people[group_name]
|
group = launchpad.people[group_name]
|
||||||
group_members = [person.name for person in group.members]
|
|
||||||
mxids = ['@' + person.name + ':ubuntu.com' for person in group.members]
|
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}
|
result = {'group_members': group_members, 'group_name': group_name, 'mxids': mxids}
|
||||||
|
|
||||||
# Cache the result with expiration time of 30 minutes (1800 seconds)
|
# Cache the result with expiration time of 30 minutes (1800 seconds)
|
||||||
|
@ -28,5 +57,4 @@ def fetch_group_members(group_name):
|
||||||
return False
|
return False
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"An error occurred: {e}")
|
print(f"An error occurred: {e}")
|
||||||
print(f"Error processing request for launchpad group {group_name}: {str(e)}")
|
|
||||||
return False
|
return False
|
||||||
|
|
|
@ -14,7 +14,7 @@ import json
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
@api_view(['GET'])
|
@api_view(['GET'])
|
||||||
@cache_page(60 * 15) # Cache for 15 minutes
|
@cache_page(60 * 30) # Cache for 30 minutes
|
||||||
def group_members(self, group_name):
|
def group_members(self, group_name):
|
||||||
try:
|
try:
|
||||||
result = fetch_group_members(group_name)
|
result = fetch_group_members(group_name)
|
||||||
|
|
Loading…
Reference in a new issue