diff options
author | Alexandru DAMIAN <alexandru.damian@intel.com> | 2015-06-08 11:01:43 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-06-12 00:01:48 +0100 |
commit | 58600cf8e76f270969ded6ec63ac0908f39dae09 (patch) | |
tree | f87738a1ce5857a576c236f43b85b3ec83089c88 /bitbake/lib/toaster/toastergui/views.py | |
parent | 4a2a057130e877eae96d726bc86c6b9f48ed1ca3 (diff) | |
download | poky-58600cf8e76f270969ded6ec63ac0908f39dae09.tar.gz |
bitbake: toaster: toaster table add raw data
We add in a JSON response both the raw data and the rendered
version for display. The rendered fields start with "static:"
to mark a different "namespace".
The toaster.js is updated to always display the "static:" version
of a field, if it exists (and ignore the raw data unless the
static rendering is missing).
(Bitbake rev: 928ee3fd4b52ea14b7eb704f1f27351362a9d27a)
Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/toaster/toastergui/views.py')
-rwxr-xr-x | bitbake/lib/toaster/toastergui/views.py | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index 91c4fa2543..280159ad2c 100755 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py | |||
@@ -87,6 +87,35 @@ def _project_recent_build_list(prj): | |||
87 | list(prj.buildrequest_set.filter(state__in=[BuildRequest.REQ_COMPLETED, BuildRequest.REQ_FAILED]).order_by("-pk")[:3])) | 87 | list(prj.buildrequest_set.filter(state__in=[BuildRequest.REQ_COMPLETED, BuildRequest.REQ_FAILED]).order_by("-pk")[:3])) |
88 | 88 | ||
89 | 89 | ||
90 | |||
91 | def objtojson(obj): | ||
92 | from django.db.models.query import QuerySet | ||
93 | from django.db.models import Model, IntegerField | ||
94 | from django.db.models.fields.related import ForeignKey | ||
95 | |||
96 | if isinstance(obj, datetime): | ||
97 | return obj.isoformat() | ||
98 | elif isinstance(obj, timedelta): | ||
99 | return obj.total_seconds() | ||
100 | elif isinstance(obj, QuerySet) or isinstance(obj, set): | ||
101 | return list(obj) | ||
102 | elif type(obj).__name__ == "RelatedManager": | ||
103 | return [x.pk for x in obj.all()] | ||
104 | elif hasattr( obj, '__dict__') and isinstance(obj, Model): | ||
105 | d = obj.__dict__ | ||
106 | nd = dict(d) | ||
107 | for di in d.keys(): | ||
108 | if di.startswith("_"): | ||
109 | del nd[di] | ||
110 | elif isinstance(d[di], Model): | ||
111 | nd[di] = d[di].pk | ||
112 | elif isinstance(d[di], int) and hasattr(obj, "get_%s_display" % di): | ||
113 | nd[di] = getattr(obj, "get_%s_display" % di)() | ||
114 | return nd | ||
115 | else: | ||
116 | raise TypeError("Unserializable object %s (%s) of type %s" % ( obj, dir(obj), type(obj))) | ||
117 | |||
118 | |||
90 | def _template_renderer(template): | 119 | def _template_renderer(template): |
91 | def func_wrapper(view): | 120 | def func_wrapper(view): |
92 | def returned_wrapper(request, *args, **kwargs): | 121 | def returned_wrapper(request, *args, **kwargs): |
@@ -127,7 +156,7 @@ def _template_renderer(template): | |||
127 | else: | 156 | else: |
128 | raise TypeError("Unserializable object %s of type %s" % ( obj, type(obj))) | 157 | raise TypeError("Unserializable object %s of type %s" % ( obj, type(obj))) |
129 | 158 | ||
130 | return HttpResponse(jsonfilter(context, default=_objtojson ), | 159 | return HttpResponse(jsonfilter(context, default=objtojson ), |
131 | content_type = "application/json; charset=utf-8") | 160 | content_type = "application/json; charset=utf-8") |
132 | else: | 161 | else: |
133 | return render(request, template, context) | 162 | return render(request, template, context) |