Commits

Lucian Brănescu-Mihăilă  committed eb7734b

Fix resolving of first slug collision.

  • Participants
  • Parent commits 735cbfe

Comments (0)

Files changed (2)

         Django's sqlite backend uses the re module for regexes anyway, since
         sqlite has no such native support.
 
-        Writing this function, I could really have used 
+        Writing this function, I could really have used filter(slug__iregex
         '''
 
         potential = slugify(title)
 
-        slugs = (i.slug for i in cls.objects\
-                                    .filter(slug__startswith=potential))
+        slugs = [i.slug for i in cls.objects\
+                                    .filter(slug__startswith=potential)]
+
+        if not potential in slugs:
+            return potential
 
         similar = re.compile(r'^{0}-(\d+)$'.format(potential))
 
-        has_potential = False
-        collisions = []
-        for i in slugs:
-            if i == potential:
-                has_potential = True
+        slug_matches = (similar.match(i) for i in slugs)
+        collision_numbers = [int(i.groups()[0]) for i in slug_matches if i]
 
-            r = similar.match(i)
-            if r:
-                collisions.append(int(r.groups()[0]))
+        if len(collision_numbers) == 0:
+            next_number = 2
+        else:
+            next_number = max(collision_numbers) + 1
         
-        if not has_potential or len(collisions) == 0:
-            return potential
-        
-        return '{0}-{1}'.format(potential, max(collisions) + 1)
+        return '{0}-{1}'.format(potential, next_number)
 
     def save(self, *args, **kwargs):
         if not self.slug:
 # anywhere, either
 SITE_ID = 0
 
-GAE_SETTINGS_MODULES = {
+GAE_SETTINGS_MODULES = (
     'gae_comments_settings',
-}
+)