[GRASS-SVN] r63899 - in grass/branches/releasebranch_7_0: . scripts/db.univar scripts/v.db.univar

svn_grass at osgeo.org svn_grass at osgeo.org
Thu Jan 1 06:11:02 PST 2015


Author: martinl
Date: 2015-01-01 06:11:02 -0800 (Thu, 01 Jan 2015)
New Revision: 63899

Modified:
   grass/branches/releasebranch_7_0/
   grass/branches/releasebranch_7_0/scripts/db.univar/db.univar.py
   grass/branches/releasebranch_7_0/scripts/v.db.univar/v.db.univar.py
Log:
db.univar: check if column is numeric
           replace print by sys.stdout.write()
v.db.univar: check if map exists
             catch error from db.univar
           (merge r63897-8 from trunk)



Property changes on: grass/branches/releasebranch_7_0
___________________________________________________________________
Modified: svn:mergeinfo
   - /grass/trunk:60817,61096,61141,61994,62105,62179-62180,62182,62190,62403,62422,62424,62437,62466,62469,62487,62491,62494,62501,62506,62508-62509,62515,62518-62519,62521,62526,62533,62539,62541,62555,62562,62566,62570,62573,62575,62585,62588,62597,62603,62606,62608-62609,62614,62618,62628,62632,62638,62642,62648-62649,62652,62654-62657,62666,62691,62705,62709,62723,62730,62739,62741,62743,62746,62750-62752,62757,62762,62785,62798,62800-62801,62803,62805,62812,62822,62824,62828,62831,62838,62845,62847,62850,62856,62879,62881,62886,62904,62907-62908,62910,62912,62914,62916,62918,62920,62925,62932-62933,62935,62940,62942,62944-62946,62949,62955-62956,62958,62960,62962,62964,62966-62968,62970,62973,62975,62977,62981,62983,62985,62987,62989,62991,62993,62995,62997,62999-63000,63003,63005,63007,63009,63011,63013,63015,63017,63020,63022,63024,63026,63028-63031,63033,63035,63037,63040,63043-63044,63047,63049,63051,63053,63055,63057,63060,63062-63064,63066,63068,63070-63071,63074,
 63076,63079,63081,63083,63085,63087,63089,63091,63093,63095,63098,63100,63102,63105,63107,63109,63111,63113-63114,63116,63119,63121,63123,63125,63130,63132-63133,63135,63137,63140,63143,63145,63147,63149,63151,63153-63154,63157,63160,63165,63170,63173,63175,63187,63192-63193,63196,63199-63200,63202,63209,63216,63220-63221,63224,63227,63240,63246,63250,63255,63259,63261,63275-63276,63279,63281,63283,63287,63290,63292,63297,63302,63304-63307,63315,63319,63327,63330,63332,63339,63342,63345,63361-63363,63367,63379,63389,63391,63393,63402,63408-63409,63416-63417,63425,63427,63429,63431,63433,63448,63451,63453,63457,63459,63464-63470,63473,63482,63497,63505,63508,63510,63515,63521-63524,63526,63536-63537,63551-63552,63554,63556,63558-63559,63562,63570,63576,63582,63589-63593,63602,63604,63608-63609,63616,63618,63624,63626,63628,63630,63634,63639,63642,63644,63650,63652,63656,63679,63685,63689,63691,63693,63695,63698,63700-63702,63704,63706-63707,63709,63711,63713,63715,63717-63718
 ,63721-63727,63731,63733,63740-63742,63744,63747-63749,63751-63752,63756,63758,63761,63767,63777,63780,63783,63787,63793,63796-63798,63801,63803,63807-63808,63812,63814,63816,63821,63823-63824,63827-63828,63830-63831,63834-63835,63837-63839,63841,63843-63844,63846-63847,63849,63851,63853,63855-63856,63858-63859,63862,63865,63869,63871,63882,63884,63889-63890,63895
   + /grass/trunk:60817,61096,61141,61994,62105,62179-62180,62182,62190,62403,62422,62424,62437,62466,62469,62487,62491,62494,62501,62506,62508-62509,62515,62518-62519,62521,62526,62533,62539,62541,62555,62562,62566,62570,62573,62575,62585,62588,62597,62603,62606,62608-62609,62614,62618,62628,62632,62638,62642,62648-62649,62652,62654-62657,62666,62691,62705,62709,62723,62730,62739,62741,62743,62746,62750-62752,62757,62762,62785,62798,62800-62801,62803,62805,62812,62822,62824,62828,62831,62838,62845,62847,62850,62856,62879,62881,62886,62904,62907-62908,62910,62912,62914,62916,62918,62920,62925,62932-62933,62935,62940,62942,62944-62946,62949,62955-62956,62958,62960,62962,62964,62966-62968,62970,62973,62975,62977,62981,62983,62985,62987,62989,62991,62993,62995,62997,62999-63000,63003,63005,63007,63009,63011,63013,63015,63017,63020,63022,63024,63026,63028-63031,63033,63035,63037,63040,63043-63044,63047,63049,63051,63053,63055,63057,63060,63062-63064,63066,63068,63070-63071,63074,
 63076,63079,63081,63083,63085,63087,63089,63091,63093,63095,63098,63100,63102,63105,63107,63109,63111,63113-63114,63116,63119,63121,63123,63125,63130,63132-63133,63135,63137,63140,63143,63145,63147,63149,63151,63153-63154,63157,63160,63165,63170,63173,63175,63187,63192-63193,63196,63199-63200,63202,63209,63216,63220-63221,63224,63227,63240,63246,63250,63255,63259,63261,63275-63276,63279,63281,63283,63287,63290,63292,63297,63302,63304-63307,63315,63319,63327,63330,63332,63339,63342,63345,63361-63363,63367,63379,63389,63391,63393,63402,63408-63409,63416-63417,63425,63427,63429,63431,63433,63448,63451,63453,63457,63459,63464-63470,63473,63482,63497,63505,63508,63510,63515,63521-63524,63526,63536-63537,63551-63552,63554,63556,63558-63559,63562,63570,63576,63582,63589-63593,63602,63604,63608-63609,63616,63618,63624,63626,63628,63630,63634,63639,63642,63644,63650,63652,63656,63679,63685,63689,63691,63693,63695,63698,63700-63702,63704,63706-63707,63709,63711,63713,63715,63717-63718
 ,63721-63727,63731,63733,63740-63742,63744,63747-63749,63751-63752,63756,63758,63761,63767,63777,63780,63783,63787,63793,63796-63798,63801,63803,63807-63808,63812,63814,63816,63821,63823-63824,63827-63828,63830-63831,63834-63835,63837-63839,63841,63843-63844,63846-63847,63849,63851,63853,63855-63856,63858-63859,63862,63865,63869,63871,63882,63884,63889-63890,63895,63897-63898

