Ejemplo n.º 1
0
def get_all_products(user):
    args = check_and_get_args(flask.request.args.to_dict())
    query = v1_utils.QueryBuilder(_TABLE, args, _T_COLUMNS)

    query.add_extra_condition(_TABLE.c.state != 'archived')

    if (user.is_not_super_admin() and user.is_not_read_only_user()
            and user.is_not_epm()):
        _JPT = models.JOIN_PRODUCTS_TEAMS

        query = v1_utils.QueryBuilder(
            models.PRODUCTS,
            args,
            _T_COLUMNS,
            root_join_table=_JPT,
            root_join_condition=sql.and_(
                _JPT.c.product_id == _TABLE.c.id,  # noqa
                _JPT.c.team_id.in_(user.teams_ids)))  # noqa

    nb_rows = query.get_number_of_rows()
    rows = query.execute(fetchall=True)
    rows = v1_utils.format_result(rows, _TABLE.name, args['embed'],
                                  _EMBED_MANY)

    return flask.jsonify({'products': rows, '_meta': {'count': nb_rows}})
Ejemplo n.º 2
0
def get_all_jobs(user, topic_id=None):
    """Get all jobs.

    If topic_id is not None, then return all the jobs with a topic
    pointed by topic_id.
    """
    # get the diverse parameters
    args = check_and_get_args(flask.request.args.to_dict())

    # build the query thanks to the QueryBuilder class
    query = v1_utils.QueryBuilder(_TABLE, args, _JOBS_COLUMNS)

    # add extra conditions for filtering

    # # If not admin nor rh employee then restrict the view to the team
    if (user.is_not_super_admin() and user.is_not_read_only_user()
            and user.is_not_epm()):
        query.add_extra_condition(_TABLE.c.team_id.in_(user.teams_ids))

    # # If topic_id not None, then filter by topic_id
    if topic_id is not None:
        query.add_extra_condition(_TABLE.c.topic_id == topic_id)

    # # Get only the non archived jobs
    query.add_extra_condition(_TABLE.c.state != 'archived')

    nb_rows = query.get_number_of_rows()
    rows = query.execute(fetchall=True)
    rows = v1_utils.format_result(rows, _TABLE.name, args['embed'],
                                  _EMBED_MANY)

    return flask.jsonify({'jobs': rows, '_meta': {'count': nb_rows}})
Ejemplo n.º 3
0
def get_jobs_events_from_sequence(user, sequence):
    """Get all the jobs events from a given sequence number."""

    args = check_and_get_args(flask.request.args.to_dict())

    if user.is_not_super_admin():
        raise dci_exc.Unauthorized()

    query = sql.select([models.JOBS_EVENTS]). \
        select_from(models.JOBS_EVENTS.join(models.JOBS,
                    models.JOBS.c.id == models.JOBS_EVENTS.c.job_id)). \
        where(_TABLE.c.id >= sequence)
    sort_list = v1_utils.sort_query(args['sort'], _JOBS_EVENTS_COLUMNS,
                                    default='created_at')
    query = v1_utils.add_sort_to_query(query, sort_list)

    if args.get('limit', None):
        query = query.limit(args.get('limit'))
    if args.get('offset', None):
        query = query.offset(args.get('offset'))

    rows = flask.g.db_conn.execute(query).fetchall()

    query_nb_rows = sql.select([func.count(models.JOBS_EVENTS.c.id)])
    nb_rows = flask.g.db_conn.execute(query_nb_rows).scalar()

    return json.jsonify({'jobs_events': rows, '_meta': {'count': nb_rows}})
Ejemplo n.º 4
0
def get_all_issues(user):
    args = check_and_get_args(flask.request.args.to_dict())

    query = v1_utils.QueryBuilder(_TABLE, args, _I_COLUMNS)
    query.add_extra_condition(_TABLE.c.state != 'archived')
    nb_rows = query.get_number_of_rows()
    rows = query.execute(fetchall=True)
    rows = v1_utils.format_result(rows, _TABLE.name)

    return flask.jsonify({'issues': rows, '_meta': {'count': nb_rows}})
