123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- #!/usr/bin/env python
- ############################################################################
- #
- # MODULE: v.db.droptable
- # AUTHOR(S): Markus Neteler
- # Converted to Python by Glynn Clements
- # PURPOSE: interface to db.execute to drop an existing table of given vector map
- # COPYRIGHT: (C) 2005, 2008 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.
- #
- #############################################################################
- #%Module
- #% description: Removes existing attribute table of a vector map.
- #% keyword: vector
- #% keyword: attribute table
- #% keyword: database
- #%End
- #%flag
- #% key: f
- #% description: Force removal (required for actual deletion of table)
- #%end
- #%option G_OPT_V_MAP
- #%end
- #%option G_OPT_DB_TABLE
- #% description: Table name (default: vector map name)
- #%end
- #%option G_OPT_V_FIELD
- #% required : no
- #%end
- import sys
- import os
- import grass.script as grass
- from grass.exceptions import CalledModuleError
- def main():
- force = flags['f']
- map = options['map']
- table = options['table']
- layer = options['layer']
- # do some paranoia tests as well:
- f = grass.vector_layer_db(map, layer)
-
- if not table:
- # Removing table name connected to selected layer
- table = f['table']
- if not table:
- grass.fatal(_("No table assigned to layer <%s>") % layer)
- else:
- # Removing user specified table
- existingtable = f['table']
- if existingtable != table:
- grass.fatal(_("User selected table <%s> but the table <%s> is linked to layer <%s>")
- % (table, existingtable, layer))
- # we use the DB settings selected layer
- database = f['database']
- driver = f['driver']
- grass.message(_("Removing table <%s> linked to layer <%s> of vector map <%s>")
- % (table, layer, map))
- if not force:
- grass.message(_("You must use the -f (force) flag to actually remove the table. Exiting."))
- grass.message(_("Leaving map/table unchanged."))
- sys.exit(0)
- grass.message(_("Dropping table <%s>...") % table)
- try:
- grass.write_command('db.execute', stdin="DROP TABLE %s" % table,
- input='-', database=database, driver=driver)
- except CalledModuleError:
- grass.fatal(_("An error occurred while running db.execute"))
- grass.run_command('v.db.connect', flags = 'd', map = map, layer = layer)
- grass.message(_("Current attribute table link(s):"))
- # silently test first to avoid confusing error messages
- nuldev = file(os.devnull, 'w')
- try:
- grass.run_command('v.db.connect', flags='p', map=map, quiet=True,
- stdout=nuldev, stderr=nuldev)
- except CalledModuleError:
- grass.message(_("(No database links remaining)"))
- else:
- grass.run_command('v.db.connect', flags='p', map=map)
- # write cmd history:
- grass.vector_history(map)
- if __name__ == "__main__":
- options, flags = grass.parser()
- main()
|