Merge "Add description field in the user table"
This commit is contained in:
commit
fbad227f33
@ -312,7 +312,7 @@ def user_list(request, project=None, domain=None, group=None, filters=None):
|
||||
|
||||
|
||||
def user_create(request, name=None, email=None, password=None, project=None,
|
||||
enabled=None, domain=None):
|
||||
enabled=None, domain=None, description=None):
|
||||
manager = keystoneclient(request, admin=True).users
|
||||
try:
|
||||
if VERSIONS.active < 3:
|
||||
@ -321,7 +321,7 @@ def user_create(request, name=None, email=None, password=None, project=None,
|
||||
else:
|
||||
return manager.create(name, password=password, email=email,
|
||||
project=project, enabled=enabled,
|
||||
domain=domain)
|
||||
domain=domain, description=description)
|
||||
except keystone_exceptions.Conflict:
|
||||
raise exceptions.Conflict()
|
||||
|
||||
|
@ -34,7 +34,6 @@ from horizon.utils import validators
|
||||
|
||||
from openstack_dashboard import api
|
||||
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
PROJECT_REQUIRED = api.keystone.VERSIONS.active < 3
|
||||
|
||||
@ -95,6 +94,10 @@ class CreateUserForm(PasswordMixin, BaseUserForm):
|
||||
required=False,
|
||||
widget=forms.HiddenInput())
|
||||
name = forms.CharField(max_length=255, label=_("User Name"))
|
||||
description = forms.CharField(widget=forms.widgets.Textarea(
|
||||
attrs={'rows': 4}),
|
||||
label=_("Description"),
|
||||
required=False)
|
||||
email = forms.EmailField(
|
||||
label=_("Email"),
|
||||
required=False)
|
||||
@ -108,7 +111,8 @@ class CreateUserForm(PasswordMixin, BaseUserForm):
|
||||
roles = kwargs.pop('roles')
|
||||
super(CreateUserForm, self).__init__(*args, **kwargs)
|
||||
# Reorder form fields from multiple inheritance
|
||||
ordering = ["domain_id", "domain_name", "name", "email", "password",
|
||||
ordering = ["domain_id", "domain_name", "name",
|
||||
"description", "email", "password",
|
||||
"confirm_password", "project", "role_id"]
|
||||
# Starting from 1.7 Django uses OrderedDict for fields and keyOrder
|
||||
# no longer works for it
|
||||
@ -125,6 +129,9 @@ class CreateUserForm(PasswordMixin, BaseUserForm):
|
||||
readonlyInput = forms.TextInput(attrs={'readonly': 'readonly'})
|
||||
self.fields["domain_id"].widget = readonlyInput
|
||||
self.fields["domain_name"].widget = readonlyInput
|
||||
# For keystone V2.0, hide description field
|
||||
else:
|
||||
self.fields["description"].widget = forms.HiddenInput()
|
||||
|
||||
# We have to protect the entire "data" dict because it contains the
|
||||
# password and confirm_password strings.
|
||||
@ -133,11 +140,13 @@ class CreateUserForm(PasswordMixin, BaseUserForm):
|
||||
domain = api.keystone.get_default_domain(self.request)
|
||||
try:
|
||||
LOG.info('Creating user with name "%s"' % data['name'])
|
||||
desc = data["description"]
|
||||
if "email" in data:
|
||||
data['email'] = data['email'] or None
|
||||
new_user = api.keystone.user_create(request,
|
||||
name=data['name'],
|
||||
email=data['email'],
|
||||
description=desc,
|
||||
password=data['password'],
|
||||
project=data['project'],
|
||||
enabled=True,
|
||||
@ -179,6 +188,10 @@ class UpdateUserForm(BaseUserForm):
|
||||
widget=forms.HiddenInput())
|
||||
id = forms.CharField(label=_("ID"), widget=forms.HiddenInput)
|
||||
name = forms.CharField(max_length=255, label=_("User Name"))
|
||||
description = forms.CharField(widget=forms.widgets.Textarea(
|
||||
attrs={'rows': 4}),
|
||||
label=_("Description"),
|
||||
required=False)
|
||||
email = forms.EmailField(
|
||||
label=_("Email"),
|
||||
required=False)
|
||||
@ -196,6 +209,9 @@ class UpdateUserForm(BaseUserForm):
|
||||
readonlyInput = forms.TextInput(attrs={'readonly': 'readonly'})
|
||||
self.fields["domain_id"].widget = readonlyInput
|
||||
self.fields["domain_name"].widget = readonlyInput
|
||||
# For keystone V2.0, hide description field
|
||||
else:
|
||||
self.fields["description"].widget = forms.HiddenInput()
|
||||
|
||||
def handle(self, request, data):
|
||||
user = data.pop('id')
|
||||
|
@ -24,6 +24,7 @@ from openstack_dashboard import policy
|
||||
|
||||
ENABLE = 0
|
||||
DISABLE = 1
|
||||
KEYSTONE_V2_ENABLED = api.keystone.VERSIONS.active < 3
|
||||
|
||||
|
||||
class CreateUserLink(tables.LinkAction):
|
||||
@ -196,6 +197,7 @@ class UpdateCell(tables.UpdateAction):
|
||||
request,
|
||||
user_obj,
|
||||
name=user_obj.name,
|
||||
description=user_obj.description,
|
||||
email=user_obj.email,
|
||||
enabled=user_obj.enabled,
|
||||
project=user_obj.project_id,
|
||||
@ -221,6 +223,13 @@ class UsersTable(tables.DataTable):
|
||||
verbose_name=_('User Name'),
|
||||
form_field=forms.CharField(),
|
||||
update_action=UpdateCell)
|
||||
description = tables.Column(lambda obj: getattr(obj, 'description', None),
|
||||
verbose_name=_('Description'),
|
||||
hidden=KEYSTONE_V2_ENABLED,
|
||||
form_field=forms.CharField(
|
||||
widget=forms.Textarea(attrs={'rows': 4}),
|
||||
required=False),
|
||||
update_action=UpdateCell)
|
||||
email = tables.Column('email', verbose_name=_('Email'),
|
||||
form_field=forms.CharField(required=False),
|
||||
update_action=UpdateCell,
|
||||
|
@ -98,6 +98,7 @@ class UsersViewTests(test.BaseAdminViewTests):
|
||||
.AndReturn([self.tenants.list(), False])
|
||||
api.keystone.user_create(IgnoreArg(),
|
||||
name=user.name,
|
||||
description=user.description,
|
||||
email=user.email,
|
||||
password=user.password,
|
||||
project=self.tenant.id,
|
||||
@ -114,6 +115,7 @@ class UsersViewTests(test.BaseAdminViewTests):
|
||||
formData = {'method': 'CreateUserForm',
|
||||
'domain_id': domain_id,
|
||||
'name': user.name,
|
||||
'description': user.description,
|
||||
'email': user.email,
|
||||
'password': user.password,
|
||||
'project': self.tenant.id,
|
||||
@ -150,6 +152,7 @@ class UsersViewTests(test.BaseAdminViewTests):
|
||||
.AndReturn([self.tenants.list(), False])
|
||||
api.keystone.user_create(IgnoreArg(),
|
||||
name=user.name,
|
||||
description=user.description,
|
||||
email=user.email,
|
||||
password=user.password,
|
||||
project=self.tenant.id,
|
||||
@ -165,6 +168,7 @@ class UsersViewTests(test.BaseAdminViewTests):
|
||||
formData = {'method': 'CreateUserForm',
|
||||
'domain_id': domain_id,
|
||||
'name': user.name,
|
||||
'description': user.description,
|
||||
'email': "",
|
||||
'password': user.password,
|
||||
'project': self.tenant.id,
|
||||
@ -288,7 +292,6 @@ class UsersViewTests(test.BaseAdminViewTests):
|
||||
user = self.users.get(id="1")
|
||||
domain_id = user.domain_id
|
||||
domain = self.domains.get(id=domain_id)
|
||||
email = getattr(user, 'email', '')
|
||||
|
||||
api.keystone.user_get(IsA(http.HttpRequest), '1',
|
||||
admin=True).AndReturn(user)
|
||||
@ -300,16 +303,18 @@ class UsersViewTests(test.BaseAdminViewTests):
|
||||
.AndReturn([self.tenants.list(), False])
|
||||
api.keystone.user_update(IsA(http.HttpRequest),
|
||||
user.id,
|
||||
email=email,
|
||||
name=u'test_user',
|
||||
project=self.tenant.id).AndReturn(None)
|
||||
email=user.email,
|
||||
name=user.name,
|
||||
project=self.tenant.id,
|
||||
description=user.description).AndReturn(None)
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
||||
formData = {'method': 'UpdateUserForm',
|
||||
'id': user.id,
|
||||
'name': user.name,
|
||||
'email': email,
|
||||
'description': user.description,
|
||||
'email': user.email,
|
||||
'project': self.tenant.id}
|
||||
|
||||
res = self.client.post(USER_UPDATE_URL, formData)
|
||||
@ -339,13 +344,15 @@ class UsersViewTests(test.BaseAdminViewTests):
|
||||
user.id,
|
||||
email=user.email,
|
||||
name=user.name,
|
||||
project=self.tenant.id).AndReturn(None)
|
||||
project=self.tenant.id,
|
||||
description=user.description).AndReturn(None)
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
||||
formData = {'method': 'UpdateUserForm',
|
||||
'id': user.id,
|
||||
'name': user.name,
|
||||
'description': user.description,
|
||||
'email': "",
|
||||
'project': self.tenant.id}
|
||||
|
||||
|
@ -185,6 +185,7 @@ def data(TEST):
|
||||
|
||||
user_dict = {'id': "1",
|
||||
'name': 'test_user',
|
||||
'description': 'test_decription',
|
||||
'email': 'test@example.com',
|
||||
'password': 'password',
|
||||
'token': 'test_token',
|
||||
@ -194,6 +195,7 @@ def data(TEST):
|
||||
user = users.User(None, user_dict)
|
||||
user_dict = {'id': "2",
|
||||
'name': 'user_two',
|
||||
'description': 'test_decription',
|
||||
'email': 'two@example.com',
|
||||
'password': 'password',
|
||||
'token': 'test_token',
|
||||
@ -203,6 +205,7 @@ def data(TEST):
|
||||
user2 = users.User(None, user_dict)
|
||||
user_dict = {'id': "3",
|
||||
'name': 'user_three',
|
||||
'description': 'test_decription',
|
||||
'email': 'three@example.com',
|
||||
'password': 'password',
|
||||
'token': 'test_token',
|
||||
@ -212,6 +215,7 @@ def data(TEST):
|
||||
user3 = users.User(None, user_dict)
|
||||
user_dict = {'id': "4",
|
||||
'name': 'user_four',
|
||||
'description': 'test_decription',
|
||||
'email': 'four@example.com',
|
||||
'password': 'password',
|
||||
'token': 'test_token',
|
||||
@ -221,6 +225,7 @@ def data(TEST):
|
||||
user4 = users.User(None, user_dict)
|
||||
user_dict = {'id': "5",
|
||||
'name': 'user_five',
|
||||
'description': 'test_decription',
|
||||
'email': None,
|
||||
'password': 'password',
|
||||
'token': 'test_token',
|
||||
|
Loading…
Reference in New Issue
Block a user