commit to CouchDB only when necessary
[mygpo.git] / mygpo / directory / management / commands / update-categories.py
blobe998d80d595f73e90f0c4f7ec677c52ea6dc4186
1 from datetime import datetime
3 from django.core.management.base import BaseCommand
5 from mygpo import settings
6 from mygpo.directory.models import Category
7 from mygpo.data.models import DirectoryEntry
8 from mygpo.utils import progress
9 from mygpo.migrate import use_couchdb
12 class Command(BaseCommand):
14 @use_couchdb()
15 def handle(self, *args, **options):
17 start_time = datetime.utcnow()
19 excluded_tags = getattr(settings, 'DIRECTORY_EXCLUDED_TAGS', [])
21 top_tags = DirectoryEntry.objects.top_tags(None)
22 tag_count = len(top_tags)
23 n=0
24 for tag in top_tags:
25 label = tag.tag.strip()
27 category = Category.for_tag(label)
28 if category:
30 # delete if it has been excluded after it has been created
31 if label in excluded_tags:
32 category.delete()
33 continue
35 if category.updated < start_time:
36 category.weight = tag.entries
37 else:
38 category.weight += tag.entries
40 else:
42 if label in excluded_tags:
43 continue
45 if not label:
46 continue
47 category = Category()
48 category.label = label
49 category.spellings = []
50 category.weight = tag.entries
53 category.updated = start_time
54 category.save()
56 n+=1
57 progress(n, tag_count)