diff --git a/bitbake/lib/toaster/toastergui/tables.py b/bitbake/lib/toaster/toastergui/tables.py index e540b91499..e03aa768c9 100644 --- a/bitbake/lib/toaster/toastergui/tables.py +++ b/bitbake/lib/toaster/toastergui/tables.py @@ -19,7 +19,7 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from toastergui.widgets import ToasterTable +from toastergui.widgets import ToasterTable, ToasterTemplateView from orm.models import Recipe, ProjectLayer, Layer_Version, Machine, Project from django.db.models import Q, Max from django.conf.urls import url @@ -142,16 +142,24 @@ class LayersTable(ToasterTable): static_data_name="add-del-layers", static_data_template='{% include "layer_btn.html" %}') -class LayerDetails(TemplateView): + + +class LayerDetails(ToasterTemplateView): def get_context_data(self, **kwargs): context = super(LayerDetails, self).get_context_data(**kwargs) + from toastergui.views import _lv_to_dict context['project'] = Project.objects.get(pk=kwargs['pid']) context['layerversion'] = Layer_Version.objects.get(pk=kwargs['layerid']) + context['layerdict'] = _lv_to_dict(context['project'], context['layerversion']) + context['layerdeps'] = {"list": [x.depends_on.get_equivalents_wpriority(context['project'])[0] for x in context['layerversion'].dependencies.all()]} context['projectlayers'] = map(lambda prjlayer: prjlayer.layercommit.id, ProjectLayer.objects.filter(project=context['project'])) + self.context_entries = ['project', 'layerversion', 'projectlayers', 'layerdict', 'layerdeps'] + return context + class MachinesTable(ToasterTable): """Table of Machines in Toaster""" diff --git a/bitbake/lib/toaster/toastergui/widgets.py b/bitbake/lib/toaster/toastergui/widgets.py index 3d3c1d10df..8bc3d7f160 100644 --- a/bitbake/lib/toaster/toastergui/widgets.py +++ b/bitbake/lib/toaster/toastergui/widgets.py @@ -325,3 +325,29 @@ class ToasterTable(TemplateView): cache.set(cache_name, data, 60*30) return data + + +class ToasterTemplateView(TemplateView): + # renders a instance in a template, or returns the context as json + # the class-equivalent of the _template_renderer decorator for views + + + def get(self, *args, **kwargs): + if self.request.GET.get('format', None) == 'json': + from django.core.urlresolvers import reverse + from django.shortcuts import HttpResponse + from views import objtojson + from toastergui.templatetags.projecttags import json as jsonfilter + + context = self.get_context_data(**kwargs) + + for x in context.keys(): + if x not in self.context_entries: + del context[x] + + context["error"] = "ok" + + return HttpResponse(jsonfilter(context, default=objtojson ), + content_type = "application/json; charset=utf-8") + + return super(ToasterTemplateView, self).get(*args, **kwargs)