--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/util.py Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,70 @@
+"""
+A collection of utility routines and classes used by the spatial
+backends.
+"""
+
+def getstatusoutput(cmd):
+ """
+ Executes a shell command on the platform using subprocess.Popen and
+ return a tuple of the status and stdout output.
+ """
+ from subprocess import Popen, PIPE
+ # Set stdout and stderr to PIPE because we want to capture stdout and
+ # prevent stderr from displaying.
+ p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
+ # We use p.communicate() instead of p.wait() to avoid deadlocks if the
+ # output buffers exceed POSIX buffer size.
+ stdout, stderr = p.communicate()
+ return p.returncode, stdout.strip()
+
+def gqn(val):
+ """
+ The geographic quote name function; used for quoting tables and
+ geometries (they use single rather than the double quotes of the
+ backend quotename function).
+ """
+ if isinstance(val, basestring):
+ if isinstance(val, unicode): val = val.encode('ascii')
+ return "'%s'" % val
+ else:
+ return str(val)
+
+class SpatialOperation(object):
+ """
+ Base class for generating spatial SQL.
+ """
+ sql_template = '%(geo_col)s %(operator)s %(geometry)s'
+
+ def __init__(self, function='', operator='', result='', **kwargs):
+ self.function = function
+ self.operator = operator
+ self.result = result
+ self.extra = kwargs
+
+ def as_sql(self, geo_col, geometry='%s'):
+ return self.sql_template % self.params(geo_col, geometry)
+
+ def params(self, geo_col, geometry):
+ params = {'function' : self.function,
+ 'geo_col' : geo_col,
+ 'geometry' : geometry,
+ 'operator' : self.operator,
+ 'result' : self.result,
+ }
+ params.update(self.extra)
+ return params
+
+class SpatialFunction(SpatialOperation):
+ """
+ Base class for generating spatial SQL related to a function.
+ """
+ sql_template = '%(function)s(%(geo_col)s, %(geometry)s)'
+
+ def __init__(self, func, result='', operator='', **kwargs):
+ # Getting the function prefix.
+ default = {'function' : func,
+ 'operator' : operator,
+ 'result' : result
+ }
+ kwargs.update(default)
+ super(SpatialFunction, self).__init__(**kwargs)