nautobot 3.0.0rc1__py3-none-any.whl → 3.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of nautobot might be problematic. Click here for more details.

Files changed (103) hide show
  1. nautobot/apps/forms.py +8 -0
  2. nautobot/apps/templatetags.py +231 -0
  3. nautobot/apps/testing.py +11 -1
  4. nautobot/apps/ui.py +21 -1
  5. nautobot/apps/utils.py +26 -1
  6. nautobot/core/celery/__init__.py +46 -1
  7. nautobot/core/cli/bootstrap_v3_to_v5.py +185 -44
  8. nautobot/core/cli/bootstrap_v3_to_v5_changes.yaml +314 -0
  9. nautobot/core/graphql/generators.py +2 -2
  10. nautobot/core/jobs/bulk_actions.py +12 -6
  11. nautobot/core/jobs/cleanup.py +13 -1
  12. nautobot/core/settings.py +13 -0
  13. nautobot/core/settings.yaml +22 -0
  14. nautobot/core/settings_funcs.py +11 -1
  15. nautobot/core/tables.py +19 -1
  16. nautobot/core/templates/components/panel/body_wrapper_generic_table.html +1 -1
  17. nautobot/core/templates/components/panel/header_extra_content_table.html +9 -3
  18. nautobot/core/templates/generic/object_create.html +1 -1
  19. nautobot/core/templates/inc/header.html +9 -10
  20. nautobot/core/templates/login.html +16 -1
  21. nautobot/core/templates/nautobot_config.py.j2 +14 -1
  22. nautobot/core/templates/redoc_ui.html +3 -0
  23. nautobot/core/templatetags/helpers.py +3 -3
  24. nautobot/core/testing/views.py +3 -1
  25. nautobot/core/tests/test_graphql.py +13 -0
  26. nautobot/core/tests/test_jobs.py +118 -0
  27. nautobot/core/tests/test_views.py +24 -0
  28. nautobot/core/ui/bulk_buttons.py +2 -3
  29. nautobot/core/utils/lookup.py +2 -3
  30. nautobot/core/utils/permissions.py +1 -1
  31. nautobot/core/views/generic.py +1 -0
  32. nautobot/core/views/mixins.py +37 -10
  33. nautobot/core/views/renderers.py +1 -0
  34. nautobot/core/views/utils.py +3 -3
  35. nautobot/data_validation/views.py +1 -9
  36. nautobot/dcim/forms.py +9 -9
  37. nautobot/dcim/models/devices.py +3 -3
  38. nautobot/dcim/tables/power.py +3 -0
  39. nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +1 -1
  40. nautobot/dcim/views.py +30 -44
  41. nautobot/extras/api/views.py +14 -3
  42. nautobot/extras/choices.py +3 -0
  43. nautobot/extras/jobs.py +48 -2
  44. nautobot/extras/migrations/0132_approval_workflow_seed_data.py +127 -0
  45. nautobot/extras/models/approvals.py +11 -1
  46. nautobot/extras/models/models.py +19 -0
  47. nautobot/extras/models/relationships.py +3 -1
  48. nautobot/extras/tables.py +35 -18
  49. nautobot/extras/templates/extras/approval_workflow/approve.html +9 -2
  50. nautobot/extras/templates/extras/approval_workflow/deny.html +9 -3
  51. nautobot/extras/templates/extras/approvalworkflowdefinition_update.html +1 -1
  52. nautobot/extras/templates/extras/customfield_update.html +1 -1
  53. nautobot/extras/templates/extras/dynamicgroup_update.html +2 -2
  54. nautobot/extras/templates/extras/inc/approval_buttons_column.html +10 -2
  55. nautobot/extras/templates/extras/inc/job_tiles.html +2 -2
  56. nautobot/extras/templates/extras/inc/jobresult.html +1 -1
  57. nautobot/extras/templates/extras/metadatatype_create.html +1 -1
  58. nautobot/extras/templates/extras/object_approvalworkflow.html +2 -3
  59. nautobot/extras/templates/extras/secretsgroup_update.html +1 -1
  60. nautobot/extras/tests/test_api.py +57 -3
  61. nautobot/extras/tests/test_customfields_filters.py +84 -4
  62. nautobot/extras/tests/test_views.py +323 -6
  63. nautobot/extras/views.py +114 -39
  64. nautobot/ipam/constants.py +2 -2
  65. nautobot/ipam/tables.py +7 -6
  66. nautobot/load_balancers/constants.py +6 -0
  67. nautobot/load_balancers/migrations/0001_initial.py +14 -3
  68. nautobot/load_balancers/models.py +5 -4
  69. nautobot/load_balancers/tables.py +5 -0
  70. nautobot/project-static/dist/css/nautobot.css +1 -1
  71. nautobot/project-static/dist/css/nautobot.css.map +1 -1
  72. nautobot/project-static/dist/js/graphql-libraries.js +1 -1
  73. nautobot/project-static/dist/js/graphql-libraries.js.map +1 -1
  74. nautobot/project-static/dist/js/libraries.js +1 -1
  75. nautobot/project-static/dist/js/libraries.js.LICENSE.txt +38 -2
  76. nautobot/project-static/dist/js/libraries.js.map +1 -1
  77. nautobot/project-static/dist/js/nautobot-graphiql.js +1 -1
  78. nautobot/project-static/dist/js/nautobot-graphiql.js.map +1 -1
  79. nautobot/project-static/dist/js/nautobot.js +1 -1
  80. nautobot/project-static/dist/js/nautobot.js.map +1 -1
  81. nautobot/project-static/img/dark-theme.png +0 -0
  82. nautobot/project-static/img/light-theme.png +0 -0
  83. nautobot/project-static/img/system-theme.png +0 -0
  84. nautobot/project-static/js/forms.js +1 -85
  85. nautobot/tenancy/tables.py +3 -2
  86. nautobot/tenancy/views.py +3 -2
  87. nautobot/ui/package-lock.json +553 -569
  88. nautobot/ui/package.json +10 -10
  89. nautobot/ui/src/js/checkbox.js +132 -0
  90. nautobot/ui/src/js/nautobot.js +6 -0
  91. nautobot/ui/src/js/select2.js +69 -73
  92. nautobot/ui/src/js/theme.js +129 -39
  93. nautobot/ui/src/scss/nautobot.scss +11 -1
  94. nautobot/vpn/templates/vpn/vpnprofile_create.html +2 -2
  95. nautobot/wireless/filters.py +15 -1
  96. nautobot/wireless/tables.py +18 -14
  97. nautobot/wireless/templates/wireless/wirelessnetwork_create.html +1 -1
  98. {nautobot-3.0.0rc1.dist-info → nautobot-3.0.1.dist-info}/METADATA +2 -2
  99. {nautobot-3.0.0rc1.dist-info → nautobot-3.0.1.dist-info}/RECORD +103 -98
  100. {nautobot-3.0.0rc1.dist-info → nautobot-3.0.1.dist-info}/LICENSE.txt +0 -0
  101. {nautobot-3.0.0rc1.dist-info → nautobot-3.0.1.dist-info}/NOTICE +0 -0
  102. {nautobot-3.0.0rc1.dist-info → nautobot-3.0.1.dist-info}/WHEEL +0 -0
  103. {nautobot-3.0.0rc1.dist-info → nautobot-3.0.1.dist-info}/entry_points.txt +0 -0
