def __init__(self, docName, docs=[], encrypt=False): # turn on encryption switch if encrypt: self.encrypt = encrypt self.security = Security() self.mailSystem = smtpInterface(settings) if docName <> '': folderName = os.path.split(docName)[0] self.mailSystem.setRecipients(inputConfiguration.SMTPRECIPIENTS[folderName]) self.docName = docName else: if len(docs) > 0: # first file dictates where this is going, mostly files will be in the output location. try: folderName = os.path.split(docs[0])[0] self.mailSystem.setRecipients(inputConfiguration.SMTPRECIPIENTS[folderName]) except KeyError: raise
def __init__(self, queryOptions, export_id=None): print "initializing nodebuilder" # initialize dbobjects self.mailSystem = smtpInterface(settings) # fixme, need to decipher the query objects against the configuration (table, object, ini, conf..) # this should then pull the correct module below and run the process. self.generateOutputformat = outputConfiguration.Configuration[queryOptions.configID]['outputFormat'] self.transport = outputConfiguration.Configuration[queryOptions.configID]['transportConfiguration'] self.encryption = outputConfiguration.Configuration[queryOptions.configID]['encryption'] self.outputFilesPath = outputConfiguration.Configuration[queryOptions.configID]['destination'] self.export_id = export_id self.queryOptions = queryOptions # Passed in from QueryObject.getOptions() print '==== Output Format', self.generateOutputformat # JCS if self.generateOutputformat == 'svcpoint5': try: from synthesis.svcpointxml5writer import SvcPointXML5Writer #svcptxml5writer_loaded = True print "import of Svcpt XML Writer, version 5 was successful" except Exception as e: print "import of Svcpt XML Writer, version 5 failed", e #svcptxml5writer_loaded = False if self.transport == "save": self.writer = SvcPointXML5Writer(self.outputFilesPath, queryOptions) print '==== self.writer:', self.writer self.validator = SvcPoint5XMLTest() print '==== self.validator:', self.validator elif self.generateOutputformat == 'hl7ccd': # JCS try: from synthesis.hl7CCDwriter import hl7CCDwriter hl7CCDwriter_loaded = True print "import of HL7 XML Writer was successful" except Exception as e: print "import of HL7 XML Writer failed", e hl7CCDwriter_loaded = False if self.transport in ("save", "rest", "soap"): print "queryOptions: ", queryOptions self.writer = hl7CCDwriter(self.outputFilesPath, queryOptions, export_id=self.export_id) print '==== self.writer:', self.writer self.validator = hl7CCDXMLTest() print '==== self.validator:', self.validator # elif self.generateOutputformat == 'svcpoint406': # JCS # try: # from synthesis.svcpointxml406writer import SvcPointXMLWriter # svcptxml406writer_loaded = True # print "import of Svcpt XML Writer, version 4.06 was successful" # except: # print "import of Svcpt XML Writer, version 4.06 failed" # svcptxml406writer_loaded = False # if self.transport == "save": # self.writer = SvcPointXMLWriter(self.outputFilesPath, queryOptions) # self.validator = SvcPoint406XMLTest() # elif self.generateOutputformat == 'svcpoint20': # #from svcPointXML20writer import SvcPointXML20Writer # # pick the plug-in to import # try: # from svcPointXML20writer import SvcPointXMLWriter # svcptxml20writer_loaded = True # print "import of Svcpt XML Writer, version 2.0 was successful" # except: # print "import of Svcpt XML Writer, version 2.0 failed" # svcptxml20writer_loaded = False # self.writer = SvcPointXMLWriter(settings.OUTPUTFILES_PATH, queryOptions) # self.validator = SVCPOINT20XMLTest() elif self.generateOutputformat == 'hmisxml28': #try: #from hmisxml28writer import HMISXML28Writer#IGNORE:@ImportRedefinition #hmisxml28writer_loaded = True #except: #print "import of HMISXMLWriter, version 2.8, failed" #hmisxml28writer_loaded = False if self.transport == "save": if settings.DEBUG: print "destination is ", self.outputFilesPath #self.writer = HMISXML28Writer(self.outputFilesPath, queryOptions) self.validator = HUDHMIS28XMLTest() elif self.generateOutputformat == 'hmisxml30': try: from hmisxml30writer import HMISXMLWriter#IGNORE:@ImportRedefinition print "import of HMISXMLWriter, version 3.0 occurred successfully" hmisxml30writer_loaded = True except Exception as e: print "import of HMISXMLWriter, version 3.0, failed", e hmisxml30writer_loaded = False if self.transport == "save": if settings.DEBUG: print "destination is ", self.outputFilesPath self.writer = HMISXMLWriter(self.outputFilesPath, queryOptions) self.validator = HUDHMIS30XMLTest() #elif self.generateOutputformat == 'hmiscsv30': #try: #from hmiscsv30writer import HmisCSV30Writer #hmiscsv30writer_loaded = True #except: #hmiscsv30writer_loaded = False #if self.transport == "save": #self.writer = HmisCsv30Writer(self.outputFilesPath, queryOptions, debug=True) #self.validator = HmisCsv30Test() #elif self.generateOutputformat == 'jfcsxml': #print "Need to hook up the JFCSWriter in Nodebuilder" # self.writer = JFCSXMLWriter() # self.validator = JFCSXMLTest() elif self.generateOutputformat == 'pseudo': print "Pseudo writer encountered. Skipping..." else: # new error cataloging scheme, pull the error from the catalog, then raise the exception (centralize error catalog management) err = catalog.errorCatalog[1001] raise exceptions.UndefinedXMLWriter, (err[0], err[1], 'NodeBuilder.__init__() ' + self.generateOutputformat) #fileStream = open(new_file,'r') # validate the file prior to uploading it #if self.validator.validate(fileStream): #setup the postprocessing module self.pprocess = postprocessing.PostProcessing(queryOptions.configID)
def run(self): '''This is the main method controlling this entire program.''' # Load the data via dbobjects # try to write the output file and then validate it. #for writer,validator in map(None, self.writer, self.validator): #result = item.validate(instance_doc) # if results is True, we can process against this reader. if self.transport == 'soap': try: hl7_output = self.writer.get() for ccd_data, referredToProviderID in hl7_output: soap = soaptransport.SoapEnv(self.queryOptions.configID) result, details = soap.send_soap_envelope(ccd_data, referredToProviderID, self.queryOptions.configID) print result, details except: print "*****************************************************************" print "*****************************************************************" print "*****************************************************************" synthesis_error = traceback.format_exc() print synthesis_error smtp = smtpInterface(settings) smtp.setMessageSubject("ERROR -- Synthesis:NodeBuilder:%s:%s" % (self.transport.upper(), self.generateOutputformat.capitalize())) smtp.setRecipients(inputConfiguration.SMTPRECIPIENTS['testSource'])#make this [(self.queryOptions.configID)]? smtp.setMessage("%s\r\n" % synthesis_error ) try: print "trying to send message" smtp.sendMessage() except: print 'send failed' print "*****************************************************************" print "*****************************************************************" print "*****************************************************************" elif self.transport == 'rest': try: ccd_data = self.writer.get() rest = resttransport.REST(self.queryOptions.configID) #assert (rest.post(ccd_data)[0] == True), "Sending CCD via REST transport failed!" result, details = rest.post('CCD_%s' % str(uuid.uuid4()).replace('-',''), ccd_data) print result, details except: print "*****************************************************************" print "*****************************************************************" print "*****************************************************************" synthesis_error = traceback.format_exc() print synthesis_error smtp = smtpInterface(settings) smtp.setMessageSubject("ERROR -- Synthesis:NodeBuilder:%s:%s" % (self.transport.upper(), self.generateOutputformat.capitalize())) smtp.setRecipients(inputConfiguration.SMTPRECIPIENTS['testSource']) smtp.setMessage("%s\r\n" % synthesis_error ) try: print "trying to send message" smtp.sendMessage() except: print 'send failed' print "*****************************************************************" print "*****************************************************************" print "*****************************************************************" else: # the remaining transport require file IO if self.generateOutputformat != "pseudo": try: if settings.DEBUG: print "destination is ", self.outputFilesPath if self.writer.write(): #filesToTransfer = fileutils.grabFiles(os.path.join(settings.OUTPUTFILES_PATH, "*.xml")) filesToTransfer = fileutils.grabFiles(os.path.join(self.outputFilesPath, "*.xml")) # create a list of valid files to upload validFiles = [] # Loop over each file and validate it. for eachFile in filesToTransfer: fs = open(eachFile, 'r') if self.validator.validate(fs): validFiles.append(eachFile) print 'oK' # since the file was validated, its OK to encrypt it now. possible_new_file_name = self.encrypt_file(eachFile) validFiles[validFiles.index(eachFile)] = possible_new_file_name filesToTransfer[filesToTransfer.index(eachFile)] = possible_new_file_name else: pass # Fixme append invalid files to list and report this. fs.close() # upload the valid files # how to transport the files (debugging) if self.transport == 'save': print 'Output Complete...Please see output files: %s' % filesToTransfer if self.transport == 'sys.stdout': for eachFile in validFiles: fs = open(eachFile, 'r') # open the file and echo it to stdout lines = fs.readlines() fs.close() # done with file close handle for line in lines: print line if self.transport == 'sftp': self.pprocess.processFileSFTP(validFiles) elif self.transport == 'email': # Loop over the list and each file needs to be emailed separately (size) for eachFile in validFiles: self.email = XMLProcessorNotifier("", eachFile) # fixme (zip and encrypt?) msgBody = self.formatMsgBody() self.email.sendDocumentAttachment('Your report results', msgBody, eachFile) elif self.transport == 'vpnftp': # SBB20100430 Only upload if we have a validated file(s) if len(validFiles) > 0: pd = iniutils.LoadConfig('fileConverter.ini') self.pprocess.setINI(pd) self.pprocess.processFileVPN(validFiles) elif self.transport == 'vpncp': pass #print results #print 'This is the result before it goes back to the test_unit:', \ #results #return results except: print "*****************************************************************" print "*****************************************************************" print "*****************************************************************" synthesis_error = traceback.format_exc() print synthesis_error smtp = smtpInterface(settings) smtp.setMessageSubject("ERROR -- Synthesis:NodeBuilder:%s:%s" % (self.transport.upper(), self.generateOutputformat.capitalize())) smtp.setRecipients(inputConfiguration.SMTPRECIPIENTS['testSource']) smtp.setMessage("%s\r\n" % synthesis_error ) try: print "trying to send message" smtp.sendMessage() except: print 'send failed' print "*****************************************************************" print "*****************************************************************" print "*****************************************************************"
#import pdb; pdb.set_trace() db = DB() session = db.Session() SMTPRECIPIENTS = { # input processing "synthesis": { 'SMTPTOADDRESS': ['*****@*****.**',], 'SMTPTOADDRESSCC': [], 'SMTPTOADDRESSBCC': [], } } try: # Assume that record exists so lifecycle_event = session.query(LastDateTime).filter(LastDateTime.event == 'file received').first() event_date_time = lifecycle_event.event_date_time time_elapsed = (datetime.datetime.now() - event_date_time) if time_elapsed.days >= 3: settings.SMTPAUTH = True #settings.SMTPTLS = True smtp = smtpInterface(settings) smtp.setMessageSubject("Warning: No referrals received") smtp.setRecipients(SMTPRECIPIENTS['synthesis']) text = "You are receiving this message because synthesis has not received an incoming referral in %d days.\r\n" % time_elapsed.days smtp.setMessage("%s\r\n" % text) smtp.sendMessage() settings.SMTPAUTH = False except: pass