def tearDown(self): """Restore state from any setUp or test steps""" log.info("Purge test records from the database") DBUtil.execute \ ( """delete from patient_item where clinical_item_id in ( select clinical_item_id from clinical_item as ci, clinical_item_category as cic where ci.clinical_item_category_id = cic.clinical_item_category_id and cic.source_table = '%s' ); """ % TEST_SOURCE_TABLE ) DBUtil.execute \ ( """delete from clinical_item where clinical_item_category_id in ( select clinical_item_category_id from clinical_item_category where source_table = '%s' ); """ % TEST_SOURCE_TABLE ) DBUtil.execute( "delete from clinical_item_category where source_table = '%s';" % TEST_SOURCE_TABLE) query = SQLQuery() query.delete = True query.addFrom("stride_patient") query.addWhere("pat_id < 0") DBUtil.execute(query) DBTestCase.tearDown(self)
def tearDown(self): """Restore state from any setUp or test steps""" log.info("Purge test records from the database") DBUtil.execute \ ( """delete from patient_item where clinical_item_id in ( select clinical_item_id from clinical_item as ci, clinical_item_category as cic where ci.clinical_item_category_id = cic.clinical_item_category_id and cic.source_table = '%s' ); """ % TEST_SOURCE_TABLE ) DBUtil.execute \ ( """delete from clinical_item where clinical_item_category_id in ( select clinical_item_category_id from clinical_item_category where source_table = '%s' ); """ % TEST_SOURCE_TABLE ) DBUtil.execute( "delete from clinical_item_category where source_table = '%s';" % TEST_SOURCE_TABLE) query = SQLQuery() query.delete = True query.addFrom("stride_dx_list") query.addWhereIn("pat_id", self.patientIdStrList) DBUtil.execute(query) query = SQLQuery() query.delete = True query.addFrom("stride_icd9_cm") query.addWhereIn("cui", self.icd9CUIdStrList) DBUtil.execute(query) query = SQLQuery() query.delete = True query.addFrom("stride_icd10_cm") query.addWhereIn("order_number", self.icd10_order_number_str_list) DBUtil.execute(query) DBTestCase.tearDown(self)
def tearDown(self): """Restore state from any setUp or test steps""" log.info("Purge test records from the database") query = SQLQuery() query.delete = True query.addFrom("access_log") query.addWhereIn("user_id", self.testUserIDs) DBUtil.execute(query) query = SQLQuery() query.delete = True query.addFrom("user") query.addWhereIn("user_id", self.testUserIDs) DBUtil.execute(query) DBUtil.execute("drop table %s;" % TEST_SOURCE_TABLE) DBTestCase.tearDown(self)
def signOrders(self, userId, patientId, currentTime, orderItemIds, discontinuePatientOrderIds=None, conn=None): """Commit new order item IDs for the given patient and starting now, and discontinue (set end date) for any existing orders specified. Record any patient state transitions the orders would trigger """ extConn = True if conn is None: conn = self.connFactory.connection() extConn = False try: # Denormalized recording of current patient state to facilitate easy retrieval linked to orders later patientInfo = self.loadPatientInfo([patientId], currentTime, conn=conn)[0] stateId = patientInfo["sim_state_id"] postStateIdByItemId = patientInfo["postStateIdByItemId"] orderItemIdSet = set( orderItemIds) # Ensure unique and facilitate set operations insertDict = { "sim_user_id": userId, "sim_patient_id": patientId, "sim_state_id": stateId, "relative_time_start": currentTime } for itemId in orderItemIdSet: insertDict["clinical_item_id"] = itemId DBUtil.insertRow("sim_patient_order", insertDict, conn=conn) # See if any of these new orders triggered state transitions triggerItemIds = postStateIdByItemId.viewkeys() & orderItemIdSet while triggerItemIds: # Found a trigger item triggerItemId = None if len( triggerItemIds ) > 1: # Found multiple. Weird. Arbitrarily act on the one that appeared first in the input list for itemId in orderItemIds: if itemId in triggerItemIds: triggerItemId = itemId break else: triggerItemId = triggerItemIds.pop() postStateId = postStateIdByItemId[triggerItemId] # Record the state transition self.recordStateTransition(patientId, stateId, postStateId, currentTime, conn=conn) # Reload patientInfo to reflect new patient state patientInfo = self.loadPatientInfo([patientId], currentTime, conn=conn)[0] stateId = patientInfo["sim_state_id"] postStateIdByItemId = patientInfo["postStateIdByItemId"] orderItemIdSet.discard( triggerItemId ) # Don't keep looking for this one, important to avoid infinite loop triggerItemIds = postStateIdByItemId.viewkeys( ) & orderItemIdSet if discontinuePatientOrderIds is not None: updateDict = {"relative_time_end": currentTime} for patientOrderId in discontinuePatientOrderIds: DBUtil.updateRow("sim_patient_order", updateDict, patientOrderId, conn=conn) # If order is discontinued/cancelled at the same (or before) time of entry, # take that as a signal to cleanup and delete the record altogether # (effectively there was no time at which the order was ever allowed to exist) deleteQuery = SQLQuery() deleteQuery.delete = True deleteQuery.addFrom("sim_patient_order") deleteQuery.addWhereEqual("sim_patient_id", patientId) deleteQuery.addWhere( "relative_time_end <= relative_time_start") DBUtil.execute(deleteQuery, conn=conn) finally: conn.commit() if not extConn: conn.close()