This commit is contained in:
Wil Clouser 2010-09-30 14:47:33 -07:00
Родитель ba19a7c063
Коммит 5b501b8ec2
3 изменённых файлов: 29 добавлений и 2 удалений

Просмотреть файл

@ -1,6 +1,7 @@
from datetime import datetime, timedelta
import itertools
from django.db import connections, transaction
from django.db import connections, transaction, IntegrityError
from django.db.models import Q, F
import commonware.log
@ -9,7 +10,7 @@ from celeryutils import task
import multidb
import amo
from amo.utils import chunked
from amo.utils import chunked, slugify
import cronjobs
from .models import Addon
@ -179,3 +180,26 @@ def update_addon_appsupport():
def _update_appsupport(ids, **kw):
from .tasks import update_appsupport
update_appsupport(ids)
@cronjobs.register
def addons_add_slugs():
"""Give slugs to any slugless addons."""
Addon._meta.get_field('modified').auto_now = False
q = Addon.objects.filter(slug=None).order_by('id')
ids = q.values_list('id', flat=True)
task_log.info('%s addons without slugs' % len(ids))
max_length = Addon._meta.get_field('slug').max_length
cnt = itertools.count()
# Chunk it so we don't do huge queries.
for chunk in chunked(ids, 300):
for c in q.no_cache().filter(id__in=chunk):
slug = slugify(c.name)[:max_length]
try:
c.update(slug=slug)
except IntegrityError:
tail = '-%s' % c.id
slug = "%s%s" % (slug[:max_length - len(tail)], tail)
c.update(slug=slug)
task_log.info(u'%s. %s => %s' % (next(cnt), c.name, c.slug))

Просмотреть файл

@ -95,6 +95,7 @@ class Addon(amo.models.ModelBase):
CONTRIB_CHOICES = sorted(amo.CONTRIB_CHOICES.items())
guid = models.CharField(max_length=255, unique=True, null=True)
slug = models.CharField(max_length=30)
name = TranslatedField()
default_locale = models.CharField(max_length=10,
default=settings.LANGUAGE_CODE,

Просмотреть файл

@ -0,0 +1,2 @@
-- This should not default to null (and be UNIQUE) after zamboni takes over all the creation of add-ons
ALTER TABLE addons ADD COLUMN `slug` varchar(30) DEFAULT NULL AFTER `name`, ADD UNIQUE(`slug`);