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