def test_cleanPipeline_odkLastRun(self): """Test update of ODK_Conf.odkLastRun.""" os.makedirs("DHIS/blobs/", exist_ok = True) dbFileName = "copy_Pipeline.db" dbDirectory = "." dbKey = "enilepiP" useDHIS = True pl = Pipeline(dbFileName, dbDirectory, dbKey, useDHIS) pl.closePipeline() nowDate = datetime.datetime.now() pipelineRunDate = nowDate.strftime("%Y-%m-%d_%H:%M:%S") xferDB = TransferDB(dbFileName = dbFileName, dbDirectory = dbDirectory, dbKey = dbKey, plRunDate = pipelineRunDate) conn = xferDB.connectDB() c = conn.cursor() c.execute("SELECT odkLastRun FROM ODK_Conf;") sqlQuery = c.fetchone() results = [i for i in sqlQuery] self.assertEqual(results[0], pipelineRunDate) c.execute("UPDATE ODK_Conf SET odkLastRun = '1900-01-01_00:00:01';") conn.commit() conn.close()
def test_cleanPipeline_rmFiles(self): """Test file removal.""" if not os.path.isfile("ODKFiles/odkBCExportNew.csv"): shutil.copy("ODKFiles/previous_bc_export.csv", "ODKFiles/odkBCExportPrev.csv") if not os.path.isfile("ODKFiles/odkBCExportPrev.csv"): shutil.copy("ODKFiles/another_bc_export.csv", "ODKFiles/odkBCExportNew.csv") if not os.path.isfile("OpenVAFiles/openVA_input.csv"): shutil.copy("OpenVAFiles/sample_openVA_input.csv", "OpenVAFiles/openVA_input.csv") if not os.path.isfile("OpenVAFiles/entityAttributeValue.csv"): shutil.copy("OpenVAFiles/sampleEAV.csv", "OpenVAFiles/entityAttributeValue.csv") if not os.path.isfile("OpenVAFiles/recordStorage.csv"): shutil.copy("OpenVAFiles/sample_recordStorage.csv", "OpenVAFiles/recordStorage.csv") if not os.path.isfile("OpenVAFiles/newStorage.csv"): shutil.copy("OpenVAFiles/sample_newStorage.csv", "OpenVAFiles/newStorage.csv") os.makedirs("DHIS/blobs/", exist_ok = True) shutil.copy("OpenVAFiles/sample_newStorage.csv", "DHIS/blobs/001-002-003.db") dbFileName = "copy_Pipeline.db" dbDirectory = "." dbKey = "enilepiP" useDHIS = True nowDate = datetime.datetime.now() pipelineRunDate = nowDate.strftime("%Y-%m-%d_%H:%M:%S") pl = Pipeline(dbFileName, dbDirectory, dbKey, useDHIS) pl.closePipeline() fileExist = False if os.path.isfile("ODKFiles/odkBCExportNew.csv"): fileExist = True if os.path.isfile("ODKFiles/odkBCExportPrev.csv"): fileExist = True if os.path.isfile("ODKFiles/odkBCExportNew.csv"): fileExist = True if os.path.isfile("OpenVAFiles/openVA_input.csv"): fileExist = True if os.path.isfile("OpenVAFiles/entityAttributeValue.csv"): fileExist = True if os.path.isfile("OpenVAFiles/recordStorage.csv"): fileExist = True if os.path.isfile("OpenVAFiles/newStorage.csv"): fileExist = True if os.path.isfile("DHIS/blobs/001-002-003.db"): fileExist = True self.assertFalse(fileExist) xferDB = TransferDB(dbFileName = dbFileName, dbDirectory = dbDirectory, dbKey = dbKey, plRunDate = pipelineRunDate) conn = xferDB.connectDB() c = conn.cursor() c.execute("UPDATE ODK_Conf SET odkLastRun = '1900-01-01_00:00:01';") conn.commit() conn.close()
def runPipeline(database_file_name, database_directory, database_key, export_to_DHIS = True): """Runs through all steps of the OpenVA Pipeline This function is a wrapper for the Pipeline class, which runs through all steps of the OpenVA Pipeline -- (1) connect to Transfer Database (to retrieve configuration settings); (2) connect to ODK Aggregate to download a CSV file with VA records; (3) run openVA (or SmartVA) to assign cause of death; and (4) store CoD results and VA data in the Transfer Database as well as a DHIS2 VA Program (if requested). :param database_file_name: File name for the Transfer Database. :param database_directory: Path of the Transfer Database. :param datatbase_key: Encryption key for the Transfer Database :param export_to_DHIS: Indicator for posting VA records to a DHIS2 server. :type export_to_DHIS: (Boolean) """ pl = Pipeline(dbFileName = database_file_name, dbDirectory = database_directory, dbKey = database_key, useDHIS = export_to_DHIS) try: settings = pl.config() except PipelineConfigurationError as e: pl.logEvent(str(e), "Error") sys.exit(1) settingsPipeline = settings["pipeline"] settingsODK = settings["odk"] settingsOpenVA = settings["openVA"] settingsDHIS = settings["dhis"] try: odkBC = pl.runODK(settingsODK, settingsPipeline) pl.logEvent("Briefcase Export Completed Successfully", "Event") except ODKError as e: pl.logEvent(str(e), "Error") sys.exit(1) try: rOut = pl.runOpenVA(settingsOpenVA, settingsPipeline, settingsODK.odkID, pl.pipelineRunDate) pl.logEvent("OpenVA Analysis Completed Successfully", "Event") except (OpenVAError, SmartVAError) as e: pl.logEvent(str(e), "Error") sys.exit(1) if (rOut["zeroRecords"] == True): pl.logEvent("No new VA records from ODK (now exiting)", "Event") sys.exit(0) if (export_to_DHIS): try: pipelineDHIS = pl.runDHIS(settingsDHIS, settingsPipeline) pl.logEvent("Posted Events to DHIS2 Successfully", "Event") except DHISError as e: pl.logEvent(str(e), "Error") sys.exit(1) try: pl.storeResultsDB() pl.logEvent("Stored Records to Xfer Database Successfully", "Event") except (PipelineError, DatabaseConnectionError, PipelineConfigurationError) as e: pl.logEvent(str(e), "Error") sys.exit(1) try: pl.closePipeline() pl.logEvent("Successfully Completed Run of Pipeline", "Event") except (DatabaseConnectionError, DatabaseConnectionError) as e: pl.logEvent(str(e), "Error") sys.exit(1)