app/django/contrib/sites/models.py
changeset 54 03e267d67478
child 323 ff1a9aa48cfd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/django/contrib/sites/models.py	Fri Jul 18 18:22:23 2008 +0000
@@ -0,0 +1,65 @@
+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',)
+    class Admin:
+        list_display = ('domain', 'name')
+        search_fields = ('domain', 'name')
+
+    def __unicode__(self):
+        return self.domain
+
+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.')