Ticket #15255: 15255.4.diff
File 15255.4.diff, 5.9 KB (added by , 13 years ago) |
---|
-
django/db/backends/creation.py
261 261 for cache_alias in settings.CACHES: 262 262 cache = get_cache(cache_alias) 263 263 if isinstance(cache, BaseDatabaseCache): 264 from django.db import router 265 if router.allow_syncdb(self.connection.alias, cache.cache_model_class): 266 call_command('createcachetable', cache._table, database=self.connection.alias) 264 call_command('createcachetable', cache._table, database=self.connection.alias) 267 265 268 266 # Get a cursor (even though we don't need one yet). This has 269 267 # the side effect of initializing the test database. -
django/core/management/commands/createcachetable.py
1 1 from optparse import make_option 2 2 3 3 from django.core.management.base import LabelCommand 4 from django.db import connections, transaction, models, DEFAULT_DB_ALIAS 4 from django.core.cache.backends.db import BaseDatabaseCache 5 from django.db import connections, router, transaction, models, DEFAULT_DB_ALIAS 5 6 6 7 class Command(LabelCommand): 7 8 help = "Creates the table needed to use the SQL cache backend." … … 18 19 requires_model_validation = False 19 20 20 21 def handle_label(self, tablename, **options): 21 alias = options.get('database', DEFAULT_DB_ALIAS) 22 connection = connections[alias] 22 db = options.get('database', DEFAULT_DB_ALIAS) 23 cache = BaseDatabaseCache(tablename, {}) 24 if not router.allow_syncdb(db, cache.cache_model_class): 25 return 26 connection = connections[db] 23 27 fields = ( 24 28 # "key" is a reserved word in MySQL, so use "cache_key" instead. 25 29 models.CharField(name='cache_key', max_length=255, unique=True, primary_key=True), … … 50 54 curs.execute("\n".join(full_statement)) 51 55 for statement in index_output: 52 56 curs.execute(statement) 53 transaction.commit_unless_managed(using= alias)57 transaction.commit_unless_managed(using=db) -
django/contrib/gis/db/backends/spatialite/creation.py
33 33 for cache_alias in settings.CACHES: 34 34 cache = get_cache(cache_alias) 35 35 if isinstance(cache, BaseDatabaseCache): 36 from django.db import router 37 if router.allow_syncdb(self.connection.alias, cache.cache_model_class): 38 call_command('createcachetable', cache._table, database=self.connection.alias) 36 call_command('createcachetable', cache._table, database=self.connection.alias) 39 37 # Get a cursor (even though we don't need one yet). This has 40 38 # the side effect of initializing the test database. 41 39 cursor = self.connection.cursor() -
tests/regressiontests/cache/tests.py
14 14 from django.core import management 15 15 from django.core.cache import get_cache, DEFAULT_CACHE_ALIAS 16 16 from django.core.cache.backends.base import CacheKeyWarning, InvalidCacheBackendError 17 from django.db import router 17 18 from django.http import HttpResponse, HttpRequest, QueryDict 18 19 from django.middleware.cache import FetchFromCacheMiddleware, UpdateCacheMiddleware, CacheMiddleware 19 from django.test import RequestFactory 20 from django.test import RequestFactory, TestCase 20 21 from django.test.utils import get_warnings_state, restore_warnings_state 21 22 from django.utils import translation 22 23 from django.utils import unittest … … 758 759 self.cache = get_cache('db://%s?max_entries=30&cull_frequency=0' % self._table_name) 759 760 self.perform_cull_test(50, 18) 760 761 762 class DBCacheRouter(object): 763 """A router that puts the cache table on the 'other' database.""" 761 764 765 def db_for_read(self, model, **hints): 766 if model._meta.app_label == 'django_cache': 767 return 'other' 768 769 def db_for_write(self, model, **hints): 770 if model._meta.app_label == 'django_cache': 771 return 'other' 772 773 def allow_syncdb(self, db, model): 774 if model._meta.app_label == 'django_cache': 775 return db == 'other' 776 777 778 class CreateCacheTableForDBCacheTests(TestCase): 779 multi_db = True 780 781 def test_createcachetable_observes_database_router(self): 782 old_routers = router.routers 783 try: 784 router.routers = [DBCacheRouter()] 785 # cache table should not be created on 'default' 786 with self.assertNumQueries(0, using='default'): 787 management.call_command('createcachetable', 'cache_table', 788 database='default', 789 verbosity=0, interactive=False) 790 # cache table should be created on 'other' 791 # one query is used to create the table and another one the index 792 with self.assertNumQueries(2, using='other'): 793 management.call_command('createcachetable', 'cache_table', 794 database='other', 795 verbosity=0, interactive=False) 796 finally: 797 router.routers = old_routers 798 799 762 800 class LocMemCacheTests(unittest.TestCase, BaseCacheTests): 763 801 backend_name = 'django.core.cache.backends.locmem.LocMemCache' 764 802