Modified: grass/branches/releasebranch_7_0/scripts/db.univar/db.univar.py
===================================================================
--- grass/branches/releasebranch_7_0/scripts/db.univar/db.univar.py	2015-01-01 14:07:44 UTC (rev 63898)
+++ grass/branches/releasebranch_7_0/scripts/db.univar/db.univar.py	2015-01-01 14:11:02 UTC (rev 63899)
@@ -59,12 +59,12 @@
 import os
 import atexit
 import math
-from grass.script.utils import try_remove
-from grass.script import core as grass
 
+import grass.script as grass 
+
 def cleanup():
     for ext in ['', '.sort']:
-        try_remove(tmp + ext)
+        grass.try_remove(tmp + ext)
 
 def sortfile(infile, outfile):
     inf = file(infile, 'r')
@@ -100,8 +100,20 @@
 
     perc = [float(p) for p in perc.split(',')]
 
+    desc_table = grass.db_describe(table, database=database, driver=driver)
+    if not desc_table:
+        grass.fatal(_("Unable to describe table <%s>") % table)
+    found = False
+    for cname, ctype, cwidth in desc_table['cols']:
+        if cname == column:
+            found = True
+            if ctype not in ('INTEGER', 'DOUBLE PRECISION'):
+                grass.fatal(_("Column <%s> is not numeric") % cname)
+    if not found:
+        grass.fatal(_("Column <%s> not found in table <%s>") % (column, table))
+
     if not shellstyle:
