[GRASS-SVN] r54779 - grass/trunk/scripts/v.db.reconnect.all
svn_grass at osgeo.org
svn_grass at osgeo.org
Sat Jan 26 14:35:37 PST 2013
Author: mmetz
Date: 2013-01-26 14:35:36 -0800 (Sat, 26 Jan 2013)
New Revision: 54779
Modified:
grass/trunk/scripts/v.db.reconnect.all/v.db.reconnect.all.py
Log:
v.db.reconnect.all: make it work
Modified: grass/trunk/scripts/v.db.reconnect.all/v.db.reconnect.all.py
===================================================================
--- grass/trunk/scripts/v.db.reconnect.all/v.db.reconnect.all.py 2013-01-26 22:34:42 UTC (rev 54778)
+++ grass/trunk/scripts/v.db.reconnect.all/v.db.reconnect.all.py 2013-01-26 22:35:36 UTC (rev 54779)
@@ -4,7 +4,7 @@
# MODULE: v.db.reconnect.all
# AUTHOR(S): Radim Blazek
# Converted to Python by Glynn Clements
-# Update for GRASS 7 by Martin Landa <landa.martin gmail.com>
+# Update for GRASS 7 by Markus Metz
# PURPOSE: Reconnect all vector maps from the current mapset
# COPYRIGHT: (C) 2004, 2012 by the GRASS Development Team
#
@@ -31,7 +31,6 @@
#%option G_OPT_DB_DATABASE
#% key: old_database
#% description: Name of source database
-#% required: yes
#%end
#%option G_OPT_DB_SCHEMA
#% key: old_schema
@@ -44,7 +43,6 @@
#%option G_OPT_DB_DATABASE
#% key: new_database
#% description: Name for target database
-#% required: yes
#%end
#%option G_OPT_DB_SCHEMA
#% key: new_schema
@@ -68,13 +66,22 @@
# create database if doesn't exist
def create_db(driver, database):
+ if driver == 'dbf':
+ path = substitute_db(database)
+ # check if destination directory exists
+ if not os.path.isdir(path):
+ # create dbf database
+ os.makedirs(path)
+ return True
+ return False
+
if driver == 'sqlite':
- path = os.path.dirname(database)
+ path = os.path.dirname(substitute_db(database))
# check if destination directory exists
if not os.path.isdir(path):
os.makedirs(path)
- if database in grass.read_command('db.databases', quiet = True,
+ if substitute_db(database) in grass.read_command('db.databases', quiet = True,
driver = driver).splitlines():
return False
@@ -96,8 +103,7 @@
stderr = nuldev).splitlines():
return False
- grass.info("Table <%s> in target database doesn't exist, "
- "copying data..." % to_table)
+ grass.info("Copying table <%s> to target database..." % to_table)
if 0 != grass.run_command('db.copy', from_driver = from_driver,
from_database = from_database,
from_table = from_table, to_driver = to_driver,
@@ -108,29 +114,50 @@
return True
# drop tables if required (-d)
-def drop_tab(driver, database, table):
+def drop_tab(vector, layer, table, driver, database):
+ # disconnect
+ if 0 != grass.run_command('v.db.connect', flags = 'd', quiet = True, map = vector,
+ layer = layer, table = table):
+ grass.warning(_("Unable to disconnect table <%s> from vector <%s>") % (table, vector))
+ # drop table
if 0 != grass.run_command('db.droptable', quiet = True, flags = 'f',
driver = driver, database = database,
- table = table, stderr = nuldev):
+ table = table):
grass.fatal(_("Unable to drop table <%s>") % table)
# create index on key column
def create_index(driver, database, table, index_name, key):
+ if driver == 'dbf':
+ return False
+
grass.info(_("Creating index <%s>...") % index_name)
if 0 != grass.run_command('db.execute', quiet = True,
driver = driver, database = database,
- sql = "create index %s on %s(%s)" % (index_name, table, key)):
+ sql = "create unique index %s on %s(%s)" % (index_name, table, key)):
grass.warning(_("Unable to create index <%s>") % index_name)
def main():
- old_database = substitute_db(options['old_database'])
+ # old connection
+ old_database = options['old_database']
+ old_schema = options['old_schema']
+ # new connection
+ default_connection = grass.db_connection()
if options['new_driver']:
new_driver = options['new_driver']
else:
- new_driver = grass.parse_command('db.connect', flags = 'g')['driver']
- new_database = substitute_db(options['new_database'])
- old_schema = options['old_schema']
- new_schema = options['new_schema']
+ new_driver = default_connection['driver']
+ if options['new_database']:
+ new_database = options['new_database']
+ else:
+ new_database = default_connection['database']
+ if options['new_schema']:
+ new_schema = options['new_schema']
+ else:
+ new_schema = default_connection['schema']
+
+ old_database_subst = None
+ if old_database is not None:
+ old_database_subst = substitute_db(old_database)
mapset = grass.gisenv()['MAPSET']
@@ -165,8 +192,14 @@
grass.debug("DATABASE = '%s' SCHEMA = '%s' TABLE = '%s' ->\n"
" NEW_DATABASE = '%s' NEW_SCHEMA_TABLE = '%s'" % \
(old_database, schema, table, new_database, new_schema_table))
-
- if database == old_database and schema == old_schema:
+ do_reconnect = True
+ if old_database_subst is not None:
+ if database != old_database_subst:
+ do_reconnect = False
+ if schema != old_schema:
+ do_reconnect = False
+
+ if do_reconnect == True:
grass.verbose(_("Reconnecting layer %d...") % layer)
if flags['c']:
@@ -177,27 +210,22 @@
copy_tab(driver, database, schema_table,
new_driver, new_database, new_schema_table)
- # try to build index on key column
- create_index(new_driver, new_database, new_schema_table,
- table + '_' + key, key)
-
+ # drop original table if required
+ if flags['d']:
+ drop_tab(vect, layer, schema_table, driver, substitute_db(database))
+
# reconnect tables (don't use substituted new_database)
+ # NOTE: v.db.connect creates an index on the key column
if 0 != grass.run_command('v.db.connect', flags = 'o', quiet = True, map = vect,
- layer = layer, driver = new_driver, database = options['new_database'],
+ layer = layer, driver = new_driver, database = new_database,
table = new_schema_table, key = key):
- grass.warning(_("Operation canceled"))
-
- # drop original table if required
- if flags['d']:
- drop_tab(driver, database, schema_table)
+ grass.warning(_("Unable to connect table <%s> to vector <%s> on layer <%s>") %
+ (table, vect))
else:
- grass.warning(_("Layer <%d> will not be reconnected, "
+ grass.warning(_("Layer <%d> will not be reconnected because "
"database or schema do not match.") % layer)
-
- grass.info(_("It's recommended to change default DB connection settings. "
- "See 'db.connect' for details."))
-
+
return 0
if __name__ == "__main__":
More information about the grass-commit
mailing list