Select Git revision
functions.py
utils.py 1.56 KiB
"""Various utilities."""
from string import printable
from django.contrib.auth.models import Group
def modify_fields(**kwargs):
"""Modify the fields of an inherited model.
Caution: will affect the inherited model's fields too. It is preferable to
restrict the usage to cases when the inherited model is abstract.
Example
-------
class Foo(models.Model):
health = models.IntegerField()
@modify_fields(health={'blank': True})
class Bar(models.Model):
pass
"""
def wrap(cls):
for field, prop_dict in kwargs.items():
for prop, val in prop_dict.items():
setattr(cls._meta.get_field(field), prop, val)
return cls
return wrap
def setdefault(d, attr, default):
"""Set an attribute of an object if not present.
Equivalent of dict's setdefault() but for objects.
Typically used for configuring app settings.
"""
if not hasattr(d, attr):
setattr(d, attr, default)
return d
def is_in_group(user, group_name):
"""Return True if user is in group."""
return (Group.objects.get(name=group_name)
.user_set
.filter(id=user.id)
.exists())
def group_exists(group_name):
"""Return True if group exists."""
return Group.objects.filter(name=group_name).exists()
def printable_only(s, with_spaces=False):
"""Remove non-printable characters from a string."""
filtered = ''.join(c for c in filter(lambda x: x in printable, s))
if not with_spaces:
return filtered.replace(' ', '')
return filtered