'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/',
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 */
/* 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;
}
/* 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") {
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) {
* 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();
$scope.onLayerSelect = function (item) {
- $scope.layerAddId = item.id;
+ $scope.layerToAdd = item;
};
$scope.machineSelect = function (machineName) {
};
- $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);
});
modalInstance.result.then(function (selectedArray) {
- selectedArray.push($scope.layerAddId);
+ selectedArray.push($scope.layerToAdd.layerversion.id);
console.warn("TRC6: selected", selectedArray);
$scope._makeXHRCall({
$scope._makeXHRCall({
method: "POST", url: $scope.urls.xhr_edit,
data: {
- layerAdd: $scope.layerAddId,
+ layerAdd: $scope.layerToAdd.layerversion.id,
}
}).then(function () {
$scope.layerAddName = undefined;
_cmdExecuteWithParam("/layeradd=", function (layer) {
- angular.forEach(layer.split(","), function (l) {
- $scope.layerAddId = l;
+ $scope.layerToAdd = layer;
$scope.layerAdd();
- });
});
};
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,
$(document).ready(function () {
/* Vars needed for base.js */
var ctx = {};
- ctx.projectInfoUrl = "{% url 'xhr_projectinfo' %}";
ctx.numProjects = {{projects|length}};
ctx.currentUrl = "{{request.path|escapejs}}";
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 %}";
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):
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'),
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
"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:
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
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)
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 {}