[GRASS-SVN] r59916 - grass/trunk/lib/python/temporal

svn_grass at osgeo.org svn_grass at osgeo.org
Wed Apr 23 15:15:23 PDT 2014


Author: huhabla
Date: 2014-04-23 15:15:23 -0700 (Wed, 23 Apr 2014)
New Revision: 59916

Modified:
   grass/trunk/lib/python/temporal/abstract_space_time_dataset.py
   grass/trunk/lib/python/temporal/univar_statistics.py
Log:
Fix for #2264 and #2264

Modified: grass/trunk/lib/python/temporal/abstract_space_time_dataset.py
===================================================================
--- grass/trunk/lib/python/temporal/abstract_space_time_dataset.py	2014-04-23 22:14:10 UTC (rev 59915)
+++ grass/trunk/lib/python/temporal/abstract_space_time_dataset.py	2014-04-23 22:15:23 UTC (rev 59916)
@@ -14,6 +14,7 @@
 @author Soeren Gebbert
 """
 import sys
+import uuid
 from abstract_dataset import *
 from temporal_granularity import *
 from spatio_temporal_relationships import *
@@ -44,18 +45,19 @@
         """!Create the name of the map register table of this space time
             dataset
 
-            The name, mapset and the map type are used to create the table name
+            A uuid and the map type are used to create the table name
 
             ATTENTION: It must be assured that the base object has selected its
             content from the database.
 
             @return The name of the map register table
         """
+        
+        uuid_rand = str(uuid.uuid4()).replace("-",  "")
+        
+        table_name = self.get_new_map_instance(None).get_type() + "_map_register_" + uuid_rand
+        return table_name
 
-        return self.base.get_name() + "_" + \
-                self.base.get_mapset() + "_" + \
-                self.get_new_map_instance(None).get_type() + "_register"
-
     @abstractmethod
     def get_new_map_instance(self, ident=None):
         """!Return a new instance of a map which is associated
@@ -343,12 +345,9 @@
             sql = open(os.path.join(sql_path,
                                     "stds_map_register_table_template.sql"),
                                     'r').read()
-            map_type = self.get_new_map_instance(None).get_type()
-            stds_name = self.get_name() + "_" + self.get_mapset()
 
             # Create a raster, raster3d or vector tables
-            sql = sql.replace("GRASS_MAP", map_type)
-            sql = sql.replace("SPACETIME_NAME", stds_name)
+            sql = sql.replace("SPACETIME_REGISTER_TABLE", stds_register_table)
             statement += sql
 
             if dbif.dbmi.__name__ == "sqlite3":
@@ -2123,7 +2122,6 @@
             sql = "INSERT INTO " + stds_register_table + \
                 " (id) " + "VALUES (%s);\n"
 
-
         statement += dbif.mogrify_sql_statement((sql, (map_id,)))
 
         # Now execute the insert transaction
@@ -2230,7 +2228,7 @@
         self.msgr.verbose(_("Update metadata, spatial and temporal extent from "
                        "all registered maps of <%s>") % (self.get_id()))
 
-        # Nothing to do if the register is not present
+        # Nothing to do if the map register is not present
         if not self.get_map_register():
             return
 
@@ -2244,6 +2242,7 @@
         stds_name = self.base.get_name()
         stds_mapset = self.base.get_mapset()
         sql_path = get_sql_template_path()
+        stds_register_table = self.get_map_register()
 
         #We create a transaction
         sql_script = ""
@@ -2255,7 +2254,7 @@
                    'r').read()
         sql = sql.replace(
             "GRASS_MAP", self.get_new_map_instance(None).get_type())
-        sql = sql.replace("SPACETIME_NAME", stds_name + "_" + stds_mapset)
+        sql = sql.replace("SPACETIME_REGISTER_TABLE", stds_register_table)
         sql = sql.replace("SPACETIME_ID", self.base.get_id())
         sql = sql.replace("STDS", self.get_type())
 
