]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
bitbake: toaster: add class template view for single-object pages
authorAlexandru DAMIAN <alexandru.damian@intel.com>
Mon, 8 Jun 2015 10:12:47 +0000 (11:12 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 11 Jun 2015 23:01:48 +0000 (00:01 +0100)
Adding ToasterTemplateView as prototype for all class-based
views that display single objects; equivalent to ToasterTable
for object lists.

(Bitbake rev: d3edea773000a663f5883e04f477d853bff64cf6)

Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
bitbake/lib/toaster/toastergui/tables.py
bitbake/lib/toaster/toastergui/widgets.py

index e540b9149930662ecd330b31033befb1bc2db192..e03aa768c9ebcd62c4b1ed57dfce57803d3a90dd 100644 (file)
@@ -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"""
 
index 3d3c1d10df2394ba30fb19a58addd9f250ca0508..8bc3d7f1609da4652a85da47c9cb97470edafb3e 100644 (file)
@@ -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)