def get_members_and_invites(group_key): """ Retrieve all members and invitations associated with a group. """ group = __get_group_by_key(group_key, check_owner=False) cache_keys = [group_key + x for x in ["__M", "__I"]] cache_vals = memcache.get_multi(cache_keys) [members, invites] = [cache_vals.get(x) for x in cache_keys] cache_vals.clear() if members is None: members = models.Member.gql("WHERE group = :1", group).fetch(None) cache_vals[cache_keys[0]] = members if invites is None: invites = models.Invitation.gql("WHERE group = :1", group).fetch(None) cache_vals[cache_keys[1]] = invites member_lists = [] for member in members: owner = member.owner lists = memcache.get(owner.user_id() + "__L") if lists is None: lists = models.List.gql("WHERE owner = :1", owner).fetch(None) cache_vals[owner.user_id() + "__L"] = lists name = settings.get_display_name(owner) member_lists.append(dict(member=member, lists=lists, name=name)) invites_left = app.config.NUM_MEMBERS_MAX - len(member_lists) - len(invites) if invites_left < 0: invites_left = 0 if cache_vals: memcache.set_multi(cache_vals, time=app.config.TIME_CACHE_DATA) results = { "group": group, "title": group.title, "member_lists": member_lists, "invites": invites, "invites_left": invites_left, "editor": users.get_current_user() == group.owner, } return results