- update this to work with the latest postgis

- fix the userdefinedtype issue.
This commit is contained in:
Mike Bayer 2012-08-16 21:45:55 -04:00
parent dcd9f64453
commit 6a57b3a806
1 changed files with 9 additions and 9 deletions

View File

@ -1,6 +1,6 @@
from sqlalchemy.orm.interfaces import AttributeExtension from sqlalchemy.orm.interfaces import AttributeExtension
from sqlalchemy.orm.properties import ColumnProperty from sqlalchemy.orm.properties import ColumnProperty
from sqlalchemy.types import TypeEngine from sqlalchemy.types import UserDefinedType
from sqlalchemy.sql import expression from sqlalchemy.sql import expression
from sqlalchemy import event from sqlalchemy import event
@ -11,11 +11,11 @@ class GisElement(object):
@property @property
def wkt(self): def wkt(self):
return func.AsText(literal(self, Geometry)) return func.ST_AsText(literal(self, Geometry))
@property @property
def wkb(self): def wkb(self):
return func.AsBinary(literal(self, Geometry)) return func.ST_AsBinary(literal(self, Geometry))
def __str__(self): def __str__(self):
return self.desc return self.desc
@ -40,24 +40,25 @@ class TextualGisElement(GisElement, expression.Function):
def __init__(self, desc, srid=-1): def __init__(self, desc, srid=-1):
assert isinstance(desc, basestring) assert isinstance(desc, basestring)
self.desc = desc self.desc = desc
expression.Function.__init__(self, "GeomFromText", desc, srid) expression.Function.__init__(self, "ST_GeomFromText", desc, srid)
# SQL datatypes. # SQL datatypes.
class Geometry(TypeEngine): class Geometry(UserDefinedType):
"""Base PostGIS Geometry column type. """Base PostGIS Geometry column type.
Converts bind/result values to/from a PersistentGisElement. Converts bind/result values to/from a PersistentGisElement.
""" """
name = 'GEOMETRY'
def __init__(self, dimension=None, srid=-1): def __init__(self, dimension=None, srid=-1):
self.dimension = dimension self.dimension = dimension
self.srid = srid self.srid = srid
def get_col_spec(self):
return "GEOMETRY"
def bind_processor(self, dialect): def bind_processor(self, dialect):
def process(value): def process(value):
if value is not None: if value is not None:
@ -137,10 +138,9 @@ class GISDDL(object):
elif event == 'after-create': elif event == 'after-create':
table.columns = self._stack.pop() table.columns = self._stack.pop()
for c in table.c: for c in table.c:
if isinstance(c.type, Geometry): if isinstance(c.type, Geometry):
bind.execute(select([func.AddGeometryColumn(table.name, c.name, c.type.srid, c.type.name, c.type.dimension)], autocommit=True)) bind.execute(select([func.AddGeometryColumn(table.name, c.name, c.type.srid, c.type.get_col_spec(), c.type.dimension)], autocommit=True))
elif event == 'after-drop': elif event == 'after-drop':
table.columns = self._stack.pop() table.columns = self._stack.pop()