]> git.ozlabs.org Git - patchwork/blobdiff - apps/patchwork/models.py
Add patch_get_by_hash method to XMLRPC interface
[patchwork] / apps / patchwork / models.py
index d8a9b3ff5c77cdecce3206ec8ecf11e24e73a9aa..b4161c73e9044d963788013bc8317535414d7f19 100644 (file)
@@ -22,6 +22,7 @@ from django.contrib.auth.models import User
 from django.core.urlresolvers import reverse
 from django.contrib.sites.models import Site
 from django.conf import settings
+from patchwork.parser import hash_patch
 import django.oldforms as oldforms
 
 import re
@@ -79,8 +80,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):
@@ -114,16 +115,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.link_to_user(self.user)
+                 person.save()
 
     def __str__(self):
         return self.name()
@@ -143,8 +144,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)
@@ -191,13 +192,17 @@ class HashField(models.Field):
 
     def db_type(self):
         if self.hashlib:
+            import 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':
-           return 'binary(%d)' % n_bytes
+        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
@@ -220,21 +225,23 @@ class Patch(models.Model):
     headers = models.TextField(blank = True)
     content = models.TextField()
     commit_ref = models.CharField(max_length=255, null = True, blank = True)
-    hash = HashField()
+    hash = HashField(null = True)
 
     def __str__(self):
         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)
-        if hash is None:
-            print "no hash"
+
+        if self.hash is None:
+            self.hash = hash_patch(self.content).digest()
+
         super(Patch, self).save()
 
     def is_editable(self, user):