def handle(self, request, data): if data: with api.handled_exceptions(self.request): category = api.muranoclient(self.request).categories.add(data) messages.success(request, _('Category {0} created.') .format(data['name'])) return category
def allowed(self, request, package): _allowed = False with api.handled_exceptions(request): client = api.muranoclient(request) if client.categories.list(): _allowed = True return _allowed
def get_data(self): sort_dir = self.request.GET.get('sort_dir', 'asc') opts = { 'include_disabled': True, 'sort_dir': sort_dir, } marker = self.request.GET.get( tables.PackageDefinitionsTable._meta.pagination_param, None) opts = self.get_filters(opts) packages = [] page_size = utils.get_page_size(self.request) with api.handled_exceptions(self.request): packages, extra = pkg_api.package_list( self.request, marker=marker, filters=opts, paginate=True, page_size=page_size) if sort_dir == 'asc': self._more = extra else: packages = list(reversed(packages)) self._prev = extra if packages: if sort_dir == 'asc': backward_marker = packages[0].id opts['sort_dir'] = 'desc' else: backward_marker = packages[-1].id opts['sort_dir'] = 'asc' __, extra = pkg_api.package_list( self.request, filters=opts, paginate=True, marker=backward_marker, page_size=0) if sort_dir == 'asc': self._prev = extra else: self._more = extra # Add information about project tenant for admin user if self.request.user.is_superuser: tenants = [] try: tenants, _more = keystone.tenant_list(self.request) except Exception: exceptions.handle(self.request, _("Unable to retrieve project list.")) tenent_name_by_id = {tenant.id: tenant.name for tenant in tenants} for i, p in enumerate(packages): packages[i].tenant_name = tenent_name_by_id.get(p.owner_id) else: current_tenant = self.request.session['token'].tenant for i, package in enumerate(packages): if package.owner_id == current_tenant['id']: packages[i].tenant_name = current_tenant['name'] else: packages[i].tenant_name = _('UNKNOWN') return packages
def test_handled_exceptions(self, mock_log): handled_exceptions = ( (api.exc.CommunicationError, 'Unable to communicate to murano-api server.'), (api.glance_exc.CommunicationError, 'Unable to communicate to glare-api server.'), (api.exc.HTTPUnauthorized, 'Check Keystone configuration of murano-api server.'), (api.exc.HTTPForbidden, 'Operation is forbidden by murano-api server.'), (api.exc.HTTPNotFound, 'Requested object is not found on murano server.'), (api.exc.HTTPConflict, 'Requested operation conflicts with an existing object.'), (api.exc.BadRequest, 'The request data is not acceptable by the server'), (api.exc.HTTPInternalServerError, 'There was an error communicating with server'), (api.glance_exc.HTTPInternalServerError, 'There was an error communicating with server'), ) for (exception, expected_message) in handled_exceptions: try: with api.handled_exceptions(self.request): raise exception() except exception: pass mock_log.exception.assert_called_once_with(expected_message) mock_log.exception.reset_mock()
def get_apps_list(self): packages = [] with api_utils.handled_exceptions(self.request): packages, self._more = pkg_api.package_list( self.request, filters={'type': 'Application', 'catalog': True}) return json.dumps([package.to_dict() for package in packages])
def handle(self, request, data): if data: with api.handled_exceptions(self.request): category = api.muranoclient(self.request).categories.add(data) messages.success(request, _('Category {0} created.').format(data['name'])) return category
def get_categories_list(request): categories = [] with api.handled_exceptions(request): client = api.muranoclient(request) categories = client.packages.categories() if ALL_CATEGORY_NAME not in categories: categories.insert(0, ALL_CATEGORY_NAME) return categories
def environments_list(request): environments = [] client = api.muranoclient(request) with api.handled_exceptions(request): environments = client.environments.list() LOG.debug('Environment::List {0}'.format(environments)) for index, env in enumerate(environments): environments[index] = environment_get(request, env.id) return environments
def get_data(self, request, environment_id): try: return api.environment_get(request, environment_id) except exc.HTTPNotFound: # returning 404 to the ajax call removes the # row from the table on the ui raise django_http.Http404 except Exception: # let our unified handler take care of errors here with api_utils.handled_exceptions(request): raise
def test_handled_exceptions_with_message_already_queued( self, mock_exc, mock_msg_api): mock_message = mock.Mock( message='Unable to communicate to murano-api server.') mock_msg_api.get_messages.return_value = [mock_message] try: with api.handled_exceptions(self.request): raise api.exc.CommunicationError() except api.exc.CommunicationError: pass mock_exc.handle.assert_called_once_with(self.request, ignore=True)
def get_apps_list(self): packages = [] with api_utils.handled_exceptions(self.request): packages, self._more = pkg_api.package_list( self.request, filters={'type': 'Cloud', 'catalog': True}) items = [] for package in packages: item = package.to_dict() item['name'] = ugettext(item['name']) items.append(item) return json.dumps(items)
def get_queryset(self): query_params = self.get_query_params(internal_query=True) marker = self.request.GET.get('marker') sort_dir = self.request.GET.get('sort_dir') packages = [] with api.handled_exceptions(self.request): packages, self._more = pkg_api.package_list( self.request, filters=query_params, paginate=True, marker=marker, page_size=self.paginate_by, sort_dir=sort_dir) if sort_dir == 'desc': packages.reverse() return packages
def test_handled_exceptions_with_details(self, mock_log): exceptions_with_details = ( (api.exc.HTTPInternalServerError, 'There was an error communicating with server'), (api.glance_exc.HTTPInternalServerError, 'There was an error communicating with server')) for (exception, expected_message) in exceptions_with_details: try: with api.handled_exceptions(self.request): raise exception(details='test_details') except exception: pass mock_log.exception.assert_called_once_with(expected_message) mock_log.exception.reset_mock()
def test_handled_exceptions_with_ajax_request(self, mock_exc): async_messages = [ ('test_tag', 'Unable to communicate to murano-api server.', 'test_extra') ] mock_request = mock.MagicMock() mock_request.is_ajax.return_value = True mock_request.horizon.__getitem__.return_value = async_messages try: with api.handled_exceptions(mock_request): raise api.exc.CommunicationError() except api.exc.CommunicationError: pass mock_exc.handle.assert_called_once_with(mock_request, ignore=True) self.assertTrue(mock_request.is_ajax.called) self.assertTrue(mock_request.horizon.__getitem__.called)
def get_queryset(self): query_params = self.get_query_params(internal_query=True) marker = self.request.GET.get('marker') sort_dir = query_params['sort_dir'] packages = [] with api.handled_exceptions(self.request): query_params['catalog'] = True packages, self._more = pkg_api.package_list( self.request, filters=query_params, paginate=True, marker=marker, page_size=self.paginate_by, sort_dir=sort_dir, limit=self.paginate_by) if self.request.GET.get('sort_dir', 'asc') == 'desc': packages = list(reversed(packages)) return packages
def get_queryset(self): query_params = self.get_query_params(internal_query=True) marker = self.request.GET.get('marker') sort_dir = query_params['sort_dir'] packages = [] with api.handled_exceptions(self.request): query_params['catalog'] = True packages, self._more = pkg_api.package_list( self.request, filters=query_params, paginate=True, marker=marker, page_size=self.paginate_by, sort_dir=sort_dir, limit=self.paginate_by) if sort_dir == 'desc': packages = list(reversed(packages)) return packages
def get_data(self): sort_dir = self.request.GET.get('sort_dir', 'asc') opts = { 'include_disabled': True, 'sort_dir': sort_dir, } marker = self.request.GET.get( tables.PackageDefinitionsTable._meta.pagination_param, None) packages = [] page_size = utils.get_page_size(self.request) with api.handled_exceptions(self.request): packages, extra = pkg_api.package_list(self.request, marker=marker, filters=opts, paginate=True, page_size=page_size) if sort_dir == 'asc': self._more = extra else: packages = list(reversed(packages)) self._prev = extra if packages: if sort_dir == 'asc': backward_marker = packages[0].id opts['sort_dir'] = 'desc' else: backward_marker = packages[-1].id opts['sort_dir'] = 'asc' __, extra = pkg_api.package_list(self.request, filters=opts, paginate=True, marker=backward_marker, page_size=0) if sort_dir == 'asc': self._prev = extra else: self._more = extra return packages
def get_data(self): prev_marker = self.request.GET.get( tables.CategoriesTable._meta.prev_pagination_param, None) if prev_marker is not None: sort_dir = 'asc' marker = prev_marker else: sort_dir = 'desc' marker = self.request.GET.get( tables.CategoriesTable._meta.pagination_param, None) page_size = utils.get_page_size(self.request) request_size = page_size + 1 kwargs = {'filters': {}} if marker: kwargs['marker'] = marker kwargs['sort_dir'] = sort_dir categories = [] self._prev = False self._more = False with api.handled_exceptions(self.request): categories_iter = api.muranoclient(self.request).categories.list( limit=request_size, **kwargs) categories = list(itertools.islice(categories_iter, request_size)) # first and middle page condition if len(categories) > page_size: categories.pop(-1) self._more = True # middle page condition if marker is not None: self._prev = True # first page condition when reached via prev back elif sort_dir == 'asc' and marker is not None: self._more = True # last page condition elif marker is not None: self._prev = True if prev_marker is not None: categories.reverse() return categories
def get_data(self): sort_dir = self.request.GET.get('sort_dir', 'asc') opts = { 'include_disabled': True, 'owned': True, 'sort_dir': sort_dir, } marker = self.request.GET.get( tables.PackageDefinitionsTable._meta.pagination_param, None) packages = [] page_size = utils.get_page_size(self.request) with api.handled_exceptions(self.request): packages, extra = pkg_api.package_list( self.request, marker=marker, filters=opts, paginate=True, page_size=page_size) if sort_dir == 'asc': self._more = extra else: packages = list(reversed(packages)) self._prev = extra if packages: if sort_dir == 'asc': backward_marker = packages[0].id opts['sort_dir'] = 'desc' else: backward_marker = packages[-1].id opts['sort_dir'] = 'asc' # Check if there are extra packages in backwards direction __, extra = pkg_api.package_list( self.request, filters=opts, paginate=True, marker=backward_marker, page_size=0) if sort_dir == 'asc': self._prev = extra else: self._more = extra return packages
def get_categories_list(request): """Returns a list of categories, sorted. Categories with packages come first, categories without packages come second. both groups alphabetically sorted. """ categories = [] with api.handled_exceptions(request): client = api.muranoclient(request) categories = client.categories.list() # NOTE(kzaitsev) We rely here on tuple comparison and ascending order of # sorted(). i.e. (False, 'a') < (False, 'b') < (True, 'a') < (True, 'b') # So to make order more human-friendly we sort based on # package_count == 0, pushing categories without packages in front and # and then sorting them alphabetically categories = [cat for cat in sorted( categories, key=lambda c: (c.package_count == 0, c.name))] # TODO(kzaitsev): add sorting options to category API return categories
def get_data(self): sort_dir = self.request.GET.get("sort_dir", "asc") opts = {"include_disabled": True, "sort_dir": sort_dir} marker = self.request.GET.get(tables.PackageDefinitionsTable._meta.pagination_param, None) packages = [] page_size = utils.get_page_size(self.request) with api.handled_exceptions(self.request): packages, extra = pkg_api.package_list( self.request, marker=marker, filters=opts, paginate=True, page_size=page_size ) if sort_dir == "asc": self._more = extra else: packages = list(reversed(packages)) self._prev = extra if packages: if sort_dir == "asc": backward_marker = packages[0].id opts["sort_dir"] = "desc" else: backward_marker = packages[-1].id opts["sort_dir"] = "asc" __, extra = pkg_api.package_list( self.request, filters=opts, paginate=True, marker=backward_marker, page_size=0 ) if sort_dir == "asc": self._prev = extra else: self._more = extra return packages
def allowed(self, request, image): _allowed = False with api.handled_exceptions(request): client = api.muranoclient(request) _allowed = client.packages.categories() is not None return _allowed
def get_data(self): categories = [] with api.handled_exceptions(self.request): categories = api.muranoclient(self.request).categories.list() return sorted(categories, key=lambda category: category.name)
def allowed(self, request, package): _allowed = False with api.handled_exceptions(request): client = api.muranoclient(request) _allowed = client.packages.categories() is not None return _allowed