select_related prefetch refactored
This commit is contained in:
		| @@ -88,15 +88,21 @@ class PackagesHandler(AnonymousBaseHandler): | |||||||
|         data = {} |         data = {} | ||||||
|  |  | ||||||
|         if 'category' in kwargs: |         if 'category' in kwargs: | ||||||
|             packages = Package.objects.for_category(kwargs['category']) |             packages = Package.objects.for_category( | ||||||
|  |                 kwargs['category'], | ||||||
|  |                 last_versions=True | ||||||
|  |             ) | ||||||
|             data = {'category': kwargs['category']} |             data = {'category': kwargs['category']} | ||||||
|         elif 'herd' in kwargs: |         elif 'herd' in kwargs: | ||||||
|             herd = Herd.objects.get(herd=kwargs['herd']) |             herd = Herd.objects.get(herd=kwargs['herd']) | ||||||
|             packages = Package.objects.for_herd(herd) |             packages = Package.objects.for_herd(herd, last_versions=True) | ||||||
|             data = {'herd': herd} |             data = {'herd': herd} | ||||||
|         elif 'maintainer_id' in kwargs: |         elif 'maintainer_id' in kwargs: | ||||||
|             maintainer = Maintainer.objects.get(id=kwargs['maintainer_id']) |             maintainer = Maintainer.objects.get(id=kwargs['maintainer_id']) | ||||||
|             packages = Package.objects.for_maintainer(maintainer) |             packages = Package.objects.for_maintainer( | ||||||
|  |                 maintainer, | ||||||
|  |                 last_versions=True | ||||||
|  |             ) | ||||||
|             data = {'maintainer': maintainer} |             data = {'maintainer': maintainer} | ||||||
|  |  | ||||||
|         data['packages'] = packages |         data['packages'] = packages | ||||||
|   | |||||||
| @@ -15,6 +15,14 @@ def xint(i): | |||||||
|         return 0 |         return 0 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def select_related_last_versions(queryset): | ||||||
|  |     queryset = queryset.select_related( | ||||||
|  |         'last_version_gentoo', | ||||||
|  |         'last_version_overlay', | ||||||
|  |         'last_version_upstream' | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |  | ||||||
| def version_key(version): | def version_key(version): | ||||||
|     version = version.version |     version = version.version | ||||||
|     try: |     try: | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ djeuscan.managers | |||||||
| """ | """ | ||||||
|  |  | ||||||
| from django.db import models | from django.db import models | ||||||
| from djeuscan.helpers import xint, rename_fields | from djeuscan.helpers import xint, rename_fields, select_related_last_versions | ||||||
|  |  | ||||||
|  |  | ||||||
| class PackageMixin(object): | class PackageMixin(object): | ||||||
| @@ -90,48 +90,36 @@ class PackageMixin(object): | |||||||
|         ) |         ) | ||||||
|         return packages.filter(version__overlay=overlay).distinct() |         return packages.filter(version__overlay=overlay).distinct() | ||||||
|  |  | ||||||
|     def for_maintainer(self, maintainer): |     def for_maintainer(self, maintainer, last_versions=False): | ||||||
|         """ |         """ | ||||||
|         Returns packages that belong to the given maintainer |         Returns packages that belong to the given maintainer | ||||||
|         """ |         """ | ||||||
|         res = self.filter(maintainers__id=maintainer.id) |         res = self.filter(maintainers__id=maintainer.id) | ||||||
|  |  | ||||||
|         # performance boost |         if last_versions: | ||||||
|         res = res.select_related( |             select_related_last_versions(res) | ||||||
|             'last_version_gentoo', |  | ||||||
|             'last_version_overlay', |  | ||||||
|             'last_version_upstream' |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         return res |         return res | ||||||
|  |  | ||||||
|     def for_herd(self, herd): |     def for_herd(self, herd, last_versions=False): | ||||||
|         """ |         """ | ||||||
|         Returns packages that belong to the given herd |         Returns packages that belong to the given herd | ||||||
|         """ |         """ | ||||||
|         res = self.filter(herds__id=herd.id) |         res = self.filter(herds__id=herd.id) | ||||||
|  |  | ||||||
|         # performance boost |         if last_versions: | ||||||
|         res = res.select_related( |             select_related_last_versions(res) | ||||||
|             'last_version_gentoo', |  | ||||||
|             'last_version_overlay', |  | ||||||
|             'last_version_upstream' |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         return res |         return res | ||||||
|  |  | ||||||
|     def for_category(self, category): |     def for_category(self, category, last_versions=False): | ||||||
|         """ |         """ | ||||||
|         Returns packages that belong to the given category |         Returns packages that belong to the given category | ||||||
|         """ |         """ | ||||||
|         res = self.filter(category=category) |         res = self.filter(category=category) | ||||||
|  |  | ||||||
|         # performance boost |         if last_versions: | ||||||
|         res = res.select_related( |             select_related_last_versions(res) | ||||||
|             'last_version_gentoo', |  | ||||||
|             'last_version_overlay', |  | ||||||
|             'last_version_upstream' |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         return res |         return res | ||||||
|  |  | ||||||
|   | |||||||
| @@ -43,7 +43,7 @@ def categories(request): | |||||||
|  |  | ||||||
| @render_to('euscan/category.html') | @render_to('euscan/category.html') | ||||||
| def category(request, category): | def category(request, category): | ||||||
|     packages = Package.objects.for_category(category) |     packages = Package.objects.for_category(category, last_versions=True) | ||||||
|  |  | ||||||
|     if not packages: |     if not packages: | ||||||
|         raise Http404 |         raise Http404 | ||||||
| @@ -59,7 +59,7 @@ def herds(request): | |||||||
| @render_to('euscan/herd.html') | @render_to('euscan/herd.html') | ||||||
| def herd(request, herd): | def herd(request, herd): | ||||||
|     herd = get_object_or_404(Herd, herd=herd) |     herd = get_object_or_404(Herd, herd=herd) | ||||||
|     packages = Package.for_herd(herd) |     packages = Package.for_herd(herd, last_versions=True) | ||||||
|     return {'herd': herd, 'packages': packages} |     return {'herd': herd, 'packages': packages} | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -72,7 +72,7 @@ def maintainers(request): | |||||||
| @render_to('euscan/maintainer.html') | @render_to('euscan/maintainer.html') | ||||||
| def maintainer(request, maintainer_id): | def maintainer(request, maintainer_id): | ||||||
|     maintainer = get_object_or_404(Maintainer, pk=maintainer_id) |     maintainer = get_object_or_404(Maintainer, pk=maintainer_id) | ||||||
|     packages = Package.objects.for_maintainer(maintainer) |     packages = Package.objects.for_maintainer(maintainer, last_versions=True) | ||||||
|     return {'maintainer': maintainer, 'packages': packages} |     return {'maintainer': maintainer, 'packages': packages} | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -84,7 +84,7 @@ def overlays(request): | |||||||
|  |  | ||||||
| @render_to('euscan/overlay.html') | @render_to('euscan/overlay.html') | ||||||
| def overlay(request, overlay): | def overlay(request, overlay): | ||||||
|     packages = Package.objects.for_overlay(overlay) |     packages = Package.objects.for_overlay(overlay, last_versions=True) | ||||||
|     if not packages: |     if not packages: | ||||||
|         raise Http404 |         raise Http404 | ||||||
|     return {'overlay': overlay, 'packages': packages} |     return {'overlay': overlay, 'packages': packages} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user