]> git.ozlabs.org Git - patchwork/blobdiff - apps/patchwork/models.py
Support postgresql_psycopg2 DATABASE_ENGINE
[patchwork] / apps / patchwork / models.py
index e3fc9c7e1f7b068e0bb176c8d83ac35fb8d1873a..11457d76bdf9a0e14524b425dbc483b41d8f083c 100644 (file)
@@ -28,9 +28,15 @@ import re
 import datetime, time
 import string
 import random
-import hashlib
-from email.mime.text import MIMEText
-import email.utils
+
+try:
+    from email.mime.text import MIMEText
+    import email.utils
+except ImportError:
+    # Python 2.4 compatibility
+    from email.MIMEText import MIMEText
+    import email.Utils
+    email.utils = email.Utils
 
 class Person(models.Model):
     email = models.CharField(max_length=255, unique = True)
@@ -73,8 +79,8 @@ class UserProfile(models.Model):
 
     def name(self):
         if self.user.first_name or self.user.last_name:
-           names = filter(bool, [self.user.first_name, self.user.last_name])
-           return ' '.join(names)
+            names = filter(bool, [self.user.first_name, self.user.last_name])
+            return ' '.join(names)
         return self.user.username
 
     def contributor_projects(self):
@@ -108,16 +114,16 @@ class UserProfile(models.Model):
         return qs
 
     def save(self):
-       super(UserProfile, self).save()
-       people = Person.objects.filter(email = self.user.email)
-       if not people:
-           person = Person(email = self.user.email,
-                   name = self.name(), user = self.user)
+        super(UserProfile, self).save()
+        people = Person.objects.filter(email = self.user.email)
+        if not people:
+            person = Person(email = self.user.email,
+                    name = self.name(), user = self.user)
             person.save()
-       else:
-           for person in people:
-                person.user = self.user
-                person.save()
+        else:
+            for person in people:
+                 person.user = self.user
+                 person.save()
 
     def __str__(self):
         return self.name()
@@ -129,43 +135,6 @@ def _confirm_key():
         str += random.choice(allowedchars)
     return str;
 
-class RegistrationRequest(models.Model):
-    username = models.CharField(max_length = 30, unique = True)
-    first_name = models.CharField(max_length = 50)
-    last_name = models.CharField(max_length = 50)
-    email = models.CharField(max_length = 200, unique = True)
-    password = models.CharField(max_length = 200)
-    key = models.CharField(max_length = 32, default = _confirm_key)
-    date = models.DateTimeField(default=datetime.datetime.now)
-    active = models.BooleanField(default = True)
-
-    def create_user(self):
-       if not self.active:
-           return
-        user = User.objects.create_user(self.username,
-                self.email, self.password)
-        user.first_name = self.first_name
-        user.last_name = self.last_name
-        user.save()
-        profile = UserProfile(user = user)
-        profile.save()
-        self.active = False
-       self.save()
-
-        # link a person to this user. if none exists, create.
-        person = None
-        try:
-            person = Person.objects.get(email = user.email)
-        except Exception:
-            pass
-        if not person:
-            person = Person(email = user.email)
-
-        person.link_to_user(user)
-        person.save()
-
-        return user
-
 class UserPersonConfirmation(models.Model):
     user = models.ForeignKey(User)
     email = models.CharField(max_length = 200)
@@ -174,8 +143,8 @@ class UserPersonConfirmation(models.Model):
     active = models.BooleanField(default = True)
 
     def confirm(self):
-       if not self.active:
-           return
+        if not self.active:
+            return
         person = None
         try:
             person = Person.objects.get(email = self.email)
@@ -204,14 +173,34 @@ class HashField(models.Field):
 
     def __init__(self, algorithm = 'sha1', *args, **kwargs):
         self.algorithm = algorithm
+        try:
+            import hashlib
+            self.hashlib = True
+        except ImportError:
+            self.hashlib = False
+            if algorithm == 'sha1':
+                import sha
+                self.hash_constructor = sha.new
+            elif algorithm == 'md5':
+                import md5
+                self.hash_constructor = md5.new
+            else:
+                raise NameError("Unknown algorithm '%s'" % algorithm)
+            
         super(HashField, self).__init__(*args, **kwargs)
 
     def db_type(self):
-        n_bytes = len(hashlib.new(self.algorithm).digest())
-       if settings.DATABASE_ENGINE == 'postgresql':
-           return 'bytea'
-       elif settings.DATABASE_ENGINE == 'mysql':
-           return 'binary(%d)' % n_bytes
+        if self.hashlib:
+            n_bytes = len(hashlib.new(self.algorithm).digest())
+        else:
+            n_bytes = len(self.hash_constructor().digest())
+        if settings.DATABASE_ENGINE.startswith('postgresql'):
+            return 'bytea'
+        elif settings.DATABASE_ENGINE == 'mysql':
+            return 'binary(%d)' % n_bytes
+        else:
+            raise Exception("Unknown database engine '%s'" % \
+                            settings.DATABASE_ENGINE)
 
     def to_python(self, value):
         return value
@@ -240,10 +229,10 @@ class Patch(models.Model):
         return self.name
 
     def comments(self):
-       return Comment.objects.filter(patch = self)
+        return Comment.objects.filter(patch = self)
 
     def save(self):
-       try:
+        try:
             s = self.state
         except:
             self.state = State.objects.get(ordering =  0)