diff --git a/horizon/dashboards/syspanel/projects/views.py b/horizon/dashboards/syspanel/projects/views.py index cf2217ac2bb..f42d4f6f76b 100644 --- a/horizon/dashboards/syspanel/projects/views.py +++ b/horizon/dashboards/syspanel/projects/views.py @@ -45,7 +45,8 @@ def get_data(self): try: tenants = api.keystone.tenant_list(self.request, admin=True) except: - exceptions.handle(self.request) + exceptions.handle(self.request, + _("Unable to retrieve project list.")) tenants.sort(key=lambda x: x.id, reverse=True) return tenants @@ -67,7 +68,7 @@ def get_object(self, *args, **kwargs): except: redirect = reverse("horizon:syspanel:projects:index") exceptions.handle(self.request, - _('Unable to retrieve tenant.'), + _('Unable to retrieve project.'), redirect=redirect) def get_initial(self): diff --git a/horizon/dashboards/syspanel/users/tests.py b/horizon/dashboards/syspanel/users/tests.py index d37a6c006cc..730fec9a46d 100644 --- a/horizon/dashboards/syspanel/users/tests.py +++ b/horizon/dashboards/syspanel/users/tests.py @@ -34,8 +34,8 @@ class UsersViewTests(test.BaseAdminViewTests): def test_index(self): - self.mox.StubOutWithMock(api, 'user_list') - api.user_list(IgnoreArg()).AndReturn(self.users.list()) + self.mox.StubOutWithMock(api.keystone, 'user_list') + api.keystone.user_list(IgnoreArg()).AndReturn(self.users.list()) self.mox.ReplayAll() res = self.client.get(USERS_INDEX_URL) @@ -176,6 +176,8 @@ def test_update_user_field_validation(self): def test_enable_user(self): user = self.users.get(id="2") self.mox.StubOutWithMock(api.keystone, 'user_update_enabled') + self.mox.StubOutWithMock(api.keystone, 'user_list') + api.keystone.user_list(IgnoreArg()).AndReturn(self.users.list()) api.keystone.user_update_enabled(IgnoreArg(), user.id, True).AndReturn(user) @@ -183,11 +185,14 @@ def test_enable_user(self): formData = {'action': 'users__enable__%s' % user.id} res = self.client.post(USERS_INDEX_URL, formData) - self.assertRedirects(res, USERS_INDEX_URL) + self.assertRedirectsNoFollow(res, USERS_INDEX_URL) def test_disable_user(self): user = self.users.get(id="2") + self.mox.StubOutWithMock(api.keystone, 'user_update_enabled') + self.mox.StubOutWithMock(api.keystone, 'user_list') + api.keystone.user_list(IgnoreArg()).AndReturn(self.users.list()) api.keystone.user_update_enabled(IgnoreArg(), user.id, False).AndReturn(user) @@ -195,11 +200,13 @@ def test_disable_user(self): formData = {'action': 'users__disable__%s' % user.id} res = self.client.post(USERS_INDEX_URL, formData) - self.assertRedirects(res, USERS_INDEX_URL) + self.assertRedirectsNoFollow(res, USERS_INDEX_URL) def test_enable_disable_user_exception(self): user = self.users.get(id="2") self.mox.StubOutWithMock(api.keystone, 'user_update_enabled') + self.mox.StubOutWithMock(api.keystone, 'user_list') + api.keystone.user_list(IgnoreArg()).AndReturn(self.users.list()) api_exception = keystone_exceptions.ClientException('apiException', message='apiException') api.keystone.user_update_enabled(IgnoreArg(), @@ -210,15 +217,15 @@ def test_enable_disable_user_exception(self): formData = {'action': 'users__enable__%s' % user.id} res = self.client.post(USERS_INDEX_URL, formData) - self.assertRedirects(res, USERS_INDEX_URL) + self.assertRedirectsNoFollow(res, USERS_INDEX_URL) def test_shoot_yourself_in_the_foot(self): - self.mox.StubOutWithMock(api, 'user_list') + self.mox.StubOutWithMock(api.keystone, 'user_list') # Four times... one for each post and one for each followed redirect - api.user_list(IgnoreArg()).AndReturn(self.users.list()) - api.user_list(IgnoreArg()).AndReturn(self.users.list()) - api.user_list(IgnoreArg()).AndReturn(self.users.list()) - api.user_list(IgnoreArg()).AndReturn(self.users.list()) + api.keystone.user_list(IgnoreArg()).AndReturn(self.users.list()) + api.keystone.user_list(IgnoreArg()).AndReturn(self.users.list()) + api.keystone.user_list(IgnoreArg()).AndReturn(self.users.list()) + api.keystone.user_list(IgnoreArg()).AndReturn(self.users.list()) self.mox.ReplayAll() diff --git a/horizon/dashboards/syspanel/users/views.py b/horizon/dashboards/syspanel/users/views.py index b9ccb03c720..b3a46154adf 100644 --- a/horizon/dashboards/syspanel/users/views.py +++ b/horizon/dashboards/syspanel/users/views.py @@ -20,10 +20,8 @@ import logging -from django.contrib import messages from django.core.urlresolvers import reverse from django.utils.translation import ugettext_lazy as _ -from keystoneclient import exceptions as api_exceptions from horizon import api from horizon import exceptions @@ -43,17 +41,10 @@ class IndexView(tables.DataTableView): def get_data(self): users = [] try: - users = api.user_list(self.request) - except api_exceptions.AuthorizationFailure, e: - LOG.exception("Unauthorized attempt to list users.") - messages.error(self.request, - _('Unable to get user info: %s') % e.message) - except Exception, e: - LOG.exception('Exception while getting user list') - if not hasattr(e, 'message'): - e.message = str(e) - messages.error(self.request, - _('Unable to get user info: %s') % e.message) + users = api.keystone.user_list(self.request) + except: + exceptions.handle(self.request, + _('Unable to retrieve user list.')) return users diff --git a/horizon/exceptions.py b/horizon/exceptions.py index 31ee1c9adc7..c5f245029bd 100644 --- a/horizon/exceptions.py +++ b/horizon/exceptions.py @@ -143,6 +143,8 @@ def __init__(self, wrapped): # NOTE(gabriel): This is very broad, and may need to be dialed in. RECOVERABLE = (keystoneclient.ClientException, + # AuthorizationFailure is raised when Keystone is "unavailable". + keystoneclient.AuthorizationFailure, novaclient.ClientException, glanceclient.GlanceException, swiftclient.Error,