app/django/contrib/gis/db/backend/postgis/management.py
changeset 323 ff1a9aa48cfd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/django/contrib/gis/db/backend/postgis/management.py	Tue Oct 14 16:00:59 2008 +0000
@@ -0,0 +1,54 @@
+"""
+  This utility module is for obtaining information about the PostGIS
+   installation.
+
+  See PostGIS docs at Ch. 6.2.1 for more information on these functions.
+"""
+import re
+
+def _get_postgis_func(func):
+    "Helper routine for calling PostGIS functions and returning their result."
+    from django.db import connection
+    cursor = connection.cursor()
+    cursor.execute('SELECT %s()' % func)
+    row = cursor.fetchone()
+    cursor.close()
+    return row[0]
+
+### PostGIS management functions ###
+def postgis_geos_version():
+    "Returns the version of the GEOS library used with PostGIS."
+    return _get_postgis_func('postgis_geos_version')
+
+def postgis_lib_version():
+    "Returns the version number of the PostGIS library used with PostgreSQL."
+    return _get_postgis_func('postgis_lib_version')
+
+def postgis_proj_version():
+    "Returns the version of the PROJ.4 library used with PostGIS."
+    return _get_postgis_func('postgis_proj_version')
+
+def postgis_version():
+    "Returns PostGIS version number and compile-time options."
+    return _get_postgis_func('postgis_version')
+
+def postgis_full_version():
+    "Returns PostGIS version number and compile-time options."
+    return _get_postgis_func('postgis_full_version')
+
+### Routines for parsing output of management functions. ###
+version_regex = re.compile('^(?P<major>\d)\.(?P<minor1>\d)\.(?P<minor2>\d+)')
+def postgis_version_tuple():
+    "Returns the PostGIS version as a tuple."
+
+    # Getting the PostGIS version
+    version = postgis_lib_version()
+    m = version_regex.match(version)
+    if m:
+        major = int(m.group('major'))
+        minor1 = int(m.group('minor1'))
+        minor2 = int(m.group('minor2'))
+    else:
+        raise Exception('Could not parse PostGIS version string: %s' % version)
+
+    return (version, major, minor1, minor2)