diff --git a/circle/dashboard/forms.py b/circle/dashboard/forms.py index 22f1c3d..b248d68 100644 --- a/circle/dashboard/forms.py +++ b/circle/dashboard/forms.py @@ -888,6 +888,34 @@ class LeaseForm(forms.ModelForm): model = Lease +class VmRenewForm(forms.Form): + + def __init__(self, *args, **kwargs): + choices = kwargs.pop('choices') + default = kwargs.pop('default') + super(VmRenewForm, self).__init__(*args, **kwargs) + + self.fields['lease'] = forms.ModelChoiceField(queryset=choices, + initial=default, + required=True, + label=_('Length')) + if len(choices) < 2: + self.fields['lease'].widget = HiddenInput() + + def clean_size(self): + size_in_bytes = self.cleaned_data.get("size") + if not size_in_bytes.isdigit() and len(size_in_bytes) > 0: + raise forms.ValidationError(_("Invalid format, you can use " + " GB or MB!")) + return size_in_bytes + + @property + def helper(self): + helper = FormHelper(self) + helper.form_tag = False + return helper + + class VmCreateDiskForm(forms.Form): name = forms.CharField(max_length=100, label=_("Name")) size = forms.CharField( diff --git a/circle/dashboard/views.py b/circle/dashboard/views.py index 37173a7..d2c1c64 100644 --- a/circle/dashboard/views.py +++ b/circle/dashboard/views.py @@ -60,7 +60,7 @@ from .forms import ( CircleAuthenticationForm, HostForm, LeaseForm, MyProfileForm, NodeForm, TemplateForm, TraitForm, VmCustomizeForm, GroupCreateForm, UserCreationForm, GroupProfileUpdateForm, UnsubscribeForm, - VmSaveForm, UserKeyForm, + VmSaveForm, UserKeyForm, VmRenewForm, CirclePasswordChangeForm, VmCreateDiskForm, VmDownloadDiskForm, TraitsForm, RawDataForm, GroupPermissionForm ) @@ -818,11 +818,23 @@ class TokenOperationView(OperationView): return user -class VmRenewView(TokenOperationView, VmOperationView): +class VmRenewView(FormOperationMixin, TokenOperationView, VmOperationView): + op = 'renew' icon = 'calendar' effect = 'info' show_in_toolbar = False + form_class = VmRenewForm + + def get_form_kwargs(self): + choices = Lease.get_objects_with_level("user", self.request.user) + default = self.get_op().instance.lease + if default and default not in choices: + choices |= Lease.objects.filter(pk=default.pk) + + val = super(VmRenewView, self).get_form_kwargs() + val.update({'choices': choices, 'default': default}) + return val vm_ops = OrderedDict([