Coverage for core/tables/plugins.py: 100%
30 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1import django_tables2 as tables
2from django.utils.translation import gettext_lazy as _
4from netbox.tables import BaseTable, columns
6from .template_code import PLUGIN_IS_INSTALLED, PLUGIN_NAME_TEMPLATE
8__all__ = (
9 'CatalogPluginTable',
10 'PluginVersionTable',
11)
14class PluginVersionTable(BaseTable):
15 version = tables.Column(
16 verbose_name=_('Version')
17 )
18 last_updated = columns.DateTimeColumn(
19 accessor=tables.A('date'),
20 timespec='minutes',
21 verbose_name=_('Last Updated')
22 )
23 min_version = tables.Column(
24 accessor=tables.A('netbox_min_version'),
25 verbose_name=_('Minimum NetBox Version')
26 )
27 max_version = tables.Column(
28 accessor=tables.A('netbox_max_version'),
29 verbose_name=_('Maximum NetBox Version')
30 )
32 class Meta(BaseTable.Meta):
33 empty_text = _('No plugin data found')
34 fields = (
35 'version', 'last_updated', 'min_version', 'max_version',
36 )
37 default_columns = (
38 'version', 'last_updated', 'min_version', 'max_version',
39 )
40 orderable = False
43class CatalogPluginTable(BaseTable):
44 title_long = columns.TemplateColumn(
45 template_code=PLUGIN_NAME_TEMPLATE,
46 verbose_name=_('Name')
47 )
48 author = tables.Column(
49 accessor=tables.A('author__name'),
50 verbose_name=_('Author')
51 )
52 is_local = columns.BooleanColumn(
53 false_mark=None,
54 verbose_name=_('Local')
55 )
56 is_installed = columns.TemplateColumn(
57 accessor=tables.A('is_loaded'),
58 verbose_name=_('Active'),
59 template_code=PLUGIN_IS_INSTALLED
60 )
61 is_certified = columns.BooleanColumn(
62 false_mark=None,
63 verbose_name=_('Certified')
64 )
65 created_at = columns.DateTimeColumn(
66 verbose_name=_('Published')
67 )
68 updated_at = columns.DateTimeColumn(
69 verbose_name=_('Updated')
70 )
71 installed_version = tables.Column(
72 verbose_name=_('Installed Version')
73 )
74 latest_version = tables.Column(
75 accessor=tables.A('release_latest__version'),
76 verbose_name=_('Latest Version')
77 )
79 class Meta(BaseTable.Meta):
80 empty_text = _('No plugin data found')
81 fields = (
82 'title_long', 'author', 'is_local', 'is_installed', 'is_certified', 'created_at', 'updated_at',
83 'installed_version', 'latest_version',
84 )
85 default_columns = (
86 'title_long', 'author', 'is_local', 'is_installed', 'is_certified', 'installed_version', 'latest_version',
87 )
88 # List installed plugins first, then certified plugins, then
89 # everything else (with each tranche ordered alphabetically)
90 order_by = ('-is_installed', '-is_certified', 'title_long')