diff options
Diffstat (limited to 'webapp/django/contrib/sites/models.py')
-rw-r--r-- | webapp/django/contrib/sites/models.py | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/webapp/django/contrib/sites/models.py b/webapp/django/contrib/sites/models.py new file mode 100644 index 0000000000..c44e5ce11f --- /dev/null +++ b/webapp/django/contrib/sites/models.py @@ -0,0 +1,71 @@ +from django.db import models +from django.utils.translation import ugettext_lazy as _ + +SITE_CACHE = {} + +class SiteManager(models.Manager): + def get_current(self): + """ + Returns the current ``Site`` based on the SITE_ID in the + project's settings. The ``Site`` object is cached the first + time it's retrieved from the database. + """ + from django.conf import settings + try: + sid = settings.SITE_ID + except AttributeError: + from django.core.exceptions import ImproperlyConfigured + raise ImproperlyConfigured("You're using the Django \"sites framework\" without having set the SITE_ID setting. Create a site in your database and set the SITE_ID setting to fix this error.") + try: + current_site = SITE_CACHE[sid] + except KeyError: + current_site = self.get(pk=sid) + SITE_CACHE[sid] = current_site + return current_site + + def clear_cache(self): + """Clears the ``Site`` object cache.""" + global SITE_CACHE + SITE_CACHE = {} + +class Site(models.Model): + domain = models.CharField(_('domain name'), max_length=100) + name = models.CharField(_('display name'), max_length=50) + objects = SiteManager() + + class Meta: + db_table = 'django_site' + verbose_name = _('site') + verbose_name_plural = _('sites') + ordering = ('domain',) + + def __unicode__(self): + return self.domain + + def delete(self): + pk = self.pk + super(Site, self).delete() + try: + del(SITE_CACHE[pk]) + except KeyError: + pass + +class RequestSite(object): + """ + A class that shares the primary interface of Site (i.e., it has + ``domain`` and ``name`` attributes) but gets its data from a Django + HttpRequest object rather than from a database. + + The save() and delete() methods raise NotImplementedError. + """ + def __init__(self, request): + self.domain = self.name = request.get_host() + + def __unicode__(self): + return self.domain + + def save(self): + raise NotImplementedError('RequestSite cannot be saved.') + + def delete(self): + raise NotImplementedError('RequestSite cannot be deleted.') |