File tree 2 files changed +32
-1
lines changed
2 files changed +32
-1
lines changed Original file line number Diff line number Diff line change @@ -41,8 +41,10 @@ class VersionSlugField(models.CharField):
41
41
Implementation inspired by ``django_extensions.db.fields.AutoSlugField``.
42
42
"""
43
43
44
- allowed_chars = string .lowercase + string .digits + '-._'
44
+ allowed_punctuation = '-._'
45
+ allowed_chars = string .lowercase + string .digits + allowed_punctuation
45
46
placeholder = '-'
47
+ fallback_slug = 'unkown'
46
48
47
49
def __init__ (self , * args , ** kwargs ):
48
50
kwargs .setdefault ('db_index' , True )
@@ -70,6 +72,18 @@ def slugify(self, content):
70
72
slugified += self .placeholder
71
73
else :
72
74
slugified += char
75
+
76
+ # Do not start and end in punctuation.
77
+ slug_length = len (slugified )
78
+ diff = 1
79
+ while diff > 0 :
80
+ for char in self .allowed_punctuation :
81
+ slugified = slugified .strip (char )
82
+ diff = slug_length - len (slugified )
83
+ slug_length = len (slugified )
84
+
85
+ if not slugified :
86
+ return self .fallback_slug
73
87
return slugified
74
88
75
89
def uniquifying_suffix (self , iteration ):
Original file line number Diff line number Diff line change @@ -35,6 +35,23 @@ def test_uppercase(self):
35
35
project = self .pip )
36
36
self .assertEqual (version .slug , 'somestring-charclass' )
37
37
38
+ def test_placeholder_as_name (self ):
39
+ version = Version .objects .create (
40
+ verbose_name = '-' ,
41
+ project = self .pip )
42
+ self .assertEqual (version .slug , 'unkown' )
43
+
44
+ def test_multiple_empty_names (self ):
45
+ version = Version .objects .create (
46
+ verbose_name = '-' ,
47
+ project = self .pip )
48
+ self .assertEqual (version .slug , 'unkown' )
49
+
50
+ version = Version .objects .create (
51
+ verbose_name = '-./.-' ,
52
+ project = self .pip )
53
+ self .assertEqual (version .slug , 'unkown_a' )
54
+
38
55
def test_uniqueness (self ):
39
56
version = Version .objects .create (
40
57
verbose_name = '1!0' ,
You can’t perform that action at this time.
0 commit comments