Exemple #1
0
 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)
Exemple #2
0
 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)
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
 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)
Exemple #6
0
 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
Exemple #7
0
 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)
Exemple #9
0
    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)