diff --git a/mistraldashboard/api.py b/mistraldashboard/api.py index 600567c..bdf7809 100644 --- a/mistraldashboard/api.py +++ b/mistraldashboard/api.py @@ -88,3 +88,12 @@ def workbook_list(request): """Returns all workbooks.""" return mistralclient(request).workbooks.list() + + +def workbook_get(request, workbook_name): + """Get specific workbook. + + :param workbook_name: Workbook name + """ + + return mistralclient(request).workbooks.get(workbook_name) diff --git a/mistraldashboard/workbooks/tables.py b/mistraldashboard/workbooks/tables.py index 68dbb04..aefe58e 100644 --- a/mistraldashboard/workbooks/tables.py +++ b/mistraldashboard/workbooks/tables.py @@ -25,7 +25,11 @@ def tags_to_string(workbook): class WorkbooksTable(tables.DataTable): - name = tables.Column("name", verbose_name=_("Name")) + name = tables.Column( + "name", + verbose_name=_("Name"), + link="horizon:mistral:workbooks:detail" + ) tags = tables.Column(tags_to_string, verbose_name=_("Tags")) created = tables.Column( "created_at", diff --git a/mistraldashboard/workbooks/templates/workbooks/detail.html b/mistraldashboard/workbooks/templates/workbooks/detail.html new file mode 100644 index 0000000..fea69ec --- /dev/null +++ b/mistraldashboard/workbooks/templates/workbooks/detail.html @@ -0,0 +1,13 @@ +{% extends 'base.html' %} +{% load i18n %} +{% block title %}{% trans "Workbook Definition" %}{% endblock %} + +{% block page_header %} + {% include "horizon/common/_page_header.html" with title=_("Workbook Definition") %} +{% endblock page_header %} + +{% block main %} + <div class="detail"> + <pre>{{ definition }}</pre> + </div> +{% endblock %} diff --git a/mistraldashboard/workbooks/urls.py b/mistraldashboard/workbooks/urls.py index eef3ca4..2f14f9f 100644 --- a/mistraldashboard/workbooks/urls.py +++ b/mistraldashboard/workbooks/urls.py @@ -17,11 +17,12 @@ from django.conf.urls import patterns # noqa from django.conf.urls import url # noqa -from mistraldashboard.workbooks.views import IndexView +from mistraldashboard.workbooks import views WORKBOOKS = r'^(?P<workbook_name>[^/]+)/%s$' urlpatterns = patterns( '', - url(r'^$', IndexView.as_view(), name='index'), + url(r'^$', views.IndexView.as_view(), name='index'), + url(WORKBOOKS % 'detail', views.DetailView.as_view(), name='detail'), ) diff --git a/mistraldashboard/workbooks/views.py b/mistraldashboard/workbooks/views.py index fd33bc2..74377d7 100644 --- a/mistraldashboard/workbooks/views.py +++ b/mistraldashboard/workbooks/views.py @@ -14,6 +14,11 @@ # See the License for the specific language governing permissions and # limitations under the License. +from django.core.urlresolvers import reverse +from django.utils.translation import ugettext_lazy as _ +from django.views import generic + +from horizon import exceptions from horizon import tables from mistraldashboard import api @@ -26,3 +31,26 @@ class IndexView(tables.DataTableView): def get_data(self): return api.workbook_list(self.request) + + +class DetailView(generic.TemplateView): + template_name = 'mistral/workbooks/detail.html' + page_title = _("Workbook Definition") + + def get_context_data(self, **kwargs): + context = super(DetailView, self).get_context_data(**kwargs) + workbook = self.get_data(self.request, **kwargs) + context['definition'] = workbook.definition + + return context + + def get_data(self, request, **kwargs): + try: + workbook_name = kwargs['workbook_name'] + workbook = api.workbook_get(request, workbook_name) + except Exception: + msg = _('Unable to get workbook "%s".') % workbook_name + redirect = reverse('horizon:mistral:workbooks:index') + exceptions.handle(self.request, msg, redirect=redirect) + + return workbook