devicetypes.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. import django_tables2 as tables
  2. from dcim.models import (
  3. ConsolePortTemplate, ConsoleServerPortTemplate, DeviceBayTemplate, DeviceType, FrontPortTemplate, InterfaceTemplate,
  4. Manufacturer, PowerOutletTemplate, PowerPortTemplate, RearPortTemplate,
  5. )
  6. from utilities.tables import (
  7. BaseTable, BooleanColumn, ButtonsColumn, ColorColumn, LinkedCountColumn, MarkdownColumn, TagColumn, ToggleColumn,
  8. )
  9. __all__ = (
  10. 'ConsolePortTemplateTable',
  11. 'ConsoleServerPortTemplateTable',
  12. 'DeviceBayTemplateTable',
  13. 'DeviceTypeTable',
  14. 'FrontPortTemplateTable',
  15. 'InterfaceTemplateTable',
  16. 'ManufacturerTable',
  17. 'PowerOutletTemplateTable',
  18. 'PowerPortTemplateTable',
  19. 'RearPortTemplateTable',
  20. )
  21. #
  22. # Manufacturers
  23. #
  24. class ManufacturerTable(BaseTable):
  25. pk = ToggleColumn()
  26. name = tables.Column(
  27. linkify=True
  28. )
  29. devicetype_count = tables.Column(
  30. verbose_name='Device Types'
  31. )
  32. inventoryitem_count = tables.Column(
  33. verbose_name='Inventory Items'
  34. )
  35. platform_count = tables.Column(
  36. verbose_name='Platforms'
  37. )
  38. slug = tables.Column()
  39. tags = TagColumn(
  40. url_name='dcim:manufacturer_list'
  41. )
  42. actions = ButtonsColumn(Manufacturer)
  43. class Meta(BaseTable.Meta):
  44. model = Manufacturer
  45. fields = (
  46. 'pk', 'id', 'name', 'devicetype_count', 'inventoryitem_count', 'platform_count', 'description', 'slug',
  47. 'actions',
  48. )
  49. default_columns = (
  50. 'pk', 'name', 'devicetype_count', 'inventoryitem_count', 'platform_count', 'description', 'slug', 'actions',
  51. )
  52. #
  53. # Device types
  54. #
  55. class DeviceTypeTable(BaseTable):
  56. pk = ToggleColumn()
  57. model = tables.Column(
  58. linkify=True,
  59. verbose_name='Device Type'
  60. )
  61. is_full_depth = BooleanColumn(
  62. verbose_name='Full Depth'
  63. )
  64. instance_count = LinkedCountColumn(
  65. viewname='dcim:device_list',
  66. url_params={'device_type_id': 'pk'},
  67. verbose_name='Instances'
  68. )
  69. comments = MarkdownColumn()
  70. tags = TagColumn(
  71. url_name='dcim:devicetype_list'
  72. )
  73. class Meta(BaseTable.Meta):
  74. model = DeviceType
  75. fields = (
  76. 'pk', 'id', 'model', 'manufacturer', 'slug', 'part_number', 'u_height', 'is_full_depth', 'subdevice_role',
  77. 'airflow', 'comments', 'instance_count', 'tags',
  78. )
  79. default_columns = (
  80. 'pk', 'model', 'manufacturer', 'part_number', 'u_height', 'is_full_depth', 'instance_count',
  81. )
  82. #
  83. # Device type components
  84. #
  85. class ComponentTemplateTable(BaseTable):
  86. pk = ToggleColumn()
  87. id = tables.Column(
  88. verbose_name='ID'
  89. )
  90. name = tables.Column(
  91. order_by=('_name',)
  92. )
  93. class Meta(BaseTable.Meta):
  94. exclude = ('id', )
  95. class ConsolePortTemplateTable(ComponentTemplateTable):
  96. actions = ButtonsColumn(
  97. model=ConsolePortTemplate,
  98. buttons=('edit', 'delete')
  99. )
  100. class Meta(ComponentTemplateTable.Meta):
  101. model = ConsolePortTemplate
  102. fields = ('pk', 'name', 'label', 'type', 'description', 'actions')
  103. empty_text = "None"
  104. class ConsoleServerPortTemplateTable(ComponentTemplateTable):
  105. actions = ButtonsColumn(
  106. model=ConsoleServerPortTemplate,
  107. buttons=('edit', 'delete')
  108. )
  109. class Meta(ComponentTemplateTable.Meta):
  110. model = ConsoleServerPortTemplate
  111. fields = ('pk', 'name', 'label', 'type', 'description', 'actions')
  112. empty_text = "None"
  113. class PowerPortTemplateTable(ComponentTemplateTable):
  114. actions = ButtonsColumn(
  115. model=PowerPortTemplate,
  116. buttons=('edit', 'delete')
  117. )
  118. class Meta(ComponentTemplateTable.Meta):
  119. model = PowerPortTemplate
  120. fields = ('pk', 'name', 'label', 'type', 'maximum_draw', 'allocated_draw', 'description', 'actions')
  121. empty_text = "None"
  122. class PowerOutletTemplateTable(ComponentTemplateTable):
  123. actions = ButtonsColumn(
  124. model=PowerOutletTemplate,
  125. buttons=('edit', 'delete')
  126. )
  127. class Meta(ComponentTemplateTable.Meta):
  128. model = PowerOutletTemplate
  129. fields = ('pk', 'name', 'label', 'type', 'power_port', 'feed_leg', 'description', 'actions')
  130. empty_text = "None"
  131. class InterfaceTemplateTable(ComponentTemplateTable):
  132. mgmt_only = BooleanColumn(
  133. verbose_name='Management Only'
  134. )
  135. actions = ButtonsColumn(
  136. model=InterfaceTemplate,
  137. buttons=('edit', 'delete')
  138. )
  139. class Meta(ComponentTemplateTable.Meta):
  140. model = InterfaceTemplate
  141. fields = ('pk', 'name', 'label', 'mgmt_only', 'type', 'description', 'actions')
  142. empty_text = "None"
  143. class FrontPortTemplateTable(ComponentTemplateTable):
  144. rear_port_position = tables.Column(
  145. verbose_name='Position'
  146. )
  147. color = ColorColumn()
  148. actions = ButtonsColumn(
  149. model=FrontPortTemplate,
  150. buttons=('edit', 'delete')
  151. )
  152. class Meta(ComponentTemplateTable.Meta):
  153. model = FrontPortTemplate
  154. fields = ('pk', 'name', 'label', 'type', 'color', 'rear_port', 'rear_port_position', 'description', 'actions')
  155. empty_text = "None"
  156. class RearPortTemplateTable(ComponentTemplateTable):
  157. color = ColorColumn()
  158. actions = ButtonsColumn(
  159. model=RearPortTemplate
  160. )
  161. class Meta(ComponentTemplateTable.Meta):
  162. model = RearPortTemplate
  163. fields = ('pk', 'name', 'label', 'type', 'color', 'positions', 'description', 'actions')
  164. empty_text = "None"
  165. class DeviceBayTemplateTable(ComponentTemplateTable):
  166. actions = ButtonsColumn(
  167. model=DeviceBayTemplate,
  168. buttons=('edit', 'delete')
  169. )
  170. class Meta(ComponentTemplateTable.Meta):
  171. model = DeviceBayTemplate
  172. fields = ('pk', 'name', 'label', 'description', 'actions')
  173. empty_text = "None"