from django.contrib.auth.models import User
-from django import newforms as forms
+from django import forms
-from patchwork.models import RegistrationRequest, Patch, State, Bundle, \
- UserProfile
+from patchwork.models import Patch, State, Bundle, UserProfile
-class RegisterForm(forms.ModelForm):
- password = forms.CharField(widget = forms.PasswordInput)
- email = forms.EmailField(max_length = 200)
+class RegistrationForm(forms.Form):
+ first_name = forms.CharField(max_length = 30, required = False)
+ last_name = forms.CharField(max_length = 30, required = False)
+ username = forms.RegexField(regex = r'^\w+$', max_length=30,
+ label=u'Username')
+ email = forms.EmailField(max_length=100, label=u'Email address')
+ password = forms.CharField(widget=forms.PasswordInput(),
+ label='Password')
- class Meta:
- model = RegistrationRequest
- exclude = ['key', 'active', 'date']
+ def clean_username(self):
+ value = self.cleaned_data['username']
+ try:
+ user = User.objects.get(username__iexact = value)
+ except User.DoesNotExist:
+ return self.cleaned_data['username']
+ raise forms.ValidationError('This username is already taken. ' + \
+ 'Please choose another.')
def clean_email(self):
value = self.cleaned_data['email']
try:
- User.objects.get(email = value)
- raise forms.ValidationError(('The email address %s has ' +
- 'has already been registered') % value)
+ user = User.objects.get(email__iexact = value)
except User.DoesNotExist:
- pass
- try:
- RegistrationRequest.objects.get(email = value)
- raise forms.ValidationError(('The email address %s has ' +
- 'has already been registered') % value)
- except RegistrationRequest.DoesNotExist:
- pass
- return value
+ return self.cleaned_data['email']
+ raise forms.ValidationError('This email address is already in use ' + \
+ 'for the account "%s".\n' % user.username)
- def clean_username(self):
- value = self.cleaned_data['username']
- try:
- User.objects.get(username = value)
- raise forms.ValidationError(('The username %s has ' +
- 'has already been registered') % value)
- except User.DoesNotExist:
- pass
- try:
- RegistrationRequest.objects.get(username = value)
- raise forms.ValidationError(('The username %s has ' +
- 'has already been registered') % value)
- except RegistrationRequest.DoesNotExist:
- pass
- return value
+ def clean(self):
+ return self.cleaned_data
class LoginForm(forms.Form):
username = forms.CharField(max_length = 30)
password = forms.CharField(widget = forms.PasswordInput)
class BundleForm(forms.ModelForm):
+ name = forms.RegexField(regex = r'^[^/]+$', max_length=50, label=u'Name',
+ error_messages = {'invalid': 'Bundle names can\'t contain slashes'})
+
class Meta:
model = Bundle
fields = ['name', 'public']
-class CreateBundleForm(forms.ModelForm):
+class CreateBundleForm(BundleForm):
def __init__(self, *args, **kwargs):
super(CreateBundleForm, self).__init__(*args, **kwargs)
% name)
return name
+class DeleteBundleForm(forms.Form):
+ name = 'deletebundleform'
+ form_name = forms.CharField(initial = name, widget = forms.HiddenInput)
+ bundle_id = forms.IntegerField(widget = forms.HiddenInput)
+
class DelegateField(forms.ModelChoiceField):
def __init__(self, project, *args, **kwargs):
- queryset = User.objects.filter(userprofile__in = \
+ queryset = User.objects.filter(userprofile__in = \
UserProfile.objects \
.filter(maintainer_projects = project) \
.values('pk').query)
class PatchForm(forms.ModelForm):
def __init__(self, instance = None, project = None, *args, **kwargs):
- if (not project) and instance:
+ if (not project) and instance:
project = instance.project
if not project:
- raise Exception("meep")
+ raise Exception("meep")
super(PatchForm, self).__init__(instance = instance, *args, **kwargs)
- self.fields['delegate'] = DelegateField(project)
+ self.fields['delegate'] = DelegateField(project, required = False)
class Meta:
model = Patch
class OptionalDelegateField(DelegateField):
no_change_choice = ('*', 'no change')
+ to_field_name = None
def __init__(self, no_change_choice = None, *args, **kwargs):
self.filter = None
class OptionalModelChoiceField(forms.ModelChoiceField):
no_change_choice = ('*', 'no change')
+ to_field_name = None
def __init__(self, no_change_choice = None, *args, **kwargs):
self.filter = None
def is_no_change(self, value):
return value == self.no_change_choice[0]
-class MultiplePatchForm(PatchForm):
+ # TODO: Check whether it'd be worth to use a TypedChoiceField here; I
+ # think that'd allow us to get rid of the custom valid_value() and
+ # to_python() methods.
+ def valid_value(self, value):
+ if value in [v1 for (v1, v2) in self.choices]:
+ return True
+ return False
+
+ def to_python(self, value):
+ if value is None or self.is_no_change(value):
+ return self.no_change_choice[0]
+ elif value == 'True':
+ return True
+ elif value == 'False':
+ return False
+ else:
+ raise ValueError('Unknown value: %s' % value)
+
+class MultiplePatchForm(forms.Form):
+ action = 'update'
state = OptionalModelChoiceField(queryset = State.objects.all())
archived = MultipleBooleanField()
def __init__(self, project, *args, **kwargs):
- super(MultiplePatchForm, self).__init__(project = project,
- *args, **kwargs)
- self.fields['delegate'] = OptionalDelegateField(project = project)
+ super(MultiplePatchForm, self).__init__(*args, **kwargs)
+ self.fields['delegate'] = OptionalDelegateField(project = project,
+ required = False)
def save(self, instance, commit = True):
opts = instance.__class__._meta
raise ValueError("The %s could not be changed because the data "
"didn't validate." % opts.object_name)
data = self.cleaned_data
- # remove 'no change fields' from the data
+ # Update the instance
for f in opts.fields:
if not f.name in data:
continue
- field = getattr(self, f.name, None)
+ field = self.fields.get(f.name, None)
if not field:
continue
if field.is_no_change(data[f.name]):
- del data[f.name]
+ continue
- return forms.save_instance(self, instance,
- self._meta.fields, 'changed', commit)
+ setattr(instance, f.name, data[f.name])
-class UserPersonLinkForm(forms.Form):
+ if commit:
+ instance.save()
+ return instance
+
+class EmailForm(forms.Form):
email = forms.EmailField(max_length = 200)
+
+UserPersonLinkForm = EmailForm
+OptinoutRequestForm = EmailForm