2
0

bulk_import.py 5.1 KB

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