예제 #1
0
파일: api.py 프로젝트: Ch00k/rally
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
예제 #2
0
파일: api.py 프로젝트: Ch00k/rally
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
예제 #3
0
파일: api.py 프로젝트: Ch00k/rally
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)
예제 #4
0
 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()
예제 #5
0
파일: api.py 프로젝트: hughsaunders/rally
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)
예제 #6
0
파일: api.py 프로젝트: simpleranchero/rally
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)
예제 #7
0
파일: api.py 프로젝트: Ch00k/rally
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