예제 #1
0
파일: api.py 프로젝트: mkscala/magnum
 def get_baymodel_by_uuid(self, context, baymodel_uuid):
     query = model_query(models.BayModel)
     query = self._add_tenant_filters(context, query)
     query = query.filter_by(uuid=baymodel_uuid)
     try:
         return query.one()
     except NoResultFound:
         raise exception.BayModelNotFound(baymodel=baymodel_uuid)
예제 #2
0
 def get_baymodel_by_id(self, context, baymodel_id):
     query = model_query(models.BayModel)
     query = self._add_tenant_filters(context, query)
     public_q = model_query(models.BayModel).filter_by(public=True)
     query = query.union(public_q)
     query = query.filter_by(id=baymodel_id)
     try:
         return query.one()
     except NoResultFound:
         raise exception.BayModelNotFound(baymodel=baymodel_id)
예제 #3
0
파일: api.py 프로젝트: mkscala/magnum
 def get_baymodel_by_name(self, context, baymodel_name):
     query = model_query(models.BayModel)
     query = self._add_tenant_filters(context, query)
     query = query.filter_by(name=baymodel_name)
     try:
         return query.one()
     except MultipleResultsFound:
         raise exception.Conflict('Multiple baymodels exist with same name.'
                                  ' Please use the baymodel uuid instead.')
     except NoResultFound:
         raise exception.BayModelNotFound(baymodel=baymodel_name)
예제 #4
0
파일: api.py 프로젝트: mkscala/magnum
    def _do_update_baymodel(self, baymodel_id, values):
        session = get_session()
        with session.begin():
            query = model_query(models.BayModel, session=session)
            query = add_identity_filter(query, baymodel_id)
            try:
                ref = query.with_lockmode('update').one()
            except NoResultFound:
                raise exception.BayModelNotFound(baymodel=baymodel_id)

            ref.update(values)
        return ref
예제 #5
0
    def destroy_baymodel(self, baymodel_id):
        session = get_session()
        with session.begin():
            query = model_query(models.BayModel, session=session)
            query = add_identity_filter(query, baymodel_id)

            try:
                baymodel_ref = query.one()
            except NoResultFound:
                raise exception.BayModelNotFound(baymodel=baymodel_id)

            if self._is_baymodel_referenced(session, baymodel_ref['uuid']):
                raise exception.BayModelReferenced(baymodel=baymodel_id)

            query.delete()
예제 #6
0
    def _do_update_baymodel(self, baymodel_id, values):
        session = get_session()
        with session.begin():
            query = model_query(models.BayModel, session=session)
            query = add_identity_filter(query, baymodel_id)
            try:
                ref = query.with_lockmode('update').one()
            except NoResultFound:
                raise exception.BayModelNotFound(baymodel=baymodel_id)

            if self._is_baymodel_referenced(session, ref['uuid']):
                # we only allow to update baymodel to be public
                if not self._is_publishing_baymodel(values):
                    raise exception.BayModelReferenced(baymodel=baymodel_id)

            ref.update(values)
        return ref
예제 #7
0
파일: api.py 프로젝트: mkscala/magnum
    def destroy_baymodel(self, baymodel_id):
        def is_baymodel_referenced(session, baymodel_uuid):
            """Checks whether the baymodel is referenced by bay(s)."""
            query = model_query(models.Bay, session=session)
            query = self._add_bays_filters(query,
                                           {'baymodel_id': baymodel_uuid})
            return query.count() != 0

        session = get_session()
        with session.begin():
            query = model_query(models.BayModel, session=session)
            query = add_identity_filter(query, baymodel_id)

            try:
                baymodel_ref = query.one()
            except NoResultFound:
                raise exception.BayModelNotFound(baymodel=baymodel_id)

            if is_baymodel_referenced(session, baymodel_ref['uuid']):
                raise exception.BayModelReferenced(baymodel=baymodel_id)

            query.delete()
예제 #8
0
 def test_BayModelNotFound(self):
     self.assertRaises(exception.BayModelNotFound,
                       lambda: self.raise_(exception.BayModelNotFound()))