bulk_edit.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441
  1. from django import forms
  2. from django.utils.translation import gettext_lazy as _
  3. from extras.choices import *
  4. from extras.models import *
  5. from netbox.events import get_event_type_choices
  6. from netbox.forms import NetBoxModelBulkEditForm
  7. from netbox.forms.mixins import ChangelogMessageMixin
  8. from utilities.forms import BulkEditForm, add_blank_choice
  9. from utilities.forms.fields import ColorField, CommentField, DynamicModelChoiceField
  10. from utilities.forms.rendering import FieldSet
  11. from utilities.forms.widgets import BulkEditNullBooleanSelect
  12. __all__ = (
  13. 'ConfigContextBulkEditForm',
  14. 'ConfigContextProfileBulkEditForm',
  15. 'ConfigTemplateBulkEditForm',
  16. 'CustomFieldBulkEditForm',
  17. 'CustomFieldChoiceSetBulkEditForm',
  18. 'CustomLinkBulkEditForm',
  19. 'EventRuleBulkEditForm',
  20. 'ExportTemplateBulkEditForm',
  21. 'ImageAttachmentBulkEditForm',
  22. 'JournalEntryBulkEditForm',
  23. 'NotificationGroupBulkEditForm',
  24. 'SavedFilterBulkEditForm',
  25. 'TableConfigBulkEditForm',
  26. 'TagBulkEditForm',
  27. 'WebhookBulkEditForm',
  28. )
  29. class CustomFieldBulkEditForm(ChangelogMessageMixin, BulkEditForm):
  30. pk = forms.ModelMultipleChoiceField(
  31. queryset=CustomField.objects.all(),
  32. widget=forms.MultipleHiddenInput
  33. )
  34. group_name = forms.CharField(
  35. label=_('Group name'),
  36. required=False
  37. )
  38. description = forms.CharField(
  39. label=_('Description'),
  40. required=False
  41. )
  42. required = forms.NullBooleanField(
  43. label=_('Required'),
  44. required=False,
  45. widget=BulkEditNullBooleanSelect()
  46. )
  47. unique = forms.NullBooleanField(
  48. label=_('Must be unique'),
  49. required=False,
  50. widget=BulkEditNullBooleanSelect()
  51. )
  52. weight = forms.IntegerField(
  53. label=_('Weight'),
  54. required=False
  55. )
  56. choice_set = DynamicModelChoiceField(
  57. queryset=CustomFieldChoiceSet.objects.all(),
  58. required=False
  59. )
  60. ui_visible = forms.ChoiceField(
  61. label=_("UI visible"),
  62. choices=add_blank_choice(CustomFieldUIVisibleChoices),
  63. required=False
  64. )
  65. ui_editable = forms.ChoiceField(
  66. label=_("UI editable"),
  67. choices=add_blank_choice(CustomFieldUIEditableChoices),
  68. required=False
  69. )
  70. is_cloneable = forms.NullBooleanField(
  71. label=_('Is cloneable'),
  72. required=False,
  73. widget=BulkEditNullBooleanSelect()
  74. )
  75. validation_minimum = forms.IntegerField(
  76. label=_('Minimum value'),
  77. required=False,
  78. )
  79. validation_maximum = forms.IntegerField(
  80. label=_('Maximum value'),
  81. required=False,
  82. )
  83. validation_regex = forms.CharField(
  84. label=_('Validation regex'),
  85. required=False
  86. )
  87. comments = CommentField()
  88. fieldsets = (
  89. FieldSet('group_name', 'description', 'weight', 'required', 'unique', 'choice_set', name=_('Attributes')),
  90. FieldSet('ui_visible', 'ui_editable', 'is_cloneable', name=_('Behavior')),
  91. FieldSet('validation_minimum', 'validation_maximum', 'validation_regex', name=_('Validation')),
  92. )
  93. nullable_fields = ('group_name', 'description', 'choice_set')
  94. class CustomFieldChoiceSetBulkEditForm(ChangelogMessageMixin, BulkEditForm):
  95. pk = forms.ModelMultipleChoiceField(
  96. queryset=CustomFieldChoiceSet.objects.all(),
  97. widget=forms.MultipleHiddenInput
  98. )
  99. base_choices = forms.ChoiceField(
  100. choices=add_blank_choice(CustomFieldChoiceSetBaseChoices),
  101. required=False
  102. )
  103. description = forms.CharField(
  104. required=False
  105. )
  106. order_alphabetically = forms.NullBooleanField(
  107. required=False,
  108. widget=BulkEditNullBooleanSelect()
  109. )
  110. nullable_fields = ('base_choices', 'description')
  111. class CustomLinkBulkEditForm(ChangelogMessageMixin, BulkEditForm):
  112. pk = forms.ModelMultipleChoiceField(
  113. queryset=CustomLink.objects.all(),
  114. widget=forms.MultipleHiddenInput
  115. )
  116. enabled = forms.NullBooleanField(
  117. label=_('Enabled'),
  118. required=False,
  119. widget=BulkEditNullBooleanSelect()
  120. )
  121. new_window = forms.NullBooleanField(
  122. label=_('New window'),
  123. required=False,
  124. widget=BulkEditNullBooleanSelect()
  125. )
  126. weight = forms.IntegerField(
  127. label=_('Weight'),
  128. required=False
  129. )
  130. button_class = forms.ChoiceField(
  131. label=_('Button class'),
  132. choices=add_blank_choice(CustomLinkButtonClassChoices),
  133. required=False
  134. )
  135. class ExportTemplateBulkEditForm(ChangelogMessageMixin, BulkEditForm):
  136. pk = forms.ModelMultipleChoiceField(
  137. queryset=ExportTemplate.objects.all(),
  138. widget=forms.MultipleHiddenInput
  139. )
  140. description = forms.CharField(
  141. label=_('Description'),
  142. max_length=200,
  143. required=False
  144. )
  145. mime_type = forms.CharField(
  146. label=_('MIME type'),
  147. max_length=50,
  148. required=False
  149. )
  150. file_name = forms.CharField(
  151. label=_('File name'),
  152. required=False
  153. )
  154. file_extension = forms.CharField(
  155. label=_('File extension'),
  156. max_length=15,
  157. required=False
  158. )
  159. as_attachment = forms.NullBooleanField(
  160. label=_('As attachment'),
  161. required=False,
  162. widget=BulkEditNullBooleanSelect()
  163. )
  164. nullable_fields = ('description', 'mime_type', 'file_name', 'file_extension')
  165. class SavedFilterBulkEditForm(ChangelogMessageMixin, BulkEditForm):
  166. pk = forms.ModelMultipleChoiceField(
  167. queryset=SavedFilter.objects.all(),
  168. widget=forms.MultipleHiddenInput
  169. )
  170. description = forms.CharField(
  171. label=_('Description'),
  172. max_length=200,
  173. required=False
  174. )
  175. weight = forms.IntegerField(
  176. label=_('Weight'),
  177. required=False
  178. )
  179. enabled = forms.NullBooleanField(
  180. label=_('Enabled'),
  181. required=False,
  182. widget=BulkEditNullBooleanSelect()
  183. )
  184. shared = forms.NullBooleanField(
  185. label=_('Shared'),
  186. required=False,
  187. widget=BulkEditNullBooleanSelect()
  188. )
  189. nullable_fields = ('description',)
  190. class TableConfigBulkEditForm(BulkEditForm):
  191. pk = forms.ModelMultipleChoiceField(
  192. queryset=TableConfig.objects.all(),
  193. widget=forms.MultipleHiddenInput
  194. )
  195. description = forms.CharField(
  196. label=_('Description'),
  197. max_length=200,
  198. required=False
  199. )
  200. weight = forms.IntegerField(
  201. label=_('Weight'),
  202. required=False
  203. )
  204. enabled = forms.NullBooleanField(
  205. label=_('Enabled'),
  206. required=False,
  207. widget=BulkEditNullBooleanSelect()
  208. )
  209. shared = forms.NullBooleanField(
  210. label=_('Shared'),
  211. required=False,
  212. widget=BulkEditNullBooleanSelect()
  213. )
  214. nullable_fields = ('description',)
  215. class WebhookBulkEditForm(NetBoxModelBulkEditForm):
  216. model = Webhook
  217. pk = forms.ModelMultipleChoiceField(
  218. queryset=Webhook.objects.all(),
  219. widget=forms.MultipleHiddenInput
  220. )
  221. description = forms.CharField(
  222. label=_('Description'),
  223. max_length=200,
  224. required=False
  225. )
  226. http_method = forms.ChoiceField(
  227. choices=add_blank_choice(WebhookHttpMethodChoices),
  228. required=False,
  229. label=_('HTTP method')
  230. )
  231. payload_url = forms.CharField(
  232. required=False,
  233. label=_('Payload URL')
  234. )
  235. ssl_verification = forms.NullBooleanField(
  236. required=False,
  237. widget=BulkEditNullBooleanSelect(),
  238. label=_('SSL verification')
  239. )
  240. secret = forms.CharField(
  241. label=_('Secret'),
  242. required=False
  243. )
  244. ca_file_path = forms.CharField(
  245. required=False,
  246. label=_('CA file path')
  247. )
  248. nullable_fields = ('secret', 'ca_file_path')
  249. class EventRuleBulkEditForm(NetBoxModelBulkEditForm):
  250. model = EventRule
  251. pk = forms.ModelMultipleChoiceField(
  252. queryset=EventRule.objects.all(),
  253. widget=forms.MultipleHiddenInput
  254. )
  255. enabled = forms.NullBooleanField(
  256. label=_('Enabled'),
  257. required=False,
  258. widget=BulkEditNullBooleanSelect()
  259. )
  260. event_types = forms.MultipleChoiceField(
  261. choices=get_event_type_choices(),
  262. required=False,
  263. label=_('Event types')
  264. )
  265. description = forms.CharField(
  266. label=_('Description'),
  267. max_length=200,
  268. required=False
  269. )
  270. nullable_fields = ('description', 'conditions')
  271. class TagBulkEditForm(ChangelogMessageMixin, BulkEditForm):
  272. pk = forms.ModelMultipleChoiceField(
  273. queryset=Tag.objects.all(),
  274. widget=forms.MultipleHiddenInput
  275. )
  276. color = ColorField(
  277. label=_('Color'),
  278. required=False
  279. )
  280. description = forms.CharField(
  281. label=_('Description'),
  282. max_length=200,
  283. required=False
  284. )
  285. weight = forms.IntegerField(
  286. label=_('Weight'),
  287. required=False
  288. )
  289. nullable_fields = ('description',)
  290. class ConfigContextProfileBulkEditForm(NetBoxModelBulkEditForm):
  291. pk = forms.ModelMultipleChoiceField(
  292. queryset=ConfigContextProfile.objects.all(),
  293. widget=forms.MultipleHiddenInput
  294. )
  295. description = forms.CharField(
  296. label=_('Description'),
  297. required=False,
  298. max_length=100
  299. )
  300. comments = CommentField()
  301. model = ConfigContextProfile
  302. fieldsets = (
  303. FieldSet('description',),
  304. )
  305. nullable_fields = ('description',)
  306. class ConfigContextBulkEditForm(ChangelogMessageMixin, BulkEditForm):
  307. pk = forms.ModelMultipleChoiceField(
  308. queryset=ConfigContext.objects.all(),
  309. widget=forms.MultipleHiddenInput
  310. )
  311. weight = forms.IntegerField(
  312. label=_('Weight'),
  313. required=False,
  314. min_value=0
  315. )
  316. profile = DynamicModelChoiceField(
  317. queryset=ConfigContextProfile.objects.all(),
  318. required=False
  319. )
  320. is_active = forms.NullBooleanField(
  321. label=_('Is active'),
  322. required=False,
  323. widget=BulkEditNullBooleanSelect()
  324. )
  325. description = forms.CharField(
  326. label=_('Description'),
  327. required=False,
  328. max_length=100
  329. )
  330. fieldsets = (
  331. FieldSet('weight', 'profile', 'is_active', 'description'),
  332. )
  333. nullable_fields = ('profile', 'description')
  334. class ConfigTemplateBulkEditForm(ChangelogMessageMixin, BulkEditForm):
  335. pk = forms.ModelMultipleChoiceField(
  336. queryset=ConfigTemplate.objects.all(),
  337. widget=forms.MultipleHiddenInput
  338. )
  339. description = forms.CharField(
  340. label=_('Description'),
  341. max_length=200,
  342. required=False
  343. )
  344. mime_type = forms.CharField(
  345. label=_('MIME type'),
  346. max_length=50,
  347. required=False
  348. )
  349. file_name = forms.CharField(
  350. label=_('File name'),
  351. required=False
  352. )
  353. file_extension = forms.CharField(
  354. label=_('File extension'),
  355. max_length=15,
  356. required=False
  357. )
  358. as_attachment = forms.NullBooleanField(
  359. label=_('As attachment'),
  360. required=False,
  361. widget=BulkEditNullBooleanSelect()
  362. )
  363. nullable_fields = ('description', 'mime_type', 'file_name', 'file_extension')
  364. class ImageAttachmentBulkEditForm(ChangelogMessageMixin, BulkEditForm):
  365. pk = forms.ModelMultipleChoiceField(
  366. queryset=ImageAttachment.objects.all(),
  367. widget=forms.MultipleHiddenInput
  368. )
  369. description = forms.CharField(
  370. label=_('Description'),
  371. max_length=200,
  372. required=False
  373. )
  374. class JournalEntryBulkEditForm(ChangelogMessageMixin, BulkEditForm):
  375. pk = forms.ModelMultipleChoiceField(
  376. queryset=JournalEntry.objects.all(),
  377. widget=forms.MultipleHiddenInput
  378. )
  379. kind = forms.ChoiceField(
  380. label=_('Kind'),
  381. choices=add_blank_choice(JournalEntryKindChoices),
  382. required=False
  383. )
  384. comments = CommentField()
  385. class NotificationGroupBulkEditForm(ChangelogMessageMixin, BulkEditForm):
  386. pk = forms.ModelMultipleChoiceField(
  387. queryset=NotificationGroup.objects.all(),
  388. widget=forms.MultipleHiddenInput
  389. )
  390. description = forms.CharField(
  391. label=_('Description'),
  392. max_length=200,
  393. required=False
  394. )
  395. nullable_fields = ('description',)