def test_datetime_loaded_by_vector2(self): """Testing for the file provided by https://github.com/henrikkriisa""" layer = self.layer_dtimes attr = "measuredts" settings = LayerSettings() settings.layer = layer settings.startTimeAttribute = attr settings.endTimeAttribute = attr timeLayer = timevectorlayer.TimeVectorLayer(settings, iface=Mock()) self.tlm.registerTimeLayer(timeLayer) self.assertEquals(timeLayer.getDateType(), timevectorlayer.DateTypes.DatesAsQDateTimes) self.tlm.setTimeFrameType("minutes") self.tlm.stepForward() subsetString = layer.subsetString() expectedSubsetString = STRINGCAST_FORMAT.format( attr, self.comparison_op, time_util.datetime_to_str( self.tlm.getCurrentTimePosition() + timedelta(minutes=1), timeLayer.getTimeFormat()), attr, time_util.datetime_to_str(self.tlm.getCurrentTimePosition(), timeLayer.getTimeFormat())) self.assertEqual(timeLayer.getTimeFormat(), time_util.OGR_DATETIME_FORMAT) self.assertEquals(subsetString, expectedSubsetString)
def _test_layer(self, layer, attr, typ, tf, attr2=None): if attr2 is None: attr2 = attr settings = ls.LayerSettings() settings.layer = layer settings.startTimeAttribute = attr settings.endTimeAttribute = attr2 iface = Mock() timeLayer = timevectorlayer.TimeVectorLayer(settings, iface) # TODO # self.assertEqual(settings, ls.getSettingsFromLayer(timeLayer)) self.tlm.registerTimeLayer(timeLayer) self.assertEquals(len(self.tlm.getActiveVectors()), 1) self.assertEquals(len(self.tlm.getActiveRasters()), 0) self.assertEquals(timeLayer.getDateType(), typ) if tf is not None: self.assertEquals(timeLayer.getTimeFormat(), tf) expected_datetime = time_util.epoch_to_datetime(self.get_start_time()) self.assertEquals(self.tlm.getCurrentTimePosition(), expected_datetime) self.tlm.setTimeFrameType("seconds") self.assertEquals(layer.featureCount(), 1) self.assertEquals(self.tlm.getCurrentTimePosition(), expected_datetime) self.tlm.stepForward() self.assertEquals(layer.featureCount(), 1) expected_datetime = time_util.epoch_to_datetime(self.get_start_time() + 1) self.assertEquals(self.tlm.getCurrentTimePosition(), expected_datetime) self.tlm.setTimeFrameSize(2) self.assertEquals(layer.featureCount(), 2)
def _test_spatialite_layer(self, attr, layer, is_int=False): timeLayer = timevectorlayer.TimeVectorLayer(layer, attr, attr, True, time_util.DEFAULT_FORMAT, 0) self.tlm.registerTimeLayer(timeLayer) if is_int: self.assertEquals(timeLayer.getDateType(), timevectorlayer.DateTypes.IntegerTimestamps) self.assertEquals(timeLayer.getTimeFormat(), time_util.UTC) else: self.assertEquals(timeLayer.getDateType(), timevectorlayer.DateTypes.DatesAsStrings) self.assertEquals(timeLayer.getTimeFormat(), time_util.DEFAULT_FORMAT) start_time = time_util.str_to_datetime(timeLayer.getMinMaxValues()[0], time_util.DEFAULT_FORMAT) self.assertEquals(time_util.epoch_to_datetime(STARTTIME), start_time) self.tlm.setTimeFrameType("minutes") self.tlm.stepForward() assert (start_time + timedelta(minutes=1) == self.tlm.getCurrentTimePosition()) # only one feature is selected now, because there is one feature per minute self.assertEquals(layer.featureCount(), 1) FS = 5 self.tlm.setTimeFrameSize(FS) # we have one feature per minute self.assertEquals(layer.featureCount(), FS) subsetString = layer.subsetString() if is_int: expectedSubsetString = INT_FORMAT.format( attr, self.comparison_op, time_util.datetime_to_epoch(self.tlm.getCurrentTimePosition() + timedelta(minutes=FS)), attr, time_util.datetime_to_epoch(self.tlm.getCurrentTimePosition())) self.assertEquals(subsetString, expectedSubsetString) minimum_bound_seconds = int(subsetString.split(" ")[6]) self.assertEquals( self.tlm.getCurrentTimePosition(), time_util.epoch_to_datetime(minimum_bound_seconds)) if not is_int: self.assertEqual(timeLayer.getTimeFormat(), time_util.DEFAULT_FORMAT) expectedSubsetString = STRING_FORMAT.format( attr, self.comparison_op, time_util.datetime_to_str( self.tlm.getCurrentTimePosition() + timedelta(minutes=FS), timeLayer.getTimeFormat()), attr, time_util.datetime_to_str(self.tlm.getCurrentTimePosition(), timeLayer.getTimeFormat())) self.assertEquals(subsetString, expectedSubsetString) self.tlm.stepForward() self.assertEquals(layer.featureCount(), FS)
def registerTweetsTimeLayer(self, fromAttr="T", toAttr="T"): self.layer = QgsVectorLayer( os.path.join(testcfg.TEST_DATA_DIR, 'tweets.shp'), 'tweets', 'ogr') self.timeLayer = timevectorlayer.TimeVectorLayer( self.layer, fromAttr, toAttr, True, time_util.DEFAULT_FORMAT, 0) self.assertTrue(not self.timeLayer.hasTimeRestriction()) self.tlm.registerTimeLayer(self.timeLayer) # refresh will have set the time restriction self.assertTrue(self.timeLayer.hasTimeRestriction())
def test_datetime_loaded_by_vector(self): layer = self.layer_loaded_as_vector attr = STRING_TIMESTAMP timeLayer = timevectorlayer.TimeVectorLayer(layer, attr, attr, True, time_util.DEFAULT_FORMAT, 0) self.tlm.registerTimeLayer(timeLayer) self.assertEquals(timeLayer.getDateType(), timevectorlayer.DateTypes.DatesAsQDateTimes)
def test_datetime_loaded_by_vector(self): layer = self.layer_loaded_as_vector attr=STRING_TIMESTAMP settings = LayerSettings() settings.layer = layer settings.startTimeAttribute = attr settings.endTimeAttribute = attr timeLayer = timevectorlayer.TimeVectorLayer(settings, iface=Mock()) self.tlm.registerTimeLayer(timeLayer) self.assertEquals(timeLayer.getDateType(), timevectorlayer.DateTypes.DatesAsQDateTimes)
def registerTweetsTimeLayer(self, fromAttr="T", toAttr="T"): self.layer = QgsVectorLayer( os.path.join(testcfg.TEST_DATA_DIR, 'tweets.shp'), 'tweets', 'ogr') settings = ls.LayerSettings() settings.layer = self.layer settings.startTimeAttribute = fromAttr settings.endTimeAttribute = toAttr self.timeLayer = timevectorlayer.TimeVectorLayer(settings, iface=Mock()) self.assertTrue(not self.timeLayer.hasTimeRestriction()) self.tlm.registerTimeLayer(self.timeLayer) # refresh will have set the time restriction self.assertTrue(self.timeLayer.hasTimeRestriction())
def test_archaeological_range_queries(self): try: layer = self.getArchaelogicalLayer() self.ctrl.setArchaeology(1) assert (time_util.is_archaelogical()) settings = ls.LayerSettings() settings.layer = layer settings.startTimeAttribute = "year" settings.endTimeAttribute = "endyear" iface = Mock() timeLayer = timevectorlayer.TimeVectorLayer(settings, iface) self.tlm.registerTimeLayer(timeLayer) self.assertEquals(len(self.tlm.getActiveVectors()), 1) self.assertEquals(timeLayer.getDateType(), time_util.DateTypes.DatesAsStringsArchaelogical) self.assertEquals(timeLayer.getTimeFormat(), bcdate_util.BC_FORMAT) self.tlm.setTimeFrameType("years") self.tlm.setCurrentTimePosition(bcdate_util.BCDate(-452)) self.assertEquals(layer.featureCount(), 0) self.tlm.setCurrentTimePosition(bcdate_util.BCDate(-400)) self.assertEquals(layer.featureCount(), 1) self.tlm.setCurrentTimePosition(bcdate_util.BCDate(-352)) self.assertEquals(layer.featureCount(), 2) self.tlm.setCurrentTimePosition(bcdate_util.BCDate(-9)) self.assertEquals(layer.featureCount(), 2) self.tlm.setCurrentTimePosition(bcdate_util.BCDate(180)) self.assertEquals(layer.featureCount(), 0) self.tlm.setCurrentTimePosition(bcdate_util.BCDate(1)) self.assertEquals(layer.featureCount(), 2) self.tlm.setCurrentTimePosition(bcdate_util.BCDate(333)) self.assertEquals(layer.featureCount(), 1) self.tlm.setCurrentTimePosition(bcdate_util.BCDate(-450)) self.tlm.setTimeFrameSize(500) self.assertEquals(layer.featureCount(), 4) self.tlm.setTimeFrameSize(1000) self.assertEquals(layer.featureCount(), 5) # expected_datetime = time_util.epoch_to_datetime(self.get_start_time()) #self.assertEquals(self.tlm.getCurrentTimePosition(),expected_datetime) #self.assertEquals(layer.featureCount(),1) #self.tlm.stepForward() #self.tlm.setTimeFrameSize(2) self.tlm.clearTimeLayerList() self.ctrl.setArchaeology(0) except Exception, e: self.tlm.clearTimeLayerList() self.ctrl.setArchaeology(0) raise e
def _test_layer(self, layer, attr, typ, tf, attr2=None): if attr2 is None: attr2 = attr timeLayer = timevectorlayer.TimeVectorLayer(layer, attr, attr2, True, time_util.DEFAULT_FORMAT, 0) self.tlm.registerTimeLayer(timeLayer) self.assertEquals(timeLayer.getDateType(), typ) self.assertEquals(timeLayer.getTimeFormat(), tf) expected_datetime = time_util.epoch_to_datetime(self.get_start_time()) self.assertEquals(self.tlm.getCurrentTimePosition(), expected_datetime) self.tlm.setTimeFrameType("seconds") self.assertEquals(layer.featureCount(), 1) self.assertEquals(self.tlm.getCurrentTimePosition(), expected_datetime) self.tlm.stepForward() self.assertEquals(layer.featureCount(), 1) expected_datetime = time_util.epoch_to_datetime(self.get_start_time() + 1) self.assertEquals(self.tlm.getCurrentTimePosition(), expected_datetime) self.tlm.setTimeFrameSize(2) self.assertEquals(layer.featureCount(), 2)
def test_export_exports_last_frame(self): settings = ls.LayerSettings() settings.layer = self.layer settings.startTimeAttribute = DATE_COL settings.endTimeAttribute = DATE_COL iface = Mock() timeLayer = timevectorlayer.TimeVectorLayer(settings, iface) self.tlm.registerTimeLayer(timeLayer) tmpdir = tempfile.mkdtemp() self.tlm.setTimeFrameType("seconds") start_time = time_util.str_to_datetime(timeLayer.getMinMaxValues()[0]) end_time = time_util.str_to_datetime(timeLayer.getMinMaxValues()[1]) self.ctrl.exportVideo(tmpdir, 100, False) screenshots_generated = glob.glob( os.path.join(tmpdir, FRAME_FILENAME_PREFIX + "*")) # import ipdb; ipdb.set_trace() last_fn = self.ctrl.generateFrameFilename( tmpdir, len(screenshots_generated) - 1, end_time) self.assertEquals(6, len(screenshots_generated)) self.assertIn(last_fn, screenshots_generated) print screenshots_generated shutil.rmtree(tmpdir)