Exemple #1
0
def get_matching_robots(name_prefix, username, limit=10):
    admined_orgs = (_basequery.get_user_organizations(username).switch(
        Team).join(TeamRole).where(TeamRole.name == "admin"))

    prefix_checks = False

    for org in admined_orgs:
        org_search = prefix_search(User.username,
                                   org.username + "+" + name_prefix)
        prefix_checks = prefix_checks | org_search

    user_search = prefix_search(User.username, username + "+" + name_prefix)
    prefix_checks = prefix_checks | user_search

    return User.select().where(prefix_checks).limit(limit)
Exemple #2
0
def _get_matching_users(username_prefix,
                        robot_namespace=None,
                        organization=None,
                        limit=20,
                        exact_matches_only=False):
    user_search = prefix_search(User.username, username_prefix)
    if exact_matches_only:
        user_search = User.username == username_prefix

    direct_user_query = user_search & (User.organization
                                       == False) & (User.robot == False)

    if robot_namespace:
        robot_prefix = format_robot_username(robot_namespace, username_prefix)
        robot_search = prefix_search(User.username, robot_prefix)
        direct_user_query = (robot_search &
                             (User.robot == True)) | direct_user_query

    query = (User.select(User.id, User.username,
                         User.email, User.robot).group_by(
                             User.id, User.username, User.email,
                             User.robot).where(direct_user_query))

    if organization:
        query = (query.select(User.id, User.username, User.email, User.robot,
                              fn.Sum(Team.id)).join(
                                  TeamMember, JOIN.LEFT_OUTER).join(
                                      Team,
                                      JOIN.LEFT_OUTER,
                                      on=((Team.id == TeamMember.team) &
                                          (Team.organization == organization)),
                                  ).order_by(User.robot.desc()))

    class MatchingUserResult(object):
        def __init__(self, *args):
            self.id = args[0]
            self.username = args[1]
            self.email = args[2]
            self.robot = args[3]

            if organization:
                self.is_org_member = args[3] != None
            else:
                self.is_org_member = None

    return (MatchingUserResult(*args) for args in query.tuples().limit(limit))
Exemple #3
0
def get_matching_user_teams(team_prefix, user_obj, limit=10):
    team_prefix_search = prefix_search(Team.name, team_prefix)
    query = (Team.select(Team.id.distinct(),
                         Team).join(User).switch(Team).join(TeamMember).where(
                             TeamMember.user == user_obj,
                             team_prefix_search).limit(limit))

    return query
Exemple #4
0
def list_manifest_labels(manifest_id, prefix_filter=None):
    """ Lists all labels found on the given manifest, with an optional filter by key prefix. """
    query = (Label.select(Label, MediaType).join(MediaType).switch(Label).join(
        LabelSourceType).switch(Label).join(ManifestLabel).where(
            ManifestLabel.manifest == manifest_id))

    if prefix_filter is not None:
        query = query.where(prefix_search(Label.key, prefix_filter))

    return query
Exemple #5
0
def list_manifest_labels(tag_manifest, prefix_filter=None):
    """ Lists all labels found on the given tag manifest. """
    query = (Label.select(Label, MediaType).join(MediaType).switch(Label).join(
        LabelSourceType).switch(Label).join(TagManifestLabel).where(
            TagManifestLabel.annotated == tag_manifest))

    if prefix_filter is not None:
        query = query.where(prefix_search(Label.key, prefix_filter))

    return query
Exemple #6
0
def get_matching_user_namespaces(namespace_prefix, username, limit=10):
    namespace_user = get_namespace_user(username)
    namespace_user_id = namespace_user.id if namespace_user is not None else None

    namespace_search = prefix_search(Namespace.username, namespace_prefix)
    base_query = (Namespace.select().distinct().join(
        Repository, on=(Repository.namespace_user == Namespace.id)).join(
            RepositoryPermission, JOIN.LEFT_OUTER).where(namespace_search))

    return _basequery.filter_to_repos_for_user(base_query,
                                               namespace_user_id).limit(limit)
Exemple #7
0
def get_matching_admined_teams(team_prefix, user_obj, limit=10):
    team_prefix_search = prefix_search(Team.name, team_prefix)
    admined_orgs = (_basequery.get_user_organizations(
        user_obj.username).switch(Team).join(TeamRole).where(
            TeamRole.name == "admin"))

    query = (Team.select(Team.id.distinct(),
                         Team).join(User).switch(Team).join(TeamMember).where(
                             team_prefix_search, Team.organization <<
                             (admined_orgs)).limit(limit))

    return query
Exemple #8
0
 def match_prefix(self, query):
     return prefix_search(self, query)
Exemple #9
0
def get_matching_teams(team_prefix, organization):
    team_prefix_search = prefix_search(Team.name, team_prefix)
    query = Team.select().where(team_prefix_search,
                                Team.organization == organization)
    return query.limit(10)