power.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. from dcim.choices import *
  2. from dcim.models import PowerFeed, PowerPanel
  3. from netbox.api.fields import ChoiceField, RelatedObjectCountField
  4. from netbox.api.serializers import NetBoxModelSerializer
  5. from tenancy.api.serializers_.tenants import TenantSerializer
  6. from .base import ConnectedEndpointsSerializer
  7. from .cables import CabledObjectSerializer
  8. from .racks import RackSerializer
  9. from .sites import LocationSerializer, SiteSerializer
  10. __all__ = (
  11. 'PowerFeedSerializer',
  12. 'PowerPanelSerializer',
  13. )
  14. class PowerPanelSerializer(NetBoxModelSerializer):
  15. site = SiteSerializer(nested=True)
  16. location = LocationSerializer(
  17. nested=True,
  18. required=False,
  19. allow_null=True,
  20. default=None
  21. )
  22. # Related object counts
  23. powerfeed_count = RelatedObjectCountField('powerfeeds')
  24. class Meta:
  25. model = PowerPanel
  26. fields = [
  27. 'id', 'url', 'display_url', 'display', 'site', 'location', 'name', 'description', 'comments', 'tags',
  28. 'custom_fields', 'powerfeed_count', 'created', 'last_updated',
  29. ]
  30. brief_fields = ('id', 'url', 'display', 'name', 'description', 'powerfeed_count')
  31. class PowerFeedSerializer(NetBoxModelSerializer, CabledObjectSerializer, ConnectedEndpointsSerializer):
  32. power_panel = PowerPanelSerializer(nested=True)
  33. rack = RackSerializer(
  34. nested=True,
  35. required=False,
  36. allow_null=True,
  37. default=None
  38. )
  39. type = ChoiceField(
  40. choices=PowerFeedTypeChoices,
  41. default=lambda: PowerFeedTypeChoices.TYPE_PRIMARY,
  42. )
  43. status = ChoiceField(
  44. choices=PowerFeedStatusChoices,
  45. default=lambda: PowerFeedStatusChoices.STATUS_ACTIVE,
  46. )
  47. supply = ChoiceField(
  48. choices=PowerFeedSupplyChoices,
  49. default=lambda: PowerFeedSupplyChoices.SUPPLY_AC,
  50. )
  51. phase = ChoiceField(
  52. choices=PowerFeedPhaseChoices,
  53. default=lambda: PowerFeedPhaseChoices.PHASE_SINGLE,
  54. )
  55. tenant = TenantSerializer(
  56. nested=True,
  57. required=False,
  58. allow_null=True
  59. )
  60. class Meta:
  61. model = PowerFeed
  62. fields = [
  63. 'id', 'url', 'display_url', 'display', 'power_panel', 'rack', 'name', 'status', 'type', 'supply',
  64. 'phase', 'voltage', 'amperage', 'max_utilization', 'mark_connected', 'cable', 'cable_end', 'link_peers',
  65. 'link_peers_type', 'connected_endpoints', 'connected_endpoints_type', 'connected_endpoints_reachable',
  66. 'description', 'tenant', 'comments', 'tags', 'custom_fields', 'created', 'last_updated', '_occupied',
  67. ]
  68. brief_fields = ('id', 'url', 'display', 'name', 'description', 'cable', '_occupied')