Opened 8 years ago
Last modified 6 years ago
#3211 new defect
Pygrass crash when trying to drop DB table
| Reported by: | lrntct | Owned by: | |
|---|---|---|---|
| Priority: | normal | Milestone: | 7.2.4 |
| Component: | PyGRASS | Version: | svn-releasebranch72 |
| Keywords: | Cc: | ||
| CPU: | x86-64 | Platform: | Linux |
Description
When trying to drop an existing table, PyGRASS crash.
The table is created as follow:
l_junc = Link(layer=LAYER_JUNCTION, name=KWD_SECT_JUNCTION,
table=vect_map.name + TN_JUNCTION, key='cat')
t_junc = l_junc.table()
t_junc.create(COLS_JUNCTION)
When trying to drop the table or rewrite it:
if t_junc.exist():
t_junc.drop(force=True)
t_junc.create(COLS_JUNCTION, overwrite=True)
It gives the following error:
Traceback (most recent call last):
File "./v.in.swmm.py", line 196, in <module>
sys.exit(main())
File "./v.in.swmm.py", line 189, in main
write_vector(output_map, drainage_network)
File "./v.in.swmm.py", line 75, in write_vector
t_junc.drop(force=True)
File "/usr/lib/grass72/etc/python/grass/pygrass/vector/table.py", line 1022, in drop
used = db_table_in_vector(self.name)
File "/usr/lib/grass72/etc/python/grass/script/db.py", line 192, in db_table_in_vector
for f in vector_db(vect, stderr=nuldev).values():
File "/usr/lib/grass72/etc/python/grass/script/vector.py", line 49, in vector_db
**args)
File "/usr/lib/grass72/etc/python/grass/script/core.py", line 461, in read_command
return handle_errors(returncode, stdout, args, kwargs)
File "/usr/lib/grass72/etc/python/grass/script/core.py", line 329, in handle_errors
returncode=returncode)
grass.exceptions.CalledModuleError: Module run None ['v.db.connect', '--q', '-g', 'map=drainage_network@kolkata', 'sep=;'] ended with error
Process ended with non-zero return code 1. See errors in the (error) output.
Change History (7)
comment:3 by , 7 years ago
| Milestone: | 7.2.1 → 7.2.2 |
|---|
comment:5 by , 6 years ago
I tested the example and it is quite strange because inside the pyGRASS code is returning error, but if I run the problematic command just after there is no error...
## -- End pasted text --
WARNING: Vector map <drop_table_test> already exists and will be
overwritten
> /home/lucadelu/compilati/grass_trunk/dist.x86_64-pc-linux-gnu/etc/python/grass/script/vector.py(49)vector_db()
-> s = read_command('v.db.connect', quiet=True, flags='g', map=map, sep=';',
(Pdb) c
WARNING: Coor file of vector map <drop_table_test@user1> is larger than it
should be (18 bytes excess)
Building topology for vector map <drop_table_test@user1>...
Registering primitives...
---------------------------------------------------------------------------
CalledModuleError Traceback (most recent call last)
<ipython-input-1-0ba8b438fe5f> in <module>()
12 table=vect_map.name + 'junc', key='cat')
13 t_junc = l_junc.table()
---> 14 t_junc.create(cols_j, overwrite=True)
/home/lucadelu/compilati/grass_trunk/dist.x86_64-pc-linux-gnu/etc/python/grass/pygrass/vector/table.pyc in create(self, cols, name, overwrite, cursor)
1162 except OperationalError: # OperationalError
1163 if overwrite:
-> 1164 self.drop(force=True)
1165 cur.execute(sql.CREATE_TAB.format(tname=newname,
1166 coldef=coldef))
/home/lucadelu/compilati/grass_trunk/dist.x86_64-pc-linux-gnu/etc/python/grass/pygrass/vector/table.pyc in drop(self, cursor, force)
1029 cur = cursor if cursor else self.conn.cursor()
1030 if self.exist(cursor=cur):
-> 1031 used = db_table_in_vector(self.name)
1032 if used is not None and len(used) > 0 and not force:
1033 print(_("Deleting table <%s> which is attached"
/home/lucadelu/compilati/grass_trunk/dist.x86_64-pc-linux-gnu/etc/python/grass/script/db.pyc in db_table_in_vector(table, mapset)
192 vects = list_strings('vect', mapset=mapset)
193 for vect in vects:
--> 194 for f in vector_db(vect, stderr=nuldev).values():
195 if not f:
196 continue
/home/lucadelu/compilati/grass_trunk/dist.x86_64-pc-linux-gnu/etc/python/grass/script/vector.pyc in vector_db(map, **args)
47 """
48 import pdb; pdb.set_trace()
---> 49 s = read_command('v.db.connect', quiet=True, flags='g', map=map, sep=';',
50 **args)
51 pdb.set_trace()
/home/lucadelu/compilati/grass_trunk/dist.x86_64-pc-linux-gnu/etc/python/grass/script/core.pyc in read_command(*args, **kwargs)
474 if _capture_stderr and returncode:
475 sys.stderr.write(stderr)
--> 476 return handle_errors(returncode, stdout, args, kwargs)
477
478
/home/lucadelu/compilati/grass_trunk/dist.x86_64-pc-linux-gnu/etc/python/grass/script/core.pyc in handle_errors(returncode, result, args, kwargs)
330 args = make_command(*args, **kwargs)
331 raise CalledModuleError(module=None, code=repr(args),
--> 332 returncode=returncode)
333
334 def start_command(prog, flags=b"", overwrite=False, quiet=False,
CalledModuleError: Module run None ['v.db.connect', '--q', '-g', 'map=drop_table_test@user1', 'sep=;'] ended with error
Process ended with non-zero return code 1. See errors in the (error) output.
In [2]: from grass.script import read_command
In [3]: s = read_command('v.db.connect', quiet=True, flags='g', map='drop_table_test@
...: user1', sep=';')
WARNING: Coor file of vector map <drop_table_test@user1> is larger than it
should be (18 bytes excess)
In [4]: s
Out[4]: '1/drop_table_test;drop_table_test;cat;/home/lucadelu/grassdata/nc_spm_08_grass7/user1/sqlite/sqlite.db;sqlite\n'
comment:7 by , 6 years ago
| Milestone: | → 7.2.4 |
|---|
Note:
See TracTickets
for help on using tickets.

Below is a minimum working example:
from grass.pygrass.vector import VectorTopo from grass.pygrass.vector.table import Link cols = [(u'cat', 'INTEGER PRIMARY KEY'), (u'name', 'TEXT')] cols_j = [(u'cat', 'INTEGER PRIMARY KEY'), (u'junction', 'TEXT')] with VectorTopo('drop_table_test', mode='w', tab_cols=cols) as vect_map: l_junc = Link(layer=1, name='link_name', table=vect_map.name + 'junc', key='cat') t_junc = l_junc.table() t_junc.create(cols_j, overwrite=True)Just run two times the script to see the error.
Dropping the table with the command line tool works correctly: