]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
bitbake: toastergui: remove xhr_projectedit and xhr_projectinfo URLs
authorAlexandru DAMIAN <alexandru.damian@intel.com>
Mon, 8 Jun 2015 17:41:46 +0000 (18:41 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 11 Jun 2015 23:01:48 +0000 (00:01 +0100)
This patch removes the xhr_projectedit and xhr_projectinfo URLs
in favour of REST calls to the Project page.

The project page takes now the POST requests to modify project
settings. All usages of removed URLs are now changed to point to the
project page, using the json format.

The interface call specs have not modified.

(Bitbake rev: 6ad3078bd2be1a8cda99040acaa9bb81d77f0013)

Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
bitbake/lib/toaster/contrib/tts/urllist.py
bitbake/lib/toaster/toastergui/static/js/base.js
bitbake/lib/toaster/toastergui/static/js/libtoaster.js
bitbake/lib/toaster/toastergui/static/js/projectapp.js
bitbake/lib/toaster/toastergui/templates/base.html
bitbake/lib/toaster/toastergui/templates/project.html
bitbake/lib/toaster/toastergui/tests.py
bitbake/lib/toaster/toastergui/urls.py
bitbake/lib/toaster/toastergui/views.py

index a7d6d6ec4e961bdf6459c98e02c78328f5927733..433ac9fe85d3bfd41cff79b40f8be884ef100050 100644 (file)
@@ -40,10 +40,7 @@ URLS = [
 'toastergui/project/1/importlayer',
 'toastergui/project/1/targets/',
 'toastergui/project/1/machines/',
-'toastergui/xhr_build/',
 'toastergui/xhr_projectbuild/1/',
-'toastergui/xhr_projectinfo/',
-'toastergui/xhr_projectedit/1',
 'toastergui/xhr_configvaredit/1',
 'toastergui/xhr_datatypeahead/1',
 'toastergui/xhr_importlayer/',
index 9424b6c3284e552cb4d70e6a96d175087fbb3ba2..9c8d01ef5a9a1825f94d7c1d621235afabe556b4 100644 (file)
@@ -29,7 +29,7 @@ function basePageInit (ctx) {
     if (libtoaster.ctx.projectId == undefined)
       return;
 
-    libtoaster.getProjectInfo(ctx.projectInfoUrl, libtoaster.ctx.projectId,
+    libtoaster.getProjectInfo(libtoaster.ctx.projectPageUrl,
       function(data){
         if (data.machine.name == undefined || data.layers.length == 0) {
           /* we can't build anything with out a machine and some layers */
@@ -102,7 +102,6 @@ function basePageInit (ctx) {
       /* TBD: do we override even if we already have a context project ?? */
       /* TODO: replace global library context with references to the "selected" project */
       libtoaster.ctx.projectPageUrl = selectedProject.projectPageUrl;
-      libtoaster.ctx.xhrProjectEditUrl = selectedProject.xhrProjectEditUrl;
       libtoaster.ctx.projectName = selectedProject.name;
       libtoaster.ctx.projectId = selectedProject.id;
 
index 72fb0a93f531617bc394c1ac97ba13e977e89996..87910299a5d7545128180b5ed2d5f158c9e3b47d 100644 (file)
@@ -120,11 +120,11 @@ var libtoaster = (function (){
   }
 
   /* Get a project's configuration info */
-  function _getProjectInfo(url, projectId, onsuccess, onfail){
+  function _getProjectInfo(url, onsuccess, onfail){
     $.ajax({
-        type: "POST",
+        type: "GET",
+        data : { format: "json" },
         url: url,
-        data: { project_id : projectId },
         headers: { 'X-CSRFToken' : $.cookie('csrftoken')},
         success: function (_data) {
           if (_data.error !== "ok") {
@@ -150,7 +150,7 @@ var libtoaster = (function (){
   function _editCurrentProject(data, onSuccess, onFail){
     $.ajax({
         type: "POST",
-        url: libtoaster.ctx.xhrProjectEditUrl,
+        url: libtoaster.ctx.projectPageUrl + "?format=json",
         data: data,
         headers: { 'X-CSRFToken' : $.cookie('csrftoken')},
         success: function (data) {
index a3309c76af03a86613f751d3d640c1ddaeb8c3f0..36c942fa2981199a76d394e89ef4339694f295ce 100644 (file)
@@ -156,6 +156,62 @@ projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $loc
      * Retrieves text suggestions for text-edit drop down autocomplete boxes
      */
 
+    $scope.getLayersAutocompleteSuggestions = function(currentValue) {
+        var deffered = $q.defer();
+
+        $http({method:"GET", url: $scope.urls.layers, params : { search: currentValue, format: "json" }})
+            .success(function (_data) {
+                if (_data.error != "ok") {
+                    console.warn("error on data", _data.error);
+                    deffered.reject(_data.error);
+                }
+                deffered.resolve(_data.rows);
+            });
+
+        return deffered.promise;
+    }
+
+    $scope.filterProjectLayerIds = function () {
+        return $scope.layers.map(function (e) { return e.id; });
+    }
+
+    $scope.getMachinesAutocompleteSuggestions = function(currentValue) {
+        var deffered = $q.defer();
+
+        $http({method:"GET", url: $scope.urls.machines, params : { search: currentValue, format: "json" }})
+            .success(function (_data) {
+                if (_data.error != "ok") {
+                    console.warn("error on data", _data.error);
+                    deffered.reject(_data.error);
+                }
+                deffered.resolve(_data.rows);
+            });
+
+        return deffered.promise;
+    }
+
+    $scope.getRecipesAutocompleteSuggestions = function(currentValue) {
+        var deffered = $q.defer();
+
+        $http({method:"GET", url: $scope.urls.targets, params : { search: currentValue, format: "json" }})
+            .success(function (_data) {
+                if (_data.error != "ok") {
+                    console.warn("error on data", _data.error);
+                    deffered.reject(_data.error);
+                }
+                deffered.resolve(_data.rows);
+            });
+        return deffered.promise;
+    }
+
+    $scope.values = function() {
+        var deffered = $q.defer();
+
+        deffered.resolve(["mama", "tata"]);
+
+        return deffered.promise;
+    };
+
     $scope.getAutocompleteSuggestions = function(type, currentValue) {
         var deffered = $q.defer();
 
@@ -421,7 +477,7 @@ projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $loc
 
 
     $scope.onLayerSelect = function (item) {
-        $scope.layerAddId = item.id;
+        $scope.layerToAdd = item;
     };
 
     $scope.machineSelect = function (machineName) {
@@ -443,14 +499,9 @@ projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $loc
     };
 
 
-    $scope.layerAddById = function (id) {
-        $scope.layerAddId = id;
-        $scope.layerAdd();
-    };
-
     $scope.layerAdd = function() {
 
-        $http({method:"GET", url: $scope.urls.xhr_datatypeahead, params : { type: "layerdeps", value: $scope.layerAddId }})
+        $http({method:"GET", url: $scope.layerToAdd.layerdict.layerdetailurl, params : {}})
         .success(function (_data) {
              if (_data.error != "ok") {
                  console.warn(_data.error);
@@ -493,7 +544,7 @@ projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $loc
                      });
 
                      modalInstance.result.then(function (selectedArray) {
-                         selectedArray.push($scope.layerAddId);
+                         selectedArray.push($scope.layerToAdd.layerversion.id);
                          console.warn("TRC6: selected", selectedArray);
 
                          $scope._makeXHRCall({
@@ -512,7 +563,7 @@ projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $loc
                          $scope._makeXHRCall({
                              method: "POST", url: $scope.urls.xhr_edit,
                              data: {
-                                 layerAdd:  $scope.layerAddId,
+                                 layerAdd:  $scope.layerToAdd.layerversion.id,
                              }
                          }).then(function () {
                              $scope.layerAddName = undefined;
@@ -768,10 +819,8 @@ projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $loc
 
 
         _cmdExecuteWithParam("/layeradd=", function (layer) {
-            angular.forEach(layer.split(","), function (l) {
-                $scope.layerAddId = l;
+                $scope.layerToAdd = layer;
                 $scope.layerAdd();
-            });
         });
     };
 
index e10dc116736ae38d5eeead2a165c8de109050fd8..5d51bc3c9577eec42d06e2044a9be9f5e0b6c178 100644 (file)
     projectsUrl : "{% url 'all-projects' %}",
     {% if project.id %}
       xhrProjectDataTypeaheadUrl : "{% url 'xhr_datatypeahead' project.id %}",
-      xhrProjectEditUrl : "{% url 'xhr_projectedit' project.id %}",
       projectPageUrl : "{% url 'project' project.id %}",
       projectName : "{{project.name}}",
       projectId : {{project.id}},
     {% else %}
       xhrProjectDataTypeaheadUrl : undefined,
-      xhrProjectEditUrl : undefined,
       projectPageUrl : undefined,
       projectName : undefined,
       projectId : undefined,
@@ -53,7 +51,6 @@
   $(document).ready(function () {
     /* Vars needed for base.js */
     var ctx = {};
-    ctx.projectInfoUrl = "{% url 'xhr_projectinfo' %}";
     ctx.numProjects = {{projects|length}};
     ctx.currentUrl = "{{request.path|escapejs}}";
 
index 933da4f7daa386bd29a63465e63dd255c0b42503..e59863130488d8bad1cad4efc24647d98e596b7e 100644 (file)
@@ -430,7 +430,7 @@ angular.element(document).ready(function() {
   scope = angular.element("#main").scope();
   scope.urls = {};
   scope.urls.xhr_build = "{% url 'xhr_projectbuild' project.id %}";
-  scope.urls.xhr_edit = "{% url 'xhr_projectedit' project.id %}";
+  scope.urls.xhr_edit = "{% url 'project' project.id %}?format=json";
   scope.urls.xhr_datatypeahead = "{% url 'xhr_datatypeahead' project.id %}";
   scope.urls.layers = "{% url 'all-layers' project.id %}";
   scope.urls.targets = "{% url 'all-targets' project.id %}";
index 0f100209404fbf7f17cc6f3660269db7164f663c..c92c5feeb580205b1bd1e1b01b18ed229a94c825 100644 (file)
@@ -40,7 +40,6 @@ class AllProjectsViewTestCase(ProvisionedProjectTestCase):
         self.assertTrue("id" in data["list"][0])
         self.assertTrue("xhrProjectDataTypeaheadUrl" in data["list"][0])
         self.assertTrue("projectPageUrl" in data["list"][0])
-        self.assertTrue("xhrProjectEditUrl" in data["list"][0])
         self.assertTrue("projectBuildUrl" in data["list"][0])
 
 class ProvisionedLayersProjectTestCase(ProvisionedProjectTestCase):
index e10e0bb15965c94d71679b72b711f9c4c67dde7e..d527be001764a76cbc1b9abaa1ebf11bc6ffa589 100644 (file)
@@ -122,8 +122,6 @@ urlpatterns = patterns('toastergui.views',
             name=tables.LayerMachinesTable.__name__.lower()),
 
         url(r'^xhr_projectbuild/(?P<pid>\d+)$', 'xhr_projectbuild', name='xhr_projectbuild'),
-        url(r'^xhr_projectinfo/$', 'xhr_projectinfo', name='xhr_projectinfo'),
-        url(r'^xhr_projectedit/(?P<pid>\d+)$', 'xhr_projectedit', name='xhr_projectedit'),
         url(r'^xhr_configvaredit/(?P<pid>\d+)$', 'xhr_configvaredit', name='xhr_configvaredit'),
 
         url(r'^xhr_datatypeahead/(?P<pid>\d+)$', 'xhr_datatypeahead', name='xhr_datatypeahead'),
index 678e356e0d4c22dbf3bfa91731f802c885d7fff5..91c4fa25436bde48a2c53adcd5a093c53982d983 100755 (executable)
@@ -2210,6 +2210,45 @@ if toastermain.settings.MANAGED:
         except User.DoesNotExist:
             puser = None
 
+        # execute POST requests
+        if request.method == "POST":
+            # add layers
+            if 'layerAdd' in request.POST:
+                for lc in Layer_Version.objects.filter(pk__in=request.POST['layerAdd'].split(",")):
+                    ProjectLayer.objects.get_or_create(project = prj, layercommit = lc)
+
+            # remove layers
+            if 'layerDel' in request.POST:
+                for t in request.POST['layerDel'].strip().split(" "):
+                    pt = ProjectLayer.objects.filter(project = prj, layercommit_id = int(t)).delete()
+
+            if 'projectName' in request.POST:
+                prj.name = request.POST['projectName']
+                prj.save();
+
+            if 'projectVersion' in request.POST:
+                prj.release = Release.objects.get(pk = request.POST['projectVersion'])
+                # we need to change the bitbake version
+                prj.bitbake_version = prj.release.bitbake_version
+                prj.save()
+                # we need to change the layers
+                for i in prj.projectlayer_set.all():
+                    # find and add a similarly-named layer on the new branch
+                    try:
+                        lv = prj.compatible_layerversions(layer_name = i.layercommit.layer.name)[0]
+                        ProjectLayer.objects.get_or_create(project = prj, layercommit = lv)
+                    except IndexError:
+                        pass
+                    finally:
+                        # get rid of the old entry
+                        i.delete()
+
+            if 'machineName' in request.POST:
+                machinevar = prj.projectvariable_set.get(name="MACHINE")
+                machinevar.value=request.POST['machineName']
+                machinevar.save()
+
+
         # we use implicit knowledge of the current user's project to filter layer information, e.g.
         pid = prj.id
 
@@ -2241,10 +2280,12 @@ if toastermain.settings.MANAGED:
                         "branch" : { "name" : x.layercommit.get_vcs_reference(), "layersource" : x.layercommit.up_branch.layer_source.name if x.layercommit.up_branch != None else None}},
                     prj.projectlayer_set.all().order_by("id")),
             "targets" : map(lambda x: {"target" : x.target, "task" : x.task, "pk": x.pk}, prj.projecttarget_set.all()),
+            "variables": map(lambda x: (x.name, x.value), prj.projectvariable_set.all()),
             "freqtargets": freqtargets[:5],
             "releases": map(lambda x: {"id": x.pk, "name": x.name, "description":x.description}, Release.objects.all()),
             "project_html": 1,
         }
+
         try:
             context["machine"] = {"name": prj.projectvariable_set.get(name="MACHINE").value}
         except ProjectVariable.DoesNotExist:
@@ -2300,66 +2341,6 @@ if toastermain.settings.MANAGED:
         except Exception as e:
             return HttpResponse(jsonfilter({"error":str(e) + "\n" + traceback.format_exc()}), content_type = "application/json")
 
-    # This is a wraper for xhr_projectedit which allows for a project id
-    # which only becomes known client side
-    def xhr_projectinfo(request):
-        if request.POST.has_key("project_id") == False:
-            raise BadParameterException("invalid project id")
-
-        return xhr_projectedit(request, request.POST['project_id'])
-
-    def xhr_projectedit(request, pid):
-        try:
-            prj = Project.objects.get(id = pid)
-            # add layers
-            if 'layerAdd' in request.POST:
-                for lc in Layer_Version.objects.filter(pk__in=request.POST['layerAdd'].split(",")):
-                    ProjectLayer.objects.get_or_create(project = prj, layercommit = lc)
-
-            # remove layers
-            if 'layerDel' in request.POST:
-                for t in request.POST['layerDel'].strip().split(" "):
-                    pt = ProjectLayer.objects.filter(project = prj, layercommit_id = int(t)).delete()
-
-            if 'projectName' in request.POST:
-                prj.name = request.POST['projectName']
-                prj.save();
-
-            if 'projectVersion' in request.POST:
-                prj.release = Release.objects.get(pk = request.POST['projectVersion'])
-                # we need to change the bitbake version
-                prj.bitbake_version = prj.release.bitbake_version
-                prj.save()
-                # we need to change the layers
-                for i in prj.projectlayer_set.all():
-                    # find and add a similarly-named layer on the new branch
-                    try:
-                        lv = prj.compatible_layerversions(layer_name = i.layercommit.layer.name)[0]
-                        ProjectLayer.objects.get_or_create(project = prj, layercommit = lv)
-                    except IndexError:
-                        pass
-                    finally:
-                        # get rid of the old entry
-                        i.delete()
-
-            if 'machineName' in request.POST:
-                machinevar = prj.projectvariable_set.get(name="MACHINE")
-                machinevar.value=request.POST['machineName']
-                machinevar.save()
-
-            # return all project settings
-            return HttpResponse(jsonfilter( {
-                "error": "ok",
-                "layers" :  map(lambda x: {"id": x.layercommit.pk, "orderid" : x.pk, "name" : x.layercommit.layer.name, "giturl" : x.layercommit.layer.vcs_url, "url": x.layercommit.layer.layer_index_url, "layerdetailurl": reverse("layerdetails", args=(prj.id, x.layercommit.pk,)), "branch" : { "name" : x.layercommit.get_vcs_reference(), "layersource" : x.layercommit.up_branch.layer_source.name}}, prj.projectlayer_set.all().select_related("layer").order_by("id")),
-                "builds" : _project_recent_build_list(prj),
-                "variables": map(lambda x: (x.name, x.value), prj.projectvariable_set.all()),
-                "machine": {"name": prj.projectvariable_set.get(name="MACHINE").value},
-                "prj": {"name": prj.name, "release": { "id": prj.release.pk, "name": prj.release.name, "desc": prj.release.description}},
-                }), content_type = "application/json")
-
-        except Exception as e:
-            return HttpResponse(jsonfilter({"error":str(e) + "\n" + traceback.format_exc()}), content_type = "application/json")
-
 
     from django.views.decorators.csrf import csrf_exempt
     @csrf_exempt
@@ -2929,7 +2910,6 @@ if toastermain.settings.MANAGED:
             p.id = p.pk
             p.xhrProjectDataTypeaheadUrl = reverse('xhr_datatypeahead', args=(p.id,))
             p.projectPageUrl = reverse('project', args=(p.id,))
-            p.xhrProjectEditUrl = reverse('xhr_projectedit', args=(p.id,))
             p.projectBuildUrl = reverse('xhr_projectbuild', args=(p.id,))
 
         # build view-specific information; this is rendered specifically in the builds page, at the top of the page (i.e. Recent builds)
@@ -3233,14 +3213,6 @@ else:
     def xhr_projectbuild(request, pid):
         return {}
 
-    @_template_renderer('landing_not_managed.html')
-    def xhr_projectinfo(request):
-        return {}
-
-    @_template_renderer('landing_not_managed.html')
-    def xhr_projectedit(request, pid):
-        return {}
-
     @_template_renderer('landing_not_managed.html')
     def xhr_datatypeahead(request):
         return {}