mirror of
https://github.com/django/django.git
synced 2025-10-25 22:56:12 +00:00
Fixed #16408 -- Fixed conversion of dates, and other problems with the SpatiaLite backend.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16749 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -3,7 +3,6 @@ from django.conf import settings
|
||||
from django.core.cache import get_cache
|
||||
from django.core.cache.backends.db import BaseDatabaseCache
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.core.management import call_command
|
||||
from django.db.backends.sqlite3.creation import DatabaseCreation
|
||||
|
||||
class SpatiaLiteCreation(DatabaseCreation):
|
||||
@@ -16,26 +15,65 @@ class SpatiaLiteCreation(DatabaseCreation):
|
||||
This method is overloaded to load up the SpatiaLite initialization
|
||||
SQL prior to calling the `syncdb` command.
|
||||
"""
|
||||
if verbosity >= 1:
|
||||
print "Creating test database '%s'..." % self.connection.alias
|
||||
# Don't import django.core.management if it isn't needed.
|
||||
from django.core.management import call_command
|
||||
|
||||
test_database_name = self._create_test_db(verbosity, autoclobber)
|
||||
test_database_name = self._get_test_db_name()
|
||||
|
||||
if verbosity >= 1:
|
||||
test_db_repr = ''
|
||||
if verbosity >= 2:
|
||||
test_db_repr = " ('%s')" % test_database_name
|
||||
print "Creating test database for alias '%s'%s..." % (self.connection.alias, test_db_repr)
|
||||
|
||||
self._create_test_db(verbosity, autoclobber)
|
||||
|
||||
self.connection.close()
|
||||
|
||||
self.connection.settings_dict["NAME"] = test_database_name
|
||||
|
||||
# Confirm the feature set of the test database
|
||||
self.connection.features.confirm()
|
||||
|
||||
# Need to load the SpatiaLite initialization SQL before running `syncdb`.
|
||||
self.load_spatialite_sql()
|
||||
call_command('syncdb', verbosity=verbosity, interactive=False, database=self.connection.alias)
|
||||
|
||||
# Report syncdb messages at one level lower than that requested.
|
||||
# This ensures we don't get flooded with messages during testing
|
||||
# (unless you really ask to be flooded)
|
||||
call_command('syncdb',
|
||||
verbosity=max(verbosity - 1, 0),
|
||||
interactive=False,
|
||||
database=self.connection.alias,
|
||||
load_initial_data=False)
|
||||
|
||||
# We need to then do a flush to ensure that any data installed by
|
||||
# custom SQL has been removed. The only test data should come from
|
||||
# test fixtures, or autogenerated from post_syncdb triggers.
|
||||
# This has the side effect of loading initial data (which was
|
||||
# intentionally skipped in the syncdb).
|
||||
call_command('flush',
|
||||
verbosity=max(verbosity - 1, 0),
|
||||
interactive=False,
|
||||
database=self.connection.alias)
|
||||
|
||||
# One effect of calling syncdb followed by flush is that the id of the
|
||||
# default site may or may not be 1, depending on how the sequence was
|
||||
# reset. If the sites app is loaded, then we coerce it.
|
||||
from django.db.models import get_model
|
||||
Site = get_model('sites', 'Site')
|
||||
if Site is not None and Site.objects.using(self.connection.alias).count() == 1:
|
||||
Site.objects.using(self.connection.alias).update(id=settings.SITE_ID)
|
||||
|
||||
from django.core.cache import get_cache
|
||||
from django.core.cache.backends.db import BaseDatabaseCache
|
||||
for cache_alias in settings.CACHES:
|
||||
cache = get_cache(cache_alias)
|
||||
if isinstance(cache, BaseDatabaseCache):
|
||||
from django.db import router
|
||||
if router.allow_syncdb(self.connection.alias, cache.cache_model_class):
|
||||
call_command('createcachetable', cache._table, database=self.connection.alias)
|
||||
|
||||
# Get a cursor (even though we don't need one yet). This has
|
||||
# the side effect of initializing the test database.
|
||||
cursor = self.connection.cursor()
|
||||
|
||||
Reference in New Issue
Block a user