Command.handle()   D
last analyzed

Complexity

Conditions 8

Size

Total Lines 27

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 8
c 1
b 0
f 0
dl 0
loc 27
rs 4
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