Skip to content

Commit

Permalink
Updated get_ogr_db_string in inspectapp tests to support MySQL/Spatia…
Browse files Browse the repository at this point in the history
…lite

The OGRInspectTest.test_time_field does still not succeed with these
databases (even when removing the postgis guard), but at least it's now
possible to setup a datasource.
  • Loading branch information
claudep committed Apr 15, 2013
1 parent 1628dfd commit 53df89c
Showing 1 changed file with 16 additions and 11 deletions.
27 changes: 16 additions & 11 deletions django/contrib/gis/tests/inspectapp/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,32 +93,37 @@ def test_time_field(self):


def get_ogr_db_string():
# Construct the DB string that GDAL will use to inspect the database.
# GDAL will create its own connection to the database, so we re-use the
# connection settings from the Django test. This approach is a bit fragile
# and cannot work on any other database other than PostgreSQL at the moment.
"""
Construct the DB string that GDAL will use to inspect the database.
GDAL will create its own connection to the database, so we re-use the
connection settings from the Django test.
"""
db = connections.databases['default']

# Map from the django backend into the OGR driver name and database identifier
# http://www.gdal.org/ogr/ogr_formats.html
#
# TODO: Support Oracle (OCI), MySQL, and SpatiaLite.
# TODO: Support Oracle (OCI).
drivers = {
'django.contrib.gis.db.backends.postgis': ('PostgreSQL', 'PG'),
'django.contrib.gis.db.backends.postgis': ('PostgreSQL', "PG:dbname='%(db_name)s'", ' '),
'django.contrib.gis.db.backends.mysql': ('MySQL', 'MYSQL:"%(db_name)s"', ','),
'django.contrib.gis.db.backends.spatialite': ('SQLite', '%(db_name)s', '')
}

drv_name, db_str = drivers[db['ENGINE']]
drv_name, db_str, param_sep = drivers[db['ENGINE']]

# Ensure that GDAL library has driver support for the database.
try:
Driver(drv_name)
except:
return None

# SQLite/Spatialite in-memory databases
if db['NAME'] == ":memory:":
return None

# Build the params of the OGR database connection string
# TODO: connection strings are database-dependent, thus if
# we ever test other backends, this will need to change.
params = ["dbname='%s'" % db['NAME']]
params = [db_str % {'db_name': db['NAME']}]
def add(key, template):
value = db.get(key, None)
# Don't add the parameter if it is not in django's settings
Expand All @@ -129,4 +134,4 @@ def add(key, template):
add('USER', "user='%s'")
add('PASSWORD', "password='%s'")

return '%s:%s' % (db_str, ' '.join(params))
return param_sep.join(params)

0 comments on commit 53df89c

Please sign in to comment.