def test_kml_filter(self): coordinates = [ (-76.0, 38.0, 0.0), (-76.0, 38.0, 10.0), (-76.0, 38.0, 20.0), (-76.0, 38.0, 30.0), (-76.0, 38.0, 100.0), (-76.0, 38.0, 30.0), (-76.0, 38.0, 60.0), ] filtered_out = [(0.1, 0.001, 100), (0.0, 0.0, 0)] # Create Coordinates start = TakeoffOrLandingEvent(user=self.user, uas_in_air=True) start.save() for coord in coordinates: self.create_log_element(*coord) for coord in filtered_out: self.create_log_element(*coord) end = TakeoffOrLandingEvent(user=self.user, uas_in_air=False) end.save() kml = Kml() UasTelemetry.kml(user=self.user, logs=UasTelemetry.by_user(self.user), kml=kml, kml_doc=kml) for filtered in filtered_out: tag = self.coord_format.format(filtered[1], filtered[0], filtered[2]) self.assertTrue(tag not in kml.kml()) for coord in coordinates: tag = self.coord_format.format(coord[1], coord[0], coord[2]) self.assertTrue(tag in kml.kml())
def test_kml_simple(self): coordinates = [ (-76.0, 38.0, 0.0), (-76.0, 38.0, 10.0), (-76.0, 38.0, 20.0), (-76.0, 38.0, 30.0), (-76.0, 38.0, 100.0), (-76.0, 38.0, 30.0), (-76.0, 38.0, 60.0), ] # Create Coordinates start = TakeoffOrLandingEvent(user=self.user, uas_in_air=True) start.save() for coord in coordinates: self.create_log_element(*coord) end = TakeoffOrLandingEvent(user=self.user, uas_in_air=False) end.save() kml = Kml() UasTelemetry.kml(user=self.user, logs=UasTelemetry.by_user(self.user), kml=kml, kml_doc=kml) for coord in coordinates: tag = self.coord_format.format(coord[1], coord[0], units.feet_to_meters(coord[2])) self.assertTrue(tag in kml.kml())
def test_kml_empty(self): kml = Kml() UasTelemetry.kml( user=self.user, logs=UasTelemetry.by_user(self.user), kml=kml, kml_doc=kml, )
def test_basic_access(self): start = timezone.now() - datetime.timedelta(seconds=10) logs = self.create_logs(self.user1, start=start) log = UasTelemetry.last_for_user(self.user1) self.assertEqual(logs[-1], log) results = UasTelemetry.by_user(self.user1) self.assertSequenceEqual(logs, results)
def test_multi_user(self): # Intersperse logs from two users logs = [] for _ in xrange(10): logs += self.create_logs(self.user1, num=1) self.create_logs(self.user2, num=1) log = UasTelemetry.last_for_user(self.user1) self.assertEqual(logs[-1], log) results = UasTelemetry.by_user(self.user1) self.assertSequenceEqual(logs, results)
def test_no_data(self): log = UasTelemetry.last_for_user(self.user1) self.assertEqual(None, log) logs = UasTelemetry.by_user(self.user1) self.assertEqual(len(logs), 0) logs = UasTelemetry.by_time_period(self.user1, []) self.assertEqual(len(logs), 0) log_rates = UasTelemetry.rates(self.user1, []) self.assertTupleEqual(log_rates, (None, None))
def test_kml(self): """ Tests the generation of kml data The correct number of elements are generated The meta-data tag is present """ array_field_tag = '<gx:SimpleArrayField name="proximity" type="float">' coordinates = [ (-76.0, 38.0, 0.0), (-76.0, 38.0, 10.0), (-76.0, 38.0, 20.0), (-76.0, 38.0, 30.0), (-76.0, 38.0, 100.0), (-76.0, 38.0, 30.0), (-76.0, 38.0, 60.0), ] user = User.objects.create_user('testuser', '*****@*****.**', 'testpass') user.save() # Create Coordinates start_time = timezone.now() next_time = start_time end_time = start_time for coord in coordinates: self.create_log_element(*coord, user=user, log_time=next_time) end_time = next_time next_time += datetime.timedelta(seconds=1) # Calculate expected number of data tags time_delta = end_time - start_time ms_elapsed = time_delta.total_seconds() * 1000 kml_output_resolution = 100 # milliseconds samples_expected = int(ms_elapsed / kml_output_resolution) for cur_obst in self.obstacles: kml = Kml() kml_mission = kml.newfolder(name='SubFolder') cur_obst.kml( path=UasTelemetry.by_user(user), kml=kml_mission, kml_doc=kml.document, ) result_kml = kml.kml() self.assertEqual(samples_expected, result_kml.count('<gx:value>')) self.assertIn(array_field_tag, result_kml)
def test_kml(self): """ Tests the generation of kml data The correct number of elements are generated The meta-data tag is present """ array_field_tag = '<gx:SimpleArrayField name="proximity" type="float">' coordinates = [ (-76.0, 38.0, 0.0), (-76.0, 38.0, 10.0), (-76.0, 38.0, 20.0), (-76.0, 38.0, 30.0), (-76.0, 38.0, 100.0), (-76.0, 38.0, 30.0), (-76.0, 38.0, 60.0), ] user = User.objects.create_user('testuser', '*****@*****.**', 'testpass') user.save() # Create Coordinates start_time = timezone.now() next_time = start_time end_time = start_time for coord in coordinates: self.create_log_element(*coord, user=user, log_time=next_time) end_time = next_time next_time += datetime.timedelta(seconds=1) # Calculate expected number of data tags time_delta = end_time - start_time ms_elapsed = time_delta.total_seconds() * 1000 kml_output_resolution = 100 # milliseconds samples_expected = int(ms_elapsed / kml_output_resolution) for cur_obst in self.obstacles: kml = Kml() kml_mission = kml.newfolder(name='SubFolder') cur_obst.kml(path=UasTelemetry.by_user(user), kml=kml_mission, kml_doc=kml.document) result_kml = kml.kml() self.assertEqual(samples_expected, result_kml.count('<gx:value>')) self.assertIn(array_field_tag, result_kml)
def get(self, request): kml = Kml(name='AUVSI SUAS Flight Data') kml_teams = kml.newfolder(name='Teams') kml_mission = kml.newfolder(name='Missions') users = User.objects.all() for user in users: # Ignore admins if user.is_superuser: continue UasTelemetry.kml(user=user, logs=UasTelemetry.by_user(user), kml=kml_teams, kml_doc=kml.document) MissionConfig.kml_all(kml_mission) kml_flyzone = kml.newfolder(name='Fly Zones') FlyZone.kml_all(kml_flyzone) response = HttpResponse(kml.kml()) response['Content-Type'] = 'application/vnd.google-earth.kml+xml' response['Content-Disposition'] = 'attachment; filename=mission.kml' response['Content-Length'] = str(len(response.content)) return response
def test_kml_empty(self): kml = Kml() UasTelemetry.kml(user=self.user, logs=UasTelemetry.by_user(self.user), kml=kml, kml_doc=kml)