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
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
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
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)
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