[GRASS-SVN] r54598 - grass/trunk/lib/python/pygrass/vector
svn_grass at osgeo.org
svn_grass at osgeo.org
Fri Jan 11 08:39:09 PST 2013
Author: zarch
Date: 2013-01-11 08:39:09 -0800 (Fri, 11 Jan 2013)
New Revision: 54598
Modified:
grass/trunk/lib/python/pygrass/vector/table.py
Log:
Change number => layer, change the execute method of the Table class and add the insert method
Modified: grass/trunk/lib/python/pygrass/vector/table.py
===================================================================
--- grass/trunk/lib/python/pygrass/vector/table.py 2013-01-11 16:38:56 UTC (rev 54597)
+++ grass/trunk/lib/python/pygrass/vector/table.py 2013-01-11 16:39:09 UTC (rev 54598)
@@ -210,6 +210,8 @@
name, ctype = column[1:3]
odict[name] = ctype
self.odict = odict
+ values = ','.join(['?', ] * self.__len__())
+ self.insert_str = sql.INSERT.format(tname=self.tname, values=values)
def sql_descr(self, remove=None):
"""Return a string with description of columns.
@@ -463,7 +465,7 @@
"""Define a Link between vector map and the attributes table.
It is possible to define a Link object or given all the information
- (number, name, table name, key, database, driver): ::
+ (layer, name, table name, key, database, driver): ::
>>> link = Link(1, 'link0', 'boundary_municp_sqlite', 'cat',
... '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite.db', 'sqlite')
@@ -508,15 +510,15 @@
..
"""
- def _get_number(self):
+ def _get_layer(self):
return self.c_fieldinfo.contents.number
- def _set_number(self, number):
+ def _set_layer(self, number):
if number <= 0:
raise TypeError("Number must be positive and greater than 0.")
self.c_fieldinfo.contents.number = number
- number = property(fget=_get_number, fset=_set_number)
+ layer = property(fget=_get_layer, fset=_set_layer)
def _get_name(self):
return self.c_fieldinfo.contents.name
@@ -561,13 +563,13 @@
driver = property(fget=_get_driver, fset=_set_driver)
- def __init__(self, number=None, name=None, table=None, key=None,
+ def __init__(self, layer=1, name=None, table=None, key=None,
database=None, driver=None, c_fieldinfo=None):
if c_fieldinfo is not None:
self.c_fieldinfo = c_fieldinfo
else:
self.c_fieldinfo = ctypes.pointer(libvect.field_info())
- self.number = number
+ self.layer = layer
self.name = name
self.table_name = table
self.key = key
@@ -575,7 +577,7 @@
self.driver = driver
def __repr__(self):
- return "Link(%d, %s, %s)" % (self.number, self.name, self.driver)
+ return "Link(%d, %s, %s)" % (self.layer, self.name, self.driver)
def connection(self):
"""Return a connection object. ::
@@ -635,7 +637,7 @@
... '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite.db',
... 'sqlite')
>>> link.info()
- number: 1
+ layer: 1
name: link0
table: boundary_municp_sqlite
key: cat
@@ -644,7 +646,7 @@
..
"""
- print "number: ", self.number
+ print "layer: ", self.layer
print "name: ", self.name
print "table: ", self.table_name
print "key: ", self.key
@@ -679,28 +681,29 @@
return self.num_dblinks()
def __iter__(self):
- return (self.by_number(ilink)
- for ilink in xrange(1, self.num_dblinks() + 1))
+ return (self.by_index(i)
+ for i in xrange(self.num_dblinks()))
- def __getitem__(self, key):
+ def __getitem__(self, item):
"""
"""
- if isinstance(key, int):
- if key != 0:
- return self.by_number(key)
- else:
- raise TypeError("The index must be != 0.")
+ if isinstance(item, int):
+ return self.by_index(item)
else:
- return self.by_name(key)
+ return self.by_name(item)
def __repr__(self):
return "DBlinks(%r)" % [link for link in self.__iter__()]
- def by_number(self, number):
- c_fieldinfo = libvect.Vect_get_field(self.c_mapinfo, number)
+ def by_index(self, indx):
+ c_fieldinfo = libvect.Vect_get_dblink(self.c_mapinfo, indx)
return Link(c_fieldinfo=c_fieldinfo)
+ def by_layer(self, layer):
+ c_fieldinfo = libvect.Vect_get_field(self.c_mapinfo, layer)
+ return Link(c_fieldinfo=c_fieldinfo)
+
def by_name(self, name):
c_fieldinfo = libvect.Vect_get_field_by_name(self.c_mapinfo, name)
return Link(c_fieldinfo=c_fieldinfo)
@@ -727,7 +730,7 @@
"""
#TODO: check if open in write mode or not.
libvect.Vect_map_add_dblink(self.c_mapinfo,
- link.number, link.name, link.table_name,
+ link.layer, link.name, link.table_name,
link.key, link.database, link.driver)
def remove(self, key):
@@ -841,12 +844,13 @@
..
"""
- if sql_code is not None:
+ try:
+ sqlc = sql_code if sql_code else self.filters.get_sql()
cur = self.conn.cursor()
- return cur.execute(sql_code)
+ return cur.execute(sqlc)
+ except:
+ raise ValueError("The SQL is not correct:\n%r" % sqlc)
- # get the sql from filters
- sql_code = self.filters.get_sql()
- if sql_code is not None:
- cur = self.conn.cursor()
- return cur.execute(sql_code)
\ No newline at end of file
+ def insert(self, values):
+ cur = self.conn.cursor()
+ return cur.execute(self.columns.insert_str, values)
\ No newline at end of file
More information about the grass-commit
mailing list