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)
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)
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)
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
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()
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
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()
def test_BayModelNotFound(self): self.assertRaises(exception.BayModelNotFound, lambda: self.raise_(exception.BayModelNotFound()))