Browse Source

Use slugify for get_automatic_codename

SimonBoulier 7 years ago
parent
commit
605b5b8390
1 changed files with 3 additions and 13 deletions
  1. 3 13
      coin/members/models.py

+ 3 - 13
coin/members/models.py

@@ -15,6 +15,7 @@ from django.conf import settings
 from django.core.validators import RegexValidator
 from django.core.exceptions import ValidationError
 from django.utils import timezone
+from django.utils.text import slugify
 from ldapdb.models.fields import CharField, IntegerField, ListField
 
 from coin.offers.models import Offer, OfferSubscription
@@ -552,22 +553,11 @@ def get_automatic_codename(perm):
     """
     Calcule le codename automatiquement en fonction du name.
     """
-    if perm.name:
-        codename = perm.name
-    else:
-        raise Exception('Il n\'y a pas sufissement d\'informations pour déterminer un codename automatiquement')
 
-    # Remplacer ou enlever les caractères non ascii
-    codename = unicodedata.normalize('NFD', codename)\
-        .encode('ascii', 'ignore')
-    # Enlever ponctuation (sauf _-.) et espace
-    punctuation = ('!"#$%&\'()*+,/:;<=>?@[\\]^`{|}~').encode('ascii')
-    codename = codename.translate(None, punctuation)
-    # En minuscule
-    codename = codename.lower()
+    # Convertit en ASCII. Convertit les espaces en tirets. Enlève les caractères qui ne sont ni alphanumériques, ni soulignements, ni tirets. Convertit en minuscules. Les espaces en début et fin de chaîne sont aussi enlevés
+    codename = slugify(perm.name)
     # Maximum de 30 char
     codename = codename[:30]
-    codename = codename.strip().replace(' ', '-')
 
     # Recherche dans les membres existants un codename identique
     perm = Permission.objects.filter(codename=codename)