Example #1
0
def get_resource_by_id(user, resource, table, embed_many, ignore_columns=None):
    args = schemas.args(flask.request.args.to_dict())
    resource_name = 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 not auth.is_admin(user) and 'team_id' in resource:
        query.add_extra_condition(table.c.team_id == user['team_id'])

    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]

    res = flask.jsonify({resource_name: resource})

    if 'etag' in resource:
        res.headers.add_header('ETag', resource['etag'])

    return res
Example #2
0
def get_all_tests(user, topic_id):
    args = schemas.args(flask.request.args.to_dict())
    v1_utils.verify_team_in_topic(user, topic_id)
    v1_utils.verify_existence_and_get(topic_id, _TABLE)

    query = sql.select([models.TESTS]).\
        select_from(models.JOIN_TOPICS_TESTS.join(models.TESTS)).\
        where(models.JOIN_TOPICS_TESTS.c.topic_id == topic_id)

    T_COLUMNS = v1_utils.get_columns_name_with_objects(models.TESTS)
    sort_list = v1_utils.sort_query(args['sort'], T_COLUMNS)
    where_list = v1_utils.where_query(args['where'], models.TESTS, T_COLUMNS)

    query = v1_utils.add_sort_to_query(query, sort_list)
    query = v1_utils.add_where_to_query(query, where_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.TESTS.c.id)]). \
        select_from(models.JOIN_TOPICS_TESTS.join(models.TESTS)). \
        where(models.JOIN_TOPICS_TESTS.c.topic_id == topic_id)
    nb_rows = flask.g.db_conn.execute(query_nb_rows).scalar()

    res = flask.jsonify({'tests': rows,
                         '_meta': {'count': nb_rows}})
    res.status_code = 200
    return res
Example #3
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
Example #4
0
from dci.api.v1 import base
from dci.api.v1 import components
from dci.api.v1 import export_control
from dci.api.v1 import utils as v1_utils
from dci import decorators
from dci.common import exceptions as dci_exc
from dci.common.schemas import (check_json_is_valid, create_topic_schema,
                                update_topic_schema, check_and_get_args)
from dci.common import utils
from dci.db import embeds
from dci.db import models

# associate column names with the corresponding SA Column object
_TABLE = models.TOPICS
_VALID_EMBED = embeds.topics()
_T_COLUMNS = v1_utils.get_columns_name_with_objects(_TABLE)
_EMBED_MANY = {
    'teams': True,
    'product': False,
    'next_topic': False,
}


@api.route('/topics', methods=['POST'])
@decorators.login_required
def create_topics(user):
    values = flask.request.json
    check_json_is_valid(create_topic_schema, values)
    values.update(v1_utils.common_values_dict())

    if user.is_not_super_admin() and user.is_not_epm() and user.is_not_feeder(
from dci.common.schemas import (
    check_json_is_valid,
    create_component_schema,
    update_component_schema,
    check_and_get_args
)
from dci.common import utils
from dci.db import embeds
from dci.db import models
from dci.stores import files_utils

# associate column names with the corresponding SA Column object
_TABLE = models.COMPONENTS
_TABLE_TAGS = models.JOIN_COMPONENTS_TAGS

_TABLE_TAGS_COLUMNS = v1_utils.get_columns_name_with_objects(_TABLE_TAGS)
_JJC = models.JOIN_JOBS_COMPONENTS
_VALID_EMBED = embeds.components()
_C_COLUMNS = v1_utils.get_columns_name_with_objects(_TABLE)
_CF_COLUMNS = v1_utils.get_columns_name_with_objects(models.COMPONENTFILES)
_JOBS_C_COLUMNS = v1_utils.get_columns_name_with_objects(models.JOBS)
_EMBED_MANY = {
    'files': True,
    'jobs': True
}

logger = logging.getLogger(__name__)


def _get_latest_components():
    __C_COLUMNS = dict(_C_COLUMNS)
# License for the specific language governing permissions and limitations
# under the License.

import flask
from flask import json

from dci.api.v1 import api
from dci.api.v1 import utils as v1_utils
from dci import decorators
from dci.common import schemas
from dci.db import models

from sqlalchemy import sql, func

_TABLE = models.FILES_EVENTS
_FILES_EVENTS_COLUMNS = v1_utils.get_columns_name_with_objects(_TABLE)


@api.route('/files_events/<int:sequence>', methods=['GET'])
@decorators.login_required
@decorators.has_role(['SUPER_ADMIN'])
def get_files_events_from_sequence(user, sequence):
    """Get all the files events from a given sequence number."""

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

    query = sql.select([models.FILES_EVENTS, models.FILES],
                       use_labels=True). \
        select_from(models.FILES_EVENTS.join(models.FILES,
                    models.FILES.c.id == models.FILES_EVENTS.c.file_id)). \
        where(_TABLE.c.id >= sequence)
Example #7
0
from dci.api.v1 import api
from dci.api.v1 import base
from dci.api.v1 import utils as v1_utils
from dci import auth
from dci import decorators
from dci.common import exceptions as dci_exc
from dci.common import schemas
from dci.common import signature
from dci.common import utils
from dci.db import embeds
from dci.db import models

# associate column names with the corresponding SA Column object
_TABLE = models.REMOTECIS
_VALID_EMBED = embeds.remotecis()
_R_COLUMNS = v1_utils.get_columns_name_with_objects(_TABLE)
_EMBED_MANY = {
    'team': False,
    'users': True,
    'lastjob': False,
    'lastjob.components': True,
    'currentjob': False,
    'currentjob.components': True
}
_RCONFIGURATIONS = models.REMOTECIS_RCONFIGURATIONS
_RCONFIGURATIONS_COLUMNS = v1_utils.get_columns_name_with_objects(
    _RCONFIGURATIONS)


@api.route('/remotecis', methods=['POST'])
@decorators.login_required