Ticket #15255: 15255.5.diff
File 15255.5.diff, 5.9 KB (added by , 13 years ago) |
---|
-
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 … … 763 764 self.cache = get_cache('db://%s?max_entries=30&cull_frequency=0' % self._table_name) 764 765 self.perform_cull_test(50, 18) 765 766 767 class DBCacheRouter(object): 768 """A router that puts the cache table on the 'other' database.""" 766 769 770 def db_for_read(self, model, **hints): 771 if model._meta.app_label == 'django_cache': 772 return 'other' 773 774 def db_for_write(self, model, **hints): 775 if model._meta.app_label == 'django_cache': 776 return 'other' 777 778 def allow_syncdb(self, db, model): 779 if model._meta.app_label == 'django_cache': 780 return db == 'other' 781 782 783 class CreateCacheTableForDBCacheTests(TestCase): 784 multi_db = True 785 786 def test_createcachetable_observes_database_router(self): 787 old_routers = router.routers 788 try: 789 router.routers = [DBCacheRouter()] 790 # cache table should not be created on 'default' 791 with self.assertNumQueries(0, using='default'): 792 management.call_command('createcachetable', 'cache_table', 793 database='default', 794 verbosity=0, interactive=False) 795 # cache table should be created on 'other' 796 # one query is used to create the table and another one the index 797 with self.assertNumQueries(2, using='other'): 798 management.call_command('createcachetable', 'cache_table', 799 database='other', 800 verbosity=0, interactive=False) 801 finally: 802 router.routers = old_routers 803 804 767 805 class LocMemCacheTests(unittest.TestCase, BaseCacheTests): 768 806 backend_name = 'django.core.cache.backends.locmem.LocMemCache' 769 807 -
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()