summaryrefslogtreecommitdiffstats
path: root/webapp/django/contrib/sites/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/django/contrib/sites/models.py')
-rw-r--r--webapp/django/contrib/sites/models.py71
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.')