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)) )
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)
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
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
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
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
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
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
def get_function_workers(function_id, session=None): workers = db_base.model_query( models.FunctionWorkers).filter_by(function_id=function_id).all() return workers
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)
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()
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()