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:
committed by
Richard Purdie
parent
90d995c637
commit
7e80e501fb
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user