def test_parse_unknown_column(self): header_line = self.common_headers + ",aaaaaa\r\n" p = DailyParser(header_line, self.production_types, self.zones) adsm_iteration_output = "1,1,3,2,1,1" results = p.parse_daily_strings(adsm_iteration_output, create_version_entry=True) self.assertEqual(len(results), 1) self.assertEqual(len(p.failures), 1) self.assertEqual(p.failures, {'aaaaaa'})
def test_parse_single_field_in_daily_by_zone_and_production_type(self): header_line = self.common_headers + ",unitsInZoneMediumRiskCattle\r\n" p = DailyParser(header_line, self.production_types, self.zones) adsm_iteration_output = "1,1,3,2,1,1" results = p.parse_daily_strings(adsm_iteration_output, create_version_entry=True) self.assertEqual(len(results), 2) self.assertIsInstance(results[1], DailyByZoneAndProductionType) self.assertEqual(results[1].unitsInZone, 1)
def test_parse_single_field_in_controls(self): header_line = self.common_headers + ",outbreakDuration\r\n" p = DailyParser(header_line, self.production_types, self.zones) adsm_iteration_output = "1,1,3,2,1,1" results = p.parse_daily_strings(adsm_iteration_output, create_version_entry=True) self.assertEqual(len(results), 2) self.assertIsInstance(results[1], DailyControls) self.assertEqual(results[1].outbreakDuration, 1)
def process_result(queue): from Results.output_parser import DailyParser adsm_result = queue.get() p = DailyParser(adsm_result['headers'], adsm_result['lines'][0][0]) results = [] for index, line in enumerate(adsm_result['lines']): results.extend(p.parse_daily_strings(line, index + 1 == len(adsm_result['lines']))) with transaction.atomic(using='scenario_db'): for result in results: result.save()
def test_parse_unknown_column(self): header_line = "Run,Day,aaaaaa\r\n" p = DailyParser(header_line) adsm_iteration_output = ["1,1,1"] results = p.parse_daily_strings(adsm_iteration_output) self.assertEqual(len(results), 0) self.assertEqual(len(p.failures), 1) self.assertEqual(p.failures, {'aaaaaa'})
def test_parse_single_field_in_controls(self): header_line = "Run,Day,outbreakDuration\r\n" p = DailyParser(header_line) adsm_iteration_output = ["1,1,1"] results = p.parse_daily_strings(adsm_iteration_output) self.assertEqual(len(results), 1) self.assertIsInstance(results[0], DailyControls) self.assertEqual(results[0].outbreakDuration, 1)
def test_parser_only_outputs_needed_objects(self): """ the results parser should not output an object if all fields of that object are None """ header_line = self.common_headers + ",outbreakDuration\r\n" p = DailyParser(header_line, self.production_types, self.zones) adsm_iteration_output = "1,1,3,2,19,1" results = p.parse_daily_strings(adsm_iteration_output, create_version_entry=True) self.assertEqual(len(results), 2) self.assertIsInstance(results[1], DailyControls)
def test_parse_single_field_in_daily_by_production_type(self): cows, created = ProductionType.objects.get_or_create(name="Cattle") header_line = "Run,Day,firstDetectionCattle\r\n" p = DailyParser(header_line) adsm_iteration_output = ["1,1,1"] results = p.parse_daily_strings(adsm_iteration_output) self.assertEqual(len(results), 1) self.assertIsInstance(results[0], DailyByProductionType) self.assertEqual(results[0].firstDetection, 1)
def test_parse_single_field_in_daily_by_zone_and_production_type(self): cattle = ProductionType.objects.create(name="Cattle") medium_risk = Zone.objects.create(name="Medium Risk", radius=5.0) header_line = "Run,Day,unitsInZoneMediumRiskCattle\r\n" p = DailyParser(header_line) adsm_iteration_output = ["1,1,1"] results = p.parse_daily_strings(adsm_iteration_output) self.assertEqual(len(results), 1) self.assertIsInstance(results[0], DailyByZoneAndProductionType) self.assertEqual(results[0].unitsInZone, 1)
def test_parse_single_field_background_zone(self): """ the background zone is used if no other zone is specified it will not exist in the ScenarioCreator Zone table so it will not have a foreign key in the Results DailyByZone table """ header_line = self.common_headers + ",zoneAreaBackground\r\n" p = DailyParser(header_line, self.production_types, self.zones) adsm_iteration_output = "1,1,3,2,1,1" results = p.parse_daily_strings(adsm_iteration_output, create_version_entry=True) self.assertEqual(len(results), 2) self.assertIsInstance(results[1], DailyByZone) self.assertEqual(results[1].zone, None) self.assertEqual(results[1].zoneArea, 1)
def test_parse_multiple_fields_in_different_tables(self): header_line = self.common_headers + ",firstDetectionCattle,animalDaysInZoneMediumRiskCattle\r\n" p = DailyParser(header_line, self.production_types, self.zones) adsm_iteration_output = "1,1,3,2,1,1,2" results = p.parse_daily_strings(adsm_iteration_output, create_version_entry=True) self.assertEqual(len(results), 3) result = [result for result in results if type(result) == DailyByProductionType] self.assertEqual(len(result), 1) self.assertEqual(result[0].firstDetection, 1) result = [result for result in results if type(result) == DailyByZoneAndProductionType] self.assertEqual(len(result), 1) self.assertEqual(result[0].animalDaysInZone, 2)
def test_parser_only_outputs_needed_objects(self): """ the results parser should not output an object if all fields of that object are None """ # cattle = ProductionType.objects.create(name="Cattle") header_line = "Run,Day,outbreakDuration\r\n" p = DailyParser(header_line) adsm_iteration_output = ["1,1,1"] results = p.parse_daily_strings(adsm_iteration_output) self.assertEqual(len(results), 1) self.assertIsInstance(results[0], DailyControls)
def test_parse_single_field_background_zone(self): """ the background zone is used if no other zone is specified it will not exist in the ScenarioCreator Zone table so it will not have a foreign key in the Results DailyByZone table """ header_line = "Run,Day,zoneAreaBackground\r\n" p = DailyParser(header_line) adsm_iteration_output = ["1,1,1"] results = p.parse_daily_strings(adsm_iteration_output) self.assertEqual(len(results), 1) self.assertIsInstance(results[0], DailyByZone) self.assertEqual(results[0].zone, None) self.assertEqual(results[0].zoneArea, 1)
def test_parse_multiple_fields_in_different_tables(self): cattle = ProductionType.objects.create(name="Cattle") medium_risk = Zone.objects.create(name="Medium Risk", radius=5.0) header_line = "Run,Day,firstDetectionCattle,animalDaysInZoneMediumRiskCattle\r\n" p = DailyParser(header_line) adsm_iteration_output = ["1,1,1,2"] results = p.parse_daily_strings(adsm_iteration_output) self.assertEqual(len(results), 2) result = [result for result in results if type(result) == DailyByProductionType] self.assertEqual(len(result), 1) self.assertEqual(result[0].firstDetection, 1) result = [result for result in results if type(result) == DailyByZoneAndProductionType] self.assertEqual(len(result), 1) self.assertEqual(result[0].animalDaysInZone, 2)