diff -r 000000000000 -r 0d40e90630ef web/lib/django/contrib/sites/models.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/django/contrib/sites/models.py Wed Jan 20 00:34:04 2010 +0100 @@ -0,0 +1,77 @@ +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 save(self, *args, **kwargs): + super(Site, self).save(*args, **kwargs) + # Cached information will likely be incorrect now. + if self.id in SITE_CACHE: + del SITE_CACHE[self.id] + + 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, force_insert=False, force_update=False): + raise NotImplementedError('RequestSite cannot be saved.') + + def delete(self): + raise NotImplementedError('RequestSite cannot be deleted.')