aboutsummaryrefslogtreecommitdiff
path: root/apps/utils
diff options
context:
space:
mode:
Diffstat (limited to 'apps/utils')
-rw-r--r--apps/utils/util.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/apps/utils/util.py b/apps/utils/util.py
index 0c089ee..899b73f 100644
--- a/apps/utils/util.py
+++ b/apps/utils/util.py
@@ -1,5 +1,8 @@
import re
+import random
+import string
from django.apps import apps
+from django.utils.text import slugify
from django.template.loader import render_to_string
from bs4 import BeautifulSoup
import markdown
@@ -82,3 +85,23 @@ def parse_video(s):
if soup.find('video'):
return True
return False
+
+
+def random_string_generator(size=10, chars=string.ascii_lowercase + string.digits):
+ return ''.join(random.choice(chars) for _ in range(size))
+
+
+def unique_slug_generator(instance, new_slug=None):
+ if new_slug is not None:
+ slug = new_slug
+ else:
+ slug = slugify(instance.title)
+ Klass = instance.__class__
+ qs_exists = Klass.objects.filter(slug=slug).exists()
+ if qs_exists:
+ new_slug = "{slug}-{randstr}".format(
+ slug=slug,
+ randstr=random_string_generator(size=4)
+ )
+ return unique_slug_generator(instance, new_slug=new_slug)
+ return slug