예제 #1
0
def get_stale_team(stale_timespan):
    """ Returns a team that is setup to sync to an external group, and who has not been synced in
      now - stale_timespan. Returns None if none found.
  """
    stale_at = datetime.now() - stale_timespan

    try:
        candidates = (TeamSync.select(
            TeamSync.id).where((TeamSync.last_updated <= stale_at) | (
                TeamSync.last_updated >> None)).limit(500).alias("candidates"))

        found = TeamSync.select(candidates.c.id).from_(candidates).order_by(
            db_random_func()).get()

        if found is None:
            return

        return TeamSync.select(
            TeamSync, Team).join(Team).where(TeamSync.id == found.id).get()
    except TeamSync.DoesNotExist:
        return None
예제 #2
0
def get_team_sync_information(orgname, teamname):
    """ Returns the team syncing information for the team with the given name under the organization
      with the given name or None if none.
  """
    query = (TeamSync.select(TeamSync, LoginService).join(Team).join(
        User).switch(TeamSync).join(LoginService).where(
            Team.name == teamname, User.organization == True,
            User.username == orgname))

    try:
        return query.get()
    except TeamSync.DoesNotExist:
        return None
예제 #3
0
파일: team.py 프로젝트: sabre1041/quay-1
def get_teams_within_org(organization, has_external_auth=False):
    """
    Returns a AttrDict of team info (id, name, description), its role under the org, the number of
    repositories on which it has permission, and the number of members.
    """
    query = Team.select().where(
        Team.organization == organization).join(TeamRole)

    def _team_view(team):
        return {
            "id": team.id,
            "name": team.name,
            "description": team.description,
            "role_name": Team.role.get_name(team.role_id),
            "repo_count": 0,
            "member_count": 0,
            "is_synced": False,
        }

    teams = {team.id: _team_view(team) for team in query}
    if not teams:
        # Just in case. Should ideally never happen.
        return []

    # Add repository permissions count.
    permission_tuples = (RepositoryPermission.select(
        RepositoryPermission.team, fn.Count(RepositoryPermission.id)).where(
            RepositoryPermission.team << list(teams.keys())).group_by(
                RepositoryPermission.team).tuples())

    for perm_tuple in permission_tuples:
        teams[perm_tuple[0]]["repo_count"] = perm_tuple[1]

    # Add the member count.
    members_tuples = (TeamMember.select(TeamMember.team, fn.Count(
        TeamMember.id)).where(TeamMember.team << list(teams.keys())).group_by(
            TeamMember.team).tuples())

    for member_tuple in members_tuples:
        teams[member_tuple[0]]["member_count"] = member_tuple[1]

    # Add syncing information.
    if has_external_auth:
        sync_query = TeamSync.select(
            TeamSync.team).where(TeamSync.team << list(teams.keys()))
        for team_sync in sync_query:
            teams[team_sync.team_id]["is_synced"] = True

    return [AttrDict(team_info) for team_info in list(teams.values())]