app/django/contrib/gis/db/backend/postgis/management.py
author Pawel Solyga <Pawel.Solyga@gmail.com>
Sun, 19 Oct 2008 13:06:20 +0000
changeset 388 699b206b64b7
parent 323 ff1a9aa48cfd
permissions -rw-r--r--
Add pylint configuration file (pylintrc) and do_pylint.sh script which runs pylint checkers on Melange code using pylintrc file as config. do_pylint.sh as default shows additional information like reports, TODOs, code similarities and unused imports, but you can run it in silent mode (--silent) which disables all of that. The only problem with unused imports in pylint right now is that it doesn't work in the situation described in last example at http://code.google.com/p/soc/wiki/PythonStyleGuide#Packages, so sometimes we get unused import soc when we actually shouldn't. However this can be fixed by writing pylint plugins (our own checkers) in future. Patch by: Pawel Solyga Review by: to-be-reviewed

"""
  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)