def deployment_update(uuid, values): session = db_session.get_session() values.pop('uuid', None) with session.begin(): deploy = _deployment_get(uuid, session=session) deploy.update(values) return deploy
def task_update(uuid, values): session = db_session.get_session() values.pop('uuid', None) with session.begin(): task = _task_get(uuid, session=session) task.update(values) return task
def deployment_delete(uuid): session = db_session.get_session() with session.begin(): count = model_query(models.Resource, session=session).\ filter_by(deployment_uuid=uuid).\ count() if count: raise exceptions.DeploymentIsBusy(uuid=uuid) count = model_query(models.Deployment, session=session).\ filter_by(uuid=uuid).\ delete(synchronize_session=False) if not count: raise exceptions.DeploymentNotFound(uuid=uuid)
def save(self, session=None): """Save this object.""" if not session: session = sa.get_session() # NOTE(boris-42): This part of code should be look like: # sesssion.add(self) # session.flush() # But there is a bug in sqlalchemy and eventlet that # raises NoneType exception if there is no running # transaction and rollback is called. As long as # sqlalchemy has this bug we have to create transaction # explicity. with session.begin(subtransactions=True): session.add(self) session.flush()
def task_delete(uuid, status=None): session = db_session.get_session() with session.begin(): query = base_query = model_query(models.Task).filter_by(uuid=uuid) if status is not None: query = base_query.filter_by(status=status) count = query.delete(synchronize_session=False) if not count: if status is not None: task = base_query.first() if task: raise exceptions.TaskInvalidStatus(uuid=uuid, require=status, actual=task.status) raise exceptions.TaskNotFound(uuid=uuid) model_query(models.TaskResult).\ filter_by(task_uuid=uuid).\ delete(synchronize_session=False)
def model_query(model, session=None, read_deleted=False, **kwargs): session = session or db_session.get_session() query = session.query(model) if read_deleted is None: return query def issubclassof_rally_base(obj): return isinstance(obj, type) and issubclass(obj, models.RallyBase) base_model = model if not issubclassof_rally_base(base_model): base_model = kwargs.get('base_model', None) if not issubclassof_rally_base(base_model): raise Exception(_("model or base_model parameter should be " "subclass of RallyBase")) default_deleted_value = base_model.__mapper__.c.deleted.default.arg if read_deleted: return query.filter(base_model.deleted != default_deleted_value) return query.filter(base_model.deleted == default_deleted_value)
def model_query(model, session=None): """The helper method to create query. :param model: The instance of :class:`rally.db.sqlalchemy.models.RallyBase` to request it. :param session: Reuse the session object or get new one if it is None. :returns: The query object. :raises: :class:`Exception` when the model is not a sublcass of :class:`rally.db.sqlalchemy.models.RallyBase`. """ session = session or db_session.get_session() query = session.query(model) def issubclassof_rally_base(obj): return isinstance(obj, type) and issubclass(obj, models.RallyBase) if not issubclassof_rally_base(model): raise Exception(_("The model should be a subclass of RallyBase")) return query