diff gpp/core/models.py @ 1:dbd703f7d63a

Initial import of sg101 stuff from private repository.
author gremmie
date Mon, 06 Apr 2009 02:43:12 +0000
parents
children f3ad863505bf
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gpp/core/models.py	Mon Apr 06 02:43:12 2009 +0000
@@ -0,0 +1,82 @@
+"""
+This file contains the core Models used in gpp.
+The SiteConfig information is cached in a similar manner to django.contrib.sites.
+"""
+
+from django.db import models
+
+SITE_CACHE = {}
+
+class SiteConfigManager(models.Manager):
+   def get_current(self):
+      """
+      Returns the current SiteConfig based on the SITE_ID in the
+      project's settings. The SiteConfig 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_config = SITE_CACHE[sid]
+      except KeyError:
+         current_site_config = self.get(pk = sid)
+         SITE_CACHE[sid] = current_site_config
+      return current_site_config
+
+
+      def clear_cache(self):
+         """Clears the SiteConfig object cache."""
+         global SITE_CACHE
+         SITE_CACHE = {}
+
+
+class SiteConfig(models.Model):
+   """model to represent the site's basic configuration and settings""" 
+   site_slogan = models.CharField(max_length = 128, blank = True)
+   admin_name = models.CharField(max_length = 64)
+   admin_email = models.EmailField()
+   date_created = models.DateField()
+
+   objects = SiteConfigManager()
+
+
+   def __unicode__(self):
+      return u'SiteConfig ' + unicode(self.id)
+
+
+   def delete(self):
+      pk = self.pk
+      super(SiteConfig, self).delete()
+      try:
+         del(SITE_CACHE[pk])
+      except KeyError:
+         pass
+
+
+class DebugLog(models.Model):
+   '''Model to represent debug logs used during development; arbitary text can be stored'''
+
+   LOG_LEVELS = (
+      (0, 'Not Set'),
+      (10, 'Debug'),
+      (20, 'Info'),
+      (30, 'Warning'),
+      (40, 'Error'),
+      (50, 'Critical'),
+   )
+
+   timestamp = models.DateTimeField(auto_now_add = True)
+   level = models.IntegerField(choices = LOG_LEVELS)
+   msg = models.TextField()
+
+   def __unicode__(self):
+      return '%s - %s' % (self.timestamp.strftime('%m/%d/%Y %H:%M:%S'),
+            self.msg[:64])
+
+   class Meta:
+      ordering = ('-timestamp', )