@@ -2265,11 +2264,8 @@
         # Update type specific metadata
         sql = open(os.path.join(sql_path, "update_" +
             self.get_type() + "_metadata_template.sql"), 'r').read()
-        sql = sql.replace(
-            "GRASS_MAP", self.get_new_map_instance(None).get_type())
-        sql = sql.replace("SPACETIME_NAME", stds_name + "_" + stds_mapset)
+        sql = sql.replace("SPACETIME_REGISTER_TABLE", stds_register_table)
         sql = sql.replace("SPACETIME_ID", self.base.get_id())
-        sql = sql.replace("STDS", self.get_type())
 
         sql_script += sql
         sql_script += "\n"
@@ -2293,19 +2289,17 @@
             if self.is_time_absolute():
                 sql = """SELECT max(start_time) FROM GRASS_MAP_absolute_time
                          WHERE GRASS_MAP_absolute_time.id IN
-                        (SELECT id FROM SPACETIME_NAME_GRASS_MAP_register);"""
+                        (SELECT id FROM SPACETIME_REGISTER_TABLE);"""
                 sql = sql.replace("GRASS_MAP", self.get_new_map_instance(
                     None).get_type())
-                sql = sql.replace("SPACETIME_NAME",
-                    stds_name + "_" + stds_mapset)
+                sql = sql.replace("SPACETIME_REGISTER_TABLE", stds_register_table)
             else:
                 sql = """SELECT max(start_time) FROM GRASS_MAP_relative_time
                          WHERE GRASS_MAP_relative_time.id IN
-                        (SELECT id FROM SPACETIME_NAME_GRASS_MAP_register);"""
+                        (SELECT id FROM SPACETIME_REGISTER_TABLE);"""
                 sql = sql.replace("GRASS_MAP", self.get_new_map_instance(
                     None).get_type())
-                sql = sql.replace("SPACETIME_NAME",
-                    stds_name + "_" + stds_mapset)
+                sql = sql.replace("SPACETIME_REGISTER_TABLE", stds_register_table)
 
             dbif.cursor.execute(sql)
             row = dbif.cursor.fetchone()
@@ -2337,24 +2331,22 @@
                 sql = """UPDATE STDS_absolute_time SET end_time =
                (SELECT max(start_time) FROM GRASS_MAP_absolute_time WHERE
                GRASS_MAP_absolute_time.id IN
-                        (SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+                        (SELECT id FROM SPACETIME_REGISTER_TABLE)
                ) WHERE id = 'SPACETIME_ID';"""
                 sql = sql.replace("GRASS_MAP", self.get_new_map_instance(
                     None).get_type())
-                sql = sql.replace("SPACETIME_NAME",
-                    stds_name + "_" + stds_mapset)
+                sql = sql.replace("SPACETIME_REGISTER_TABLE", stds_register_table)
                 sql = sql.replace("SPACETIME_ID", self.base.get_id())
                 sql = sql.replace("STDS", self.get_type())
             elif self.is_time_relative():
                 sql = """UPDATE STDS_relative_time SET end_time =
                (SELECT max(start_time) FROM GRASS_MAP_relative_time WHERE
                GRASS_MAP_relative_time.id IN
-                        (SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+                        (SELECT id FROM SPACETIME_REGISTER_TABLE)
                ) WHERE id = 'SPACETIME_ID';"""
                 sql = sql.replace("GRASS_MAP", self.get_new_map_instance(
                     None).get_type())
-                sql = sql.replace("SPACETIME_NAME",
-                    stds_name + "_" + stds_mapset)
+                sql = sql.replace("SPACETIME_REGISTER_TABLE", stds_register_table)
                 sql = sql.replace("SPACETIME_ID", self.base.get_id())
                 sql = sql.replace("STDS", self.get_type())
 

