Parcourir la source

Better Python file naming. New unittests to test the map register function
in register.py. Fixes for map registration bugs with relative time
reported by Vaclav.


git-svn-id: https://svn.osgeo.org/grass/grass/trunk@58381 15284696-431f-4ddb-bdfa-cd5b030d7da7

Soeren Gebbert il y a 11 ans
Parent
commit
273f2e0d3e

+ 1 - 1
lib/python/temporal/Makefile

@@ -8,7 +8,7 @@ PYDIR = $(ETC)/python
 GDIR = $(PYDIR)/grass
 DSTDIR = $(GDIR)/temporal
 
-MODULES = base core abstract_dataset abstract_map_dataset abstract_space_time_dataset space_time_datasets open factory gui_support list register sampling metadata spatial_extent temporal_extent datetime_math temporal_granularity spatio_temporal_relationships unit_tests aggregation stds_export stds_import extract mapcalc univar_statistics temporal_topology_dataset_connector spatial_topology_dataset_connector c_libraries_interface
+MODULES = base core abstract_dataset abstract_map_dataset abstract_space_time_dataset space_time_datasets open_stds factory gui_support list_stds register sampling metadata spatial_extent temporal_extent datetime_math temporal_granularity spatio_temporal_relationships unit_tests aggregation stds_export stds_import extract mapcalc univar_statistics temporal_topology_dataset_connector spatial_topology_dataset_connector c_libraries_interface
 
 PYFILES := $(patsubst %,$(DSTDIR)/%.py,$(MODULES) __init__)
 PYCFILES := $(patsubst %,$(DSTDIR)/%.pyc,$(MODULES) __init__)

+ 2 - 2
lib/python/temporal/__init__.py

@@ -12,10 +12,10 @@ from space_time_datasets import *
 from datetime_math import *
 from temporal_granularity import *
 from spatio_temporal_relationships import *
-from open import *
+from open_stds import *
 from factory import *
 from gui_support import *
-from list import *
+from list_stds import *
 from register import *
 from sampling import *
 from aggregation import *

+ 16 - 16
lib/python/temporal/c_libraries_interface.py

@@ -549,11 +549,11 @@ def _convert_timestamp_from_grass(ts):
                 unit = "hours"
                 start = dt1.hour
             elif dt1.minute > 0:
-                unit = "minutess"
-                start = dt1.minutes
-            elif dt1.seconds > 0:
+                unit = "minutes"
+                start = dt1.minute
+            elif dt1.second > 0:
                 unit = "seconds"
-                start = dt1.seconds
+                start = dt1.second
         if count == 2:
             if dt2.year > 0:
                 end = dt2.year
@@ -564,9 +564,9 @@ def _convert_timestamp_from_grass(ts):
             elif dt2.hour > 0:
                 end = dt2.hour
             elif dt2.minute > 0:
-                end = dt2.minutes
-            elif dt2.seconds > 0:
-                end = dt2.seconds
+                end = dt2.minute
+            elif dt2.second > 0:
+                end = dt2.second
         return (start, end, unit)
 
 ###############################################################################
@@ -635,11 +635,11 @@ class CLibrariesInterface(object):
        0
        >>> grass.run_command("v.random", output="test", n=10, overwrite=True, quiet=True)
        0
-       >>> grass.run_command("r.timestamp", map="test", date='12 Mar 1995', overwrite=True, quiet=True)
+       >>> grass.run_command("r.timestamp", map="test", date='12 Mar 1995 10:34:40', overwrite=True, quiet=True)
        0
-       >>> grass.run_command("r3.timestamp", map="test", date='12 Mar 1995', overwrite=True, quiet=True)
+       >>> grass.run_command("r3.timestamp", map="test", date='12 Mar 1995 10:34:40', overwrite=True, quiet=True)
        0
-       >>> grass.run_command("v.timestamp", map="test", date='12 Mar 1995', overwrite=True, quiet=True)
+       >>> grass.run_command("v.timestamp", map="test", date='12 Mar 1995 10:34:40', overwrite=True, quiet=True)
        0
 
 
