コード例 #1
0
def _get_collection(model, insecure=False, limit=None, marker=None,
                    sort_keys=None, sort_dirs=None, fields=None, **filters):
    columns = (
        tuple([getattr(model, f) for f in fields if hasattr(model, f)])
        if fields else ()
    )

    query = (db_base.model_query(model, columns) if insecure
             else _secure_query(model, *columns))
    query = db_filters.apply_filters(query, model, **filters)

    query = _paginate_query(
        model,
        limit,
        marker,
        sort_keys,
        sort_dirs,
        query
    )

    try:
        return query.all()
    except Exception as e:
        raise exc.DBError(
            "Failed when querying database, error type: %s, "
            "error message: %s" % (e.__class__.__name__, str(e))
        )
コード例 #2
0
ファイル: api.py プロジェクト: huzhengchuan/qinling
def delete_function_worker(worker_name, session=None):
    worker = db_base.model_query(
        models.FunctionWorkers).filter_by(worker_name=worker_name).first()

    if not worker:
        raise exc.DBEntityNotFoundError(
            "FunctionWorker not found [worker_name=%s]" % worker_name)

    session.delete(worker)
コード例 #3
0
ファイル: api.py プロジェクト: huzhengchuan/qinling
def get_function_service_mapping(function_id, session=None):
    mapping = db_base.model_query(models.FunctionServiceMapping).filter_by(
        function_id=function_id).first()

    if not mapping:
        raise exc.DBEntityNotFoundError(
            "FunctionServiceMapping not found [function_id=%s]" % function_id)

    return mapping
コード例 #4
0
ファイル: api.py プロジェクト: huzhengchuan/qinling
def _secure_query(model, *columns):
    query = db_base.model_query(model, columns)

    if not issubclass(model, model_base.QinlingSecureModelBase):
        return query

    query = query.filter(model.project_id == context.get_ctx().projectid)

    return query
コード例 #5
0
def get_runtime(id, session=None):
    model = models.Runtime
    filters = sa.and_(
        model.id == id,
        sa.or_(model.project_id == context.get_ctx().projectid,
               model.is_public),
    )
    runtime = db_base.model_query(model).filter(filters).first()

    if not runtime:
        raise exc.DBEntityNotFoundError("Runtime not found [id=%s]" % id)

    return runtime
コード例 #6
0
def conditional_update(model, values, expected_values, insecure=False,
                       filters=None, session=None):
    """Compare-and-swap conditional update SQLAlchemy implementation."""
    filters = filters or {}
    filters.update(expected_values)
    query = (db_base.model_query(model) if insecure else _secure_query(model))
    query = db_filters.apply_filters(query, model, **filters)
    update_args = {'synchronize_session': False}

    # Return True if we were able to change any DB entry, False otherwise
    result = query.update(values, **update_args)

    return 0 != result
コード例 #7
0
def get_function_version(function_id, version, session=None, insecure=None):
    if insecure:
        query = db_base.model_query(models.FunctionVersion)
    else:
        query = _secure_query(models.FunctionVersion)

    version_db = query.filter_by(function_id=function_id,
                                 version_number=version).first()

    if not version_db:
        raise exc.DBEntityNotFoundError(
            "FunctionVersion not found [function_id=%s, version_number=%s]" %
            (function_id, version))

    return version_db
コード例 #8
0
def _secure_query(model, *columns):
    query = db_base.model_query(model, columns)

    if not issubclass(model, model_base.QinlingSecureModelBase):
        return query

    if model == models.Runtime:
        query_criterion = sa.or_(
            model.project_id == context.get_ctx().projectid, model.is_public)
    else:
        query_criterion = model.project_id == context.get_ctx().projectid

    query = query.filter(query_criterion)

    return query
コード例 #9
0
ファイル: api.py プロジェクト: huzhengchuan/qinling
def get_function_workers(function_id, session=None):
    workers = db_base.model_query(
        models.FunctionWorkers).filter_by(function_id=function_id).all()

    return workers
コード例 #10
0
ファイル: api.py プロジェクト: huzhengchuan/qinling
def _delete_all(model, insecure=False, **kwargs):
    # NOTE(kong): Because we use 'in_' operator in _secure_query(), delete()
    # method will raise error with default parameter. Please refer to
    # http://docs.sqlalchemy.org/en/rel_1_0/orm/query.html#sqlalchemy.orm.query.Query.delete
    query = db_base.model_query(model) if insecure else _secure_query(model)
    query.filter_by(**kwargs).delete(synchronize_session=False)
コード例 #11
0
ファイル: api.py プロジェクト: huzhengchuan/qinling
def _get_db_object_by_id(model, id, insecure=False):
    query = db_base.model_query(model) if insecure else _secure_query(model)

    return query.filter_by(id=id).first()
コード例 #12
0
def _get_db_object_by_name(model, name, insecure=None):
    query = db_base.model_query(model) if insecure else _secure_query(model)

    return query.filter_by(name=name).first()