diff options
Diffstat (limited to 'bitbake/lib/toaster/toastergui/views.py')
-rwxr-xr-x | bitbake/lib/toaster/toastergui/views.py | 59 |
1 files changed, 37 insertions, 22 deletions
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index a0dcf8797a..11c373a84d 100755 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py | |||
@@ -1935,7 +1935,21 @@ if toastermain.settings.MANAGED: | |||
1935 | 1935 | ||
1936 | raise Exception("Invalid HTTP method for this page") | 1936 | raise Exception("Invalid HTTP method for this page") |
1937 | 1937 | ||
1938 | # returns a queryset of compatible layers for a project | ||
1939 | def _compatible_layerversions_for_project(prj, release = None, layer_name = None): | ||
1940 | if release == None: | ||
1941 | release = prj.release | ||
1942 | # layers on the same branch or layers specifically set for this project | ||
1943 | return Layer_Version.objects.filter((Q(up_branch__name = release.branch_name) & Q(project = None)) | Q(project = prj)) | ||
1938 | 1944 | ||
1945 | |||
1946 | # returns the equivalence group for all the layers currently set in the project | ||
1947 | def _project_equivalent_layerversions(prj): | ||
1948 | return reduce(lambda x, y: list(x) + list(y), | ||
1949 | # take all equivalent layers for each entry | ||
1950 | map(lambda x: x.layercommit.get_equivalents_wpriority(prj), prj.projectlayer_set.all()) , []) | ||
1951 | |||
1952 | # returns a list for most recent builds; for use in the Project page, xhr_ updates, and other places, as needed | ||
1939 | def _project_recent_build_list(prj): | 1953 | def _project_recent_build_list(prj): |
1940 | return map(lambda x: { | 1954 | return map(lambda x: { |
1941 | "id": x.pk, | 1955 | "id": x.pk, |
@@ -2101,7 +2115,7 @@ if toastermain.settings.MANAGED: | |||
2101 | for i in prj.projectlayer_set.all(): | 2115 | for i in prj.projectlayer_set.all(): |
2102 | # find and add a similarly-named layer on the new branch | 2116 | # find and add a similarly-named layer on the new branch |
2103 | try: | 2117 | try: |
2104 | lv = Layer_Version.objects.filter(layer__name = i.layercommit.layer.name, up_branch__name = prj.release.branch_name)[0].get_equivalents_wpriority(prj)[0] | 2118 | lv = _compatible_layerversions_for_project(prj).filter(layer__name = i.layer.name).get_equivalents_wpriority(prj)[0] |
2105 | ProjectLayer.objects.get_or_create(project = prj, layercommit = lv) | 2119 | ProjectLayer.objects.get_or_create(project = prj, layercommit = lv) |
2106 | except IndexError: | 2120 | except IndexError: |
2107 | pass | 2121 | pass |
@@ -2140,30 +2154,32 @@ if toastermain.settings.MANAGED: | |||
2140 | else: | 2154 | else: |
2141 | raise Exception("No valid project selected") | 2155 | raise Exception("No valid project selected") |
2142 | 2156 | ||
2143 | # returns layers for current project release that are not in the project set | 2157 | |
2158 | def _lv_to_dict(x): | ||
2159 | return {"id": x.pk, "name": x.layer.name, | ||
2160 | "detail": "(" + x.layer.vcs_url + (")" if x.up_branch == None else " | "+x.up_branch.name+")"), | ||
2161 | "giturl": x.layer.vcs_url, "layerdetailurl" : reverse('layerdetails', args=(x.pk,))} | ||
2162 | |||
2163 | |||
2164 | # returns layers for current project release that are not in the project set, matching the name | ||
2144 | if request.GET['type'] == "layers": | 2165 | if request.GET['type'] == "layers": |
2145 | queryset_all = Layer_Version.objects.filter(layer__name__icontains=request.GET.get('value','')) | 2166 | queryset_all = _compatible_layerversions_for_project(prj).filter(layer__name__icontains=request.GET.get('value','')) |
2146 | queryset_all = queryset_all.filter(up_branch__name= prj.release.branch_name).exclude(pk__in = [x.id for x in reduce(lambda x, y: list(x) + list(y), map(lambda x: x.layercommit.get_equivalents_wpriority(prj), prj.projectlayer_set.all()))]) | 2167 | |
2168 | queryset_all = queryset_all.exclude(pk__in = [x.id for x in _project_equivalent_layerversions(prj)]) | ||
2147 | 2169 | ||
2148 | queryset_all = set([x.get_equivalents_wpriority(prj)[0] for x in queryset_all[:8]]) | 2170 | queryset_all = set([x.get_equivalents_wpriority(prj)[0] for x in queryset_all[:8]]) |
2149 | 2171 | ||
2150 | return HttpResponse(jsonfilter( { "error":"ok", | 2172 | return HttpResponse(jsonfilter( { "error":"ok", "list" : map( _lv_to_dict, queryset_all) }), content_type = "application/json") |
2151 | "list" : map( lambda x: {"id": x.pk, "name": "%s" % (x.layer.name, ), "detail": "(" + x.layer.vcs_url + (")" if x.up_branch == None else " | "+x.up_branch.name+")")}, | ||
2152 | queryset_all) | ||
2153 | }), content_type = "application/json") | ||
2154 | 2173 | ||
2155 | 2174 | ||
2156 | # returns layer dependencies for a layer, excluding current project layers | 2175 | # returns layer dependencies for a layer, excluding current project layers |
2157 | if request.GET['type'] == "layerdeps": | 2176 | if request.GET['type'] == "layerdeps": |
2158 | queryset_all = LayerVersionDependency.objects.filter(layer_version_id = request.GET['value']) | 2177 | queryset_all = LayerVersionDependency.objects.filter(layer_version_id = request.GET['value']) |
2159 | queryset_all = queryset_all.exclude(depends_on__in = reduce(lambda x, y: list(x) + list(y), map(lambda x: x.layercommit.get_equivalents_wpriority(prj), prj.projectlayer_set.all()))) | 2178 | queryset_all = queryset_all.exclude(depends_on__in = _project_equivalent_layerversions(prj)) |
2160 | queryset_all.order_by("-up_id"); | 2179 | queryset_all.order_by("-up_id"); |
2161 | 2180 | ||
2162 | return HttpResponse(jsonfilter( { "error":"ok", | 2181 | return HttpResponse(jsonfilter( { "error":"ok", |
2163 | "list" : map( | 2182 | "list" : map( _lv_to_dict, map(lambda x: x.depends_on.get_equivalents_wpriority(prj)[0], queryset_all)) |
2164 | lambda x: {"id": x.pk, "name": x.layer.name, "detail": "(" + x.layer.layer_source.name + (")" if x.up_branch == None else " | "+x.up_branch.name+")"), | ||
2165 | "giturl": x.layer.vcs_url, "layerdetailurl" : reverse('layerdetails', args=(x.pk,))}, | ||
2166 | map(lambda x: x.depends_on.get_equivalents_wpriority(prj)[0], queryset_all)) | ||
2167 | }), content_type = "application/json") | 2183 | }), content_type = "application/json") |
2168 | 2184 | ||
2169 | 2185 | ||
@@ -2174,20 +2190,20 @@ if toastermain.settings.MANAGED: | |||
2174 | 2190 | ||
2175 | retval = [] | 2191 | retval = [] |
2176 | for i in prj.projectlayer_set.all(): | 2192 | for i in prj.projectlayer_set.all(): |
2177 | lv = Layer_Version.objects.filter(layer__name = i.layercommit.layer.name, up_branch__name = Release.objects.get(pk=request.GET['value']).branch_name) | 2193 | lv = _compatible_layerversions_for_project(prj, release = Release.objects.get(pk=request.GET['value'])) |
2178 | if lv.count() < 1: # there is no layer_version with the new release id, and the same name | 2194 | # there is no layer_version with the new release id, and the same name |
2195 | if lv.count() < 1: | ||
2179 | retval.append(i) | 2196 | retval.append(i) |
2180 | 2197 | ||
2181 | return HttpResponse(jsonfilter( {"error":"ok", | 2198 | return HttpResponse(jsonfilter( {"error":"ok", |
2182 | "list": map( | 2199 | "list" : map( _lv_to_dict, map(lambda x: x.layercommit, retval )) |
2183 | lambda x: {"id": x.layercommit.pk, "name": x.layercommit.layer.name, "detail": "(" + x.layercommit.layer.layer_source.name + (")" if x.layercommit.up_branch == None else " | "+x.layercommit.up_branch.name+")")}, | 2200 | }), content_type = "application/json") |
2184 | retval) }), content_type = "application/json") | ||
2185 | 2201 | ||
2186 | 2202 | ||
2187 | # returns targets provided by current project layers | 2203 | # returns targets provided by current project layers |
2188 | if request.GET['type'] == "targets": | 2204 | if request.GET['type'] == "targets": |
2189 | queryset_all = Recipe.objects.all() | 2205 | queryset_all = Recipe.objects.all() |
2190 | queryset_all = queryset_all.filter(layer_version__in = reduce(lambda x, y: list(x) + list(y), map(lambda x: x.layercommit.get_equivalents_wpriority(prj), ProjectLayer.objects.filter(project = prj)))) | 2206 | queryset_all = queryset_all.filter(layer_version__in = reduce(lambda x, y: list(x) + list(y), map(lambda x: x.layercommit.get_equivalents_wpriority(prj), prj.projectlayer_set.all()), [])) |
2191 | return HttpResponse(jsonfilter({ "error":"ok", | 2207 | return HttpResponse(jsonfilter({ "error":"ok", |
2192 | "list" : map ( lambda x: {"id": x.pk, "name": x.name, "detail":"[" + x.layer_version.layer.name+ (" | " + x.layer_version.up_branch.name + "]" if x.layer_version.up_branch is not None else "]")}, | 2208 | "list" : map ( lambda x: {"id": x.pk, "name": x.name, "detail":"[" + x.layer_version.layer.name+ (" | " + x.layer_version.up_branch.name + "]" if x.layer_version.up_branch is not None else "]")}, |
2193 | queryset_all.filter(name__icontains=request.GET.get('value',''))[:8]), | 2209 | queryset_all.filter(name__icontains=request.GET.get('value',''))[:8]), |
@@ -2243,10 +2259,9 @@ if toastermain.settings.MANAGED: | |||
2243 | # for that object type. copypasta for all needed table searches | 2259 | # for that object type. copypasta for all needed table searches |
2244 | (filter_string, search_term, ordering_string) = _search_tuple(request, Layer_Version) | 2260 | (filter_string, search_term, ordering_string) = _search_tuple(request, Layer_Version) |
2245 | 2261 | ||
2246 | queryset_all = Layer_Version.objects.all() | ||
2247 | |||
2248 | prj = Project.objects.get(pk = request.session['project_id']) | 2262 | prj = Project.objects.get(pk = request.session['project_id']) |
2249 | queryset_all = queryset_all.filter(up_branch__name = prj.release.branch_name) | 2263 | |
2264 | queryset_all = _compatible_layerversions_for_project(prj) | ||
2250 | 2265 | ||
2251 | queryset_all = _get_queryset(Layer_Version, queryset_all, filter_string, search_term, ordering_string, '-layer__name') | 2266 | queryset_all = _get_queryset(Layer_Version, queryset_all, filter_string, search_term, ordering_string, '-layer__name') |
2252 | 2267 | ||