@@ -658,11 +658,11 @@ class CLibrariesInterface(object):
        ...     if res[0]:
        ...         print str(res[1][0]), str(res[1][0])
        ...         ciface.remove_raster_timestamp("test", tgis.get_current_mapset())
-       1995-03-12 00:00:00 1995-03-12 00:00:00
+       1995-03-12 10:34:40 1995-03-12 10:34:40
        1
        >>> ciface.has_raster_timestamp("test", tgis.get_current_mapset())
        False
-       >>> ciface.write_raster_timestamp("test", tgis.get_current_mapset(), "13 Jan 1999")
+       >>> ciface.write_raster_timestamp("test", tgis.get_current_mapset(), "13 Jan 1999 14:30:05")
        1
        >>> ciface.has_raster_timestamp("test", tgis.get_current_mapset())
        True
@@ -682,11 +682,11 @@ class CLibrariesInterface(object):
        ...     if res[0]:
        ...         print str(res[1][0]), str(res[1][0])
        ...         ciface.remove_raster3d_timestamp("test", tgis.get_current_mapset())
-       1995-03-12 00:00:00 1995-03-12 00:00:00
+       1995-03-12 10:34:40 1995-03-12 10:34:40
        1
        >>> ciface.has_raster3d_timestamp("test", tgis.get_current_mapset())
        False
-       >>> ciface.write_raster3d_timestamp("test", tgis.get_current_mapset(), "13 Jan 1999")
+       >>> ciface.write_raster3d_timestamp("test", tgis.get_current_mapset(), "13 Jan 1999 14:30:05")
        1
        >>> ciface.has_raster3d_timestamp("test", tgis.get_current_mapset())
        True
@@ -707,11 +707,11 @@ class CLibrariesInterface(object):
        ...     if res[0]:
        ...         print str(res[1][0]), str(res[1][0])
        ...         ciface.remove_vector_timestamp("test", tgis.get_current_mapset())
-       1995-03-12 00:00:00 1995-03-12 00:00:00
+       1995-03-12 10:34:40 1995-03-12 10:34:40
        1
        >>> ciface.has_vector_timestamp("test", tgis.get_current_mapset())
        False
-       >>> ciface.write_vector_timestamp("test", tgis.get_current_mapset(), "13 Jan 1999")
+       >>> ciface.write_vector_timestamp("test", tgis.get_current_mapset(), "13 Jan 1999 14:30:05")
        1
        >>> ciface.has_vector_timestamp("test", tgis.get_current_mapset())
        True

+ 6 - 1
lib/python/temporal/datetime_math.py

@@ -737,8 +737,13 @@ def string_to_datetime(time_string):
         Time zones are not supported
 
         @param time_string The time string to convert
-        @return datetime object or None in case of an error
+        @return datetime object or None in case the string 
+                         could not be converted
     """
+
+    if not isinstance(time_string, str):
+        return None
+
     time_object = check_datetime_string(time_string)
     if not isinstance(time_object, datetime):
         core.error(time_object)

+ 1 - 1
lib/python/temporal/extract.py

@@ -13,7 +13,7 @@ for details.
 """
 
 from space_time_datasets import *
-from open import *
+from open_stds import *
 from multiprocessing import Process
 
 ############################################################################

+ 1 - 1
lib/python/temporal/list.py

@@ -24,7 +24,7 @@ for details.
 
 from space_time_datasets import *
 from factory import *
-from open import *
+from open_stds import *
 
 ###############################################################################
 

+ 0 - 1
lib/python/temporal/open.py

@@ -22,7 +22,6 @@ for details.
 @author Soeren Gebbert
 """
 
-from space_time_datasets import *
 from factory import *
 
 ###############################################################################

+ 1 - 26
lib/python/temporal/register.py

@@ -22,9 +22,7 @@ for details.
 @author Soeren Gebbert
 """
 
-from space_time_datasets import *
-from factory import *
-from open import *
+from open_stds import *
 
 ###############################################################################
 
