]> git.ozlabs.org Git - patchwork/blobdiff - apps/patchwork/models.py
Eliminate hashlib requirement
[patchwork] / apps / patchwork / models.py
index f6943fc5296553ff10050b8925fd563175d276e4..eef4b69ba6ca7db46965e827a5854ef871c2a082 100644 (file)
@@ -28,7 +28,6 @@ import re
 import datetime, time
 import string
 import random
-import hashlib
 from email.mime.text import MIMEText
 import email.utils
 
@@ -50,9 +49,6 @@ class Person(models.Model):
     class Meta:
         verbose_name_plural = 'People'
 
-    class Admin:
-        pass
-
 class Project(models.Model):
     linkname = models.CharField(max_length=255, unique=True)
     name = models.CharField(max_length=255, unique=True)
@@ -62,9 +58,6 @@ class Project(models.Model):
     def __str__(self):
         return self.name
 
-    class Admin:
-        pass
-
 class UserProfile(models.Model):
     user = models.ForeignKey(User, unique = True)
     primary_project = models.ForeignKey(Project, null = True)
@@ -125,9 +118,6 @@ class UserProfile(models.Model):
                 person.user = self.user
                 person.save()
 
-    class Admin:
-        pass
-
     def __str__(self):
         return self.name()
 
@@ -138,48 +128,16 @@ 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)
-
-    def create_user(self):
-        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.delete()
-
-        # 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 Admin:
-        pass
-
 class UserPersonConfirmation(models.Model):
     user = models.ForeignKey(User)
     email = models.CharField(max_length = 200)
-    date = models.DateTimeField(default=datetime.datetime.now)
     key = models.CharField(max_length = 32, default = _confirm_key)
+    date = models.DateTimeField(default=datetime.datetime.now)
+    active = models.BooleanField(default = True)
 
     def confirm(self):
+       if not self.active:
+           return
         person = None
         try:
             person = Person.objects.get(email = self.email)
@@ -190,11 +148,7 @@ class UserPersonConfirmation(models.Model):
 
         person.link_to_user(self.user)
         person.save()
-
-
-    class Admin:
-        pass
-
+        self.active = False
 
 class State(models.Model):
     name = models.CharField(max_length = 100)
@@ -207,18 +161,32 @@ class State(models.Model):
     class Meta:
         ordering = ['ordering']
 
-    class Admin:
-        pass
-
 class HashField(models.Field):
     __metaclass__ = models.SubfieldBase
 
     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 self.hashlib:
+            n_bytes = len(hashlib.new(self.algorithm).digest())
+        else:
+            n_bytes = len(self.hash_constructor().digest())
        if settings.DATABASE_ENGINE == 'postgresql':
            return 'bytea'
        elif settings.DATABASE_ENGINE == 'mysql':
@@ -312,9 +280,6 @@ class Patch(models.Model):
         verbose_name_plural = 'Patches'
         ordering = ['date']
 
-    class Admin:
-        pass
-
 class Comment(models.Model):
     patch = models.ForeignKey(Patch)
     msgid = models.CharField(max_length=255, unique = True)
@@ -323,9 +288,6 @@ class Comment(models.Model):
     headers = models.TextField(blank = True)
     content = models.TextField()
 
-    class Admin:
-        pass
-
     class Meta:
         ordering = ['date']
 
@@ -342,9 +304,6 @@ class Bundle(models.Model):
     class Meta:
         unique_together = [('owner', 'name')]
 
-    class Admin:
-        pass
-
     def public_url(self):
         if not self.public:
             return None