--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cm/models_base.py Mon Nov 23 15:14:29 2009 +0100
@@ -0,0 +1,118 @@
+from django.contrib.auth.models import User
+from django.db import models
+from django.utils.translation import ugettext as _
+import random
+
+random.seed()
+
+# no 0,1,o,l,O (difficult to differentiate)
+KEY_CHARS = '23456789' + \
+ 'abcdefghijklmnpqrstuvwxyz' + \
+ 'ABCDEFGHIJKLMNPQRSTUVWXYZ'
+
+
+KEY_SIZE = 11
+
+# database column length
+KEY_MAX_SIZE = 20
+
+def generate_key(size=KEY_SIZE):
+ key = ''.join([random.choice(KEY_CHARS) for i in range(size)])
+ return key
+
+class KeyModel(models.Model):
+ key = models.CharField(max_length=KEY_MAX_SIZE, db_index=True, unique=True, blank=False)
+ adminkey = models.CharField(max_length=KEY_MAX_SIZE, db_index=True, unique=True, blank=False)
+
+ class Meta:
+ abstract = True
+
+class PermanentModel(KeyModel):
+ """
+ Permanent model: delete only sets a flag in database
+ """
+ deleted = models.BooleanField(default=False, db_index=True)
+ state = models.CharField(max_length=16, blank=False)
+ class Meta:
+ abstract = True
+
+ def delete(self):
+ self.deleted = True
+ self.save()
+
+ def undelete(self):
+ self.deleted = False
+ self.save()
+
+ def real_delete(self):
+ super(KeyModel, self).delete()
+
+
+class AuthorModel(models.Model):
+ user = models.ForeignKey(User, blank=True, null=True)
+ name = models.CharField(_("Name:"), max_length=100, null=True, blank=True)
+ email = models.CharField(_("Email:"), max_length=100, null=True, blank=True)
+
+ class Meta:
+ abstract = True
+
+ def get_name(self):
+ if self.user:
+ return self.user.username
+ else:
+ return self.name
+
+ def get_email(self):
+ if self.user:
+ return self.user.email
+ else:
+ return self.email
+
+ def set_email_or_user(self, email_or_user):
+ if type(email_or_user) == User:
+ self.user = email_or_user
+ else:
+ self.email = email_or_user
+ self.save()
+
+class KeyManager(models.Manager):
+ """
+ Manager for key-models
+ """
+ def _gen_key(self):
+ # generate unique key
+ key = generate_key()
+ while self.filter(key=key).count():
+ key = generate_key()
+ return key
+
+ def _gen_adminkey(self):
+ # generate unique adminkey
+
+ adminkey = generate_key()
+ while self.filter(adminkey=adminkey).count():
+ adminkey = generate_key()
+ return adminkey
+
+ def create(self, *args, **kwargs):
+ key = self._gen_key()
+ adminkey = self._gen_adminkey()
+
+ obj = models.Manager.create(self, key=key, adminkey=adminkey, *args, **kwargs)
+ return obj
+
+ def update_keys(self, comment):
+ comment.key = self._gen_key()
+ comment.adminkey = self._gen_adminkey()
+
+ def real_all(self):
+ return super(KeyManager, self).get_query_set()
+
+class Manager(KeyManager):
+ """
+ Manager for permanent- and key- models
+ """
+
+ def get_query_set(self):
+ return super(KeyManager, self).get_query_set().filter(deleted=False)
+