summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/toastergui/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/toaster/toastergui/views.py')
-rwxr-xr-xbitbake/lib/toaster/toastergui/views.py94
1 files changed, 37 insertions, 57 deletions
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py
index e296cf6de3..23025a2a19 100755
--- a/bitbake/lib/toaster/toastergui/views.py
+++ b/bitbake/lib/toaster/toastergui/views.py
@@ -1806,6 +1806,20 @@ def package_included_reverse_dependencies(request, build_id, target_id, package_
1806def image_information_dir(request, build_id, target_id, packagefile_id): 1806def image_information_dir(request, build_id, target_id, packagefile_id):
1807 # stubbed for now 1807 # stubbed for now
1808 return redirect(builds) 1808 return redirect(builds)
1809 # the context processor that supplies data used across all the pages
1810
1811
1812def managedcontextprocessor(request):
1813 import subprocess
1814 ret = {
1815 "projects": Project.objects.all(),
1816 "MANAGED" : toastermain.settings.MANAGED,
1817 "DEBUG" : toastermain.settings.DEBUG,
1818 "TOASTER_BRANCH": toastermain.settings.TOASTER_BRANCH,
1819 "TOASTER_REVISION" : toastermain.settings.TOASTER_REVISION,
1820 }
1821 return ret
1822
1809 1823
1810 1824
1811import toastermain.settings 1825import toastermain.settings
@@ -1827,23 +1841,6 @@ if toastermain.settings.MANAGED:
1827 1841
1828 class BadParameterException(Exception): pass # error thrown on invalid POST requests 1842 class BadParameterException(Exception): pass # error thrown on invalid POST requests
1829 1843
1830 # the context processor that supplies data used across all the pages
1831 def managedcontextprocessor(request):
1832 import subprocess
1833 ret = {
1834 "projects": Project.objects.all(),
1835 "MANAGED" : toastermain.settings.MANAGED,
1836 "DEBUG" : toastermain.settings.DEBUG,
1837 "TOASTER_BRANCH": toastermain.settings.TOASTER_BRANCH,
1838 "TOASTER_REVISION" : toastermain.settings.TOASTER_REVISION,
1839 }
1840 if 'project_id' in request.session:
1841 try:
1842 ret['project'] = Project.objects.get(pk = request.session['project_id'])
1843 except Project.DoesNotExist:
1844 del request.session['project_id']
1845 return ret
1846
1847 1844
1848 class InvalidRequestException(Exception): 1845 class InvalidRequestException(Exception):
1849 def __init__(self, response): 1846 def __init__(self, response):
@@ -2176,7 +2173,7 @@ if toastermain.settings.MANAGED:
2176 puser = None 2173 puser = None
2177 2174
2178 # we use implicit knowledge of the current user's project to filter layer information, e.g. 2175 # we use implicit knowledge of the current user's project to filter layer information, e.g.
2179 request.session['project_id'] = prj.id 2176 pid = prj.id
2180 2177
2181 from collections import Counter 2178 from collections import Counter
2182 freqtargets = [] 2179 freqtargets = []
@@ -2201,7 +2198,7 @@ if toastermain.settings.MANAGED:
2201 "name" : x.layercommit.layer.name, 2198 "name" : x.layercommit.layer.name,
2202 "giturl": x.layercommit.layer.vcs_url, 2199 "giturl": x.layercommit.layer.vcs_url,
2203 "url": x.layercommit.layer.layer_index_url, 2200 "url": x.layercommit.layer.layer_index_url,
2204 "layerdetailurl": reverse("layerdetails", args=(x.layercommit.pk,)), 2201 "layerdetailurl": reverse("layerdetails", args=(prj.id, x.layercommit.pk,)),
2205 # This branch name is actually the release 2202 # This branch name is actually the release
2206 "branch" : { "name" : x.layercommit.get_vcs_reference(), "layersource" : x.layercommit.up_branch.layer_source.name if x.layercommit.up_branch != None else None}}, 2203 "branch" : { "name" : x.layercommit.get_vcs_reference(), "layersource" : x.layercommit.up_branch.layer_source.name if x.layercommit.up_branch != None else None}},
2207 prj.projectlayer_set.all().order_by("id")), 2204 prj.projectlayer_set.all().order_by("id")),
@@ -2237,7 +2234,7 @@ if toastermain.settings.MANAGED:
2237 try: 2234 try:
2238 if request.method != "POST": 2235 if request.method != "POST":
2239 raise BadParameterException("invalid method") 2236 raise BadParameterException("invalid method")
2240 request.session['project_id'] = pid 2237 pid = pid
2241 prj = Project.objects.get(id = pid) 2238 prj = Project.objects.get(id = pid)
2242 2239
2243 2240
@@ -2326,7 +2323,7 @@ if toastermain.settings.MANAGED:
2326 # return all project settings 2323 # return all project settings
2327 return HttpResponse(jsonfilter( { 2324 return HttpResponse(jsonfilter( {
2328 "error": "ok", 2325 "error": "ok",
2329 "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=(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")), 2326 "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")),
2330 "builds" : _project_recent_build_list(prj), 2327 "builds" : _project_recent_build_list(prj),
2331 "variables": map(lambda x: (x.name, x.value), prj.projectvariable_set.all()), 2328 "variables": map(lambda x: (x.name, x.value), prj.projectvariable_set.all()),
2332 "machine": {"name": prj.projectvariable_set.get(name="MACHINE").value}, 2329 "machine": {"name": prj.projectvariable_set.get(name="MACHINE").value},
@@ -2344,8 +2341,6 @@ if toastermain.settings.MANAGED:
2344 prj = None 2341 prj = None
2345 if request.GET.has_key('project_id'): 2342 if request.GET.has_key('project_id'):
2346 prj = Project.objects.get(pk = request.GET['project_id']) 2343 prj = Project.objects.get(pk = request.GET['project_id'])
2347 elif 'project_id' in request.session:
2348 prj = Project.objects.get(pk = request.session['project_id'])
2349 else: 2344 else:
2350 raise Exception("No valid project selected") 2345 raise Exception("No valid project selected")
2351 2346
@@ -2389,8 +2384,6 @@ if toastermain.settings.MANAGED:
2389 2384
2390 # returns layer versions that would be deleted on the new release__pk 2385 # returns layer versions that would be deleted on the new release__pk
2391 if request.GET['type'] == "versionlayers": 2386 if request.GET['type'] == "versionlayers":
2392 if not 'project_id' in request.session:
2393 raise Exception("This call cannot makes no sense outside a project context")
2394 2387
2395 retval = [] 2388 retval = []
2396 for i in prj.projectlayer_set.all(): 2389 for i in prj.projectlayer_set.all():
@@ -2689,16 +2682,15 @@ if toastermain.settings.MANAGED:
2689 2682
2690 2683
2691 2684
2692 def importlayer(request): 2685 def importlayer(request, pid):
2693 template = "importlayer.html" 2686 template = "importlayer.html"
2694 context = { 2687 context = {
2688 'project': Project.objects.get(id=pid),
2695 } 2689 }
2696 return render(request, template, context) 2690 return render(request, template, context)
2697 2691
2698 2692
2699 def layers(request): 2693 def layers(request, pid):
2700 if not 'project_id' in request.session:
2701 raise Exception("invalid page: cannot show page without a project")
2702 2694
2703 template = "layers.html" 2695 template = "layers.html"
2704 # define here what parameters the view needs in the GET portion in order to 2696 # define here what parameters the view needs in the GET portion in order to
@@ -2708,13 +2700,13 @@ if toastermain.settings.MANAGED:
2708 mandatory_parameters = { 'count': pagesize, 'page' : 1, 'orderby' : orderby }; 2700 mandatory_parameters = { 'count': pagesize, 'page' : 1, 'orderby' : orderby };
2709 retval = _verify_parameters( request.GET, mandatory_parameters ) 2701 retval = _verify_parameters( request.GET, mandatory_parameters )
2710 if retval: 2702 if retval:
2711 return _redirect_parameters( 'layers', request.GET, mandatory_parameters) 2703 return _redirect_parameters( 'all-layers', request.GET, mandatory_parameters, pid=pid)
2712 2704
2713 # boilerplate code that takes a request for an object type and returns a queryset 2705 # boilerplate code that takes a request for an object type and returns a queryset
2714 # for that object type. copypasta for all needed table searches 2706 # for that object type. copypasta for all needed table searches
2715 (filter_string, search_term, ordering_string) = _search_tuple(request, Layer_Version) 2707 (filter_string, search_term, ordering_string) = _search_tuple(request, Layer_Version)
2716 2708
2717 prj = Project.objects.get(pk = request.session['project_id']) 2709 prj = Project.objects.get(pk = pid)
2718 2710
2719 queryset_all = prj.compatible_layerversions() 2711 queryset_all = prj.compatible_layerversions()
2720 2712
@@ -2729,6 +2721,7 @@ if toastermain.settings.MANAGED:
2729 2721
2730 2722
2731 context = { 2723 context = {
2724 'project' : prj,
2732 'projectlayerset' : jsonfilter(map(lambda x: x.layercommit.id, prj.projectlayer_set.all())), 2725 'projectlayerset' : jsonfilter(map(lambda x: x.layercommit.id, prj.projectlayer_set.all())),
2733 'objects' : layer_info, 2726 'objects' : layer_info,
2734 'objectname' : "layers", 2727 'objectname' : "layers",
@@ -2773,7 +2766,7 @@ if toastermain.settings.MANAGED:
2773 2766
2774 return response 2767 return response
2775 2768
2776 def layerdetails(request, layerid): 2769 def layerdetails(request, pid, layerid):
2777 template = "layerdetails.html" 2770 template = "layerdetails.html"
2778 limit = 10 2771 limit = 10
2779 2772
@@ -2806,8 +2799,9 @@ if toastermain.settings.MANAGED:
2806 machines = _build_page_range(Paginator(machines_query.order_by("name"), limit), request.GET.get('mpage', 1)) 2799 machines = _build_page_range(Paginator(machines_query.order_by("name"), limit), request.GET.get('mpage', 1))
2807 2800
2808 context = { 2801 context = {
2802 'project' : Project.objects.get(pk=pid),
2809 'layerversion': layer_version, 2803 'layerversion': layer_version,
2810 'layer_in_project' : ProjectLayer.objects.filter(project_id=request.session['project_id'],layercommit=layerid).count(), 2804 'layer_in_project' : ProjectLayer.objects.filter(project_id=pid,layercommit=layerid).count(),
2811 'machines': machines, 2805 'machines': machines,
2812 'targets': targets, 2806 'targets': targets,
2813 'total_targets': Recipe.objects.filter(layer_version=layer_version).count(), 2807 'total_targets': Recipe.objects.filter(layer_version=layer_version).count(),
@@ -2816,19 +2810,16 @@ if toastermain.settings.MANAGED:
2816 } 2810 }
2817 return render(request, template, context) 2811 return render(request, template, context)
2818 2812
2819 def targets(request): 2813 def targets(request, pid):
2820 if not 'project_id' in request.session:
2821 raise Exception("invalid page: cannot show page without a project")
2822
2823 template = 'targets.html' 2814 template = 'targets.html'
2824 (pagesize, orderby) = _get_parameters_values(request, 100, 'name:+') 2815 (pagesize, orderby) = _get_parameters_values(request, 100, 'name:+')
2825 mandatory_parameters = { 'count': pagesize, 'page' : 1, 'orderby' : orderby } 2816 mandatory_parameters = { 'count': pagesize, 'page' : 1, 'orderby' : orderby }
2826 retval = _verify_parameters( request.GET, mandatory_parameters ) 2817 retval = _verify_parameters( request.GET, mandatory_parameters )
2827 if retval: 2818 if retval:
2828 return _redirect_parameters( 'all-targets', request.GET, mandatory_parameters) 2819 return _redirect_parameters( 'all-targets', request.GET, mandatory_parameters, pid = pid)
2829 (filter_string, search_term, ordering_string) = _search_tuple(request, Recipe) 2820 (filter_string, search_term, ordering_string) = _search_tuple(request, Recipe)
2830 2821
2831 prj = Project.objects.get(pk = request.session['project_id']) 2822 prj = Project.objects.get(pk = pid)
2832 queryset_all = Recipe.objects.filter(Q(layer_version__up_branch__name= prj.release.name) | Q(layer_version__build__in = prj.build_set.all())).filter(name__regex=r'.{1,}.*') 2823 queryset_all = Recipe.objects.filter(Q(layer_version__up_branch__name= prj.release.name) | Q(layer_version__build__in = prj.build_set.all())).filter(name__regex=r'.{1,}.*')
2833 2824
2834 queryset_with_search = _get_queryset(Recipe, queryset_all, None, search_term, ordering_string, '-name') 2825 queryset_with_search = _get_queryset(Recipe, queryset_all, None, search_term, ordering_string, '-name')
@@ -2854,6 +2845,7 @@ if toastermain.settings.MANAGED:
2854 e.vcs_link_url = e.vcs_link_url.replace('%branch%', e.preffered_layerversion.up_branch.name) 2845 e.vcs_link_url = e.vcs_link_url.replace('%branch%', e.preffered_layerversion.up_branch.name)
2855 2846
2856 context = { 2847 context = {
2848 'project' : prj,
2857 'projectlayerset' : jsonfilter(map(lambda x: x.layercommit.id, prj.projectlayer_set.all().select_related("layercommit"))), 2849 'projectlayerset' : jsonfilter(map(lambda x: x.layercommit.id, prj.projectlayer_set.all().select_related("layercommit"))),
2858 'objects' : target_info, 2850 'objects' : target_info,
2859 'objectname' : "recipes", 2851 'objectname' : "recipes",
@@ -2916,10 +2908,7 @@ if toastermain.settings.MANAGED:
2916 2908
2917 return response 2909 return response
2918 2910
2919 def machines(request): 2911 def machines(request, pid):
2920 if not 'project_id' in request.session:
2921 raise Exception("invalid page: cannot show page without a project")
2922
2923 template = "machines.html" 2912 template = "machines.html"
2924 # define here what parameters the view needs in the GET portion in order to 2913 # define here what parameters the view needs in the GET portion in order to
2925 # be able to display something. 'count' and 'page' are mandatory for all views 2914 # be able to display something. 'count' and 'page' are mandatory for all views
@@ -2928,13 +2917,13 @@ if toastermain.settings.MANAGED:
2928 mandatory_parameters = { 'count': pagesize, 'page' : 1, 'orderby' : orderby }; 2917 mandatory_parameters = { 'count': pagesize, 'page' : 1, 'orderby' : orderby };
2929 retval = _verify_parameters( request.GET, mandatory_parameters ) 2918 retval = _verify_parameters( request.GET, mandatory_parameters )
2930 if retval: 2919 if retval:
2931 return _redirect_parameters( 'machines', request.GET, mandatory_parameters) 2920 return _redirect_parameters( 'all-machines', request.GET, mandatory_parameters, pid = pid)
2932 2921
2933 # boilerplate code that takes a request for an object type and returns a queryset 2922 # boilerplate code that takes a request for an object type and returns a queryset
2934 # for that object type. copypasta for all needed table searches 2923 # for that object type. copypasta for all needed table searches
2935 (filter_string, search_term, ordering_string) = _search_tuple(request, Machine) 2924 (filter_string, search_term, ordering_string) = _search_tuple(request, Machine)
2936 2925
2937 prj = Project.objects.get(pk = request.session['project_id']) 2926 prj = Project.objects.get(pk = pid)
2938 compatible_layers = prj.compatible_layerversions() 2927 compatible_layers = prj.compatible_layerversions()
2939 2928
2940 queryset_all = Machine.objects.filter(layer_version__in=compatible_layers) 2929 queryset_all = Machine.objects.filter(layer_version__in=compatible_layers)
@@ -2946,7 +2935,7 @@ if toastermain.settings.MANAGED:
2946 # Make sure we only show machines / layers which are compatible 2935 # Make sure we only show machines / layers which are compatible
2947 # with the current project 2936 # with the current project
2948 2937
2949 project_layers = ProjectLayer.objects.filter(project_id=request.session['project_id']).values_list('layercommit',flat=True) 2938 project_layers = ProjectLayer.objects.filter(project_id=pid).values_list('layercommit',flat=True)
2950 2939
2951 # Now we need to weed out the layers which will appear as duplicated 2940 # Now we need to weed out the layers which will appear as duplicated
2952 # because they're from a layer source which doesn't need to be used 2941 # because they're from a layer source which doesn't need to be used
@@ -2958,6 +2947,7 @@ if toastermain.settings.MANAGED:
2958 machine_info = _build_page_range(Paginator(queryset_all, request.GET.get('count', 100)),request.GET.get('page', 1)) 2947 machine_info = _build_page_range(Paginator(queryset_all, request.GET.get('count', 100)),request.GET.get('page', 1))
2959 2948
2960 context = { 2949 context = {
2950 'project': prj,
2961 'objects' : machine_info, 2951 'objects' : machine_info,
2962 'projectlayerset' : jsonfilter(map(lambda x: x.layercommit.id, prj.projectlayer_set.all())), 2952 'projectlayerset' : jsonfilter(map(lambda x: x.layercommit.id, prj.projectlayer_set.all())),
2963 'objectname' : "machines", 2953 'objectname' : "machines",
@@ -3041,6 +3031,7 @@ if toastermain.settings.MANAGED:
3041 configvars = configvars.exclude(name = var) 3031 configvars = configvars.exclude(name = var)
3042 3032
3043 context = { 3033 context = {
3034 'project': prj,
3044 'configvars': configvars, 3035 'configvars': configvars,
3045 'vars_managed': vars_managed, 3036 'vars_managed': vars_managed,
3046 'vars_fstypes': vars_fstypes, 3037 'vars_fstypes': vars_fstypes,
@@ -3316,17 +3307,6 @@ if toastermain.settings.MANAGED:
3316 3307
3317 3308
3318else: 3309else:
3319 # these are pages that are NOT available in interactive mode
3320 def managedcontextprocessor(request):
3321 return {
3322 "projects": [],
3323 "MANAGED" : toastermain.settings.MANAGED,
3324 "DEBUG" : toastermain.settings.DEBUG,
3325 "TOASTER_BRANCH": toastermain.settings.TOASTER_BRANCH,
3326 "TOASTER_REVISION" : toastermain.settings.TOASTER_REVISION,
3327 }
3328
3329
3330 # shows the "all builds" page for interactive mode; this is the old code, simply moved 3310 # shows the "all builds" page for interactive mode; this is the old code, simply moved
3331 def builds(request): 3311 def builds(request):
3332 template = 'build.html' 3312 template = 'build.html'