diff --git a/packages/tables.py b/packages/tables.py index 0004c79a..6b41ac03 100644 --- a/packages/tables.py +++ b/packages/tables.py @@ -24,15 +24,15 @@ ) PACKAGE_HOSTS_TEMPLATE = ( '' - 'Installed on {{ record.host_set.count }} Hosts' + 'Installed on {{ record.host_count }} Hosts' ) AFFECTED_TEMPLATE = ( '' - 'Affected by {{ record.affected_by_erratum.count }} Errata' + 'Affected by {{ record.affected_count }} Errata' ) FIXED_TEMPLATE = ( '' - 'Provides fix in {{ record.provides_fix_in_erratum.count }} Errata' + 'Provides fix in {{ record.fixed_count }} Errata' ) @@ -71,25 +71,25 @@ class PackageTable(BaseTable): package_repos = tables.TemplateColumn( PACKAGE_REPOS_TEMPLATE, verbose_name='Repositories', - orderable=False, + order_by='repo_count', attrs={'th': {'class': 'col-sm-auto'}, 'td': {'class': 'col-sm-auto'}}, ) package_hosts = tables.TemplateColumn( PACKAGE_HOSTS_TEMPLATE, verbose_name='Hosts', - orderable=False, + order_by='host_count', attrs={'th': {'class': 'col-sm-auto'}, 'td': {'class': 'col-sm-auto'}}, ) affected = tables.TemplateColumn( AFFECTED_TEMPLATE, verbose_name='Affected', - orderable=False, + order_by='affected_count', attrs={'th': {'class': 'col-sm-1'}, 'td': {'class': 'col-sm-1'}}, ) fixed = tables.TemplateColumn( FIXED_TEMPLATE, verbose_name='Fixed', - orderable=False, + order_by='fixed_count', attrs={'th': {'class': 'col-sm-1'}, 'td': {'class': 'col-sm-1'}}, ) @@ -101,23 +101,35 @@ class Meta(BaseTable.Meta): ) +PACKAGE_NAME_HOSTS_TEMPLATE = ( + '' + '{{ record.host_count }}' +) + + class PackageNameTable(BaseTable): packagename_name = tables.TemplateColumn( PACKAGE_NAME_TEMPLATE, order_by='name', verbose_name='Package', - attrs={'th': {'class': 'col-sm-6'}, 'td': {'class': 'col-sm-6'}}, + attrs={'th': {'class': 'col-sm-5'}, 'td': {'class': 'col-sm-5'}}, ) versions = tables.TemplateColumn( '{{ record.package_set.count }}', orderable=False, - verbose_name='Versions available', - attrs={'th': {'class': 'col-sm-6'}, 'td': {'class': 'col-sm-6'}}, + verbose_name='Versions', + attrs={'th': {'class': 'col-sm-1'}, 'td': {'class': 'col-sm-1'}}, + ) + hosts = tables.TemplateColumn( + PACKAGE_NAME_HOSTS_TEMPLATE, + verbose_name='Hosts', + order_by='host_count', + attrs={'th': {'class': 'col-sm-1'}, 'td': {'class': 'col-sm-1'}}, ) class Meta(BaseTable.Meta): model = PackageName - fields = ('packagename_name', 'versions') + fields = ('packagename_name', 'versions', 'hosts') UPDATE_OLD_TEMPLATE = ( diff --git a/packages/templates/packages/package_name_detail.html b/packages/templates/packages/package_name_detail.html index 5cef00ec..2dfc8d29 100644 --- a/packages/templates/packages/package_name_detail.html +++ b/packages/templates/packages/package_name_detail.html @@ -1,4 +1,5 @@ {% extends "base.html" %} +{% load django_tables2 %} {% block page_title %}Package - {{ package }} {% endblock %} @@ -9,32 +10,8 @@ {% block content %}
- {% if allversions %} - - - - - - - - - - - - - {% for version in allversions %} - - - - - - - - - - - {% endfor %} -
PackageEpochVersionReleaseArchTypeRepositoriesHostsErrata
{{ version }} {{ version.epoch }} {{ version.version }} {{ version.release }} {{ version.arch }} {{ version.get_packagetype_display }} Available from {{ version.repo_count }} Repositories Installed on {{ version.host_set.count }} Hosts Affected by {{ version.affected_by_erratum.count }} Errata Provides fix in {{ version.provides_fix_in_erratum.count }} Errata
+ {% if table.rows %} + {% render_table table %} {% else %} No versions of this Package exist. {% endif %} diff --git a/packages/views.py b/packages/views.py index 6afa4f4d..0f2aaecb 100644 --- a/packages/views.py +++ b/packages/views.py @@ -109,6 +109,13 @@ def package_list(request): filter_list.append(Filter(request, 'Architecture', 'arch_id', PackageArchitecture.objects.all())) filter_bar = FilterBar(request, filter_list) + packages = packages.annotate( + host_count=Count('host', distinct=True), + repo_count=Count('mirror__repo', distinct=True), + affected_count=Count('affected_by_erratum', distinct=True), + fixed_count=Count('provides_fix_in_erratum', distinct=True), + ) + table = PackageTable(packages) RequestConfig(request, paginate={'per_page': 50}).configure(table) @@ -144,6 +151,8 @@ def package_name_list(request): filter_list.append(Filter(request, 'Architecture', 'arch_id', PackageArchitecture.objects.all())) filter_bar = FilterBar(request, filter_list) + packages = packages.annotate(host_count=Count('package__host', distinct=True)) + table = PackageNameTable(packages) RequestConfig(request, paginate={'per_page': 50}).configure(table) @@ -165,11 +174,20 @@ def package_detail(request, package_id): @login_required def package_name_detail(request, packagename): package = get_object_or_404(PackageName, name=packagename) - allversions = Package.objects.select_related('name', 'arch').filter(name=package.id) + allversions = Package.objects.select_related( + 'name', 'arch', + ).filter(name=package.id).annotate( + host_count=Count('host', distinct=True), + repo_count=Count('mirror__repo', distinct=True), + affected_count=Count('affected_by_erratum', distinct=True), + fixed_count=Count('provides_fix_in_erratum', distinct=True), + ) + table = PackageTable(allversions) + RequestConfig(request, paginate={'per_page': 50}).configure(table) return render(request, 'packages/package_name_detail.html', {'package': package, - 'allversions': allversions}) + 'table': table}) @login_required