1
|
|
|
from django.conf import settings |
2
|
|
|
from django.core.management.base import BaseCommand |
3
|
|
|
from django.apps import apps |
4
|
|
|
|
5
|
|
|
from ...api import invalidate |
6
|
|
|
|
7
|
|
|
|
8
|
|
|
class Command(BaseCommand): |
9
|
|
|
help = 'Invalidates the cache keys set by django-cachalot.' |
10
|
|
|
|
11
|
|
|
def add_arguments(self, parser): |
12
|
|
|
parser.add_argument('app_label[.model_name]', nargs='*') |
13
|
|
|
parser.add_argument( |
14
|
|
|
'-c', '--cache', action='store', dest='cache_alias', |
15
|
|
|
choices=list(settings.CACHES.keys()), |
16
|
|
|
help='Cache alias from the CACHES setting.') |
17
|
|
|
parser.add_argument( |
18
|
|
|
'-d', '--db', action='store', dest='db_alias', |
19
|
|
|
choices=list(settings.DATABASES.keys()), |
20
|
|
|
help='Database alias from the DATABASES setting.') |
21
|
|
|
|
22
|
|
|
def handle(self, *args, **options): |
23
|
|
|
cache_alias = options['cache_alias'] |
24
|
|
|
db_alias = options['db_alias'] |
25
|
|
|
verbosity = int(options['verbosity']) |
26
|
|
|
labels = options['app_label[.model_name]'] |
27
|
|
|
|
28
|
|
|
models = [] |
29
|
|
|
for label in labels: |
30
|
|
|
try: |
31
|
|
|
models.extend(apps.get_app_config(label).get_models()) |
32
|
|
|
except LookupError: |
33
|
|
|
app_label = '.'.join(label.split('.')[:-1]) |
34
|
|
|
model_name = label.split('.')[-1] |
35
|
|
|
models.append(apps.get_model(app_label, model_name)) |
36
|
|
|
|
37
|
|
|
cache_str = '' if cache_alias is None else "on cache '%s'" % cache_alias |
38
|
|
|
db_str = '' if db_alias is None else "for database '%s'" % db_alias |
39
|
|
|
keys_str = 'keys for %s models' % len(models) if labels else 'all keys' |
40
|
|
|
|
41
|
|
|
if verbosity > 0: |
42
|
|
|
self.stdout.write(' '.join(filter(bool, ['Invalidating', keys_str, |
43
|
|
|
cache_str, db_str])) |
44
|
|
|
+ '...') |
45
|
|
|
|
46
|
|
|
invalidate(*models, cache_alias=cache_alias, db_alias=db_alias) |
47
|
|
|
if verbosity > 0: |
48
|
|
|
self.stdout.write('Cache keys successfully invalidated.') |
49
|
|
|
|