Ejemplo n.º 5
0
def get_topic_by_id(user, topic_id):
    args = check_and_get_args(flask.request.args.to_dict())
    topic = v1_utils.verify_existence_and_get(topic_id, _TABLE)

    if user.is_not_super_admin() and user.is_not_epm() and user.is_not_feeder(
    ):  # noqa
        if not user.is_read_only_user():
            v1_utils.verify_team_in_topic(user, topic_id)
        if 'teams' in args['embed']:
            raise dci_exc.Unauthorized()

    return base.get_resource_by_id(user, topic, _TABLE, _EMBED_MANY)
Ejemplo n.º 6
0
def get_all_tests_by_team(user, team_id):
    # todo: remove team_id
    args = check_and_get_args(flask.request.args.to_dict())

    query = v1_utils.QueryBuilder(_TABLE, args, _T_COLUMNS)
    query.add_extra_condition(_TABLE.c.state != 'archived')

    # get the number of rows for the '_meta' section
    nb_rows = query.get_number_of_rows()
    rows = query.execute(fetchall=True)
    rows = v1_utils.format_result(rows, _TABLE.name)

    return flask.jsonify({'tests': rows, '_meta': {'count': nb_rows}})
Ejemplo n.º 7
0
def get_all_feeders(user):
    args = check_and_get_args(flask.request.args.to_dict())

    query = v1_utils.QueryBuilder(_TABLE, args, _F_COLUMNS)

    if user.is_not_super_admin() and user.is_not_epm():
        query.add_extra_condition(_TABLE.c.team_id.in_(user.teams_ids))

    query.add_extra_condition(_TABLE.c.state != 'archived')

    rows = query.execute(fetchall=True)
    rows = v1_utils.format_result(rows, _TABLE.name, args['embed'],
                                  _EMBED_MANY)

    return flask.jsonify({'feeders': rows, '_meta': {'count': len(rows)}})
Ejemplo n.º 8
0
def get_all_components(user, topic_id):
    """Get all components of a topic."""

    args = check_and_get_args(flask.request.args.to_dict())

    query = v1_utils.QueryBuilder(_TABLE, args, _C_COLUMNS)

    query.add_extra_condition(
        sql.and_(_TABLE.c.topic_id == topic_id, _TABLE.c.state != 'archived'))

    nb_rows = query.get_number_of_rows()
    rows = query.execute(fetchall=True)
    rows = v1_utils.format_result(rows, _TABLE.name, args['embed'],
                                  _EMBED_MANY)

    return flask.jsonify({'components': rows, '_meta': {'count': nb_rows}})
Ejemplo n.º 9
0
def get_all_users(user):
    args = check_and_get_args(flask.request.args.to_dict())
    query = v1_utils.QueryBuilder(_TABLE, args, _USERS_COLUMNS, ['password'])

    if user.is_not_super_admin() and user.is_not_epm():
        query.add_extra_condition(_TABLE.c.team_id.in_(user.teams_ids))

    query.add_extra_condition(_TABLE.c.state != 'archived')

    # get the number of rows for the '_meta' section
    nb_rows = query.get_number_of_rows()
    rows = query.execute(fetchall=True)
    rows = v1_utils.format_result(rows, _TABLE.name, args['embed'],
                                  _EMBED_MANY)

    return flask.jsonify({'users': rows, '_meta': {'count': nb_rows}})
Ejemplo n.º 10
0
def list_components_files(user, c_id):
    component = v1_utils.verify_existence_and_get(c_id, _TABLE)
    topic = v1_utils.verify_existence_and_get(component['topic_id'],
                                              models.TOPICS)
    export_control.verify_access_to_topic(user, topic)

    args = check_and_get_args(flask.request.args.to_dict())

    query = v1_utils.QueryBuilder(models.COMPONENTFILES, args, _CF_COLUMNS)
    query.add_extra_condition(models.COMPONENTFILES.c.component_id == c_id)

    nb_rows = query.get_number_of_rows(models.COMPONENTFILES,
                                       models.COMPONENTFILES.c.component_id == c_id)  # noqa
    rows = query.execute(fetchall=True)
    rows = v1_utils.format_result(rows, models.COMPONENTFILES.name, None, None)

    return flask.jsonify({'component_files': rows,
                          '_meta': {'count': nb_rows}})
