Make generate_slug assign a slug in any case

generate_slug could assign "none" as slug. Make sure it assigns a unique
slug in any case. We now try based on:

a) existing slug values
b) media.title
c) media.id
d) random garbage

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
This commit is contained in:
Sebastian Spaeth 2013-01-09 12:40:18 +01:00
parent 4ca0755ab6
commit 66d9f1b2a0

View File

@ -56,15 +56,22 @@ class MediaEntryMixin(object):
# (db.models -> db.mixin -> db.util -> db.models)
from mediagoblin.db.util import check_media_slug_used
self.slug = slugify(self.title)
#Is already a slug assigned? Check if it is valid
if self.slug:
self.slug = slugify(self.slug)
elif self.title:
#assign slug based on title
self.slug = slugify(self.title)
elif self.id:
# Does the object already have an ID? (after adding to the session)
self.slug = unicode(self.id)
else:
# Everything else failed, just use random garbage
self.slug = unicode(uuid4())[1:4]
duplicate = check_media_slug_used(self.uploader, self.slug, self.id)
if duplicate:
if self.id is not None:
self.slug = u"%s-%s" % (self.id, self.slug)
else:
self.slug = None
while check_media_slug_used(self.uploader, self.slug, self.id):
# add garbage till it's unique
self.slug = self.slug + unicode(uuid4())[1:4]
@property
def description_html(self):