55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
"""
|
|
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)
|