--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backend/spatialite/creation.py Wed Jan 20 00:34:04 2010 +0100
@@ -0,0 +1,61 @@
+import os
+from django.conf import settings
+from django.core.management import call_command
+from django.db import connection
+
+def spatialite_init_file():
+ # SPATIALITE_SQL may be placed in settings to tell
+ # GeoDjango to use a specific user-supplied file.
+ return getattr(settings, 'SPATIALITE_SQL', 'init_spatialite-2.3.sql')
+
+def create_test_spatial_db(verbosity=1, autoclobber=False, interactive=False):
+ "Creates a spatial database based on the settings."
+
+ # Making sure we're using PostgreSQL and psycopg2
+ if settings.DATABASE_ENGINE != 'sqlite3':
+ raise Exception('SpatiaLite database creation only supported on sqlite3 platform.')
+
+ # Getting the test database name using the SQLite backend's
+ # `_create_test_db`. Unless `TEST_DATABASE_NAME` is defined,
+ # it returns ":memory:".
+ db_name = connection.creation._create_test_db(verbosity, autoclobber)
+
+ # Closing out the current connection to the database set in
+ # originally in the settings. This makes it so `initialize_spatialite`
+ # function will be run on the connection for the _test_ database instead.
+ connection.close()
+
+ # Point to the new database
+ settings.DATABASE_NAME = db_name
+ connection.settings_dict["DATABASE_NAME"] = db_name
+ can_rollback = connection.creation._rollback_works()
+ settings.DATABASE_SUPPORTS_TRANSACTIONS = can_rollback
+ connection.settings_dict["DATABASE_SUPPORTS_TRANSACTIONS"] = can_rollback
+
+ # Finally, loading up the SpatiaLite SQL file.
+ load_spatialite_sql(db_name, verbosity=verbosity)
+
+ if verbosity >= 1:
+ print 'Creation of spatial database %s successful.' % db_name
+
+ # Syncing the database
+ call_command('syncdb', verbosity=verbosity, interactive=interactive)
+
+def load_spatialite_sql(db_name, verbosity=1):
+ """
+ This routine loads up the SpatiaLite SQL file.
+ """
+ # Getting the location of the SpatiaLite SQL file, and confirming
+ # it exists.
+ spatialite_sql = spatialite_init_file()
+ if not os.path.isfile(spatialite_sql):
+ raise Exception('Could not find the SpatiaLite initialization SQL file: %s' % spatialite_sql)
+
+ # Opening up the SpatiaLite SQL initialization file and executing
+ # as a script.
+ sql_fh = open(spatialite_sql, 'r')
+ try:
+ cur = connection.cursor()
+ cur.executescript(sql_fh.read())
+ finally:
+ sql_fh.close()