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

1import django_tables2 as tables 

2from django.utils.translation import gettext_lazy as _ 

3 

4from netbox.tables import BaseTable, columns 

5 

6from .template_code import PLUGIN_IS_INSTALLED, PLUGIN_NAME_TEMPLATE 

7 

8__all__ = ( 

9 'CatalogPluginTable', 

10 'PluginVersionTable', 

11) 

12 

13 

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 ) 

31 

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 

41 

42 

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 ) 

78 

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')