summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/toastergui/api.py
diff options
context:
space:
mode:
authorMichael Wood <michael.g.wood@intel.com>2016-07-06 18:22:36 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-07-08 09:57:28 +0100
commit36dec688c7e50e02e55c070f04c396e2d1aa3ef3 (patch)
tree6072b631d8a122f2364cb896a268e93d0fc680b2 /bitbake/lib/toaster/toastergui/api.py
parent903c3c2ef8e31aad287d914dbb18a926cb96e6d0 (diff)
downloadpoky-36dec688c7e50e02e55c070f04c396e2d1aa3ef3.tar.gz
bitbake: toaster: layerdetails api Fix saving of git revision of a layer
Update, clean up and move the api for updating a layerversion from the views to api. Also update the layerdetails page to include the layerversion id in the url getter. [YOCTO #8952] (Bitbake rev: 20f4e23bc86290f0a42881a7cac44c41eafa86fc) Signed-off-by: Michael Wood <michael.g.wood@intel.com> Signed-off-by: Elliot Smith <elliot.smith@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/toaster/toastergui/api.py')
-rw-r--r--bitbake/lib/toaster/toastergui/api.py99
1 files changed, 98 insertions, 1 deletions
diff --git a/bitbake/lib/toaster/toastergui/api.py b/bitbake/lib/toaster/toastergui/api.py
index 961b594ef4..a024748271 100644
--- a/bitbake/lib/toaster/toastergui/api.py
+++ b/bitbake/lib/toaster/toastergui/api.py
@@ -20,11 +20,14 @@
20# Temporary home for the UI's misc API 20# Temporary home for the UI's misc API
21import re 21import re
22 22
23from orm.models import Project, ProjectTarget, Build 23from orm.models import Project, ProjectTarget, Build, Layer_Version
24from orm.models import LayerVersionDependency, LayerSource, ProjectLayer
24from bldcontrol.models import BuildRequest 25from bldcontrol.models import BuildRequest
25from bldcontrol import bbcontroller 26from bldcontrol import bbcontroller
26from django.http import HttpResponse, JsonResponse 27from django.http import HttpResponse, JsonResponse
27from django.views.generic import View 28from django.views.generic import View
29from django.core.urlresolvers import reverse
30
28 31
29 32
30class XhrBuildRequest(View): 33class XhrBuildRequest(View):
@@ -109,3 +112,97 @@ class XhrBuildRequest(View):
109 response = HttpResponse() 112 response = HttpResponse()
110 response.status_code = 500 113 response.status_code = 500
111 return response 114 return response
115
116
117class XhrLayer(View):
118 """ Get and Update Layer information """
119
120 def post(self, request, *args, **kwargs):
121 """
122 Update a layer
123
124 Entry point: /xhr_layer/<layerversion_id>
125 Method: POST
126
127 Args:
128 vcs_url, dirpath, commit, up_branch, summary, description
129
130 add_dep = append a layerversion_id as a dependency
131 rm_dep = remove a layerversion_id as a depedency
132 Returns:
133 {"error": "ok"}
134 or
135 {"error": <error message>}
136 """
137
138 def error_response(error):
139 return JsonResponse({"error": error})
140
141 try:
142 # We currently only allow Imported layers to be edited
143 layer_version = Layer_Version.objects.get(
144 id=kwargs['layerversion_id'],
145 project=kwargs['pid'],
146 layer_source__sourcetype=LayerSource.TYPE_IMPORTED)
147
148 except Layer_Version.DoesNotExist:
149 return error_response("Cannot find imported layer to update")
150
151 if "vcs_url" in request.POST:
152 layer_version.layer.vcs_url = request.POST["vcs_url"]
153 if "dirpath" in request.POST:
154 layer_version.dirpath = request.POST["dirpath"]
155 if "commit" in request.POST:
156 layer_version.commit = request.POST["commit"]
157 layer_version.branch = request.POST["commit"]
158 if "up_branch" in request.POST:
159 layer_version.up_branch_id = int(request.POST["up_branch"])
160 if "summary" in request.POST:
161 layer_version.layer.summary = request.POST["summary"]
162 if "description" in request.POST:
163 layer_version.layer.description = request.POST["description"]
164
165 if "add_dep" in request.POST:
166 lvd = LayerVersionDependency(
167 layer_version=layer_version,
168 depends_on_id=request.POST["add_dep"])
169 lvd.save()
170
171 if "rm_dep" in request.POST:
172 rm_dep = LayerVersionDependency.objects.get(
173 layer_version=layer_version,
174 depends_on_id=request.POST["rm_dep"])
175 rm_dep.delete()
176
177 try:
178 layer_version.layer.save()
179 layer_version.save()
180 except Exception as e:
181 return error_response("Could not update layer version entry: %s"
182 % e)
183
184 return JsonResponse({"error": "ok"})
185
186 def delete(self, request, *args, **kwargs):
187 try:
188 # We currently only allow Imported layers to be deleted
189 layer_version = Layer_Version.objects.get(
190 id=kwargs['layerversion_id'],
191 project=kwargs['pid'],
192 layer_source__sourcetype=LayerSource.TYPE_IMPORTED)
193 except Layer_Version.DoesNotExist:
194 return error_response("Cannot find imported layer to delete")
195
196 try:
197 ProjectLayer.objects.get(project=kwargs['pid'],
198 layercommit=layer_version).delete()
199 except ProjectLayer.DoesNotExist:
200 pass
201
202 layer_version.layer.delete()
203 layer_version.delete()
204
205 return JsonResponse({
206 "error": "ok",
207 "redirect": reverse('project', args=(kwargs['pid'],))
208 })