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)
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)
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)
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):
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()
-
- class Admin:
- pass
+ else:
+ for person in people:
+ person.user = self.user
+ person.save()
def __str__(self):
return self.name()
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 Admin:
- pass
-
class UserPersonConfirmation(models.Model):
user = models.ForeignKey(User)
email = models.CharField(max_length = 200)
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)
person.save()
self.active = False
-
- class Admin:
- pass
-
-
class State(models.Model):
name = models.CharField(max_length = 100)
ordering = models.IntegerField(unique = True)
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 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
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)
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)
headers = models.TextField(blank = True)
content = models.TextField()
- class Admin:
- pass
-
class Meta:
ordering = ['date']
class Meta:
unique_together = [('owner', 'name')]
- class Admin:
- pass
-
def public_url(self):
if not self.public:
return None