25 lines
773 B
Python
25 lines
773 B
Python
from string import digits, ascii_uppercase
|
|
from random import choice, choices
|
|
import shortuuid
|
|
import os
|
|
from webtools import settings
|
|
|
|
|
|
def random_id(model):
|
|
"""Returns a short uuid for the slug of the given model.
|
|
|
|
If a DICT is given in the settings, try to use it to generate
|
|
nicer URLS like:
|
|
"""
|
|
pool = digits + ascii_uppercase
|
|
slug = choice(digits) + choice(ascii_uppercase) + "-" + "".join(choices(pool, k=2))
|
|
if not model.objects.filter(slug=slug):
|
|
return slug
|
|
# fallback to the shortuuid strategy:
|
|
uuid = choice("0123456789") + shortuuid.uuid()
|
|
for i in range(3, len(uuid)):
|
|
potential_uuid = uuid[:i]
|
|
if not model.objects.filter(slug=potential_uuid):
|
|
return potential_uuid
|
|
return uuid
|