X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/82c38a77943cf91a084429bf10740edffbd0c195..2f9cb34a07fcd98effda2fa900e48c31813f14c8:/apps/forms_builder/forms/utils.py?ds=sidebyside diff --git a/apps/forms_builder/forms/utils.py b/apps/forms_builder/forms/utils.py new file mode 100644 index 00000000..58063c8b --- /dev/null +++ b/apps/forms_builder/forms/utils.py @@ -0,0 +1,63 @@ +from __future__ import unicode_literals + +from django.template.defaultfilters import slugify as django_slugify +from importlib import import_module +from unidecode import unidecode + + +# Timezone support with fallback. +try: + from django.utils.timezone import now +except ImportError: + from datetime import datetime + now = datetime.now + + +def slugify(s): + """ + Translates unicode into closest possible ascii chars before + slugifying. + """ + from future.builtins import str + return django_slugify(unidecode(str(s))) + + +def unique_slug(manager, slug_field, slug): + """ + Ensure slug is unique for the given manager, appending a digit + if it isn't. + """ + i = 0 + while True: + if i > 0: + if i > 1: + slug = slug.rsplit("-", 1)[0] + slug = "%s-%s" % (slug, i) + if not manager.filter(**{slug_field: slug}): + break + i += 1 + return slug + + +def split_choices(choices_string): + """ + Convert a comma separated choices string to a list. + """ + return [x.strip() for x in choices_string.split(",") if x.strip()] + + +def html5_field(name, base): + """ + Takes a Django form field class and returns a subclass of + it with the given name as its input type. + """ + return type(str(""), (base,), {"input_type": name}) + + +def import_attr(path): + """ + Given a a Python dotted path to a variable in a module, + imports the module and returns the variable in it. + """ + module_path, attr_name = path.rsplit(".", 1) + return getattr(import_module(module_path), attr_name)