Commit 2b8e768b authored by Justin Bronn's avatar Justin Bronn
Browse files

Fixed #9858 -- Added ability to use PostGIS template with GIS test runner via...

Fixed #9858 -- Added ability to use PostGIS template with GIS test runner via `POSTGIS_TEMPLATE` setting.  Thanks to Aryeh Leib Taurog for feature suggestion and initial patch.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@9803 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent d982edff
Loading
Loading
Loading
Loading
+35 −24
Original line number Diff line number Diff line
@@ -39,12 +39,18 @@ def create_lang(db_name, verbosity=1):

def _create_with_cursor(db_name, verbosity=1, autoclobber=False):
    "Creates database with psycopg2 cursor."
    qn = connection.ops.quote_name

    # Constructing the necessary SQL to create the database (the DATABASE_USER
    #  must possess the privileges to create a database)
    create_sql = 'CREATE DATABASE %s' % connection.ops.quote_name(db_name)
    # Constructing the necessary SQL to create the database.
    create_sql = 'CREATE DATABASE %s' % qn(db_name)

    # If there's a template database for PostGIS set, then use it.
    if hasattr(settings, 'POSTGIS_TEMPLATE'):
        create_sql += ' TEMPLATE %s' % qn(settings.POSTGIS_TEMPLATE)

    # The DATABASE_USER must possess the privileges to create a spatial database.
    if settings.DATABASE_USER:
        create_sql += ' OWNER %s' % settings.DATABASE_USER
        create_sql += ' OWNER %s' % qn(settings.DATABASE_USER)

    cursor = connection.cursor()
    connection.creation.set_autocommit()
@@ -52,7 +58,6 @@ def _create_with_cursor(db_name, verbosity=1, autoclobber=False):
    try:
        # Trying to create the database first.
        cursor.execute(create_sql)
        #print create_sql
    except Exception, e:
        # Drop and recreate, if necessary.
        if not autoclobber:
@@ -71,10 +76,15 @@ def _create_with_shell(db_name, verbosity=1, autoclobber=False):
    If no spatial database already exists, then using a cursor will not work.
    Thus, a `createdb` command will be issued through the shell to bootstrap
    creation of the spatial database.
    """

    TODO: Actually allow this method to be used without a spatial database
    in place first.
    """
    # Getting the command-line options for the shell command
    options = get_cmd_options(False)
    if hasattr(settings, 'POSTGIS_TEMPLATE'):
        options += '-T %s ' % settings.POSTGIS_TEMPlATE

    create_cmd = 'createdb -O %s %s%s' % (settings.DATABASE_USER, options, db_name)
    if verbosity >= 1: print create_cmd

@@ -115,6 +125,8 @@ def create_spatial_db(test=False, verbosity=1, autoclobber=False, interactive=Fa
        db_name = get_spatial_db()
        _create_with_shell(db_name, verbosity=verbosity, autoclobber=autoclobber)

    # If a template database is used, then don't need to do any of the following.
    if not hasattr(settings, 'POSTGIS_TEMPLATE'):
        # Creating the db language, does not need to be done on NT platforms
        # since the PostGIS installer enables this capability.
        if os.name != 'nt':
@@ -176,7 +188,6 @@ def load_postgis_sql(db_name, verbosity=1):
    This routine loads up the PostGIS SQL files lwpostgis.sql and
    spatial_ref_sys.sql.
    """

    # Getting the path to the PostGIS SQL
    try:
        # POSTGIS_SQL_PATH may be placed in settings to tell GeoDjango where the