@@ -41,29 +39,6 @@ def register_maps_in_space_time_dataset(
        It takes care of the correct update of the space time datasets from all
        registered maps.
 
-       @code
-
-        >>> import grass.script as grass
-        >>> import grass.temporal as tgis
-        >>> grass.use_temp_region()
-        >>> grass.run_command("g.region", n=80.0, s=0.0, e=120.0, w=0.0,
-        ... t=1.0, b=0.0, res=10.0)
-        0
-        >>> grass.run_command("r.mapcalc", overwrite=True, quiet=True, expression="register_map_1 = 1")
-        0
-        >>> grass.run_command("r.mapcalc", overwrite=True, quiet=True, expression="register_map_2 = 2")
-        0
-        >>> grass.run_command("r.mapcalc", overwrite=True, quiet=True, expression="register_map_3 = 3")
-        0
-        >>> grass.run_command("r.mapcalc", overwrite=True, quiet=True, expression="register_map_4 = 4")
-        0
-        >>> tgis.init(True)
-        >>> tgis.register_maps_in_space_time_dataset(type="strds", name=None, 
-        ...               maps="register_map_1,register_map_2,register_map_3,register_map_4",
-        ...               start="2001-01-01", increment="1 day", interval=True)
-
-       @endcode
-
        @param type The type of the maps rast, rast3d or vect
        @param name The name of the space time dataset. Maps will be registered in the
                    temporal database if the name was set to None

+ 1 - 1
lib/python/temporal/stds_export.py

@@ -35,7 +35,7 @@ import tempfile
 
 from space_time_datasets import *
 from factory import *
-from open import *
+from open_stds import *
 
 proj_file_name = "proj.txt"
 init_file_name = "init.txt"

+ 204 - 0
lib/python/temporal/unittests_register.py

@@ -0,0 +1,204 @@
+"""!Unit test to register raster maps with absolute and relative 
+   time using tgis.register_maps_in_space_time_dataset()
+
+(C) 2013 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+@author Soeren Gebbert
+"""
+
+import grass.script as grass
+import grass.temporal as tgis
+import unittest
+import datetime
+
+class TestRegisterFunctions(unittest.TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """!Initiate the temporal GIS and set the region
+        """
+        tgis.init(True)
+        grass.overwrite = True
+        grass.use_temp_region()
+        ret = grass.run_command("g.region", n=80.0, s=0.0, e=120.0, 
+                                w=0.0, t=1.0, b=0.0, res=10.0)
+
+    def setUp(self):
+        """!Create the test maps
+        """
+        ret = 0
+        ret += grass.run_command("r.mapcalc", overwrite=True, quiet=True, 
+                          expression="register_map_1 = 1")
+        ret += grass.run_command("r.mapcalc", overwrite=True, quiet=True, 
+                          expression="register_map_2 = 2")
+        self.assertEqual(ret, 0)
+
+    def test_absolute_time_strds(self):
+        """!Test the registration of maps with absolute time in a
+           space time raster dataset
+        """
+        ret = grass.run_command("t.create", output="register_test", 
+                                title="Test strds", description="Test strds",
+                                temporaltype="absolute")
+        self.assertEqual(ret, 0)
+
+        tgis.register_maps_in_space_time_dataset(type="rast", name="register_test", 
+                 maps="register_map_1,register_map_2",
+                 start="2001-01-01", increment="1 day", interval=True)
+
+        map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
+        map.select()
+        start, end, tz = map.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 1))
+        self.assertEqual(end, datetime.datetime(2001, 1, 2))
+
+        map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
+        map.select()
+        start, end, tz = map.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 2))
+        self.assertEqual(end, datetime.datetime(2001, 1, 3))
+
+        strds = tgis.SpaceTimeRasterDataset("register_test@" + tgis.get_current_mapset())
+        strds.select()
+        start, end, tz = strds.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 1))
+        self.assertEqual(end, datetime.datetime(2001, 1, 3))
+
+        ret = grass.run_command("t.remove", input="register_test") 
+        self.assertEqual(ret, 0)
+
+    def test_absolute_time_1(self):
+        """!Test the registration of maps with absolute time
+        """
+        tgis.register_maps_in_space_time_dataset(type="rast", name=None, 
+                 maps="register_map_1,register_map_2",
+                 start="2001-01-01", increment="1 day", interval=True)
+
+        map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
+        map.select()
+        start, end, tz = map.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 1))
+        self.assertEqual(end, datetime.datetime(2001, 1, 2))
+
+        map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
+        map.select()
+        start, end, tz = map.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 2))
+        self.assertEqual(end, datetime.datetime(2001, 1, 3))
+
+    def test_absolute_time_2(self):
+        """!Test the registration of maps with absolute time
+        """
+        tgis.register_maps_in_space_time_dataset(type="rast", name=None, 
+                 maps="register_map_1,register_map_2",
+                 start="2001-01-01 10:30:01", increment="8 hours", interval=False)
+
+        map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
+        map.select()
+        start, end, tz = map.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 1, 10, 30, 1))
+
+        map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
+        map.select()
+        start, end, tz = map.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 1, 18, 30, 1))
+
+    def test_relative_time_strds(self):
+        """!Test the registration of maps with relative time in a
+           space time raster dataset
+        """
+        ret = grass.run_command("t.create", output="register_test", 
+                                title="Test strds", description="Test strds",
+                                temporaltype="relative")
+        self.assertEqual(ret, 0)
+
+
+        tgis.register_maps_in_space_time_dataset(type="rast", name="register_test", 
+                 maps="register_map_1,register_map_2",
+                 start=0, increment=1, unit="day", interval=True)
+
+        map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
+        map.select()
+        start, end, unit = map.get_relative_time()
+        self.assertEqual(start, 0)
+        self.assertEqual(end, 1)
+        self.assertEqual(unit, "day")
+
+        map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
+        map.select()
+        start, end, unit = map.get_relative_time()
+        self.assertEqual(start, 1)
+        self.assertEqual(end, 2)
+        self.assertEqual(unit, "day")
+
+        strds = tgis.SpaceTimeRasterDataset("register_test@" + tgis.get_current_mapset())
+        strds.select()
+        start, end, unit = strds.get_relative_time()
+        self.assertEqual(start, 0)
+        self.assertEqual(end, 2)
+        self.assertEqual(unit, "day")
+
+        ret = grass.run_command("t.remove", input="register_test") 
+        self.assertEqual(ret, 0)
+
+    def test_relative_time_1(self):
+        """!Test the registration of maps with relative time
+        """
+        tgis.register_maps_in_space_time_dataset(type="rast", name=None, 
+                 maps="register_map_1,register_map_2",
+                 start=0, increment=1, unit="day", interval=True)
+
+        map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
+        map.select()
+        start, end, unit = map.get_relative_time()
+        self.assertEqual(start, 0)
+        self.assertEqual(end, 1)
+        self.assertEqual(unit, "day")
+
+        map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
+        map.select()
+        start, end, unit = map.get_relative_time()
+        self.assertEqual(start, 1)
+        self.assertEqual(end, 2)
+        self.assertEqual(unit, "day")
+
+    def test_relative_time_2(self):
+        """!Test the registration of maps with relative time
+        """
+        tgis.register_maps_in_space_time_dataset(type="rast", name=None, 
+                 maps="register_map_1,register_map_2",
+                 start=1000000, increment=500000, unit="second", interval=True)
+
+        map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
+        map.select()
+        start, end, unit = map.get_relative_time()
+        self.assertEqual(start, 1000000)
+        self.assertEqual(end, 1500000)
+        self.assertEqual(unit, "second")
+
+        map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
+        map.select()
+        start, end, unit = map.get_relative_time()
+        self.assertEqual(start, 1500000)
+        self.assertEqual(end, 2000000)
+        self.assertEqual(unit, "second")
+
+    def tearDown(self):
+        """!Remove maps from temporal database
+        """
+        ret = grass.run_command("t.unregister", maps="register_map_1,register_map_2")
+        self.assertEqual(ret, 0)
+
+    @classmethod
+    def tearDownClass(cls):
+        """!Remove the temporary region
+        """
+        grass.del_temp_region()
+
+if __name__ == '__main__':
+    unittest.main()
+
+

+ 1 - 1
lib/python/temporal/univar_statistics.py

@@ -25,7 +25,7 @@ for details.
 
 from space_time_datasets import *
 from factory import *
-from open import *
+from open_stds import *
 
 ###############################################################################