-        grass.message(_("Calculation for column <%s> of table <%s>...") % (column, table))
+        grass.verbose(_("Calculation for column <%s> of table <%s>...") % (column, table))
         grass.message(_("Reading column values..."))
 
     sql = "SELECT %s FROM %s" % (column, table)
@@ -128,7 +140,7 @@
 
     # calculate statistics
     if not shellstyle:
-        grass.message(_("Calculating statistics..."))
+        grass.verbose(_("Calculating statistics..."))
 
     N = 0
     sum = 0.0
@@ -154,30 +166,27 @@
         grass.fatal(_("No non-null values found"))
 
     if not shellstyle:
-        print ""
-        print "Number of values: %d" % N
-        print "Minimum: %.15g" % minv
-        print "Maximum: %.15g" % maxv
-        print "Range: %.15g" % (maxv - minv)
-        print "-----"
-        print "Mean: %.15g" % (sum/N)
-        print "Arithmetic mean of absolute values: %.15g" % (sum3/N)
-        print "Variance: %.15g" % ((sum2 - sum*sum/N)/N)
-        print "Standard deviation: %.15g" % (math.sqrt((sum2 - sum*sum/N)/N))
-        print "Coefficient of variation: %.15g" % ((math.sqrt((sum2 - sum*sum/N)/N))/(math.sqrt(sum*sum)/N))
-        print "Sum: %.15g" % sum
-        print "-----"
+        sys.stdout.write("Number of values: %d\n"% N)
+        sys.stdout.write("Minimum: %.15g\n"% minv)
+        sys.stdout.write("Maximum: %.15g\n"% maxv)
+        sys.stdout.write("Range: %.15g\n"% (maxv - minv))
+        sys.stdout.write("Mean: %.15g\n"% (sum/N))
+        sys.stdout.write("Arithmetic mean of absolute values: %.15g\n"% (sum3/N))
+        sys.stdout.write("Variance: %.15g\n"% ((sum2 - sum*sum/N)/N))
+        sys.stdout.write("Standard deviation: %.15g\n"% (math.sqrt((sum2 - sum*sum/N)/N)))
+        sys.stdout.write("Coefficient of variation: %.15g\n"% ((math.sqrt((sum2 - sum*sum/N)/N))/(math.sqrt(sum*sum)/N)))
+        sys.stdout.write("Sum: %.15g\n"% sum)
     else:
-        print "n=%d" % N
-        print "min=%.15g" % minv
-        print "max=%.15g" % maxv
-        print "range=%.15g" % (maxv - minv)
-        print "mean=%.15g" % (sum/N)
-        print "mean_abs=%.15g" % (sum3/N)
-        print "variance=%.15g" % ((sum2 - sum*sum/N)/N)
-        print "stddev=%.15g" % (math.sqrt((sum2 - sum*sum/N)/N))
-        print "coeff_var=%.15g" % ((math.sqrt((sum2 - sum*sum/N)/N))/(math.sqrt(sum*sum)/N))
-        print "sum=%.15g" % sum
+        sys.stdout.write("n=%d\n"% N)
+        sys.stdout.write("min=%.15g\n"% minv)
+        sys.stdout.write("max=%.15g\n"% maxv)
+        sys.stdout.write("range=%.15g\n"% (maxv - minv))
+        sys.stdout.write("mean=%.15g\n"% (sum/N))
+        sys.stdout.write("mean_abs=%.15g\n"% (sum3/N))
+        sys.stdout.write("variance=%.15g\n"% ((sum2 - sum*sum/N)/N))
+        sys.stdout.write("stddev=%.15g\n"% (math.sqrt((sum2 - sum*sum/N)/N)))
+        sys.stdout.write("coeff_var=%.15g\n"% ((math.sqrt((sum2 - sum*sum/N)/N))/(math.sqrt(sum*sum)/N)))
+        sys.stdout.write("sum=%.15g\n"% sum)
 
     if not extend:
         return
@@ -227,29 +236,29 @@
     q50 = (q50a + q50b) / 2
 
     if not shellstyle:
