types.py 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. from dcim import filtersets, models
  2. from extras.graphql.mixins import (
  3. ChangelogMixin, ConfigContextMixin, CustomFieldsMixin, ImageAttachmentsMixin, TagsMixin,
  4. )
  5. from ipam.graphql.mixins import IPAddressesMixin, VLANGroupsMixin
  6. from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, PrimaryObjectType
  7. __all__ = (
  8. 'CableType',
  9. 'ComponentObjectType',
  10. 'ConsolePortType',
  11. 'ConsolePortTemplateType',
  12. 'ConsoleServerPortType',
  13. 'ConsoleServerPortTemplateType',
  14. 'DeviceType',
  15. 'DeviceBayType',
  16. 'DeviceBayTemplateType',
  17. 'DeviceRoleType',
  18. 'DeviceTypeType',
  19. 'FrontPortType',
  20. 'FrontPortTemplateType',
  21. 'InterfaceType',
  22. 'InterfaceTemplateType',
  23. 'InventoryItemType',
  24. 'LocationType',
  25. 'ManufacturerType',
  26. 'PlatformType',
  27. 'PowerFeedType',
  28. 'PowerOutletType',
  29. 'PowerOutletTemplateType',
  30. 'PowerPanelType',
  31. 'PowerPortType',
  32. 'PowerPortTemplateType',
  33. 'RackType',
  34. 'RackReservationType',
  35. 'RackRoleType',
  36. 'RearPortType',
  37. 'RearPortTemplateType',
  38. 'RegionType',
  39. 'SiteType',
  40. 'SiteGroupType',
  41. 'VirtualChassisType',
  42. )
  43. #
  44. # Base types
  45. #
  46. class ComponentObjectType(
  47. ChangelogMixin,
  48. CustomFieldsMixin,
  49. TagsMixin,
  50. BaseObjectType
  51. ):
  52. """
  53. Base type for device/VM components
  54. """
  55. class Meta:
  56. abstract = True
  57. class ComponentTemplateObjectType(
  58. ChangelogMixin,
  59. BaseObjectType
  60. ):
  61. """
  62. Base type for device/VM components
  63. """
  64. class Meta:
  65. abstract = True
  66. #
  67. # Model types
  68. #
  69. class CableType(PrimaryObjectType):
  70. class Meta:
  71. model = models.Cable
  72. fields = '__all__'
  73. filterset_class = filtersets.CableFilterSet
  74. def resolve_type(self, info):
  75. return self.type or None
  76. def resolve_length_unit(self, info):
  77. return self.length_unit or None
  78. class ConsolePortType(ComponentObjectType):
  79. class Meta:
  80. model = models.ConsolePort
  81. exclude = ('_path',)
  82. filterset_class = filtersets.ConsolePortFilterSet
  83. def resolve_type(self, info):
  84. return self.type or None
  85. class ConsolePortTemplateType(ComponentTemplateObjectType):
  86. class Meta:
  87. model = models.ConsolePortTemplate
  88. fields = '__all__'
  89. filterset_class = filtersets.ConsolePortTemplateFilterSet
  90. def resolve_type(self, info):
  91. return self.type or None
  92. class ConsoleServerPortType(ComponentObjectType):
  93. class Meta:
  94. model = models.ConsoleServerPort
  95. exclude = ('_path',)
  96. filterset_class = filtersets.ConsoleServerPortFilterSet
  97. def resolve_type(self, info):
  98. return self.type or None
  99. class ConsoleServerPortTemplateType(ComponentTemplateObjectType):
  100. class Meta:
  101. model = models.ConsoleServerPortTemplate
  102. fields = '__all__'
  103. filterset_class = filtersets.ConsoleServerPortTemplateFilterSet
  104. def resolve_type(self, info):
  105. return self.type or None
  106. class DeviceType(ConfigContextMixin, ImageAttachmentsMixin, PrimaryObjectType):
  107. class Meta:
  108. model = models.Device
  109. fields = '__all__'
  110. filterset_class = filtersets.DeviceFilterSet
  111. def resolve_face(self, info):
  112. return self.face or None
  113. def resolve_airflow(self, info):
  114. return self.airflow or None
  115. class DeviceBayType(ComponentObjectType):
  116. class Meta:
  117. model = models.DeviceBay
  118. fields = '__all__'
  119. filterset_class = filtersets.DeviceBayFilterSet
  120. class DeviceBayTemplateType(ComponentTemplateObjectType):
  121. class Meta:
  122. model = models.DeviceBayTemplate
  123. fields = '__all__'
  124. filterset_class = filtersets.DeviceBayTemplateFilterSet
  125. class DeviceRoleType(OrganizationalObjectType):
  126. class Meta:
  127. model = models.DeviceRole
  128. fields = '__all__'
  129. filterset_class = filtersets.DeviceRoleFilterSet
  130. class DeviceTypeType(PrimaryObjectType):
  131. class Meta:
  132. model = models.DeviceType
  133. fields = '__all__'
  134. filterset_class = filtersets.DeviceTypeFilterSet
  135. def resolve_subdevice_role(self, info):
  136. return self.subdevice_role or None
  137. def resolve_airflow(self, info):
  138. return self.airflow or None
  139. class FrontPortType(ComponentObjectType):
  140. class Meta:
  141. model = models.FrontPort
  142. fields = '__all__'
  143. filterset_class = filtersets.FrontPortFilterSet
  144. class FrontPortTemplateType(ComponentTemplateObjectType):
  145. class Meta:
  146. model = models.FrontPortTemplate
  147. fields = '__all__'
  148. filterset_class = filtersets.FrontPortTemplateFilterSet
  149. class InterfaceType(IPAddressesMixin, ComponentObjectType):
  150. class Meta:
  151. model = models.Interface
  152. exclude = ('_path',)
  153. filterset_class = filtersets.InterfaceFilterSet
  154. def resolve_mode(self, info):
  155. return self.mode or None
  156. def resolve_rf_role(self, info):
  157. return self.rf_role or None
  158. def resolve_rf_channel(self, info):
  159. return self.rf_channel or None
  160. class InterfaceTemplateType(ComponentTemplateObjectType):
  161. class Meta:
  162. model = models.InterfaceTemplate
  163. fields = '__all__'
  164. filterset_class = filtersets.InterfaceTemplateFilterSet
  165. class InventoryItemType(ComponentObjectType):
  166. class Meta:
  167. model = models.InventoryItem
  168. fields = '__all__'
  169. filterset_class = filtersets.InventoryItemFilterSet
  170. class LocationType(VLANGroupsMixin, ImageAttachmentsMixin, OrganizationalObjectType):
  171. class Meta:
  172. model = models.Location
  173. fields = '__all__'
  174. filterset_class = filtersets.LocationFilterSet
  175. class ManufacturerType(OrganizationalObjectType):
  176. class Meta:
  177. model = models.Manufacturer
  178. fields = '__all__'
  179. filterset_class = filtersets.ManufacturerFilterSet
  180. class PlatformType(OrganizationalObjectType):
  181. class Meta:
  182. model = models.Platform
  183. fields = '__all__'
  184. filterset_class = filtersets.PlatformFilterSet
  185. class PowerFeedType(PrimaryObjectType):
  186. class Meta:
  187. model = models.PowerFeed
  188. exclude = ('_path',)
  189. filterset_class = filtersets.PowerFeedFilterSet
  190. class PowerOutletType(ComponentObjectType):
  191. class Meta:
  192. model = models.PowerOutlet
  193. exclude = ('_path',)
  194. filterset_class = filtersets.PowerOutletFilterSet
  195. def resolve_feed_leg(self, info):
  196. return self.feed_leg or None
  197. def resolve_type(self, info):
  198. return self.type or None
  199. class PowerOutletTemplateType(ComponentTemplateObjectType):
  200. class Meta:
  201. model = models.PowerOutletTemplate
  202. fields = '__all__'
  203. filterset_class = filtersets.PowerOutletTemplateFilterSet
  204. def resolve_feed_leg(self, info):
  205. return self.feed_leg or None
  206. def resolve_type(self, info):
  207. return self.type or None
  208. class PowerPanelType(PrimaryObjectType):
  209. class Meta:
  210. model = models.PowerPanel
  211. fields = '__all__'
  212. filterset_class = filtersets.PowerPanelFilterSet
  213. class PowerPortType(ComponentObjectType):
  214. class Meta:
  215. model = models.PowerPort
  216. exclude = ('_path',)
  217. filterset_class = filtersets.PowerPortFilterSet
  218. def resolve_type(self, info):
  219. return self.type or None
  220. class PowerPortTemplateType(ComponentTemplateObjectType):
  221. class Meta:
  222. model = models.PowerPortTemplate
  223. fields = '__all__'
  224. filterset_class = filtersets.PowerPortTemplateFilterSet
  225. def resolve_type(self, info):
  226. return self.type or None
  227. class RackType(VLANGroupsMixin, ImageAttachmentsMixin, PrimaryObjectType):
  228. class Meta:
  229. model = models.Rack
  230. fields = '__all__'
  231. filterset_class = filtersets.RackFilterSet
  232. def resolve_type(self, info):
  233. return self.type or None
  234. def resolve_outer_unit(self, info):
  235. return self.outer_unit or None
  236. class RackReservationType(PrimaryObjectType):
  237. class Meta:
  238. model = models.RackReservation
  239. fields = '__all__'
  240. filterset_class = filtersets.RackReservationFilterSet
  241. class RackRoleType(OrganizationalObjectType):
  242. class Meta:
  243. model = models.RackRole
  244. fields = '__all__'
  245. filterset_class = filtersets.RackRoleFilterSet
  246. class RearPortType(ComponentObjectType):
  247. class Meta:
  248. model = models.RearPort
  249. fields = '__all__'
  250. filterset_class = filtersets.RearPortFilterSet
  251. class RearPortTemplateType(ComponentTemplateObjectType):
  252. class Meta:
  253. model = models.RearPortTemplate
  254. fields = '__all__'
  255. filterset_class = filtersets.RearPortTemplateFilterSet
  256. class RegionType(VLANGroupsMixin, OrganizationalObjectType):
  257. class Meta:
  258. model = models.Region
  259. fields = '__all__'
  260. filterset_class = filtersets.RegionFilterSet
  261. class SiteType(VLANGroupsMixin, ImageAttachmentsMixin, PrimaryObjectType):
  262. class Meta:
  263. model = models.Site
  264. fields = '__all__'
  265. filterset_class = filtersets.SiteFilterSet
  266. class SiteGroupType(VLANGroupsMixin, OrganizationalObjectType):
  267. class Meta:
  268. model = models.SiteGroup
  269. fields = '__all__'
  270. filterset_class = filtersets.SiteGroupFilterSet
  271. class VirtualChassisType(PrimaryObjectType):
  272. class Meta:
  273. model = models.VirtualChassis
  274. fields = '__all__'
  275. filterset_class = filtersets.VirtualChassisFilterSet