@@ -7,7 +7,7 @@ from nautobot.core.filters import (
7
7
  RelatedMembershipBooleanFilter,
8
8
  SearchFilter,
9
9
  )
10
- from nautobot.dcim.models import ControllerManagedDeviceGroup
10
+ from nautobot.dcim.models import Controller, ControllerManagedDeviceGroup, Device
11
11
  from nautobot.extras.filters import NautobotFilterSet
12
12
  from nautobot.extras.models import SecretsGroup
13
13
  from nautobot.tenancy.filters import TenancyModelFilterSetMixin
@@ -66,6 +66,11 @@ class RadioProfileFilterSet(NautobotFilterSet):
66
66
  queryset=ControllerManagedDeviceGroup.objects.all(),
67
67
  to_field_name="name",
68
68
  )
69
+ controller_managed_device_groups__devices = NaturalKeyOrPKMultipleChoiceFilter(
70
+ prefers_id=True,
71
+ queryset=Device.objects.all(),
72
+ to_field_name="name",
73
+ )
69
74
  has_controller_managed_device_groups = RelatedMembershipBooleanFilter(
70
75
  field_name="controller_managed_device_groups",
71
76
  label="Has controller managed device groups",
@@ -102,6 +107,15 @@ class WirelessNetworkFilterSet(NautobotFilterSet, TenancyModelFilterSetMixin):
102
107
  queryset=ControllerManagedDeviceGroup.objects.all(),
103
108
  to_field_name="name",
104
109
  )