Ejemplo n.º 11
0
def get_all_jobstates(user, job_id):
    """Get all jobstates.
    """
    args = check_and_get_args(flask.request.args.to_dict())
    job = v1_utils.verify_existence_and_get(job_id, models.JOBS)
    if (user.is_not_super_admin() and user.is_not_read_only_user()
            and user.is_not_epm()):
        if job['team_id'] not in user.teams_ids:
            raise dci_exc.Unauthorized()

    query = v1_utils.QueryBuilder(_TABLE, args, _JS_COLUMNS)
    query.add_extra_condition(_TABLE.c.job_id == job_id)

    # get the number of rows for the '_meta' section
    nb_rows = query.get_number_of_rows()
    rows = query.execute(fetchall=True)
    rows = v1_utils.format_result(rows, _TABLE.name, args['embed'],
                                  _EMBED_MANY)
    return flask.jsonify({'jobstates': rows, '_meta': {'count': nb_rows}})
Ejemplo n.º 12
0
def get_all_topics(user):
    def _get_user_product_ids():
        _JPT = models.JOIN_PRODUCTS_TEAMS
        query = v1_utils.QueryBuilder(
            models.PRODUCTS,
            {},
            {},
            root_join_table=_JPT,
            root_join_condition=sql.and_(
                _JPT.c.product_id == models.PRODUCTS.c.id,  # noqa
                _JPT.c.team_id.in_(user.teams_ids)))  # noqa
        user_products = query.execute(fetchall=True)
        return [up['products_id'] for up in user_products]

    args = check_and_get_args(flask.request.args.to_dict())
    # if the user is an admin then he can get all the topics
    q_get_topics = v1_utils.QueryBuilder(_TABLE, args, _T_COLUMNS)

    if (user.is_not_super_admin() and user.is_not_read_only_user()
            and user.is_not_epm()):
        if 'teams' in args['embed']:
            raise dci_exc.DCIException('embed=teams not authorized.',
                                       status_code=401)
        # if regular user, retrieve the topics associated to the user's team
        # get only topics with export_control==True or with explicit association
        # between the user's teams and the topic
        product_ids = _get_user_product_ids()
        q_get_topics.add_extra_condition(_TABLE.c.product_id.in_(product_ids))
        q_get_topics.add_extra_condition(
            sql.or_(
                _TABLE.c.export_control == True,  # noqa
                _TABLE.c.id.in_(v1_utils.user_topic_ids(user))))  # noqa

    q_get_topics.add_extra_condition(_TABLE.c.state != 'archived')

    # get the number of rows for the '_meta' section
    nb_rows = q_get_topics.get_number_of_rows()
    rows = q_get_topics.execute(fetchall=True)
    rows = v1_utils.format_result(rows, _TABLE.name, args['embed'],
                                  _EMBED_MANY)

    return flask.jsonify({'topics': rows, '_meta': {'count': nb_rows}})
Ejemplo n.º 13
0
def get_all_remotecis(user, t_id=None):
    args = check_and_get_args(flask.request.args.to_dict())

    # build the query thanks to the QueryBuilder class
    query = v1_utils.QueryBuilder(_TABLE,
                                  args,
                                  _R_COLUMNS,
                                  ignore_columns=['keys', 'cert_fp'])

    if (user.is_not_super_admin() and user.is_not_read_only_user()
            and user.is_not_epm()):
        query.add_extra_condition(_TABLE.c.team_id.in_(user.teams_ids))

    if t_id is not None:
        query.add_extra_condition(_TABLE.c.team_id == t_id)

    query.add_extra_condition(_TABLE.c.state != 'archived')

    rows = query.execute(fetchall=True)
    rows = v1_utils.format_result(rows, _TABLE.name, args['embed'],
                                  _EMBED_MANY)

    return flask.jsonify({'remotecis': rows, '_meta': {'count': len(rows)}})
