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_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_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 _test_spatialite_layer(self, attr, layer, is_int=False):

        settings = LayerSettings()
        settings.layer = layer
        settings.startTimeAttribute = attr
        settings.endTimeAttribute = attr

        timeLayer = timevectorlayer.TimeVectorLayer(settings, iface=Mock())
        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.PENDING)
        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)
Пример #5
0
    def test_query_for_lexicographically_comparable_format_(self):
        fmts = ["%d/%m/%Y %H:%M", "%m.%d.%Y %H:%M:%S"]

        for fmt in fmts:
            start_str = time_util.datetime_to_str(self.start_dt, fmt)
            end_str = time_util.datetime_to_str(self.end_dt, fmt)
            # assert that dates are not lexicographically comparable in this format
            self.assertTrue(end_str < start_str and self.start_dt < self.end_dt)

            result_sql = qb.build_query(self.start_dt, self.end_dt, self.from_attr, self.to_attr,
                                        qb.DateTypes.DatesAsStrings, fmt,
                                        qb.QueryIdioms.SQL, False)

            result_ogr = qb.build_query(self.start_dt, self.end_dt, self.from_attr, self.to_attr,
                                        qb.DateTypes.DatesAsStrings, fmt,
                                        qb.QueryIdioms.OGR, False)
            self.assertEqual(result_sql, result_ogr)
Пример #6
0
    def test_query_for_lexicographically_comparable_format_(self):
        fmts = ["%d/%m/%Y %H:%M", "%m.%d.%Y %H:%M:%S"]

        for fmt in fmts:
            start_str = time_util.datetime_to_str(self.start_dt, fmt)
            end_str = time_util.datetime_to_str(self.end_dt, fmt)
            # assert that dates are not lexicographically comparable in this format
            self.assertTrue(end_str < start_str
                            and self.start_dt < self.end_dt)

            result_sql = qb.build_query(self.start_dt, self.end_dt,
                                        self.from_attr, self.to_attr,
                                        qb.DateTypes.DatesAsStrings, fmt,
                                        qb.QueryIdioms.SQL, False)

            result_ogr = qb.build_query(self.start_dt, self.end_dt,
                                        self.from_attr, self.to_attr,
                                        qb.DateTypes.DatesAsStrings, fmt,
                                        qb.QueryIdioms.OGR, False)
            self.assertEqual(result_sql, result_ogr)
def create_point_db(dest, dbname, starttime, num_items):
    """
    Re-create the point db if it doesn't exist
    """

    if os.path.exists(dest):
        return

    # creating/connecting the test_db and getting a cursor
    conn = db.connect(dest)
    cur = conn.cursor()

    # initializing Spatial MetaData
    # using v.2.4.0 this will automatically create
    # GEOMETRY_COLUMNS and SPATIAL_REF_SYS
    sql = "SELECT InitSpatialMetadata()"
    cur.execute(sql)
    # print "Spatialite initialized"
    # creating a POINT table
    sql = "CREATE TABLE %r (" % (dbname)
    sql += "{} INTEGER NOT NULL PRIMARY KEY,".format(INTEGER_TIMESTAMP)
    sql += "name TEXT NOT NULL,"
    sql += "{} DATETIME NOT NULL)".format(STRING_TIMESTAMP)
    cur.execute(sql)
    # creating a POINT Geometry column
    sql = "SELECT AddGeometryColumn('%s'," % (dbname)
    sql += "'geom', 4326, 'POINT', 2)"
    cur.execute(sql)

    # inserting num_items points
    for i in range(0, num_items):
        name = "test POINT #%d" % (i + 1)
        curr_time_epoch = starttime + i * 60
        curr_datetime = datetime.utcfromtimestamp(curr_time_epoch)
        geom = "GeomFromText('POINT("
        geom += "%f " % (-10.0 - (i / 10.0))
        geom += "%f" % (+10.0 + (i / 10.0))
        geom += ")', 4326)"
        print geom
        sql = "INSERT INTO {} ({}, name, geom, {}) ".format(dbname, INTEGER_TIMESTAMP, STRING_TIMESTAMP)
        sql += "VALUES (%d, '%s', %s, '%s')" % (
            curr_time_epoch,
            name,
            geom,
            datetime_to_str(curr_datetime, DEFAULT_FORMAT),
        )
        cur.execute(sql)
        conn.commit()
def create_point_db(dest, dbname, starttime, num_items):
    """
    Re-create the point db if it doesn't exist
    """

    if os.path.exists(dest):
        return

    # creating/connecting the test_db and getting a cursor
    conn = db.connect(dest)
    cur = conn.cursor()

    # initializing Spatial MetaData
    # using v.2.4.0 this will automatically create
    # GEOMETRY_COLUMNS and SPATIAL_REF_SYS
    sql = 'SELECT InitSpatialMetadata()'
    cur.execute(sql)
    # print "Spatialite initialized"
    # creating a POINT table
    sql = 'CREATE TABLE %r (' % (dbname)
    sql += '{} INTEGER NOT NULL PRIMARY KEY,'.format(INTEGER_TIMESTAMP)
    sql += 'name TEXT NOT NULL,'
    sql += '{} DATETIME NOT NULL)'.format(STRING_TIMESTAMP)
    cur.execute(sql)
    # creating a POINT Geometry column
    sql = "SELECT AddGeometryColumn('%s'," % (dbname)
    sql += "'geom', 4326, 'POINT', 2)"
    cur.execute(sql)

    # inserting num_items points
    for i in range(0, num_items):
        name = "test POINT #%d" % (i + 1)
        curr_time_epoch = starttime + i * 60
        curr_datetime = datetime.utcfromtimestamp(curr_time_epoch)
        geom = "GeomFromText('POINT("
        geom += "%f " % (-10.0 - (i / 10.0))
        geom += "%f" % (+10.0 + (i / 10.0))
        geom += ")', 4326)"
        print geom
        sql = "INSERT INTO {} ({}, name, geom, {}) ".format(
            dbname, INTEGER_TIMESTAMP, STRING_TIMESTAMP)
        sql += "VALUES (%d, '%s', %s, '%s')" % (
            curr_time_epoch, name, geom,
            datetime_to_str(curr_datetime, DEFAULT_FORMAT))
        cur.execute(sql)
        conn.commit()
Пример #9
0
 def test_bc_date_conversions_str(self):
     for datestr in self.bc_dates:
         dt = time_util.str_to_datetime(datestr)
         datestr2 = time_util.datetime_to_str(dt, None)
         assert (datestr == datestr2)
Пример #10
0
 def test_bc_date_conversions_str(self):
     for datestr in self.bc_dates:
         dt = time_util.str_to_datetime(datestr)
         datestr2 = time_util.datetime_to_str(dt, None)
         assert (datestr == datestr2)
Пример #11
0
 def test_datetime_to_str_before_1900_works(self):
     dtstr = "01/12/0100"
     fmt = "%d/%m/%Y"
     dt = datetime.strptime(dtstr, fmt)
     assert (time_util.datetime_to_str(dt, fmt) == dtstr)