From: Sebastian Spaeth Date: Wed, 9 Jan 2013 11:40:18 +0000 (+0100) Subject: Make generate_slug assign a slug in any case X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=66d9f1b2a041eeb3dd592b807ad06c25acb746c7;p=mediagoblin.git 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 --- diff --git a/mediagoblin/db/mixin.py b/mediagoblin/db/mixin.py index 001b7826..daeda8ce 100644 --- a/mediagoblin/db/mixin.py +++ b/mediagoblin/db/mixin.py @@ -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) - - duplicate = check_media_slug_used(self.uploader, self.slug, self.id) + #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] - 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):