devicetypes.py 6.9 KB

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