Ejemplo n.º 14
0
def get_users_from_team(user, team_id):
    args = check_and_get_args(flask.request.args.to_dict())
    _JUTR = models.JOIN_USERS_TEAMS
    query = v1_utils.QueryBuilder(
        models.USERS,
        args,
        users._USERS_COLUMNS,
        ['password', 'team_id'],
        root_join_table=_JUTR,
        root_join_condition=sql.and_(
            _JUTR.c.user_id == models.USERS.c.id,  # noqa
            _JUTR.c.team_id == team_id))  # noqa

    if user.is_not_epm() and user.is_not_in_team(team_id):
        raise dci_exc.Unauthorized()

    query.add_extra_condition(models.USERS.c.state != 'archived')

    rows = query.execute(fetchall=True)
    team_users = v1_utils.format_result(rows, models.USERS.name, args['embed'],
                                        users._EMBED_MANY)

    return flask.jsonify({'users': team_users, '_meta': {'count': len(rows)}})
Ejemplo n.º 15
0
def get_resource_by_id(user,
                       resource,
                       table,
                       embed_many=None,
                       ignore_columns=None,
                       resource_name=None,
                       embeds=None,
                       jsonify=True):
    args = check_and_get_args(flask.request.args.to_dict())
    if embeds is not None:
        # make a copy of the list to avoid side effect
        args['embed'] = args['embed'] + list(embeds)
    resource_name = resource_name or table.name[0:-1]
    resource_id = resource['id']
    columns = v1_utils.get_columns_name_with_objects(table)

    query = v1_utils.QueryBuilder(table, args, columns, ignore_columns)

    if 'state' in resource:
        query.add_extra_condition(table.c.state != 'archived')

    query.add_extra_condition(table.c.id == resource_id)

    rows = query.execute(fetchall=True)
    rows = v1_utils.format_result(rows, table.name, args['embed'], embed_many)

    if len(rows) < 1:
        raise dci_exc.DCINotFound(resource_name, resource_id)
    resource = rows[0]

    if jsonify is True:
        res = flask.jsonify({resource_name: resource})
        if 'etag' in resource:
            res.headers.add_header('ETag', resource['etag'])
        return res
    else:
        return resource
Ejemplo n.º 16
0
def get_all_teams_from_product(user, product_id):
    product = v1_utils.verify_existence_and_get(product_id, _TABLE)

    if user.is_not_super_admin() and user.is_not_epm():
        raise dci_exc.Unauthorized()

    args = check_and_get_args(flask.request.args.to_dict())
    _JPT = models.JOIN_PRODUCTS_TEAMS
    query = v1_utils.QueryBuilder(
        models.TEAMS,
        args,
        teams._T_COLUMNS,
        root_join_table=_JPT,
        root_join_condition=sql.and_(
            _JPT.c.product_id == product['id'],  # noqa
            _JPT.c.team_id == models.TEAMS.c.id))  # noqa
    rows = query.execute(fetchall=True)

    return flask.jsonify({
        'teams': serialize_teams(rows),
        '_meta': {
            'count': len(rows)
        }
    })
Ejemplo n.º 17
0
def get_teams_of_user(user, user_id):
    args = check_and_get_args(flask.request.args.to_dict())
    _JUTR = models.JOIN_USERS_TEAMS
    query = v1_utils.QueryBuilder(
        models.TEAMS,
        args,
        teams._T_COLUMNS,
        root_join_table=_JUTR,
        root_join_condition=sql.and_(
            _JUTR.c.team_id == models.TEAMS.c.id,  # noqa
            _JUTR.c.user_id == user_id))  # noqa

    if user.is_not_super_admin() and user.id != user_id and user.is_not_epm():
        raise dci_exc.Unauthorized()

    query.add_extra_condition(models.TEAMS.c.state != 'archived')

    # get the number of rows for the '_meta' section
    nb_rows = query.get_number_of_rows()
    rows = query.execute(fetchall=True)
    users_teams = v1_utils.format_result(rows, models.TEAMS.name,
                                         args['embed'], teams._EMBED_MANY)

    return flask.jsonify({'teams': users_teams, '_meta': {'count': nb_rows}})