~canonical-django/canonical-django/project-template

« back to all changes in this revision

Viewing changes to trunk/python-packages/django/contrib/gis/db/backend/postgis/management.py

  • Committer: Matthew Nuzum
  • Date: 2008-11-13 05:46:03 UTC
  • Revision ID: matthew.nuzum@canonical.com-20081113054603-v0kvr6z6xyexvqt3
adding to version control

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
"""
 
2
  This utility module is for obtaining information about the PostGIS
 
3
   installation.
 
4
 
 
5
  See PostGIS docs at Ch. 6.2.1 for more information on these functions.
 
6
"""
 
7
import re
 
8
 
 
9
def _get_postgis_func(func):
 
10
    "Helper routine for calling PostGIS functions and returning their result."
 
11
    from django.db import connection
 
12
    cursor = connection.cursor()
 
13
    cursor.execute('SELECT %s()' % func)
 
14
    row = cursor.fetchone()
 
15
    cursor.close()
 
16
    return row[0]
 
17
 
 
18
### PostGIS management functions ###
 
19
def postgis_geos_version():
 
20
    "Returns the version of the GEOS library used with PostGIS."
 
21
    return _get_postgis_func('postgis_geos_version')
 
22
 
 
23
def postgis_lib_version():
 
24
    "Returns the version number of the PostGIS library used with PostgreSQL."
 
25
    return _get_postgis_func('postgis_lib_version')
 
26
 
 
27
def postgis_proj_version():
 
28
    "Returns the version of the PROJ.4 library used with PostGIS."
 
29
    return _get_postgis_func('postgis_proj_version')
 
30
 
 
31
def postgis_version():
 
32
    "Returns PostGIS version number and compile-time options."
 
33
    return _get_postgis_func('postgis_version')
 
34
 
 
35
def postgis_full_version():
 
36
    "Returns PostGIS version number and compile-time options."
 
37
    return _get_postgis_func('postgis_full_version')
 
38
 
 
39
### Routines for parsing output of management functions. ###
 
40
version_regex = re.compile('^(?P<major>\d)\.(?P<minor1>\d)\.(?P<minor2>\d+)')
 
41
def postgis_version_tuple():
 
42
    "Returns the PostGIS version as a tuple."
 
43
 
 
44
    # Getting the PostGIS version
 
45
    version = postgis_lib_version()
 
46
    m = version_regex.match(version)
 
47
    if m:
 
48
        major = int(m.group('major'))
 
49
        minor1 = int(m.group('minor1'))
 
50
        minor2 = int(m.group('minor2'))
 
51
    else:
 
52
        raise Exception('Could not parse PostGIS version string: %s' % version)
 
53
 
 
54
    return (version, major, minor1, minor2)