def __init__(self, parser, context, idsearchcriteria, override, allowed_ar_states=None, allowed_analysis_states=None, instrument_uid=''): AnalysisResultsImporter.__init__(self, parser, context, idsearchcriteria, override, allowed_ar_states, allowed_analysis_states, instrument_uid)
def __init__(self, parser, context, override, allowed_ar_states=None, allowed_analysis_states=None, instrument_uid=''): AnalysisResultsImporter.__init__(self, parser, context, override, allowed_ar_states, allowed_analysis_states, instrument_uid)
def GenericImport(context, request, parser, importer=None): infile = getResultsInputFile(request) fileformat = getFileFormat(request) artoapply = request.form['artoapply'] override = request.form['results_override'] instrument = request.form.get('instrument', None) errors = [] logs = [] warns = [] # Load the most suitable parser according to file extension/options/etc... if not hasattr(infile, 'filename'): errors.append(_("No file selected")) if parser: # Load the importer status = ['sample_received', 'attachment_due', 'to_be_verified'] if artoapply == 'received': status = ['sample_received'] elif artoapply == 'received_tobeverified': status = ['sample_received', 'attachment_due', 'to_be_verified'] over = [False, False] if override == 'nooverride': over = [False, False] elif override == 'override': over = [True, False] elif override == 'overrideempty': over = [True, True] imp = importer if not imp: imp = AnalysisResultsImporter(parser=parser, context=context, allowed_ar_states=status, allowed_analysis_states=None, override=over, instrument_uid=instrument) tbex = '' try: imp.process() except: tbex = traceback.format_exc() errors = imp.errors logs = imp.logs warns = imp.warns if tbex: errors.append(tbex) results = {'errors': errors, 'log': logs, 'warns': warns} return json.dumps(results)
def __init__(self, parser, context, idsearchcriteria, override, allowed_ar_states=None, allowed_analysis_states=None, instrument_uid=None): AnalysisResultsImporter.__init__(self, parser, context, idsearchcriteria=['getSampleID', 'getId', 'getClientSampleID'], override=override, allowed_ar_states=allowed_ar_states, allowed_analysis_states=allowed_analysis_states, instrument_uid=instrument_uid)
def __init__(self, parser, context, idsearchcriteria, override, allowed_ar_states=None, allowed_analysis_states=None, instrument_uid='', form=None): AnalysisResultsImporter.__init__(self, parser, context, idsearchcriteria, override, allowed_ar_states, allowed_analysis_states, instrument_uid)
def _process_analysis(self, objid, analysis, values): ret = AnalysisResultsImporter._process_analysis( self, objid, analysis, values) # HEALTH-567 if values.get('Value') and str(values['Value'])[0] in "<>": analysis.setDetectionLimitOperand('<') return ret
def __call__(self): request = self.request bsc = getToolByName(self, 'bika_setup_catalog') # Getting instrumnets to run auto-import query = {'portal_type': 'Instrument', 'inactive_state': 'active'} if request.get('i_uid', ''): query['UID'] = request.get('i_uid') brains = bsc(query) interfaces = [] for brain in brains: i = brain.getObject() logger.info('Auto import for ' + i.Title()) # If Import Interface ID is specified in request, then auto-import # will run only that interface. Otherwise all available interfaces # of this instruments if request.get('interface', ''): interfaces.append(request.get('interface')) else: interfaces = [pairs.get('InterfaceName', '') for pairs in i.getResultFilesFolder()] folder = '' for interface in interfaces: # Each interface must have its folder where result files are # saved. If not, then we will skip for pairs in i.getResultFilesFolder(): if pairs['InterfaceName'] == interface: folder = pairs.get('Folder', '') if not folder: continue logger.info('Auto import for ' + interface) all_files = [f for f in listdir(folder) if isfile(join(folder, f))] imported_list = self.getAlreadyImportedFiles(folder) if not imported_list: logger.warn('imported.csv file not found ' + interface) self.add_to_logs(i, interface, 'imported.csv File not found...', '') continue for file_name in all_files: if file_name in imported_list: continue temp_file = open(folder+'/'+file_name) # Parsers work with UploadFile object from # zope.HTTPRequest which has filename attribute. # To add this attribute we convert the file. # CHECK should we add headers too? result_file = ConvertToUploadFile(temp_file) parser = get_automatic_parser(interface, result_file) if not parser: self.add_to_logs(i, interface, 'Parser not found...', file_name) continue # We will run import with some default parameters # Expected to be modified in the future. logger.info('Parsing ' + file_name) importer = AnalysisResultsImporter( parser=parser, context=self.portal, override=[False, False], instrument_uid=i.UID()) tbex = '' try: importer.process() except: tbex = traceback.format_exc() errors = importer.errors logs = importer.logs if tbex: errors.append(tbex) final_log = '' success_log = self.getInfoFromLog(logs, 'Import finished') if success_log: final_log = success_log else: final_log = errors self.insert_file_name(folder, file_name) self.add_to_logs(i, interface, final_log, file_name) self.add_to_log_file(i.Title(), interface, final_log, file_name, folder) logger.info('End of auto import...') return 'Auto-Import finished...'
def GenericImport(context, request, parser, importer=None): infile = getResultsInputFile(request) fileformat = getFileFormat(request) artoapply = request.form['artoapply'] override = request.form['results_override'] sample = request.form.get('sample', 'requestid') instrument = request.form.get('qcinstrument', None) errors = [] logs = [] warns = [] # Load the most suitable parser according to file extension/options/etc... if not hasattr(infile, 'filename'): errors.append(_("No file selected")) if parser: # Load the importer status = ['sample_received', 'attachment_due', 'to_be_verified'] if artoapply == 'received': status = ['sample_received'] elif artoapply == 'received_tobeverified': status = ['sample_received', 'attachment_due', 'to_be_verified'] over = [False, False] if override == 'nooverride': over = [False, False] elif override == 'override': over = [True, False] elif override == 'overrideempty': over = [True, True] sam = ['getRequestID', 'getSampleID', 'getClientSampleID'] if sample == 'requestid': sam = ['getRequestID'] if sample == 'sampleid': sam = ['getSampleID'] elif sample == 'clientsid': sam = ['getClientSampleID'] elif sample == 'sample_clientsid': sam = ['getSampleID', 'getClientSampleID'] imp = importer if not imp: imp = AnalysisResultsImporter(parser=parser, context=context, idsearchcriteria=sam, allowed_ar_states=status, allowed_analysis_states=None, override=over, instrument_uid=instrument) tbex = '' try: imp.process() except: tbex = traceback.format_exc() errors = imp.errors logs = imp.logs warns = imp.warns if tbex: errors.append(tbex) results = {'errors': errors, 'log': logs, 'warns': warns} return json.dumps(results)
def Import(self, context, request): """ Import Form """ infile = request.form['instrument_results_file'] fileformat = request.form.get('instrument_results_file_format', 'xls') artoapply = request.form['artoapply'] override = request.form['results_override'] instrument = request.form.get('instrument', None) errors = [] logs = [] warns = [] # Load the most suitable parser according to file extension/options/etc... parser = None if not hasattr(infile, 'filename'): errors.append(_("No file selected")) if fileformat in ('xls', 'xlsx'): parser = AORCParser(infile, encoding=fileformat) else: errors.append( t( _("Unrecognized file format ${fileformat}", mapping={"fileformat": fileformat}))) if parser: # Load the importer status = ['sample_received', 'attachment_due', 'to_be_verified'] if artoapply == 'received': status = ['sample_received'] elif artoapply == 'received_tobeverified': status = [ 'sample_received', 'attachment_due', 'to_be_verified' ] over = [False, False] if override == 'nooverride': over = [False, False] elif override == 'override': over = [True, False] elif override == 'overrideempty': over = [True, True] importer = AnalysisResultsImporter(parser=parser, context=context, allowed_ar_states=status, allowed_analysis_states=None, override=over, instrument_uid=instrument) tbex = '' try: importer.process() errors = importer.errors logs = importer.logs warns = importer.warns except Exception as e: tbex = traceback.format_exc() errors.append(tbex) results = {'errors': errors, 'log': logs, 'warns': warns} return json.dumps(results)