123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- """
- 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
|