def get_model_score(model, day): try: ms = ModelScore.query.filter_by(model_id=model.id, day=day, region='e').one() except NoResultFound: ms = ModelScore() ms.region = 'e' ms.model = model ms.day = day return ms
def run(model, start, end, csv_file=None, **kwargs): if csv_file is None: raise FluDetectorError('No CSV file provided') logger.info('Reading CSV file into %s' % str(model)) csv_reader = csv.reader(csv_file) headers = next(csv_reader) day_index = find_matching_index(headers, ['Day', 'Date'], required=True) region_index = find_region_index(headers) logger.debug('Found columns for regions %s' % ', '.join(region_index.keys())) logger.info('Reading rows...') for row_index, row in enumerate(csv_reader): day = datetime.strptime(row[day_index], '%Y-%m-%d').date() if day < start or day > end: continue for region, col_index in region_index.iteritems(): try: value = float(row[col_index]) except ValueError: logger.debug('Skipping row %d column %d, not a float' % (row_index + 1, col_index)) continue try: ms = ModelScore.query.filter_by(model_id=model.id, day=day, region=region).one() except NoResultFound: ms = ModelScore() ms.region = region ms.model = model ms.day = day ms.value = value db.session.add(ms) db.session.commit() logger.info('Done!')