110
+ controller_managed_device_groups__devices = NaturalKeyOrPKMultipleChoiceFilter(
111
+ prefers_id=True,
112
+ queryset=Device.objects.all(),
113
+ to_field_name="name",
114
+ )
115
+ controller_managed_device_groups__controller = NaturalKeyOrPKMultipleChoiceFilter(
116
+ queryset=Controller.objects.all(),
117
+ to_field_name="name",
118
+ )
105
119
  has_controller_managed_device_groups = RelatedMembershipBooleanFilter(
106
120
  field_name="controller_managed_device_groups",
107
121
  label="Has controller managed device groups",
@@ -141,13 +141,15 @@ class BaseControllerManagedDeviceGroupWirelessNetworkAssignmentTable(BaseTable):
141
141
  controller_managed_device_group = tables.Column(linkify=True, verbose_name="Device Group")
142
142
  wireless_network = tables.Column(linkify=True, verbose_name="Wireless Network")
143
143
  vlan = tables.Column(linkify=True)
144
- ssid = tables.Column(accessor="wireless_network.ssid")
145
- mode = tables.Column(accessor="wireless_network.mode")
146
- authentication = tables.Column(accessor="wireless_network.authentication")
147
- enabled = BooleanColumn(accessor="wireless_network.enabled")
148
- hidden = BooleanColumn(accessor="wireless_network.hidden")
149
- secrets_group = tables.Column(accessor="wireless_network.secrets_group", linkify=True, verbose_name="Secrets Group")
150
- controller = tables.Column(accessor="controller_managed_device_group.controller", linkify=True)
144
+ ssid = tables.Column(accessor="wireless_network__ssid")
145
+ mode = tables.Column(accessor="wireless_network__mode")
146
+ authentication = tables.Column(accessor="wireless_network__authentication")
147
+ enabled = BooleanColumn(accessor="wireless_network__enabled")
148
+ hidden = BooleanColumn(accessor="wireless_network__hidden")
149
+ secrets_group = tables.Column(
150
+ accessor="wireless_network__secrets_group", linkify=True, verbose_name="Secrets Group"
151
+ )
152
+ controller = tables.Column(accessor="controller_managed_device_group__controller", linkify=True)
151
153
  prefix_count = LinkedCountColumn(
152
154
  viewname="ipam:prefix_list",
153
155
  url_params={"vlan_id": "vlan_id"},
@@ -216,13 +218,15 @@ class ControllerControllerManagedDeviceGroupWirelessNetworkAssignmentTable(
216
218
  class ControllerManagedDeviceGroupRadioProfileAssignmentTable(BaseTable):
217
219
  controller_managed_device_group = tables.Column(linkify=True, verbose_name="Device Group")
218
220
  radio_profile = tables.Column(linkify=True, verbose_name="Radio Profile")
219
- frequency = tables.Column(accessor="radio_profile.frequency")
220
- channel_width = tables.Column(accessor="radio_profile.channel_width", verbose_name="Channel Width")
221
- allowed_channel_list = tables.Column(accessor="radio_profile.allowed_channel_list", verbose_name="Allowed Channels")
222
- tx_power_min = tables.Column(accessor="radio_profile.tx_power_min")
223
- tx_power_max = tables.Column(accessor="radio_profile.tx_power_max")
224
- rx_power_min = tables.Column(accessor="radio_profile.rx_power_min")
225
- regulatory_domain = tables.Column(accessor="radio_profile.regulatory_domain", verbose_name="Regulatory Domain")
221
+ frequency = tables.Column(accessor="radio_profile__frequency")
222
+ channel_width = tables.Column(accessor="radio_profile__channel_width", verbose_name="Channel Width")
223
+ allowed_channel_list = tables.Column(
224
+ accessor="radio_profile__allowed_channel_list", verbose_name="Allowed Channels"
225
+ )
226
+ tx_power_min = tables.Column(accessor="radio_profile__tx_power_min")
227
+ tx_power_max = tables.Column(accessor="radio_profile__tx_power_max")
228
+ rx_power_min = tables.Column(accessor="radio_profile__rx_power_min")
229
+ regulatory_domain = tables.Column(accessor="radio_profile__regulatory_domain", verbose_name="Regulatory Domain")
226
230
 
227
231
  class Meta(BaseTable.Meta):
228
232
  model = ControllerManagedDeviceGroupRadioProfileAssignment
@@ -18,7 +18,7 @@
18
18
  </div>
19
19
  <div class="card">
20
20
  <div class="card-header"><strong>Controller Managed Device Group Assignment</strong></div>
21
- <div class="card-body">
21
+ <div class="card-body overflow-auto">
22
22
  {% if controller_managed_device_groups.errors %}
23
23
  <div class="text-danger">
24
24
  Please correct the error(s) below:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: nautobot
3
- Version: 3.0.0rc1
3
+ Version: 3.0.1
4
4
  Summary: Source of truth and network automation platform.
5
5
  License: Apache-2.0
6
6
  Keywords: Nautobot
@@ -33,7 +33,7 @@ Requires-Dist: django-ajax-tables (>=1.1.1,<1.2.0)
33
33
  Requires-Dist: django-auth-ldap (>=5.2.0,<5.3.0) ; extra == "all" or extra == "ldap"
34
34
  Requires-Dist: django-celery-beat (>=2.7.0,<2.8.0)
35
35
  Requires-Dist: django-celery-results (>=2.6.0,<2.7.0)
36
- Requires-Dist: django-constance (>=4.3.3,<4.4.0)
36
+ Requires-Dist: django-constance (>=4.3.4,<4.4.0)
37
37
  Requires-Dist: django-cors-headers (>=4.9.0,<4.10.0)
38
38
  Requires-Dist: django-db-file-storage (>=0.5.6.1,<0.6.0.0)
39
39
  Requires-Dist: django-extensions (>=4.1,<4.2)