diff --git a/muranodashboard/api/rest/__init__.py b/muranodashboard/api/rest/__init__.py new file mode 100644 index 000000000..4fb5db83f --- /dev/null +++ b/muranodashboard/api/rest/__init__.py @@ -0,0 +1,14 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# import REST API modules here +from . import packages # noqa diff --git a/muranodashboard/api/rest/packages.py b/muranodashboard/api/rest/packages.py new file mode 100644 index 000000000..00039337a --- /dev/null +++ b/muranodashboard/api/rest/packages.py @@ -0,0 +1,67 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""API for the murano packages service. +""" + +from django.views import generic +from openstack_dashboard.api.rest import utils as rest_utils + +from muranodashboard import api +from openstack_dashboard.api.rest import urls + + +CLIENT_KEYWORDS = {'marker', 'sort_dir', 'paginate'} + + +@urls.register +class Packages(generic.View): + """API for Murano packages. + """ + url_regex = r'murano/packages/$' + + @rest_utils.ajax() + def get(self, request): + """Get a list of packages. + + The listing result is an object with property "packages". + + Example GET: + http://localhost/api/murano/packages?sort_dir=desc #flake8: noqa + + The following get parameters may be passed in the GET + request: + + :param paginate: If true will perform pagination based on settings. + :param marker: Specifies the namespace of the last-seen package. + The typical pattern of limit and marker is to make an + initial limited request and then to use the last + namespace from the response as the marker parameter + in a subsequent limited request. With paginate, limit + is automatically set. + :param sort_dir: The sort direction ('asc' or 'desc'). + + Any additional request parameters will be passed through the API as + filters. + """ + + filters, kwargs = rest_utils.parse_filters_kwargs(request, + CLIENT_KEYWORDS) + + packages, has_more_data = api.packages.package_list( + request, filters=filters, **kwargs) + + return { + 'packages': [p.to_dict() for p in packages], + 'has_more_data': has_more_data, + } + + diff --git a/muranodashboard/dashboard.py b/muranodashboard/dashboard.py index a46355da6..22532649c 100644 --- a/muranodashboard/dashboard.py +++ b/muranodashboard/dashboard.py @@ -16,6 +16,8 @@ from django.conf import settings from django.utils.translation import ugettext_lazy as _ import horizon +# Load the api rest services into Horizon +import muranodashboard.api.rest # noqa from muranodashboard import exceptions # prevent pyflakes from fail assert exceptions diff --git a/muranodashboard/local/_50_murano.py b/muranodashboard/local/_50_murano.py index ee4a727c7..ec00a53cd 100644 --- a/muranodashboard/local/_50_murano.py +++ b/muranodashboard/local/_50_murano.py @@ -15,3 +15,9 @@ ADD_EXCEPTIONS = { 'not_found': exceptions.NOT_FOUND, 'unauthorized': exceptions.UNAUTHORIZED, } + +ADD_JS_FILES = [ + 'muranodashboard/js/murano.service.js' +] + + diff --git a/muranodashboard/static/muranodashboard/js/murano.service.js b/muranodashboard/static/muranodashboard/js/murano.service.js new file mode 100644 index 000000000..e25060926 --- /dev/null +++ b/muranodashboard/static/muranodashboard/js/murano.service.js @@ -0,0 +1,73 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +(function () { + 'use strict'; + + angular + .module('horizon.app.core.openstack-service-api') + .factory('horizon.app.core.openstack-service-api.murano', muranoAPI); + + muranoAPI.$inject = [ + 'horizon.framework.util.http.service', + 'horizon.framework.widgets.toast.service' + ]; + + /** + * @ngdoc service + * @name horizon.app.core.openstack-service-api.murano + * @description Provides direct pass through to Murano with NO abstraction. + */ + function muranoAPI(apiService, toastService) { + var service = { + getPackages: getPackages + }; + + return service; + + /** + * @name horizon.app.core.openstack-service-api.murano.getPackages + * @description + * Get a list of packages. + * + * The listing result is an object with property "packages". Each item is + * an packages. + * + * @param {Object} params + * Query parameters. Optional. + * + * @param {boolean} params.paginate + * True to paginate automatically. + * + * @param {string} params.marker + * Specifies the image of the last-seen image. + * + * The typical pattern of limit and marker is to make an + * initial limited request and then to use the last + * image from the response as the marker parameter + * in a subsequent limited request. With paginate, limit + * is automatically set. + * + * @param {string} params.sort_dir + * The sort direction ('asc' or 'desc'). + */ + function getPackages(params) { + var config = (params) ? { 'params' : params} : {}; + return apiService.get('/api/murano/packages/', config) + .error(function () { + toastService.add('error', gettext('Unable to retrieve the packages.')); + }); + } + + } +}());