-        print "1st Quartile: %.15g" % q25
-        print "Median (%s N): %.15g" % (eostr, q50)
-        print "3rd Quartile: %.15g" % q75
+        sys.stdout.write("1st Quartile: %.15g\n" % q25)
+        sys.stdout.write("Median (%s N): %.15g\n" % (eostr, q50))
+        sys.stdout.write("3rd Quartile: %.15g\n" % q75)
         for i in range(len(perc)):
             if perc[i] == int(perc[i]): # integer
                 if int(perc[i]) % 10 == 1 and int(perc[i]) != 11:
-                    print "%dst Percentile: %.15g" % (int(perc[i]), pval[i])
+                    sys.stdout.write("%dst Percentile: %.15g\n"% (int(perc[i]), pval[i]))
                 elif int(perc[i]) % 10 == 2 and int(perc[i]) != 12:
-                    print "%dnd Percentile: %.15g" % (int(perc[i]), pval[i])
+                    sys.stdout.write("%dnd Percentile: %.15g\n"% (int(perc[i]), pval[i]))
                 elif int(perc[i]) % 10 == 3 and int(perc[i]) != 13:
-                    print "%drd Percentile: %.15g" % (int(perc[i]), pval[i])
+                    sys.stdout.write("%drd Percentile: %.15g\n"% (int(perc[i]), pval[i]))
                 else:
-                    print "%dth Percentile: %.15g" % (int(perc[i]), pval[i])
+                    sys.stdout.write("%dth Percentile: %.15g\n"% (int(perc[i]), pval[i]))
             else:
-                print "%.15g Percentile: %.15g" % (perc[i], pval[i])
+                sys.stdout.write("%.15g Percentile: %.15g\n"% (perc[i], pval[i]))
     else:
-        print "first_quartile=%.15g" % q25
-        print "median=%.15g" % q50
-        print "third_quartile=%.15g" % q75
+        sys.stdout.write("first_quartile=%.15g\n"% q25)
+        sys.stdout.write("median=%.15g\n"% q50)
+        sys.stdout.write("third_quartile=%.15g\n"% q75)
         for i in range(len(perc)):
             percstr = "%.15g" % perc[i]
             percstr = percstr.replace('.','_')
-            print "percentile_%s=%.15g" % (percstr, pval[i])
+            sys.stdout.write("percentile_%s=%.15g\n"% (percstr, pval[i]))
 
 if __name__ == "__main__":
     options, flags = grass.parser()

Modified: grass/branches/releasebranch_7_0/scripts/v.db.univar/v.db.univar.py
===================================================================
--- grass/branches/releasebranch_7_0/scripts/v.db.univar/v.db.univar.py	2015-01-01 14:07:44 UTC (rev 63898)
+++ grass/branches/releasebranch_7_0/scripts/v.db.univar/v.db.univar.py	2015-01-01 14:11:02 UTC (rev 63899)
@@ -54,6 +54,7 @@
 import sys
 import os
 import grass.script as grass
+from grass.exceptions import CalledModuleError
 
 def main():
     global tmp
@@ -67,7 +68,9 @@
     extend = flags['e']
     shellstyle = flags['g']
 
-    
+    if not grass.find_file(vector, element='vector')['file']:
+        grass.fatal(_("Vector map <%s> not found") % vector)
+        
     fi = grass.vector_db(vector, stderr = nuldev)[int(layer)]
     table = fi['table']
     database = fi['database']
@@ -81,12 +84,14 @@
 	    passflags = 'g'
 	else:
 	    passflags = passflags + 'g'
+
+    try:
+        grass.run_command('db.univar', table = table, column = column, 
+                          database = database, driver = driver,
+                          perc = perc, where = where, flags = passflags)
+    except CalledModuleError:
+        sys.exit(1)
     
-    grass.run_command('db.univar', table = table, column = column, 
-                      database = database, driver = driver,
-		      perc = perc, where = where, flags = passflags)
-
-
 if __name__ == "__main__":
     options, flags = grass.parser()
     nuldev = file(os.devnull, 'w')



More information about the grass-commit mailing list