mirror of
https://git.yoctoproject.org/poky
synced 2026-02-11 11:13:04 +01:00
bitbake: toaster: orm remove the complicated querying on the ORM
We no longer need to compute each layer_version and all the recipes which belong to this. [YOCTO #8147] (Bitbake rev: 505979ab931e3a2a218d7030d6064987e8f9ff14) Signed-off-by: Michael Wood <michael.g.wood@intel.com> Signed-off-by: brian avery <avery.brian@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
fe29297c6a
commit
f902dc646d
@@ -191,6 +191,7 @@ class Project(models.Model):
|
||||
|
||||
# returns a queryset of compatible layers for a project
|
||||
def compatible_layerversions(self, release = None, layer_name = None):
|
||||
logger.warning("This function is deprecated")
|
||||
if release == None:
|
||||
release = self.release
|
||||
# layers on the same branch or layers specifically set for this project
|
||||
@@ -205,45 +206,55 @@ class Project(models.Model):
|
||||
|
||||
return queryset
|
||||
|
||||
def projectlayer_equivalent_set(self):
|
||||
return self.compatible_layerversions().filter(layer__name__in = [x.layercommit.layer.name for x in self.projectlayer_set.all()]).select_related("up_branch")
|
||||
def get_all_compatible_layer_versions(self):
|
||||
""" Returns Queryset of all Layer_Versions which are compatible with
|
||||
this project"""
|
||||
queryset = Layer_Version.objects.filter(
|
||||
(Q(up_branch__name=self.release.branch_name) & Q(build=None))
|
||||
| Q(project=self))
|
||||
|
||||
return queryset
|
||||
|
||||
def get_project_layer_versions(self, pk=False):
|
||||
""" Returns the Layer_Versions currently added to this project """
|
||||
layer_versions = self.projectlayer_set.all().values('layercommit')
|
||||
|
||||
if pk is False:
|
||||
return layer_versions
|
||||
else:
|
||||
return layer_versions.values_list('pk', flat=True)
|
||||
|
||||
|
||||
def get_available_machines(self):
|
||||
""" Returns QuerySet of all Machines which are provided by the
|
||||
Layers currently added to the Project """
|
||||
queryset = Machine.objects.filter(layer_version__in=self.projectlayer_equivalent_set)
|
||||
queryset = Machine.objects.filter(
|
||||
layer_version__in=self.get_project_layer_versions(self))
|
||||
|
||||
return queryset
|
||||
|
||||
def get_all_compatible_machines(self):
|
||||
""" Returns QuerySet of all the compatible machines available to the
|
||||
project including ones from Layers not currently added """
|
||||
compatible_layers = self.compatible_layerversions()
|
||||
queryset = Machine.objects.filter(
|
||||
layer_version__in=self.get_all_compatible_layer_versions())
|
||||
|
||||
queryset = Machine.objects.filter(layer_version__in=compatible_layers)
|
||||
return queryset
|
||||
|
||||
def get_available_recipes(self):
|
||||
""" Returns QuerySet of all Recipes which are provided by the Layers
|
||||
currently added to the Project """
|
||||
project_layers = self.projectlayer_equivalent_set()
|
||||
queryset = Recipe.objects.filter(layer_version__in = project_layers)
|
||||
|
||||
# Copied from get_all_compatible_recipes
|
||||
search_maxids = map(lambda i: i[0], list(queryset.values('name').distinct().annotate(max_id=Max('id')).values_list('max_id')))
|
||||
queryset = queryset.filter(id__in=search_maxids).select_related('layer_version', 'layer_version__layer', 'layer_version__up_branch', 'layer_source')
|
||||
# End copy
|
||||
""" Returns QuerySet of all the recipes that are provided by layers
|
||||
added to this project """
|
||||
queryset = Recipe.objects.filter(
|
||||
layer_version__in=self.get_project_layer_versions())
|
||||
|
||||
return queryset
|
||||
|
||||
def get_all_compatible_recipes(self):
|
||||
""" Returns QuerySet of all the compatible Recipes available to the
|
||||
project including ones from Layers not currently added """
|
||||
compatible_layerversions = self.compatible_layerversions()
|
||||
queryset = Recipe.objects.filter(layer_version__in = compatible_layerversions)
|
||||
queryset = Recipe.objects.filter(
|
||||
layer_version__in=self.get_all_compatible_layer_versions())
|
||||
|
||||
search_maxids = map(lambda i: i[0], list(queryset.values('name').distinct().annotate(max_id=Max('id')).values_list('max_id')))
|
||||
|
||||
queryset = queryset.filter(id__in=search_maxids).select_related('layer_version', 'layer_version__layer', 'layer_version__up_branch', 'layer_source')
|
||||
return queryset
|
||||
|
||||
|
||||
|
||||
@@ -221,7 +221,7 @@ class MachinesTable(ToasterTable, ProjectFiltersMixin):
|
||||
|
||||
def setup_filters(self, *args, **kwargs):
|
||||
project = Project.objects.get(pk=kwargs['pid'])
|
||||
self.project_layers = project.projectlayer_equivalent_set()
|
||||
self.project_layers = project.get_project_layer_versions()
|
||||
|
||||
self.add_filter(title="Filter by project machines",
|
||||
name="in_current_project",
|
||||
|
||||
@@ -27,7 +27,7 @@ class LayersTypeAhead(ToasterTypeAhead):
|
||||
super(LayersTypeAhead, self).__init__()
|
||||
|
||||
def apply_search(self, search_term, prj, request):
|
||||
layers = prj.compatible_layerversions()
|
||||
layers = prj.get_all_compatible_layer_versions()
|
||||
layers = layers.order_by('layer__name')
|
||||
|
||||
# Unlike the other typeaheads we also don't want to show suggestions
|
||||
@@ -35,7 +35,8 @@ class LayersTypeAhead(ToasterTypeAhead):
|
||||
# layerdeps to a new layer.
|
||||
if ("include_added" in request.GET and
|
||||
request.GET['include_added'] != "true"):
|
||||
layers = layers.exclude(pk__in=prj.projectlayer_equivalent_set)
|
||||
layers = layers.exclude(
|
||||
pk__in=prj.get_project_layer_versions(pk=True))
|
||||
|
||||
primary_results = layers.filter(layer__name__istartswith=search_term)
|
||||
secondary_results = layers.filter(layer__name__icontains=search_term).exclude(pk__in=primary_results)
|
||||
|
||||
Reference in New Issue
Block a user