summaryrefslogtreecommitdiff
path: root/ishtar_common/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/utils.py')
-rw-r--r--ishtar_common/utils.py67
1 files changed, 67 insertions, 0 deletions
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index f1e2e4b96..c6a4032f0 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -17,7 +17,9 @@
# See the file COPYING for details.
+import datetime
from functools import wraps
+from itertools import chain
import hashlib
import random
@@ -31,6 +33,24 @@ from django.utils.translation import ugettext_lazy as _, ugettext
from django.template.defaultfilters import slugify
+class BColors:
+ """
+ Bash colors. Don't forget to finish your colored string with ENDC.
+ """
+ HEADER = '\033[95m'
+ OKBLUE = '\033[94m'
+ OKGREEN = '\033[92m'
+ WARNING = '\033[93m'
+ FAIL = '\033[91m'
+ ENDC = '\033[0m'
+ BOLD = '\033[1m'
+ UNDERLINE = '\033[4m'
+
+
+def get_current_year():
+ return datetime.datetime.now().year
+
+
def get_cache(cls, extra_args=[]):
cache_key = u"{}-{}-{}".format(
settings.PROJECT_SLUG, cls._meta.app_label, cls.__name__)
@@ -222,3 +242,50 @@ def post_save_point(sender, **kwargs):
instance.skip_history_when_saving = True
instance.save()
return
+
+
+def create_slug(model, name, slug_attr='slug', max_length=100):
+ base_slug = slugify(name)
+ slug = base_slug[:max_length]
+ final_slug = None
+ idx = 1
+ while not final_slug:
+ if slug and not model.objects.filter(**{slug_attr:slug}).exists():
+ final_slug = slug
+ break
+ slug = base_slug[:(max_length - 1 - len(str(idx)))] + "-" + str(idx)
+ idx += 1
+ return final_slug
+
+
+def get_all_field_names(model):
+ return list(set(chain.from_iterable(
+ (field.name, field.attname) if hasattr(field, 'attname') else (
+ field.name,)
+ for field in model._meta.get_fields()
+ if not (field.many_to_one and field.related_model is None)
+ )))
+
+
+def get_all_related_m2m_objects_with_model(model):
+ return [
+ (f, f.model if f.model != model else None)
+ for f in model._meta.get_fields(include_hidden=True)
+ if f.many_to_many and f.auto_created
+ ]
+
+
+def get_all_related_many_to_many_objects(model):
+ return [
+ f for f in model._meta.get_fields(include_hidden=True)
+ if f.many_to_many and f.auto_created
+ ]
+
+
+def get_all_related_objects(model):
+ return [
+ f for f in model._meta.get_fields()
+ if (f.one_to_many or f.one_to_one)
+ and f.auto_created and not f.concrete
+ ]
+