summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/toastergui/api.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/toaster/toastergui/api.py')
-rw-r--r--bitbake/lib/toaster/toastergui/api.py101
1 files changed, 98 insertions, 3 deletions
diff --git a/bitbake/lib/toaster/toastergui/api.py b/bitbake/lib/toaster/toastergui/api.py
index 4851047bfa..5be633ed11 100644
--- a/bitbake/lib/toaster/toastergui/api.py
+++ b/bitbake/lib/toaster/toastergui/api.py
@@ -20,6 +20,7 @@
20 20
21import re 21import re
22import logging 22import logging
23import json
23from collections import Counter 24from collections import Counter
24 25
25from orm.models import Project, ProjectTarget, Build, Layer_Version 26from orm.models import Project, ProjectTarget, Build, Layer_Version
@@ -136,14 +137,17 @@ class XhrBuildRequest(View):
136 137
137 138
138class XhrLayer(View): 139class XhrLayer(View):
139 """ Get and Update Layer information """ 140 """ Delete, Get, Add and Update Layer information
141
142 Methods: POST DELETE PUT
143 """
140 144
141 def post(self, request, *args, **kwargs): 145 def post(self, request, *args, **kwargs):
142 """ 146 """
143 Update a layer 147 Update a layer
144 148
145 Entry point: /xhr_layer/<layerversion_id>
146 Method: POST 149 Method: POST
150 Entry point: /xhr_layer/<layerversion_id>
147 151
148 Args: 152 Args:
149 vcs_url, dirpath, commit, up_branch, summary, description, 153 vcs_url, dirpath, commit, up_branch, summary, description,
@@ -201,9 +205,100 @@ class XhrLayer(View):
201 return error_response("Could not update layer version entry: %s" 205 return error_response("Could not update layer version entry: %s"
202 % e) 206 % e)
203 207
204 return JsonResponse({"error": "ok"}) 208 return error_response("ok")
209
210 def put(self, request, *args, **kwargs):
211 """ Add a new layer
212
213 Method: PUT
214 Entry point: /xhr_layer/
215 Args:
216 project_id, name,
217 [vcs_url, dir_path, git_ref], [local_source_dir], [layer_deps
218 (csv)]
219
220 """
221 try:
222 project = Project.objects.get(pk=kwargs['pid'])
223
224 layer_data = json.loads(request.body.decode('utf-8'))
225
226 # We require a unique layer name as otherwise the lists of layers
227 # becomes very confusing
228 existing_layers = \
229 project.get_all_compatible_layer_versions().values_list(
230 "layer__name",
231 flat=True)
232
233 add_to_project = False
234 layer_deps_added = []
235 if 'add_to_project' in layer_data:
236 add_to_project = True
237
238 if layer_data['name'] in existing_layers:
239 return JsonResponse({"error": "layer-name-exists"})
240
241 layer = Layer.objects.create(name=layer_data['name'])
242
243 layer_version = Layer_Version.objects.create(
244 layer=layer,
245 project=project,
246 layer_source=LayerSource.TYPE_IMPORTED)
247
248 # Local layer
249 if 'local_source_dir' in layer_data:
250 layer.local_source_dir = layer_data['local_source_dir']
251 # git layer
252 elif 'vcs_url' in layer_data:
253 layer.vcs_url = layer_data['vcs_url']
254 layer_version.dirpath = layer_data['dir_path']
255 layer_version.commit = layer_data['get_ref']
256 layer_version.branch = layer_data['get_ref']
257
258 layer.save()
259 layer_version.save()
260
261 if add_to_project:
262 ProjectLayer.objects.get_or_create(
263 layercommit=layer_version, project=project)
264
265 # Add the layer dependencies
266 if 'layer_deps' in layer_data:
267 for layer_dep_id in layer_data['layer_deps'].split(","):
268 layer_dep = Layer_Version.objects.get(pk=layer_dep_id)
269 LayerVersionDependency.objects.get_or_create(
270 layer_version=layer_version, depends_on=layer_dep)
271
272 # Add layer deps to the project if specified
273 if add_to_project:
274 created, pl = ProjectLayer.objects.get_or_create(
275 layercommit=layer_dep, project=project)
276 layer_deps_added.append(
277 {'name': layer_dep.layer.name,
278 'layerdetailurl':
279 layer_dep.get_detailspage_url(project.pk)})
280
281 except Layer_Version.DoesNotExist:
282 return error_response("layer-dep-not-found")
283 except Project.DoesNotExist:
284 return error_response("project-not-found")
285 except KeyError:
286 return error_response("incorrect-parameters")
287
288 return JsonResponse({'error': "ok",
289 'imported_layer': {
290 'name': layer.name,
291 'layerdetailurl':
292 layer_version.get_detailspage_url()},
293 'deps_added': layer_deps_added})
205 294
206 def delete(self, request, *args, **kwargs): 295 def delete(self, request, *args, **kwargs):
296 """ Delete an imported layer
297
298 Method: DELETE
299 Entry point: /xhr_layer/<layerversion_id>
300
301 """
207 try: 302 try:
208 # We currently only allow Imported layers to be deleted 303 # We currently only allow Imported layers to be deleted
209 layer_version = Layer_Version.objects.get( 304 layer_version = Layer_Version.objects.get(