Modified: grass/trunk/lib/python/temporal/univar_statistics.py
===================================================================
--- grass/trunk/lib/python/temporal/univar_statistics.py	2014-04-23 22:14:10 UTC (rev 59915)
+++ grass/trunk/lib/python/temporal/univar_statistics.py	2014-04-23 22:15:23 UTC (rev 59916)
@@ -82,6 +82,13 @@
         elif type == "str3ds":
             stats = core.parse_command("r3.univar", map=id, flags=flag)
 
+        if not stats:
+            if type == "strds":
+                core.warning(_("Unable to get statistics for raster map <%s>") % id)
+            elif type == "str3ds":
+                core.warning(_("Unable to get statistics for 3d raster map <%s>") % id)
+            continue
+        
         string += str(id) + fs + str(start) + fs + str(end)
         string += fs + str(stats["mean"]) + fs + str(stats["min"])
         string += fs + str(stats["max"]) + fs + str(stats["mean_of_abs"])
@@ -178,40 +185,44 @@
                                    type=type, flags=flags)
 
         string = ""
-        if stats:
-            string += str(id) + fs + str(start) + fs + str(end)
-            string += fs + str(stats["n"]) + fs + str(stats[
-                "nmissing"]) + fs + str(stats["nnull"])
-            if "min" in stats:
-                string += fs + str(stats["min"]) + fs + str(
-                    stats["max"]) + fs + str(stats["range"])
-            else:
-                string += fs + fs + fs
 
-            if type == "point" or type == "centroid":
-                if "mean" in stats:
-                    string += fs + str(stats["mean"]) + fs + \
-                    str(stats["mean_abs"]) + fs + \
-                    str(stats["population_stddev"]) + fs + \
-                    str(stats["population_variance"])
+        if not stats:
+            core.warning(_("Unable to get statistics for vector map <%s>") % id)
+            continue
+        
+        string += str(id) + fs + str(start) + fs + str(end)
+        string += fs + str(stats["n"]) + fs + str(stats[
+            "nmissing"]) + fs + str(stats["nnull"])
+        if "min" in stats:
+            string += fs + str(stats["min"]) + fs + str(
+                stats["max"]) + fs + str(stats["range"])
+        else:
+            string += fs + fs + fs
 
-                    string += fs + str(stats["population_coeff_variation"]) + \
-                    fs + str(stats["sample_stddev"]) + fs + \
-                    str(stats["sample_variance"])
+        if type == "point" or type == "centroid":
+            if "mean" in stats:
+                string += fs + str(stats["mean"]) + fs + \
+                str(stats["mean_abs"]) + fs + \
+                str(stats["population_stddev"]) + fs + \
+                str(stats["population_variance"])
 
-                    string += fs + str(stats["kurtosis"]) + fs + \
-                    str(stats["skewness"])
+                string += fs + str(stats["population_coeff_variation"]) + \
+                fs + str(stats["sample_stddev"]) + fs + \
+                str(stats["sample_variance"])
+
+                string += fs + str(stats["kurtosis"]) + fs + \
+                str(stats["skewness"])
+            else:
+                string += fs + fs + fs + fs + fs + fs + fs + fs + fs
+            if extended == True:
+                if "first_quartile" in stats:
+                    string += fs + str(stats["first_quartile"]) + fs + \
+                    str(stats["median"]) + fs + \
+                    str(stats["third_quartile"]) + fs + \
+                    str(stats["percentile_90"])
                 else:
-                    string += fs + fs + fs + fs + fs + fs + fs + fs + fs
-                if extended == True:
-                    if "first_quartile" in stats:
-                        string += fs + str(stats["first_quartile"]) + fs + \
-                        str(stats["median"]) + fs + \
-                        str(stats["third_quartile"]) + fs + \
-                        str(stats["percentile_90"])
-                    else:
-                        string += fs + fs + fs + fs
+                    string += fs + fs + fs + fs
 
-            print string
+        print string
 
     dbif.close()



More information about the grass-commit mailing list