diff options
Diffstat (limited to 'bitbake/lib/toaster/toastergui/api.py')
| -rw-r--r-- | bitbake/lib/toaster/toastergui/api.py | 99 |
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 |
| 21 | import re | 21 | import re |
| 22 | 22 | ||
| 23 | from orm.models import Project, ProjectTarget, Build | 23 | from orm.models import Project, ProjectTarget, Build, Layer_Version |
| 24 | from orm.models import LayerVersionDependency, LayerSource, ProjectLayer | ||
| 24 | from bldcontrol.models import BuildRequest | 25 | from bldcontrol.models import BuildRequest |
| 25 | from bldcontrol import bbcontroller | 26 | from bldcontrol import bbcontroller |
| 26 | from django.http import HttpResponse, JsonResponse | 27 | from django.http import HttpResponse, JsonResponse |
| 27 | from django.views.generic import View | 28 | from django.views.generic import View |
| 29 | from django.core.urlresolvers import reverse | ||
| 30 | |||
| 28 | 31 | ||
| 29 | 32 | ||
| 30 | class XhrBuildRequest(View): | 33 | class 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 | |||
| 117 | class 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 | }) | ||
