def test_set_object_local_id(self): """ Test the method _set_object_local_id(self, obj, local_id) Test scenario: Set the local_id of the specified object when the pvc_id is none """ obj_id = self.powerVCMapping.id self.powerVCMapping.pvc_id = None self.powerVCMapping.local_id = None self.powerVCMapping.status = None self.aMox.StubOutWithMock(session, 'query') session.query(model.PowerVCMapping).AndReturn(query) self.aMox.StubOutWithMock(query, 'filter_by') query.filter_by(id=obj_id).AndReturn(query) self.aMox.StubOutWithMock(query, 'one') query.one().AndReturn(self.powerVCMapping) self.aMox.StubOutWithMock(session, 'merge') session.merge(self.powerVCMapping).AndReturn("") self.aMox.ReplayAll() self.powervcagentdb._set_object_local_id(self.powerVCMapping, 'test') self.aMox.VerifyAll() self.assertEqual(self.powerVCMapping.status, 'Creating') self.assertEqual(self.powerVCMapping.local_id, 'test') self.aMox.UnsetStubs()
def test_delete_existing_object(self): """ Test the method _delete_object(self, obj) when the object exists Test scenario: When the data is in the database, the delete operation should complete successfully """ self.aMox.StubOutWithMock(session, 'query') session.query(model.PowerVCMapping).AndReturn(query) self.aMox.StubOutWithMock(query, 'filter_by') query.filter_by(id=self.powerVCMapping['id']).AndReturn(query) self.aMox.StubOutWithMock(query, 'one') query.one().AndReturn(self.powerVCMapping) self.aMox.StubOutWithMock(session, 'begin') session.begin(subtransactions=True).AndReturn(transaction(None, None)) self.aMox.StubOutWithMock(session, 'delete') returnValue = session.delete(self.powerVCMapping).AndReturn(True) self.aMox.ReplayAll() self.powervcagentdb._delete_object(self.powerVCMapping) self.aMox.VerifyAll() self.assertEqual(returnValue, True) self.aMox.UnsetStubs()
def test_get_object(self): """ Test the method _get_object() using a sync key Test scenario: Get the object with sync_key """ obj_type = self.powerVCMapping.obj_type sync_key = self.powerVCMapping.sync_key self.aMox.StubOutWithMock(session, 'query') session.query(model.PowerVCMapping).AndReturn(query) self.aMox.StubOutWithMock(query, 'filter_by') query.filter_by(obj_type=obj_type, sync_key=sync_key).AndReturn(query) self.aMox.StubOutWithMock(query, 'one') query.one().AndReturn(self.powerVCMapping) self.aMox.ReplayAll() returnValue = self.powervcagentdb._get_object(obj_type=obj_type, sync_key=sync_key) self.aMox.VerifyAll() self.assertEqual(returnValue, self.powerVCMapping) self.aMox.UnsetStubs()
def test_get_object(self): """ Test the method _get_object() using a sync key Test scenario: Get the object with sync_key """ obj_type = self.powerVCMapping.obj_type sync_key = self.powerVCMapping.sync_key self.aMox.StubOutWithMock(session, 'query') session.query(model.PowerVCMapping).AndReturn(query) self.aMox.StubOutWithMock(query, 'filter_by') query.filter_by( obj_type=obj_type, sync_key=sync_key).AndReturn(query) self.aMox.StubOutWithMock(query, 'one') query.one().AndReturn(self.powerVCMapping) self.aMox.ReplayAll() returnValue = self.powervcagentdb._get_object( obj_type=obj_type, sync_key=sync_key) self.aMox.VerifyAll() self.assertEqual(returnValue, self.powerVCMapping) self.aMox.UnsetStubs()
def resource_info(self, resource): with session_scope() as session: query = Query(Resource) query = query.with_session(session) if resource.isnumeric(): query = query.filter(Resource.id == resource) else: query = query.filter(Resource.name == resource) resource = query.one() print(json.dumps(resource.to_dict(), indent=4))
def get_one_or_else(query: Query, logger: 'Logger', failure_method: 'Callable[[int], None]') -> db.Model: try: return query.one() except MultipleResultsFound as e: logger.error( "Found multiple while executing %s when one was expected: %s" % (query, e, )) failure_method(500) except NoResultFound as e: logger.error("Found none when one was expected: %s" % (e,)) failure_method(404)
def get_or_404(query: Query, query_type: str = "one"): """ .. todo :: use flask-sqlalchemy's get_or_404 instead :param query: The queryset that should be queried. E.g. ``session.db.query(Model).filter(something=='Foo')`` :param query_type: String identifier for method. Either ``one`` or ``all`` """ try: if query_type == "one": return query.one() elif query_type == "all": return query.all() else: raise ValueError(f"Unexpected type {query_type}. Allowed types: one, all") except NoResultFound: raise NotFound()
def resource_logs(self, resources=None): hooks_dir = os.path.join(app.config["logdir"], "hooks") paths = [] for resource in resources: # If the resource was specified by its name instead of its ID if not resource.isnumeric(): with session_scope() as session: query = Query(Resource) query = query.with_session(session) query = query.filter(Resource.name == resource) resource = query.one().id # We can't wildcard everything because then `tail' wouldn't # discover newly created log files suffixes = ["_alloc", "_watch", "_terminate"] path = os.path.join(hooks_dir, str(resource).zfill(6)) paths.extend([path + suffix for suffix in suffixes]) cmd = ["tail", "-F", "-n+0"] + paths subprocess.call(cmd)
.params(value=10, name='hello')) # other option query.order_by(User.id) query.distinct() query.limit() query.offset() # emit query and get result ################################# # the select Query instance will not emit a query until the # following method invoked query.all() # fetch all as list query.first() # fetch one or None query.one() # fetch one or NoResultFound or MultipleResultsFound query.one_or_none() # fetch one or None or MultipleResultsFound query.scalar() # invokes the one() method and return the first column result = query[1:3] # list with limit and offset # batch operator ######################################### # batch update and delete will emit the query immediately, # return the number of row that changed. changed_number = (Query(User) .filter_by(name='a') .update({User.name: 'b'}, synchronize_session=False)) delete_number = Query(User).filter_by(ID=6).delete() # sub-query ##############################################