108 lines
4.2 KiB
Python
108 lines
4.2 KiB
Python
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
from django.forms import ValidationError
|
|
from django.urls import reverse
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from horizon import exceptions
|
|
from horizon import forms
|
|
from horizon import messages
|
|
|
|
from openstack_dashboard.api import cinder
|
|
|
|
|
|
class CreateGroupType(forms.SelfHandlingForm):
|
|
name = forms.CharField(max_length=255, label=_("Name"))
|
|
group_type_description = forms.CharField(
|
|
max_length=255,
|
|
widget=forms.Textarea(attrs={'rows': 4}),
|
|
label=_("Description"),
|
|
required=False)
|
|
is_public = forms.BooleanField(
|
|
label=_("Public"),
|
|
initial=True,
|
|
required=False,
|
|
help_text=_("By default, group type is created as public. To "
|
|
"create a private group type, uncheck this field."))
|
|
|
|
def clean_name(self):
|
|
cleaned_name = self.cleaned_data['name']
|
|
if cleaned_name.isspace():
|
|
raise ValidationError(_('Group type name can not be empty.'))
|
|
|
|
return cleaned_name
|
|
|
|
def handle(self, request, data):
|
|
try:
|
|
group_type = cinder.group_type_create(
|
|
request,
|
|
data['name'],
|
|
data['group_type_description'],
|
|
data['is_public'])
|
|
messages.success(request, _('Successfully created group type: %s')
|
|
% data['name'])
|
|
return group_type
|
|
except Exception as e:
|
|
if getattr(e, 'code', None) == 409:
|
|
msg = _('Group type name "%s" already '
|
|
'exists.') % data['name']
|
|
self._errors['name'] = self.error_class([msg])
|
|
else:
|
|
redirect = reverse("horizon:admin:group_types:index")
|
|
exceptions.handle(request,
|
|
_('Unable to create group type.'),
|
|
redirect=redirect)
|
|
|
|
|
|
class EditGroupType(forms.SelfHandlingForm):
|
|
name = forms.CharField(max_length=255,
|
|
label=_("Name"))
|
|
description = forms.CharField(max_length=255,
|
|
widget=forms.Textarea(attrs={'rows': 4}),
|
|
label=_("Description"),
|
|
required=False)
|
|
is_public = forms.BooleanField(label=_("Public"), required=False,
|
|
help_text=_(
|
|
"To make group type private, uncheck "
|
|
"this field."))
|
|
|
|
def clean_name(self):
|
|
cleaned_name = self.cleaned_data['name']
|
|
if cleaned_name.isspace():
|
|
msg = _('New name cannot be empty.')
|
|
self._errors['name'] = self.error_class([msg])
|
|
|
|
return cleaned_name
|
|
|
|
def handle(self, request, data):
|
|
group_type_id = self.initial['id']
|
|
try:
|
|
cinder.group_type_update(request,
|
|
group_type_id,
|
|
data['name'],
|
|
data['description'],
|
|
data['is_public'])
|
|
message = _('Successfully updated group type.')
|
|
messages.success(request, message)
|
|
return True
|
|
except Exception as ex:
|
|
redirect = reverse("horizon:admin:group_types:index")
|
|
if ex.code == 409:
|
|
error_message = _('New name conflicts with another '
|
|
'group type.')
|
|
else:
|
|
error_message = _('Unable to update group type.')
|
|
|
|
exceptions.handle(request, error_message,
|
|
redirect=redirect)
|