1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
|
"""
GUI support functions
(C) 2008-2011 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.
:authors: Soeren Gebbert
"""
from .space_time_datasets import *
from .factory import *
import grass.script as gscript
###############################################################################
def tlist_grouped(type, group_type=False, dbif=None):
"""List of temporal elements grouped by mapsets.
Returns a dictionary where the keys are mapset
names and the values are lists of space time datasets in that
mapset. Example:
.. code-block:: python
>>> tgis.tlist_grouped('strds')['PERMANENT']
['precipitation', 'temperature']
:param type: element type (strds, str3ds, stvds)
:param group_type: TBD
:return: directory of mapsets/elements
"""
result = {}
dbif, connected = init_dbif(dbif)
mapset = None
if type == 'stds':
types = ['strds', 'str3ds', 'stvds']
else:
types = [type]
for type in types:
try:
tlist_result = tlist(type=type, dbif=dbif)
except gscript.ScriptError as e:
warning(e)
continue
for line in tlist_result:
try:
name, mapset = line.split('@')
except ValueError:
warning(_("Invalid element '%s'") % line)
continue
if mapset not in result:
if group_type:
result[mapset] = {}
else:
result[mapset] = []
if group_type:
if type in result[mapset]:
result[mapset][type].append(name)
else:
result[mapset][type] = [name, ]
else:
result[mapset].append(name)
if connected is True:
dbif.close()
return result
###############################################################################
def tlist(type, dbif=None):
"""Return a list of space time datasets of absolute and relative time
:param type: element type (strds, str3ds, stvds)
:return: a list of space time dataset ids
"""
id = None
sp = dataset_factory(type, id)
dbif, connected = init_dbif(dbif)
mapsets = get_available_temporal_mapsets()
output = []
temporal_type = ["absolute", 'relative']
for type in temporal_type:
# For each available mapset
for mapset in mapsets.keys():
# Table name
if type == "absolute":
table = sp.get_type() + "_view_abs_time"
else:
table = sp.get_type() + "_view_rel_time"
# Create the sql selection statement
sql = "SELECT id FROM " + table
sql += " WHERE mapset = '%s'" % (mapset)
sql += " ORDER BY id"
dbif.execute(sql, mapset=mapset)
rows = dbif.fetchall(mapset=mapset)
# Append the ids of the space time datasets
for row in rows:
for col in row:
output.append(str(col))
if connected is True:
dbif.close()
return output
|