1
0
mirror of https://git.yoctoproject.org/poky synced 2026-06-02 01:19:52 +00:00

bitbake: toaster: api Add layer Add api

Add layer adding REST api and remove old views method.

(Bitbake rev: 0c8e41d2217fd568a84e857d1be230fcfd4bb5c7)

Signed-off-by: Michael Wood <michael.g.wood@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Michael Wood
2016-12-09 16:52:45 +00:00
committed by Richard Purdie
parent 90d995c637
commit 7e80e501fb
4 changed files with 103 additions and 121 deletions
+98 -3
View File
@@ -20,6 +20,7 @@
import re
import logging
import json
from collections import Counter
from orm.models import Project, ProjectTarget, Build, Layer_Version
@@ -136,14 +137,17 @@ class XhrBuildRequest(View):
class XhrLayer(View):
""" Get and Update Layer information """
""" Delete, Get, Add and Update Layer information
Methods: POST DELETE PUT
"""
def post(self, request, *args, **kwargs):
"""
Update a layer
Entry point: /xhr_layer/<layerversion_id>
Method: POST
Entry point: /xhr_layer/<layerversion_id>
Args:
vcs_url, dirpath, commit, up_branch, summary, description,
@@ -201,9 +205,100 @@ class XhrLayer(View):
return error_response("Could not update layer version entry: %s"
% e)
return JsonResponse({"error": "ok"})
return error_response("ok")
def put(self, request, *args, **kwargs):
""" Add a new layer
Method: PUT
Entry point: /xhr_layer/
Args:
project_id, name,
[vcs_url, dir_path, git_ref], [local_source_dir], [layer_deps
(csv)]
"""
try:
project = Project.objects.get(pk=kwargs['pid'])
layer_data = json.loads(request.body.decode('utf-8'))
# We require a unique layer name as otherwise the lists of layers
# becomes very confusing
existing_layers = \
project.get_all_compatible_layer_versions().values_list(
"layer__name",
flat=True)
add_to_project = False
layer_deps_added = []
if 'add_to_project' in layer_data:
add_to_project = True
if layer_data['name'] in existing_layers:
return JsonResponse({"error": "layer-name-exists"})
layer = Layer.objects.create(name=layer_data['name'])
layer_version = Layer_Version.objects.create(
layer=layer,
project=project,
layer_source=LayerSource.TYPE_IMPORTED)
# Local layer
if 'local_source_dir' in layer_data:
layer.local_source_dir = layer_data['local_source_dir']
# git layer
elif 'vcs_url' in layer_data:
layer.vcs_url = layer_data['vcs_url']
layer_version.dirpath = layer_data['dir_path']
layer_version.commit = layer_data['get_ref']
layer_version.branch = layer_data['get_ref']
layer.save()
layer_version.save()
if add_to_project:
ProjectLayer.objects.get_or_create(
layercommit=layer_version, project=project)
# Add the layer dependencies
if 'layer_deps' in layer_data:
for layer_dep_id in layer_data['layer_deps'].split(","):
layer_dep = Layer_Version.objects.get(pk=layer_dep_id)
LayerVersionDependency.objects.get_or_create(
layer_version=layer_version, depends_on=layer_dep)
# Add layer deps to the project if specified
if add_to_project:
created, pl = ProjectLayer.objects.get_or_create(
layercommit=layer_dep, project=project)
layer_deps_added.append(
{'name': layer_dep.layer.name,
'layerdetailurl':
layer_dep.get_detailspage_url(project.pk)})
except Layer_Version.DoesNotExist:
return error_response("layer-dep-not-found")
except Project.DoesNotExist:
return error_response("project-not-found")
except KeyError:
return error_response("incorrect-parameters")
return JsonResponse({'error': "ok",
'imported_layer': {
'name': layer.name,
'layerdetailurl':
layer_version.get_detailspage_url()},
'deps_added': layer_deps_added})
def delete(self, request, *args, **kwargs):
""" Delete an imported layer
Method: DELETE
Entry point: /xhr_layer/<layerversion_id>
"""
try:
# We currently only allow Imported layers to be deleted
layer_version = Layer_Version.objects.get(