bulk_import.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. from django import forms
  2. from django.utils.translation import gettext_lazy as _
  3. from circuits.choices import *
  4. from circuits.models import *
  5. from dcim.models import Site
  6. from netbox.forms import NetBoxModelImportForm
  7. from tenancy.models import Tenant
  8. from utilities.forms.fields import CSVChoiceField, CSVModelChoiceField, SlugField
  9. __all__ = (
  10. 'CircuitImportForm',
  11. 'CircuitGroupAssignmentImportForm',
  12. 'CircuitGroupImportForm',
  13. 'CircuitTerminationImportForm',
  14. 'CircuitTerminationImportRelatedForm',
  15. 'CircuitTypeImportForm',
  16. 'ProviderImportForm',
  17. 'ProviderAccountImportForm',
  18. 'ProviderNetworkImportForm',
  19. )
  20. class ProviderImportForm(NetBoxModelImportForm):
  21. slug = SlugField()
  22. class Meta:
  23. model = Provider
  24. fields = (
  25. 'name', 'slug', 'description', 'comments', 'tags',
  26. )
  27. class ProviderAccountImportForm(NetBoxModelImportForm):
  28. provider = CSVModelChoiceField(
  29. label=_('Provider'),
  30. queryset=Provider.objects.all(),
  31. to_field_name='name',
  32. help_text=_('Assigned provider')
  33. )
  34. class Meta:
  35. model = ProviderAccount
  36. fields = (
  37. 'provider', 'name', 'account', 'description', 'comments', 'tags',
  38. )
  39. class ProviderNetworkImportForm(NetBoxModelImportForm):
  40. provider = CSVModelChoiceField(
  41. label=_('Provider'),
  42. queryset=Provider.objects.all(),
  43. to_field_name='name',
  44. help_text=_('Assigned provider')
  45. )
  46. class Meta:
  47. model = ProviderNetwork
  48. fields = [
  49. 'provider', 'name', 'service_id', 'description', 'comments', 'tags'
  50. ]
  51. class CircuitTypeImportForm(NetBoxModelImportForm):
  52. slug = SlugField()
  53. class Meta:
  54. model = CircuitType
  55. fields = ('name', 'slug', 'color', 'description', 'tags')
  56. class CircuitImportForm(NetBoxModelImportForm):
  57. provider = CSVModelChoiceField(
  58. label=_('Provider'),
  59. queryset=Provider.objects.all(),
  60. to_field_name='name',
  61. help_text=_('Assigned provider')
  62. )
  63. provider_account = CSVModelChoiceField(
  64. label=_('Provider account'),
  65. queryset=ProviderAccount.objects.all(),
  66. to_field_name='name',
  67. help_text=_('Assigned provider account'),
  68. required=False
  69. )
  70. type = CSVModelChoiceField(
  71. label=_('Type'),
  72. queryset=CircuitType.objects.all(),
  73. to_field_name='name',
  74. help_text=_('Type of circuit')
  75. )
  76. status = CSVChoiceField(
  77. label=_('Status'),
  78. choices=CircuitStatusChoices,
  79. help_text=_('Operational status')
  80. )
  81. tenant = CSVModelChoiceField(
  82. label=_('Tenant'),
  83. queryset=Tenant.objects.all(),
  84. required=False,
  85. to_field_name='name',
  86. help_text=_('Assigned tenant')
  87. )
  88. class Meta:
  89. model = Circuit
  90. fields = [
  91. 'cid', 'provider', 'provider_account', 'type', 'status', 'tenant', 'install_date', 'termination_date',
  92. 'commit_rate', 'description', 'comments', 'tags'
  93. ]
  94. class BaseCircuitTerminationImportForm(forms.ModelForm):
  95. circuit = CSVModelChoiceField(
  96. label=_('Circuit'),
  97. queryset=Circuit.objects.all(),
  98. to_field_name='cid',
  99. )
  100. term_side = CSVChoiceField(
  101. label=_('Termination'),
  102. choices=CircuitTerminationSideChoices,
  103. )
  104. site = CSVModelChoiceField(
  105. label=_('Site'),
  106. queryset=Site.objects.all(),
  107. to_field_name='name',
  108. required=False
  109. )
  110. provider_network = CSVModelChoiceField(
  111. label=_('Provider network'),
  112. queryset=ProviderNetwork.objects.all(),
  113. to_field_name='name',
  114. required=False
  115. )
  116. class CircuitTerminationImportRelatedForm(BaseCircuitTerminationImportForm):
  117. class Meta:
  118. model = CircuitTermination
  119. fields = [
  120. 'circuit', 'term_side', 'site', 'provider_network', 'port_speed', 'upstream_speed', 'xconnect_id',
  121. 'pp_info', 'description'
  122. ]
  123. class CircuitTerminationImportForm(NetBoxModelImportForm, BaseCircuitTerminationImportForm):
  124. class Meta:
  125. model = CircuitTermination
  126. fields = [
  127. 'circuit', 'term_side', 'site', 'provider_network', 'port_speed', 'upstream_speed', 'xconnect_id',
  128. 'pp_info', 'description', 'tags'
  129. ]
  130. class CircuitGroupImportForm(NetBoxModelImportForm):
  131. tenant = CSVModelChoiceField(
  132. label=_('Tenant'),
  133. queryset=Tenant.objects.all(),
  134. required=False,
  135. to_field_name='name',
  136. help_text=_('Assigned tenant')
  137. )
  138. class Meta:
  139. model = CircuitGroup
  140. fields = ('name', 'slug', 'description', 'tenant', 'tags')
  141. class CircuitGroupAssignmentImportForm(NetBoxModelImportForm):
  142. class Meta:
  143. model = CircuitGroupAssignment
  144. fields = ('circuit', 'group', 'priority')