Source code for bits.general

"""
General utilities for django.

"""

###############################################################################
## Imports
###############################################################################
from django.conf import settings
from django.contrib.auth.models import Group, SiteProfileNotAvailable
from django.core.cache import cache
from django.db.models import get_model
from django.db.models.signals import post_delete, post_save
from django.dispatch import receiver, Signal
from django.shortcuts import _get_queryset


###############################################################################
## Utils
###############################################################################
[docs]def get_or_none(klass, *args, **kwargs): """ Uses get() to return an object or None if the object does not exist. klass may be a Model, Manager, or QuerySet object. All other passed arguments and keyword arguments are used in the get() query. Note: Like with get(), a MultipleObjectsReturned will be raised if more than one object is found. From django-annoying: https://bitbucket.org/offline/django-annoying """ queryset = _get_queryset(klass) try: return queryset.get(*args, **kwargs) except queryset.model.DoesNotExist: return None
[docs]def get_profile_model(): """ Return the model class for the currently-active user profile model, as defined by the ``AUTH_PROFILE_MODULE`` setting. :return: The model that is used as profile. """ if (not hasattr(settings, 'AUTH_PROFILE_MODULE') or not settings.AUTH_PROFILE_MODULE): raise SiteProfileNotAvailable profile_mod = get_model(*settings.AUTH_PROFILE_MODULE.split('.')) if profile_mod is None: raise SiteProfileNotAvailable return profile_mod
def get_group(name): """ Return group with given name, if it exists. Check cache first. """ group = cache.get('bits.general.group_%s' % name) if not group: group = Group.objects.get(name=name) cache.set('bits.general.group_%s' % name, group, 365 * 24 * 60 * 60) return group @receiver(post_delete, sender=Group, dispatch_uid='bits.general.group_post_delete') @receiver(post_save, sender=Group, dispatch_uid='bits.general.group_post_save') def group_post_save_delete(sender, instance, created, **kwargs): cache.delete('bits.general.group_%s' % instance.name) ############################################################################### ## Signals ############################################################################### after_syncdb = Signal() """To send after post_syncdb is done. Currently via custom command"""

Project Versions

This Page