summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/toastergui/tables.py
diff options
context:
space:
mode:
authorDavid Reyna <David.Reyna@windriver.com>2017-06-27 13:44:30 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-06-28 16:02:15 +0100
commit4f2baebf362d71351db044c0646f9bc6e8a39c49 (patch)
treebcbb07afbe24816f35d0c9d616ac5ea1fcca7f17 /bitbake/lib/toaster/toastergui/tables.py
parent43aaa802c35ecc9d972f3b9adcd060033de1d9de (diff)
downloadpoky-4f2baebf362d71351db044c0646f9bc6e8a39c49.tar.gz
bitbake: toaster: Add distro selection support
Add the ability to select a distro in the project page, based on values from the Layer Index. Add a distro selection page with the add layer feature, based on the add machine page. [YOCTO #10632] (Bitbake rev: a156a4eff67cdc3943494f5be72b96e3db656250) Signed-off-by: David Reyna <David.Reyna@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/toaster/toastergui/tables.py')
-rw-r--r--bitbake/lib/toaster/toastergui/tables.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/bitbake/lib/toaster/toastergui/tables.py b/bitbake/lib/toaster/toastergui/tables.py
index e2d23c1e81..dca2fa2913 100644
--- a/bitbake/lib/toaster/toastergui/tables.py
+++ b/bitbake/lib/toaster/toastergui/tables.py
@@ -23,6 +23,7 @@ from toastergui.widgets import ToasterTable
23from orm.models import Recipe, ProjectLayer, Layer_Version, Machine, Project 23from orm.models import Recipe, ProjectLayer, Layer_Version, Machine, Project
24from orm.models import CustomImageRecipe, Package, Target, Build, LogMessage, Task 24from orm.models import CustomImageRecipe, Package, Target, Build, LogMessage, Task
25from orm.models import CustomImagePackage, Package_DependencyManager 25from orm.models import CustomImagePackage, Package_DependencyManager
26from orm.models import Distro
26from django.db.models import Q, Max, Sum, Count, When, Case, Value, IntegerField 27from django.db.models import Q, Max, Sum, Count, When, Case, Value, IntegerField
27from django.conf.urls import url 28from django.conf.urls import url
28from django.core.urlresolvers import reverse, resolve 29from django.core.urlresolvers import reverse, resolve
@@ -1536,3 +1537,93 @@ class ProjectBuildsTable(BuildsTable):
1536 context['build_in_progress_none_completed'] = False 1537 context['build_in_progress_none_completed'] = False
1537 1538
1538 return context 1539 return context
1540
1541
1542class DistrosTable(ToasterTable):
1543 """Table of Distros in Toaster"""
1544
1545 def __init__(self, *args, **kwargs):
1546 super(DistrosTable, self).__init__(*args, **kwargs)
1547 self.empty_state = "Toaster has no distro information for this project. Sadly, distro information cannot be obtained from builds, so this page will remain empty."
1548 self.title = "Compatible Distros"
1549 self.default_orderby = "name"
1550
1551 def get_context_data(self, **kwargs):
1552 context = super(DistrosTable, self).get_context_data(**kwargs)
1553 context['project'] = Project.objects.get(pk=kwargs['pid'])
1554 return context
1555
1556 def setup_filters(self, *args, **kwargs):
1557 project = Project.objects.get(pk=kwargs['pid'])
1558
1559 in_current_project_filter = TableFilter(
1560 "in_current_project",
1561 "Filter by project Distros"
1562 )
1563
1564 in_project_action = TableFilterActionToggle(
1565 "in_project",
1566 "Distro provided by layers added to this project",
1567 ProjectFilters.in_project(self.project_layers)
1568 )
1569
1570 not_in_project_action = TableFilterActionToggle(
1571 "not_in_project",
1572 "Distros provided by layers not added to this project",
1573 ProjectFilters.not_in_project(self.project_layers)
1574 )
1575
1576 in_current_project_filter.add_action(in_project_action)
1577 in_current_project_filter.add_action(not_in_project_action)
1578 self.add_filter(in_current_project_filter)
1579
1580 def setup_queryset(self, *args, **kwargs):
1581 prj = Project.objects.get(pk = kwargs['pid'])
1582 self.queryset = prj.get_all_compatible_distros()
1583 self.queryset = self.queryset.order_by(self.default_orderby)
1584
1585 self.static_context_extra['current_layers'] = \
1586 self.project_layers = \
1587 prj.get_project_layer_versions(pk=True)
1588
1589 def setup_columns(self, *args, **kwargs):
1590
1591 self.add_column(title="Distro",
1592 hideable=False,
1593 orderable=True,
1594 field_name="name")
1595
1596 self.add_column(title="Description",
1597 field_name="description")
1598
1599 layer_link_template = '''
1600 <a href="{% url 'layerdetails' extra.pid data.layer_version.id %}">
1601 {{data.layer_version.layer.name}}</a>
1602 '''
1603
1604 self.add_column(title="Layer",
1605 static_data_name="layer_version__layer__name",
1606 static_data_template=layer_link_template,
1607 orderable=True)
1608
1609 self.add_column(title="Git revision",
1610 help_text="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",
1611 hidden=True,
1612 field_name="layer_version__get_vcs_reference")
1613
1614 wrtemplate_file_template = '''<code>conf/machine/{{data.name}}.conf</code>
1615 <a href="{{data.get_vcs_machine_file_link_url}}" target="_blank"><span class="glyphicon glyphicon-new-window"></i></a>'''
1616
1617 self.add_column(title="Distro file",
1618 hidden=True,
1619 static_data_name="templatefile",
1620 static_data_template=wrtemplate_file_template)
1621
1622
1623 self.add_column(title="Select",
1624 help_text="Sets the selected distro to the project",
1625 hideable=False,
1626 filter_name="in_current_project",
1627 static_data_name="add-del-layers",
1628 static_data_template='{% include "distro_btn.html" %}')
1629