From: Mike Bayer Date: Fri, 17 Aug 2012 01:45:55 +0000 (-0400) Subject: - update this to work with the latest postgis X-Git-Tag: rel_0_7_9~43 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6a57b3a806b3d2a86dab733bc89fb3ca03f84ac4;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - update this to work with the latest postgis - fix the userdefinedtype issue. --- diff --git a/examples/postgis/postgis.py b/examples/postgis/postgis.py index 247265e17c..1d930c5a17 100644 --- a/examples/postgis/postgis.py +++ b/examples/postgis/postgis.py @@ -1,6 +1,6 @@ from sqlalchemy.orm.interfaces import AttributeExtension from sqlalchemy.orm.properties import ColumnProperty -from sqlalchemy.types import TypeEngine +from sqlalchemy.types import UserDefinedType from sqlalchemy.sql import expression from sqlalchemy import event @@ -11,11 +11,11 @@ class GisElement(object): @property def wkt(self): - return func.AsText(literal(self, Geometry)) + return func.ST_AsText(literal(self, Geometry)) @property def wkb(self): - return func.AsBinary(literal(self, Geometry)) + return func.ST_AsBinary(literal(self, Geometry)) def __str__(self): return self.desc @@ -40,24 +40,25 @@ class TextualGisElement(GisElement, expression.Function): def __init__(self, desc, srid=-1): assert isinstance(desc, basestring) self.desc = desc - expression.Function.__init__(self, "GeomFromText", desc, srid) + expression.Function.__init__(self, "ST_GeomFromText", desc, srid) # SQL datatypes. -class Geometry(TypeEngine): +class Geometry(UserDefinedType): """Base PostGIS Geometry column type. Converts bind/result values to/from a PersistentGisElement. """ - name = 'GEOMETRY' - def __init__(self, dimension=None, srid=-1): self.dimension = dimension self.srid = srid + def get_col_spec(self): + return "GEOMETRY" + def bind_processor(self, dialect): def process(value): if value is not None: @@ -137,10 +138,9 @@ class GISDDL(object): elif event == 'after-create': table.columns = self._stack.pop() - for c in table.c: 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': table.columns = self._stack.pop()