Bah, I got the direct and indirect person memberships the wrong way around.
Have you considered this algorithm (psuedo code): # 1 query, we want all the teams he participates via the expanded memo: # (that is, all rows that have the member == user, and the team == anything # that is directly or indirectly in. This should return a list of tuples # [(user, t1), (user, t2)] or something like that memberships = list(get_expanded_memberships(Class.person==user)) known_teams = [team for _, team in memberships] known_members = known_teams + [user] # Get all the memberships of those teams themselves; because memberships # are transitive, we can query for the entire graph directly. # Note that here we query direct memberships only team_temberships = get_direct_memberships(Class.person in known_members) graph = dict(team_memberships) # now render ... -- https://code.launchpad.net/~jcsackett/launchpad/plus-participation-additional-fixes/+merge/32820 Your team Launchpad code reviewers is requested to review the proposed merge of lp:~jcsackett/launchpad/plus-participation-additional-fixes into lp:launchpad/devel. _______________________________________________ Mailing list: https://launchpad.net/~launchpad-reviewers Post to : [email protected] Unsubscribe : https://launchpad.net/~launchpad-reviewers More help : https://help.launchpad.net/ListHelp

