Example #1
0
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