summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/toastergui/views.py
diff options
context:
space:
mode:
authorMichael Wood <michael.g.wood@intel.com>2015-05-11 18:51:28 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-05-14 18:04:09 +0100
commit23f5b009e0ebf59cfcc9ae90a1084468fc88e42f (patch)
tree06eb458cbd9a95dd635160adac7d90aeae6afea1 /bitbake/lib/toaster/toastergui/views.py
parent7f8c44771cc6219ad7e58da7840fffbe93f11b39 (diff)
downloadpoky-23f5b009e0ebf59cfcc9ae90a1084468fc88e42f.tar.gz
bitbake: toaster: Port All recipes, layers and machines to ToasterTables
Port of the main tables to the new ToasterTable widget. (Bitbake rev: 6de539d5953b2dca2a9ed75556a59764337a194c) Signed-off-by: Michael Wood <michael.g.wood@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/toaster/toastergui/views.py')
-rwxr-xr-xbitbake/lib/toaster/toastergui/views.py267
1 files changed, 1 insertions, 266 deletions
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py
index c22f2c1aba..9217d8a100 100755
--- a/bitbake/lib/toaster/toastergui/views.py
+++ b/bitbake/lib/toaster/toastergui/views.py
@@ -2317,7 +2317,7 @@ if toastermain.settings.MANAGED:
2317 "tooltip": x.layer.vcs_url+" | "+x.get_vcs_reference(), 2317 "tooltip": x.layer.vcs_url+" | "+x.get_vcs_reference(),
2318 "detail": "(" + x.layer.vcs_url + (")" if x.up_branch == None else " | "+x.get_vcs_reference()+")"), 2318 "detail": "(" + x.layer.vcs_url + (")" if x.up_branch == None else " | "+x.get_vcs_reference()+")"),
2319 "giturl": x.layer.vcs_url, 2319 "giturl": x.layer.vcs_url,
2320 "layerdetailurl" : reverse('layerdetails', args=(pid, x.pk,)), 2320 "layerdetailurl" : reverse('layerdetails', args=(prj.id,x.pk)),
2321 "revision" : x.get_vcs_reference(), 2321 "revision" : x.get_vcs_reference(),
2322 } 2322 }
2323 2323
@@ -2656,81 +2656,6 @@ if toastermain.settings.MANAGED:
2656 return render(request, template, context) 2656 return render(request, template, context)
2657 2657
2658 2658
2659 def layers(request, pid):
2660
2661 template = "layers.html"
2662 # define here what parameters the view needs in the GET portion in order to
2663 # be able to display something. 'count' and 'page' are mandatory for all views
2664 # that use paginators.
2665 (pagesize, orderby) = _get_parameters_values(request, 100, 'layer__name:+')
2666 mandatory_parameters = { 'count': pagesize, 'page' : 1, 'orderby' : orderby };
2667 retval = _verify_parameters( request.GET, mandatory_parameters )
2668 if retval:
2669 return _redirect_parameters( 'all-layers', request.GET, mandatory_parameters, pid=pid)
2670
2671 # boilerplate code that takes a request for an object type and returns a queryset
2672 # for that object type. copypasta for all needed table searches
2673 (filter_string, search_term, ordering_string) = _search_tuple(request, Layer_Version)
2674
2675 prj = Project.objects.get(pk = pid)
2676
2677 queryset_all = prj.compatible_layerversions()
2678
2679 queryset_all = _get_queryset(Layer_Version, queryset_all, filter_string, search_term, ordering_string, '-layer__name')
2680
2681 object_list = set([x.get_equivalents_wpriority(prj)[0] for x in queryset_all])
2682 object_list = list(object_list)
2683
2684
2685 # retrieve the objects that will be displayed in the table; layers a paginator and gets a page range to display
2686 layer_info = _build_page_range(Paginator(object_list, request.GET.get('count', 10)),request.GET.get('page', 1))
2687
2688
2689 context = {
2690 'project' : prj,
2691 'projectlayerset' : jsonfilter(map(lambda x: x.layercommit.id, prj.projectlayer_set.all())),
2692 'objects' : layer_info,
2693 'objectname' : "layers",
2694 'default_orderby' : 'layer__name:+',
2695
2696 'tablecols' : [
2697 { 'name': 'Layer',
2698 'orderfield': _get_toggle_order(request, "layer__name"),
2699 'ordericon' : _get_toggle_order_icon(request, "layer__name"),
2700 },
2701 { 'name': 'Description',
2702 'dclass': 'span4',
2703 'clclass': 'description',
2704 },
2705 { 'name': 'Git repository URL',
2706 'dclass': 'span6',
2707 'clclass': 'git-repo', 'hidden': 1,
2708 'qhelp': "The Git repository for the layer source code",
2709 },
2710 { 'name': 'Subdirectory',
2711 'clclass': 'git-subdir',
2712 'hidden': 1,
2713 'qhelp': "The layer directory within the Git repository",
2714 },
2715 { 'name': 'Revision',
2716 'clclass': 'branch',
2717 'qhelp': "The Git branch, tag or commit. For the layers from the OpenEmbedded layer source, the revision is always the branch compatible with the Yocto Project version you selected for this project",
2718 },
2719 { 'name': 'Dependencies',
2720 'clclass': 'dependencies',
2721 'qhelp': "Other layers a layer depends upon",
2722 },
2723 { 'name': 'Add | Delete',
2724 'dclass': 'span2',
2725 'qhelp': "Add or delete layers to / from your project ",
2726 },
2727 ]
2728 }
2729
2730 response = render(request, template, context)
2731 _save_parameters_cookies(response, pagesize, orderby, request)
2732
2733 return response
2734 2659
2735 def layerdetails(request, pid, layerid): 2660 def layerdetails(request, pid, layerid):
2736 template = "layerdetails.html" 2661 template = "layerdetails.html"
@@ -2776,187 +2701,6 @@ if toastermain.settings.MANAGED:
2776 } 2701 }
2777 return render(request, template, context) 2702 return render(request, template, context)
2778 2703
2779 def targets(request, pid):
2780 template = 'targets.html'
2781 (pagesize, orderby) = _get_parameters_values(request, 100, 'name:+')
2782 mandatory_parameters = { 'count': pagesize, 'page' : 1, 'orderby' : orderby }
2783 retval = _verify_parameters( request.GET, mandatory_parameters )
2784 if retval:
2785 return _redirect_parameters( 'all-targets', request.GET, mandatory_parameters, pid = pid)
2786 (filter_string, search_term, ordering_string) = _search_tuple(request, Recipe)
2787
2788 prj = Project.objects.get(pk = pid)
2789 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,}.*')
2790
2791 queryset_with_search = _get_queryset(Recipe, queryset_all, None, search_term, ordering_string, '-name')
2792
2793 # get unique values for 'name', and select the maximum ID for each entry (the max id is the newest one)
2794
2795 # force evaluation of the query here; to process the MAX/GROUP BY, a temporary table is used, on which indexing is very slow
2796 # by forcing the evaluation here we also prime the caches
2797 queryset_with_search_maxids = map(lambda i: i[0], list(queryset_with_search.values('name').distinct().annotate(max_id=Max('id')).values_list('max_id')))
2798
2799 queryset_with_search = queryset_with_search.filter(id__in=queryset_with_search_maxids).select_related('layer_version', 'layer_version__layer', 'layer_version__up_branch', 'layer_source')
2800
2801
2802 # retrieve the objects that will be displayed in the table; targets a paginator and gets a page range to display
2803 target_info = _build_page_range(Paginator(queryset_with_search, request.GET.get('count', 10)),request.GET.get('page', 1))
2804
2805 for e in target_info.object_list:
2806 e.preffered_layerversion = e.layer_version.get_equivalents_wpriority(prj)[0]
2807 e.vcs_link_url = Layer.objects.filter(name = e.preffered_layerversion.layer.name).exclude(vcs_web_file_base_url__isnull=True)[0].vcs_web_file_base_url
2808 if e.vcs_link_url != None:
2809 fp = e.preffered_layerversion.dirpath + "/" + e.file_path
2810 e.vcs_link_url = e.vcs_link_url.replace('%path%', fp)
2811 e.vcs_link_url = e.vcs_link_url.replace('%branch%', e.preffered_layerversion.up_branch.name)
2812
2813 context = {
2814 'project' : prj,
2815 'projectlayerset' : jsonfilter(map(lambda x: x.layercommit.id, prj.projectlayer_set.all().select_related("layercommit"))),
2816 'objects' : target_info,
2817 'objectname' : "recipes",
2818 'default_orderby' : 'name:+',
2819
2820 'tablecols' : [
2821 { 'name': 'Recipe',
2822 'orderfield': _get_toggle_order(request, "name"),
2823 'ordericon' : _get_toggle_order_icon(request, "name"),
2824 },
2825 { 'name': 'Recipe version',
2826 'dclass': 'span2',
2827 },
2828 { 'name': 'Description',
2829 'dclass': 'span5',
2830 'clclass': 'description',
2831 },
2832 { 'name': 'Recipe file',
2833 'clclass': 'recipe-file',
2834 'hidden': 1,
2835 'dclass': 'span5',
2836 },
2837 { 'name': 'Section',
2838 'clclass': 'target-section',
2839 'hidden': 1,
2840 'orderfield': _get_toggle_order(request, "section"),
2841 'ordericon': _get_toggle_order_icon(request, "section"),
2842 'orderkey': "section",
2843 },
2844 { 'name': 'License',
2845 'clclass': 'license',
2846 'hidden': 1,
2847 'orderfield': _get_toggle_order(request, "license"),
2848 'ordericon': _get_toggle_order_icon(request, "license"),
2849 'orderkey': "license",
2850 },
2851 { 'name': 'Layer',
2852 'clclass': 'layer',
2853 'orderfield': _get_toggle_order(request, "layer_version__layer__name"),
2854 'ordericon': _get_toggle_order_icon(request, "layer_version__layer__name"),
2855 'orderkey': "layer_version__layer__name",
2856 },
2857 { 'name': 'Revision',
2858 'clclass': 'branch',
2859 'qhelp': "The Git branch, tag or commit. For the layers from the OpenEmbedded layer source, the revision is always the branch compatible with the Yocto Project version you selected for this project.",
2860 'hidden': 1,
2861 },
2862 ]
2863 }
2864
2865 context['tablecols'] += [
2866 { 'name': 'Build',
2867 'dclass': 'span2',
2868 'qhelp': "Add or delete targets to / from your project ",
2869 }, ]
2870
2871 response = render(request, template, context)
2872 _save_parameters_cookies(response, pagesize, orderby, request)
2873
2874 return response
2875
2876 def machines(request, pid):
2877 template = "machines.html"
2878 # define here what parameters the view needs in the GET portion in order to
2879 # be able to display something. 'count' and 'page' are mandatory for all views
2880 # that use paginators.
2881 (pagesize, orderby) = _get_parameters_values(request, 100, 'name:+')
2882 mandatory_parameters = { 'count': pagesize, 'page' : 1, 'orderby' : orderby };
2883 retval = _verify_parameters( request.GET, mandatory_parameters )
2884 if retval:
2885 return _redirect_parameters( 'all-machines', request.GET, mandatory_parameters, pid = pid)
2886
2887 # boilerplate code that takes a request for an object type and returns a queryset
2888 # for that object type. copypasta for all needed table searches
2889 (filter_string, search_term, ordering_string) = _search_tuple(request, Machine)
2890
2891 prj = Project.objects.get(pk = pid)
2892 compatible_layers = prj.compatible_layerversions()
2893
2894 queryset_all = Machine.objects.filter(layer_version__in=compatible_layers)
2895 queryset_all = _get_queryset(Machine, queryset_all, None, search_term, ordering_string, 'name')
2896
2897 queryset_all = queryset_all.prefetch_related('layer_version')
2898
2899
2900 # Make sure we only show machines / layers which are compatible
2901 # with the current project
2902
2903 project_layers = ProjectLayer.objects.filter(project_id=pid).values_list('layercommit',flat=True)
2904
2905 # Now we need to weed out the layers which will appear as duplicated
2906 # because they're from a layer source which doesn't need to be used
2907 for machine in queryset_all:
2908 to_rm = machine.layer_version.get_equivalents_wpriority(prj)[1:]
2909 if len(to_rm) > 0:
2910 queryset_all = queryset_all.exclude(layer_version__in=to_rm)
2911
2912 machine_info = _build_page_range(Paginator(queryset_all, request.GET.get('count', 100)),request.GET.get('page', 1))
2913
2914 context = {
2915 'project': prj,
2916 'objects' : machine_info,
2917 'projectlayerset' : jsonfilter(map(lambda x: x.layercommit.id, prj.projectlayer_set.all())),
2918 'objectname' : "machines",
2919 'default_orderby' : 'name:+',
2920
2921 'tablecols' : [
2922 { 'name': 'Machine',
2923 'orderfield': _get_toggle_order(request, "name"),
2924 'ordericon' : _get_toggle_order_icon(request, "name"),
2925 'orderkey' : "name",
2926 },
2927 { 'name': 'Description',
2928 'dclass': 'span5',
2929 'clclass': 'description',
2930 },
2931 { 'name': 'Layer',
2932 'clclass': 'layer',
2933 'orderfield': _get_toggle_order(request, "layer_version__layer__name"),
2934 'ordericon' : _get_toggle_order_icon(request, "layer_version__layer__name"),
2935 'orderkey' : "layer_version__layer__name",
2936 },
2937 { 'name': 'Revision',
2938 'clclass': 'branch',
2939 'qhelp' : "The Git branch, tag or commit. For the layers from the OpenEmbedded layer source, the revision is always the branch compatible with the Yocto Project version you selected for this project",
2940 'hidden': 1,
2941 },
2942 { 'name' : 'Machine file',
2943 'clclass' : 'machinefile',
2944 'hidden' : 1,
2945 },
2946 { 'name': 'Select',
2947 'dclass': 'select span2',
2948 'qhelp': "Sets the selected machine as the project machine. You can only have one machine per project",
2949 },
2950
2951 ]
2952 }
2953
2954 response = render(request, template, context)
2955 _save_parameters_cookies(response, pagesize, orderby, request)
2956
2957 return response
2958
2959
2960 def get_project_configvars_context(): 2704 def get_project_configvars_context():
2961 # Vars managed outside of this view 2705 # Vars managed outside of this view
2962 vars_managed = { 2706 vars_managed = {
@@ -3497,18 +3241,9 @@ else:
3497 def importlayer(request): 3241 def importlayer(request):
3498 return render(request, 'landing_not_managed.html') 3242 return render(request, 'landing_not_managed.html')
3499 3243
3500 def layers(request):
3501 return render(request, 'landing_not_managed.html')
3502
3503 def layerdetails(request, layerid): 3244 def layerdetails(request, layerid):
3504 return render(request, 'landing_not_managed.html') 3245 return render(request, 'landing_not_managed.html')
3505 3246
3506 def targets(request, pid):
3507 return render(request, 'landing_not_managed.html')
3508
3509 def machines(request):
3510 return render(request, 'landing_not_managed.html')
3511
3512 def projectconf(request, pid): 3247 def projectconf(request, pid):
3513 return render(request, 'landing_not_managed.html') 3248 return render(request, 'landing_not_managed.html')
3514 3249