diff --git a/apimanager/users/views.py b/apimanager/users/views.py index 78e7c72..eeb809a 100644 --- a/apimanager/users/views.py +++ b/apimanager/users/views.py @@ -40,25 +40,36 @@ class IndexView(LoginRequiredMixin, TemplateView): """Index view for users""" template_name = "users/index.html" - def get_context_data(self, **kwargs): - context = super(IndexView, self).get_context_data(**kwargs) - role_names = [] + def get_users_rolenames(self): users = [] try: urlpath = '/users' users = api.get(self.request, urlpath) + except APIError as err: + messages.error(self.request, err) + return [], [] + + role_names = [] + try: for user in users['users']: for entitlement in user['entitlements']['list']: role_names.append(entitlement['role_name']) - role_names = list(set(role_names)) - role_names.sort() - users = FilterRoleName(context, self.request.GET)\ - .apply(users['users']) - users = FilterEmail(context, self.request.GET)\ - .apply(users) - except APIError as err: - messages.error(self.request, err) + # fail gracefully in case API provides new structure + except KeyError as err: + messages.error(self.request, 'KeyError: {}'.format(err)) + return [], [] + role_names = list(set(role_names)) + role_names.sort() + users = FilterRoleName(context, self.request.GET)\ + .apply(users['users']) + users = FilterEmail(context, self.request.GET)\ + .apply(users) + return users + + def get_context_data(self, **kwargs): + context = super(IndexView, self).get_context_data(**kwargs) + users, role_names = self.get_users_rolenames() context.update({ 'role_names': role_names, 'statistics': {