Exemplo n.º 1
0
 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
Exemplo n.º 2
0
 def allowed(self, request, package):
     _allowed = False
     with api.handled_exceptions(request):
         client = api.muranoclient(request)
         if client.categories.list():
             _allowed = True
     return _allowed
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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()
Exemplo n.º 5
0
 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])
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
 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])
Exemplo n.º 8
0
 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
Exemplo n.º 9
0
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
Exemplo n.º 10
0
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
Exemplo n.º 11
0
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
Exemplo n.º 12
0
 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
Exemplo n.º 13
0
 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
Exemplo n.º 14
0
    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)
Exemplo n.º 15
0
 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)
Exemplo n.º 16
0
    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
Exemplo n.º 17
0
    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()
Exemplo n.º 18
0
    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)
Exemplo n.º 19
0
    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
Exemplo n.º 20
0
    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
Exemplo n.º 21
0
    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
Exemplo n.º 22
0
    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
Exemplo n.º 23
0
    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
Exemplo n.º 24
0
    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
Exemplo n.º 25
0
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
Exemplo n.º 26
0
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
Exemplo n.º 27
0
    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
Exemplo n.º 28
0
 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
Exemplo n.º 29
0
 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)
Exemplo n.º 30
0
 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