Source code for challengeutils.teams

"""Team related functions"""
from typing import Union

from synapseclient import Synapse, Team, UserProfile
from synapseclient.core.utils import id_of


def _get_team_count(syn: Synapse, teamid: int) -> dict:
    """Rest call wrapper for getting team member count

    Args:
        syn: Synapse object
        teamid: Synapse team id
    """
    count = syn.restGET(f"/teamMembers/count/{teamid}")
    return count


[docs]def get_team_count(syn: Synapse, team: Union[int, str, Team]) -> int: """Get number of team members Args: syn: Synapse object team: synaspeclient.Team, its id, or name. """ team_obj = syn.getTeam(team) count = _get_team_count(syn, team_obj.id) return count["count"]
[docs]def remove_team_member(syn, team, user): """Removes team member Args: syn: Synapse object team: synaspeclient.Team or its id user: synapseclient.UserProfile or its id """ teamid = id_of(team) userid = id_of(user) syn.restDELETE(f"/team/{teamid}/member/{userid}")
[docs]class NewUserProfile(UserProfile): """ Create new user profile that makes Userprofiles hashable SYNPY-879 """ def __hash__(self): return int(self["ownerId"])
def _get_team_set(syn, team): """ Helper function to return a set of usernames Args: syn: Synapse object team: Synapse team id, name or object Returns: Set of synapse user profiles in team """ members = syn.getTeamMembers(team) members_set = set(NewUserProfile(**member["member"]) for member in members) return members_set
[docs]def team_members_diff(syn, a, b): """ Calculates the diff between teama and teamb Args: syn: Synapse object a: Synapse Team id or name b: Synapse Team id or name Returns: Set of synapse user profiles in teama but not in teamb """ uniq_teama_members = _get_team_set(syn, a) uniq_teamb_members = _get_team_set(syn, b) members_not_in_teamb = uniq_teama_members.difference(uniq_teamb_members) return members_not_in_teamb
[docs]def team_members_intersection(syn, a, b): """ Calculates the intersection between teama and teamb Args: syn: Synapse object a: Synapse Team id or name b: Synapse Team id or name Returns: Set of synapse user profiles that belong in both teams """ uniq_teama_members = _get_team_set(syn, a) uniq_teamb_members = _get_team_set(syn, b) intersect_members = uniq_teama_members.intersection(uniq_teamb_members) return intersect_members
[docs]def team_members_union(syn, a, b): """ Calculates the union between teama and teamb Args: syn: Synapse object a: Synapse Team id or name b: Synapse Team id or name Returns: Set of a combination of synapse user profiles from both teams """ uniq_teama_members = _get_team_set(syn, a) uniq_teamb_members = _get_team_set(syn, b) union_members = uniq_teama_members.union(uniq_teamb_members) return union_members