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