Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 23 additions & 11 deletions packages/tables.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@
)
PACKAGE_HOSTS_TEMPLATE = (
'<a href="{% url \'hosts:host_list\' %}?package_id={{ record.id }}">'
'Installed on {{ record.host_set.count }} Hosts</a>'
'Installed on {{ record.host_count }} Hosts</a>'
)
AFFECTED_TEMPLATE = (
'<a href="{% url \'errata:erratum_list\' %}?package_id={{ record.id }}&type=affected">'
'Affected by {{ record.affected_by_erratum.count }} Errata</a>'
'Affected by {{ record.affected_count }} Errata</a>'
)
FIXED_TEMPLATE = (
'<a href="{% url \'errata:erratum_list\' %}?package_id={{ record.id }}&type=fixed">'
'Provides fix in {{ record.provides_fix_in_erratum.count }} Errata</a>'
'Provides fix in {{ record.fixed_count }} Errata</a>'
)


Expand Down Expand Up @@ -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'}},
)

Expand All @@ -101,23 +101,35 @@ class Meta(BaseTable.Meta):
)


PACKAGE_NAME_HOSTS_TEMPLATE = (
'<a href="{% url \'hosts:host_list\' %}?package={{ record.name }}">'
'{{ record.host_count }}</a>'
)


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 = (
Expand Down
29 changes: 3 additions & 26 deletions packages/templates/packages/package_name_detail.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{% extends "base.html" %}
{% load django_tables2 %}

{% block page_title %}Package - {{ package }} {% endblock %}

Expand All @@ -9,32 +10,8 @@
{% block content %}

<div class="well well-sm">
{% if allversions %}
<table class="table table-striped table-bordered table-hover table-condensed table-responsive">
<tr>
<th class="col-sm-2">Package</th>
<th class="col-sm-1">Epoch</th>
<th class="col-sm-1">Version</th>
<th class="col-sm-1">Release</th>
<th class="col-sm-1">Arch</th>
<th class="col-sm-1">Type</th>
<th class="col-sm-1">Repositories</th>
<th class="col-sm-1">Hosts</th>
<th class="col-sm-2" colspan="2">Errata</th>
</tr>
{% for version in allversions %}
<tr>
<td><a href="{{ version.get_absolute_url }}">{{ version }}</a></td>
<td> {{ version.epoch }} </td>
<td> {{ version.version }} </td><td> {{ version.release }} </td>
<td> {{ version.arch }} </td><td> {{ version.get_packagetype_display }} </td>
<td> <a href="{% url 'repos:repo_list' %}?package_id={{ version.id }}">Available from {{ version.repo_count }} Repositories</a> </td>
<td> <a href="{% url 'hosts:host_list' %}?package_id={{ version.id }}">Installed on {{ version.host_set.count }} Hosts</a> </td>
<td> <a href="{% url 'errata:erratum_list' %}?package_id={{ version.id }}&type=affected">Affected by {{ version.affected_by_erratum.count }} Errata</a> </td>
<td> <a href="{% url 'errata:erratum_list' %}?package_id={{ version.id }}&type=fixed">Provides fix in {{ version.provides_fix_in_erratum.count }} Errata</a> </td>
</tr>
{% endfor %}
</table>
{% if table.rows %}
{% render_table table %}
{% else %}
No versions of this Package exist.
{% endif %}
Expand Down
22 changes: 20 additions & 2 deletions packages/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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)

Expand All @@ -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
Expand Down
Loading