nautobot 2.0.5__py3-none-any.whl → 2.1.0b1__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 (376) hide show
  1. nautobot/circuits/navigation.py +0 -25
  2. nautobot/circuits/templates/circuits/circuit_retrieve.html +0 -9
  3. nautobot/circuits/templates/circuits/providernetwork_retrieve.html +0 -2
  4. nautobot/circuits/tests/test_filters.py +1 -0
  5. nautobot/core/api/serializers.py +15 -5
  6. nautobot/core/api/views.py +18 -19
  7. nautobot/core/choices.py +1 -1
  8. nautobot/core/filters.py +12 -4
  9. nautobot/core/jobs/__init__.py +125 -3
  10. nautobot/core/management/commands/generate_test_data.py +4 -1
  11. nautobot/core/models/fields.py +12 -2
  12. nautobot/core/settings.py +8 -7
  13. nautobot/core/templates/base_django.html +2 -2
  14. nautobot/core/templates/buttons/export.html +57 -30
  15. nautobot/core/templates/generic/object_list.html +2 -2
  16. nautobot/core/templates/generic/object_retrieve.html +8 -1
  17. nautobot/core/templates/home.html +5 -5
  18. nautobot/core/templates/inc/created_updated.html +2 -2
  19. nautobot/core/templates/inc/footer.html +2 -2
  20. nautobot/core/templates/inc/javascript.html +0 -10
  21. nautobot/core/templates/inc/media.html +2 -0
  22. nautobot/core/templates/inc/nav_menu.html +66 -68
  23. nautobot/core/templates/inc/object_details_advanced_panel.html +19 -0
  24. nautobot/core/templates/nautobot_config.py.j2 +10 -4
  25. nautobot/core/templates/panel_table.html +1 -1
  26. nautobot/core/templates/template.css +89 -0
  27. nautobot/core/templates/utilities/templatetags/table_config_form.html +1 -0
  28. nautobot/core/templatetags/buttons.py +7 -2
  29. nautobot/core/testing/views.py +34 -4
  30. nautobot/core/tests/integration/test_home.py +1 -43
  31. nautobot/core/tests/integration/test_navbar.py +10 -64
  32. nautobot/core/tests/integration/test_plugin_home.py +4 -5
  33. nautobot/core/tests/integration/test_plugin_navbar.py +20 -16
  34. nautobot/core/tests/integration/test_theme.py +4 -0
  35. nautobot/core/tests/test_api.py +14 -66
  36. nautobot/core/tests/test_filters.py +127 -0
  37. nautobot/core/tests/test_forms.py +1 -1
  38. nautobot/core/tests/test_graphql.py +165 -2
  39. nautobot/core/tests/test_jobs.py +112 -0
  40. nautobot/core/tests/test_openapi.py +6 -0
  41. nautobot/core/tests/test_views.py +11 -85
  42. nautobot/core/urls.py +6 -1
  43. nautobot/core/utils/lookup.py +28 -0
  44. nautobot/core/utils/requests.py +2 -3
  45. nautobot/core/views/__init__.py +3 -4
  46. nautobot/core/views/generic.py +9 -4
  47. nautobot/core/views/mixins.py +4 -2
  48. nautobot/core/views/renderers.py +5 -0
  49. nautobot/dcim/models/device_components.py +1 -0
  50. nautobot/dcim/navigation.py +10 -165
  51. nautobot/dcim/templates/dcim/location.html +1 -1
  52. nautobot/dcim/tests/features/locations.feature +143 -0
  53. nautobot/dcim/tests/test_api.py +1 -1
  54. nautobot/dcim/tests/test_filters.py +11 -3
  55. nautobot/extras/admin.py +1 -1
  56. nautobot/extras/api/serializers.py +33 -0
  57. nautobot/extras/api/urls.py +6 -0
  58. nautobot/extras/api/views.py +45 -6
  59. nautobot/extras/factory.py +28 -2
  60. nautobot/extras/filters/__init__.py +52 -0
  61. nautobot/extras/filters/mixins.py +4 -29
  62. nautobot/extras/forms/forms.py +43 -0
  63. nautobot/extras/jobs.py +31 -9
  64. nautobot/extras/migrations/0100_fileproxy_job_result.py +32 -0
  65. nautobot/extras/migrations/0101_externalintegration.py +61 -0
  66. nautobot/extras/migrations/0102_set_null_objectchange_contenttype.py +32 -0
  67. nautobot/extras/models/__init__.py +2 -0
  68. nautobot/extras/models/change_logging.py +2 -2
  69. nautobot/extras/models/models.py +96 -16
  70. nautobot/extras/navigation.py +17 -29
  71. nautobot/extras/signals.py +15 -0
  72. nautobot/extras/tables.py +27 -0
  73. nautobot/extras/templates/extras/externalintegration_retrieve.html +37 -0
  74. nautobot/extras/templates/extras/inc/jobresult.html +24 -0
  75. nautobot/extras/templates/extras/jobresult.html +24 -0
  76. nautobot/extras/test_jobs/file_output.py +16 -0
  77. nautobot/extras/tests/test_api.py +92 -0
  78. nautobot/extras/tests/test_filters.py +64 -2
  79. nautobot/extras/tests/test_jobs.py +39 -0
  80. nautobot/extras/tests/test_models.py +34 -0
  81. nautobot/extras/tests/test_views.py +22 -2
  82. nautobot/extras/urls.py +1 -0
  83. nautobot/extras/views.py +15 -0
  84. nautobot/ipam/forms.py +16 -0
  85. nautobot/ipam/models.py +3 -0
  86. nautobot/ipam/navigation.py +2 -59
  87. nautobot/ipam/templates/ipam/ipaddress.html +0 -9
  88. nautobot/ipam/templates/ipam/prefix.html +0 -9
  89. nautobot/ipam/tests/features/prefixes.feature +134 -0
  90. nautobot/ipam/tests/test_filters.py +5 -10
  91. nautobot/ipam/tests/test_views.py +8 -1
  92. nautobot/ipam/views.py +3 -0
  93. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css +191 -191
  94. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css.map +1 -1
  95. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css +1 -1
  96. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css.map +1 -1
  97. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css +874 -881
  98. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css.map +1 -1
  99. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css +1 -1
  100. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css.map +1 -1
  101. nautobot/project-static/css/base.css +135 -99
  102. nautobot/project-static/css/dark.css +65 -6
  103. nautobot/project-static/docs/404.html +44 -16
  104. nautobot/project-static/docs/apps/index.html +44 -16
  105. nautobot/project-static/docs/apps/nautobot-apps.html +44 -16
  106. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +44 -16
  107. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +44 -16
  108. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +1597 -1457
  109. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +44 -16
  110. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +45 -17
  111. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +44 -16
  112. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +44 -16
  113. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +44 -16
  114. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +44 -16
  115. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +353 -432
  116. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +66 -38
  117. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +44 -16
  118. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +2154 -2307
  119. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +807 -691
  120. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +44 -16
  121. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +44 -16
  122. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +58 -30
  123. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +3600 -3456
  124. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +44 -16
  125. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +44 -16
  126. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +101 -75
  127. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +3083 -3019
  128. nautobot/project-static/docs/development/apps/api/configuration-view.html +44 -16
  129. nautobot/project-static/docs/development/apps/api/database-backend-config.html +44 -16
  130. nautobot/project-static/docs/development/apps/api/models/django-admin.html +44 -16
  131. nautobot/project-static/docs/development/apps/api/models/global-search.html +44 -16
  132. nautobot/project-static/docs/development/apps/api/models/graphql.html +44 -16
  133. nautobot/project-static/docs/development/apps/api/models/index.html +44 -16
  134. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +44 -16
  135. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +44 -16
  136. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +44 -16
  137. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +44 -16
  138. nautobot/project-static/docs/development/apps/api/platform-features/index.html +44 -16
  139. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +44 -16
  140. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +44 -16
  141. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +44 -16
  142. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +44 -16
  143. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +44 -16
  144. nautobot/project-static/docs/development/apps/api/prometheus.html +44 -16
  145. nautobot/project-static/docs/development/apps/api/setup.html +44 -16
  146. nautobot/project-static/docs/development/apps/api/testing.html +44 -16
  147. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +44 -16
  148. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +44 -16
  149. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +44 -16
  150. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +44 -16
  151. nautobot/project-static/docs/development/apps/api/ui-extensions/object-detail-views.html +44 -16
  152. nautobot/project-static/docs/development/apps/api/ui-extensions/tabs.html +44 -16
  153. nautobot/project-static/docs/development/apps/api/views/base-template.html +44 -16
  154. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +44 -16
  155. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +44 -16
  156. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +44 -16
  157. nautobot/project-static/docs/development/apps/api/views/index.html +44 -16
  158. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +44 -16
  159. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +44 -16
  160. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +44 -16
  161. nautobot/project-static/docs/development/apps/api/views/notes.html +44 -16
  162. nautobot/project-static/docs/development/apps/api/views/rest-api.html +44 -16
  163. nautobot/project-static/docs/development/apps/api/views/urls.html +44 -16
  164. nautobot/project-static/docs/development/apps/api/views/view-overrides.html +44 -16
  165. nautobot/project-static/docs/development/apps/index.html +44 -16
  166. nautobot/project-static/docs/development/apps/migration/code-updates.html +44 -16
  167. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +44 -16
  168. nautobot/project-static/docs/development/apps/migration/from-v1.html +44 -16
  169. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +44 -16
  170. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +44 -16
  171. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +44 -16
  172. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +44 -16
  173. nautobot/project-static/docs/development/apps/porting-from-netbox.html +44 -16
  174. nautobot/project-static/docs/development/core/application-registry.html +44 -16
  175. nautobot/project-static/docs/development/core/best-practices.html +44 -16
  176. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +44 -16
  177. nautobot/project-static/docs/development/core/extending-models.html +44 -16
  178. nautobot/project-static/docs/development/core/generic-views.html +44 -16
  179. nautobot/project-static/docs/development/core/getting-started.html +44 -16
  180. nautobot/project-static/docs/development/core/homepage.html +44 -16
  181. nautobot/project-static/docs/development/core/index.html +44 -16
  182. nautobot/project-static/docs/development/core/model-features.html +44 -16
  183. nautobot/project-static/docs/development/core/natural-keys.html +44 -16
  184. nautobot/project-static/docs/development/core/navigation-menu.html +44 -21
  185. nautobot/project-static/docs/development/core/react-ui.html +44 -16
  186. nautobot/project-static/docs/development/core/release-checklist.html +44 -16
  187. nautobot/project-static/docs/development/core/role-internals.html +44 -16
  188. nautobot/project-static/docs/development/core/style-guide.html +44 -16
  189. nautobot/project-static/docs/development/core/templates.html +44 -16
  190. nautobot/project-static/docs/development/core/testing.html +44 -16
  191. nautobot/project-static/docs/development/core/user-preferences.html +44 -16
  192. nautobot/project-static/docs/development/index.html +44 -16
  193. nautobot/project-static/docs/development/jobs/index.html +280 -234
  194. nautobot/project-static/docs/development/jobs/migration/from-v1.html +44 -16
  195. nautobot/project-static/docs/index.html +44 -16
  196. nautobot/project-static/docs/objects.inv +0 -0
  197. nautobot/project-static/docs/release-notes/index.html +47 -19
  198. nautobot/project-static/docs/release-notes/version-1.0.html +44 -16
  199. nautobot/project-static/docs/release-notes/version-1.1.html +44 -16
  200. nautobot/project-static/docs/release-notes/version-1.2.html +44 -16
  201. nautobot/project-static/docs/release-notes/version-1.3.html +44 -16
  202. nautobot/project-static/docs/release-notes/version-1.4.html +44 -16
  203. nautobot/project-static/docs/release-notes/version-1.5.html +44 -16
  204. nautobot/project-static/docs/release-notes/version-1.6.html +44 -16
  205. nautobot/project-static/docs/release-notes/version-2.0.html +47 -19
  206. nautobot/project-static/docs/release-notes/version-2.1.html +5724 -0
  207. nautobot/project-static/docs/search/search_index.json +1 -1
  208. nautobot/project-static/docs/sitemap.xml +247 -237
  209. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  210. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +44 -16
  211. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +44 -16
  212. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +44 -16
  213. nautobot/project-static/docs/user-guide/administration/configuration/index.html +44 -16
  214. nautobot/project-static/docs/user-guide/administration/configuration/node-configuration.html +44 -16
  215. nautobot/project-static/docs/user-guide/administration/configuration/optional-settings.html +109 -43
  216. nautobot/project-static/docs/user-guide/administration/configuration/required-settings.html +44 -16
  217. nautobot/project-static/docs/user-guide/administration/guides/caching.html +44 -16
  218. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +44 -16
  219. nautobot/project-static/docs/user-guide/administration/guides/healthcheck.html +44 -16
  220. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +44 -16
  221. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +44 -16
  222. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +44 -16
  223. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +48 -19
  224. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +44 -16
  225. nautobot/project-static/docs/user-guide/administration/installation/docker.html +44 -16
  226. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +44 -16
  227. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +44 -16
  228. nautobot/project-static/docs/user-guide/administration/installation/index.html +44 -16
  229. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +44 -16
  230. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +44 -16
  231. nautobot/project-static/docs/user-guide/administration/installation/selinux-troubleshooting.html +44 -16
  232. nautobot/project-static/docs/user-guide/administration/installation/services.html +44 -16
  233. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +44 -16
  234. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +44 -16
  235. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +44 -16
  236. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +44 -16
  237. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +44 -16
  238. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +44 -16
  239. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +44 -16
  240. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +44 -16
  241. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +44 -16
  242. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +44 -16
  243. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +44 -16
  244. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +44 -16
  245. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +44 -16
  246. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +44 -16
  247. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +44 -16
  248. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +44 -16
  249. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +44 -16
  250. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +44 -16
  251. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +44 -16
  252. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +44 -16
  253. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +44 -16
  254. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +44 -16
  255. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +44 -16
  256. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +44 -16
  257. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +44 -16
  258. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +44 -16
  259. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +44 -16
  260. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +44 -16
  261. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +44 -16
  262. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +44 -16
  263. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +44 -16
  264. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +44 -16
  265. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +44 -16
  266. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +44 -16
  267. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +44 -16
  268. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +44 -16
  269. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +44 -16
  270. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +44 -16
  271. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +44 -16
  272. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +44 -16
  273. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +44 -16
  274. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +44 -16
  275. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +44 -16
  276. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +44 -16
  277. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +44 -16
  278. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +44 -16
  279. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +44 -16
  280. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +44 -16
  281. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +44 -16
  282. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +44 -16
  283. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +44 -16
  284. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +44 -16
  285. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +44 -16
  286. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +44 -16
  287. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +44 -16
  288. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +44 -16
  289. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +44 -16
  290. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +44 -16
  291. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +44 -16
  292. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +44 -16
  293. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +44 -16
  294. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +44 -16
  295. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +44 -16
  296. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +44 -16
  297. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +44 -16
  298. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +44 -16
  299. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +44 -16
  300. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +44 -16
  301. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +44 -16
  302. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +44 -16
  303. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +44 -16
  304. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +44 -16
  305. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +44 -16
  306. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +44 -16
  307. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +44 -16
  308. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +44 -16
  309. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +44 -16
  310. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +44 -16
  311. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +44 -16
  312. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +44 -16
  313. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +44 -16
  314. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +44 -16
  315. nautobot/project-static/docs/user-guide/index.html +44 -16
  316. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +110 -16
  317. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +44 -16
  318. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +44 -16
  319. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +44 -16
  320. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +44 -16
  321. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +47 -19
  322. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +5359 -0
  323. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +47 -19
  324. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +44 -16
  325. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +44 -16
  326. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +44 -16
  327. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +44 -16
  328. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +44 -16
  329. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +44 -16
  330. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +44 -16
  331. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +44 -16
  332. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +44 -16
  333. nautobot/project-static/docs/user-guide/platform-functionality/note.html +44 -16
  334. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +44 -16
  335. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +44 -16
  336. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +113 -44
  337. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +44 -16
  338. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +44 -16
  339. nautobot/project-static/docs/user-guide/platform-functionality/role.html +44 -16
  340. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +44 -16
  341. nautobot/project-static/docs/user-guide/platform-functionality/status.html +44 -16
  342. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +44 -16
  343. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +44 -16
  344. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +44 -16
  345. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +44 -16
  346. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +44 -16
  347. nautobot/project-static/fonts/UFL.txt +96 -0
  348. nautobot/project-static/fonts/Ubuntu-Bold.woff2 +0 -0
  349. nautobot/project-static/fonts/Ubuntu-BoldItalic.woff2 +0 -0
  350. nautobot/project-static/fonts/Ubuntu-Italic.woff2 +0 -0
  351. nautobot/project-static/fonts/Ubuntu-Medium.woff2 +0 -0
  352. nautobot/project-static/fonts/Ubuntu-MediumItalic.woff2 +0 -0
  353. nautobot/project-static/fonts/Ubuntu-Regular.woff2 +0 -0
  354. nautobot/project-static/fonts/UbuntuMono-Bold.woff2 +0 -0
  355. nautobot/project-static/fonts/UbuntuMono-BoldItalic.woff2 +0 -0
  356. nautobot/project-static/fonts/UbuntuMono-Italic.woff2 +0 -0
  357. nautobot/project-static/fonts/UbuntuMono-Regular.woff2 +0 -0
  358. nautobot/project-static/img/dark-theme.png +0 -0
  359. nautobot/project-static/img/light-theme.png +0 -0
  360. nautobot/project-static/img/nautobot_chevron.svg +5 -0
  361. nautobot/project-static/img/nautobot_chevron_header.svg +5 -0
  362. nautobot/project-static/img/system-theme.png +0 -0
  363. nautobot/tenancy/navigation.py +0 -13
  364. nautobot/ui/package-lock.json +2 -2
  365. nautobot/ui/package.json +1 -1
  366. nautobot/users/admin.py +44 -0
  367. nautobot/users/migrations/0007_alter_objectpermission_object_types.py +33 -0
  368. nautobot/users/models.py +3 -2
  369. nautobot/virtualization/navigation.py +1 -33
  370. nautobot/virtualization/tests/test_api.py +1 -1
  371. nautobot/virtualization/tests/test_filters.py +1 -1
  372. {nautobot-2.0.5.dist-info → nautobot-2.1.0b1.dist-info}/METADATA +1 -1
  373. {nautobot-2.0.5.dist-info → nautobot-2.1.0b1.dist-info}/RECORD +376 -351
  374. {nautobot-2.0.5.dist-info → nautobot-2.1.0b1.dist-info}/LICENSE.txt +0 -0
  375. {nautobot-2.0.5.dist-info → nautobot-2.1.0b1.dist-info}/WHEEL +0 -0
  376. {nautobot-2.0.5.dist-info → nautobot-2.1.0b1.dist-info}/entry_points.txt +0 -0
@@ -604,7 +604,7 @@ class ObjectListViewMixin(NautobotViewSetMixin, mixins.ListModelMixin):
604
604
  filterset_class = None
605
605
  filterset_form_class = None
606
606
  non_filter_params = (
607
- "export", # trigger for CSV/export-template/YAML export
607
+ "export", # trigger for CSV/export-template/YAML export # 3.0 TODO: remove, irrelevant after #4746
608
608
  "page", # used by django-tables2.RequestConfig
609
609
  "per_page", # used by get_paginate_count
610
610
  "sort", # table sorting
@@ -626,6 +626,7 @@ class ObjectListViewMixin(NautobotViewSetMixin, mixins.ListModelMixin):
626
626
  queryset = queryset.none()
627
627
  return queryset
628
628
 
629
+ # 3.0 TODO: remove, irrelevant after #4746
629
630
  def check_for_export(self, request, model, content_type):
630
631
  # Check for export template rendering
631
632
  queryset = self.filter_queryset(self.get_queryset())
@@ -652,6 +653,7 @@ class ObjectListViewMixin(NautobotViewSetMixin, mixins.ListModelMixin):
652
653
 
653
654
  return None
654
655
 
656
+ # 3.0 TODO: remove, irrelevant after #4746
655
657
  def queryset_to_yaml(self):
656
658
  """
657
659
  Export the queryset of objects as concatenated YAML documents.
@@ -666,7 +668,7 @@ class ObjectListViewMixin(NautobotViewSetMixin, mixins.ListModelMixin):
666
668
  List the model instances.
667
669
  """
668
670
  context = {"use_new_ui": True}
669
- if "export" in request.GET:
671
+ if "export" in request.GET: # 3.0 TODO: remove, irrelevant after #4746
670
672
  queryset = self.get_queryset()
671
673
  model = queryset.model
672
674
  content_type = ContentType.objects.get_for_model(model)
@@ -14,6 +14,7 @@ from nautobot.core.forms import (
14
14
  from nautobot.core.forms.forms import DynamicFilterFormSet
15
15
  from nautobot.core.templatetags.helpers import bettertitle, validated_viewname
16
16
  from nautobot.core.utils.config import get_settings_or_config
17
+ from nautobot.core.utils.lookup import get_created_and_last_updated_usernames_for_model
17
18
  from nautobot.core.utils.permissions import get_permission_for_model
18
19
  from nautobot.core.utils.requests import (
19
20
  convert_querydict_to_factory_formset_acceptable_querydict,
@@ -229,6 +230,10 @@ class NautobotHTMLRenderer(renderers.BrowsableAPIRenderer):
229
230
  "verbose_name_plural": queryset.model._meta.verbose_name_plural,
230
231
  }
231
232
  if view.action == "retrieve":
233
+ created_by, last_updated_by = get_created_and_last_updated_usernames_for_model(instance)
234
+
235
+ context["created_by"] = created_by
236
+ context["last_updated_by"] = last_updated_by
232
237
  context.update(view.get_extra_context(request, instance))
233
238
  else:
234
239
  if view.action == "list":
@@ -850,6 +850,7 @@ class InterfaceRedundancyGroup(PrimaryModel): # pylint: disable=too-many-ancest
850
850
  return instance.delete()
851
851
 
852
852
 
853
+ @extras_features("graphql")
853
854
  class InterfaceRedundancyGroupAssociation(BaseModel, ChangeLoggedModel):
854
855
  """Intermediary model for associating Interface(s) to InterfaceRedundancyGroup(s)."""
855
856
 
@@ -5,7 +5,6 @@ from nautobot.core.apps import (
5
5
  NavMenuAddButton,
6
6
  NavMenuGroup,
7
7
  NavMenuItem,
8
- NavMenuImportButton,
9
8
  NavMenuTab,
10
9
  )
11
10
 
@@ -33,12 +32,6 @@ menu_items = (
33
32
  "dcim.add_locationtype",
34
33
  ],
35
34
  ),
36
- NavMenuImportButton(
37
- link="dcim:locationtype_import",
38
- permissions=[
39
- "dcim.add_locationtype",
40
- ],
41
- ),
42
35
  ),
43
36
  ),
44
37
  NavMenuItem(
@@ -55,12 +48,6 @@ menu_items = (
55
48
  "dcim.add_location",
56
49
  ],
57
50
  ),
58
- NavMenuImportButton(
59
- link="dcim:location_import",
60
- permissions=[
61
- "dcim.add_location",
62
- ],
63
- ),
64
51
  ),
65
52
  ),
66
53
  ),
@@ -83,12 +70,6 @@ menu_items = (
83
70
  "dcim.add_rack",
84
71
  ],
85
72
  ),
86
- NavMenuImportButton(
87
- link="dcim:rack_import",
88
- permissions=[
89
- "dcim.add_rack",
90
- ],
91
- ),
92
73
  ),
93
74
  ),
94
75
  NavMenuItem(
@@ -105,12 +86,6 @@ menu_items = (
105
86
  "dcim.add_rackgroup",
106
87
  ],
107
88
  ),
108
- NavMenuImportButton(
109
- link="dcim:rackgroup_import",
110
- permissions=[
111
- "dcim.add_rackgroup",
112
- ],
113
- ),
114
89
  ),
115
90
  ),
116
91
  NavMenuItem(
@@ -127,12 +102,6 @@ menu_items = (
127
102
  "dcim.add_rackreservation",
128
103
  ],
129
104
  ),
130
- NavMenuImportButton(
131
- link="dcim:rackreservation_import",
132
- permissions=[
133
- "dcim.add_rackreservation",
134
- ],
135
- ),
136
105
  ),
137
106
  ),
138
107
  NavMenuItem(
@@ -170,12 +139,6 @@ menu_items = (
170
139
  "dcim.add_device",
171
140
  ],
172
141
  ),
173
- NavMenuImportButton(
174
- link="dcim:device_import",
175
- permissions=[
176
- "dcim.add_device",
177
- ],
178
- ),
179
142
  ),
180
143
  ),
181
144
  NavMenuItem(
@@ -192,12 +155,6 @@ menu_items = (
192
155
  "dcim.add_platform",
193
156
  ],
194
157
  ),
195
- NavMenuImportButton(
196
- link="dcim:platform_import",
197
- permissions=[
198
- "dcim.add_platform",
199
- ],
200
- ),
201
158
  ),
202
159
  ),
203
160
  NavMenuItem(
@@ -214,12 +171,6 @@ menu_items = (
214
171
  "dcim.add_virtualchassis",
215
172
  ],
216
173
  ),
217
- NavMenuImportButton(
218
- link="dcim:virtualchassis_import",
219
- permissions=[
220
- "dcim.add_virtualchassis",
221
- ],
222
- ),
223
174
  ),
224
175
  ),
225
176
  NavMenuItem(
@@ -236,12 +187,6 @@ menu_items = (
236
187
  "dcim.add_deviceredundancygroup",
237
188
  ],
238
189
  ),
239
- NavMenuImportButton(
240
- link="dcim:deviceredundancygroup_import",
241
- permissions=[
242
- "dcim.add_deviceredundancygroup",
243
- ],
244
- ),
245
190
  ),
246
191
  ),
247
192
  NavMenuItem(
@@ -258,12 +203,6 @@ menu_items = (
258
203
  "dcim.add_interfaceredundancygroup",
259
204
  ],
260
205
  ),
261
- NavMenuImportButton(
262
- link="dcim:interfaceredundancygroup_import",
263
- permissions=[
264
- "dcim.add_interfaceredundancygroup",
265
- ],
266
- ),
267
206
  ),
268
207
  ),
269
208
  ),
@@ -286,12 +225,6 @@ menu_items = (
286
225
  "dcim.add_devicetype",
287
226
  ],
288
227
  ),
289
- NavMenuImportButton(
290
- link="dcim:devicetype_import",
291
- permissions=[
292
- "dcim.add_devicetype",
293
- ],
294
- ),
295
228
  ),
296
229
  ),
297
230
  NavMenuItem(
@@ -308,12 +241,6 @@ menu_items = (
308
241
  "dcim.add_manufacturer",
309
242
  ],
310
243
  ),
311
- NavMenuImportButton(
312
- link="dcim:manufacturer_import",
313
- permissions=[
314
- "dcim.add_manufacturer",
315
- ],
316
- ),
317
244
  ),
318
245
  ),
319
246
  ),
@@ -329,14 +256,7 @@ menu_items = (
329
256
  permissions=[
330
257
  "dcim.view_cable",
331
258
  ],
332
- buttons=(
333
- NavMenuImportButton(
334
- link="dcim:cable_import",
335
- permissions=[
336
- "dcim.add_cable",
337
- ],
338
- ),
339
- ),
259
+ buttons=(),
340
260
  ),
341
261
  NavMenuItem(
342
262
  link="dcim:console_connections_list",
@@ -380,14 +300,7 @@ menu_items = (
380
300
  permissions=[
381
301
  "dcim.view_interface",
382
302
  ],
383
- buttons=(
384
- NavMenuImportButton(
385
- link="dcim:interface_import",
386
- permissions=[
387
- "dcim.add_interface",
388
- ],
389
- ),
390
- ),
303
+ buttons=(),
391
304
  ),
392
305
  NavMenuItem(
393
306
  link="dcim:frontport_list",
@@ -396,14 +309,7 @@ menu_items = (
396
309
  permissions=[
397
310
  "dcim.view_frontport",
398
311
  ],
399
- buttons=(
400
- NavMenuImportButton(
401
- link="dcim:frontport_import",
402
- permissions=[
403
- "dcim.add_frontport",
404
- ],
405
- ),
406
- ),
312
+ buttons=(),
407
313
  ),
408
314
  NavMenuItem(
409
315
  link="dcim:rearport_list",
@@ -412,14 +318,7 @@ menu_items = (
412
318
  permissions=[
413
319
  "dcim.view_rearport",
414
320
  ],
415
- buttons=(
416
- NavMenuImportButton(
417
- link="dcim:rearport_import",
418
- permissions=[
419
- "dcim.add_rearport",
420
- ],
421
- ),
422
- ),
321
+ buttons=(),
423
322
  ),
424
323
  NavMenuItem(
425
324
  link="dcim:consoleport_list",
@@ -428,14 +327,7 @@ menu_items = (
428
327
  permissions=[
429
328
  "dcim.view_consoleport",
430
329
  ],
431
- buttons=(
432
- NavMenuImportButton(
433
- link="dcim:consoleport_import",
434
- permissions=[
435
- "dcim.add_consoleport",
436
- ],
437
- ),
438
- ),
330
+ buttons=(),
439
331
  ),
440
332
  NavMenuItem(
441
333
  link="dcim:consoleserverport_list",
@@ -444,14 +336,7 @@ menu_items = (
444
336
  permissions=[
445
337
  "dcim.view_consoleserverport",
446
338
  ],
447
- buttons=(
448
- NavMenuImportButton(
449
- link="dcim:consoleserverport_import",
450
- permissions=[
451
- "dcim.add_consoleserverport",
452
- ],
453
- ),
454
- ),
339
+ buttons=(),
455
340
  ),
456
341
  NavMenuItem(
457
342
  link="dcim:powerport_list",
@@ -460,14 +345,7 @@ menu_items = (
460
345
  permissions=[
461
346
  "dcim.view_powerport",
462
347
  ],
463
- buttons=(
464
- NavMenuImportButton(
465
- link="dcim:powerport_import",
466
- permissions=[
467
- "dcim.add_powerport",
468
- ],
469
- ),
470
- ),
348
+ buttons=(),
471
349
  ),
472
350
  NavMenuItem(
473
351
  link="dcim:poweroutlet_list",
@@ -476,14 +354,7 @@ menu_items = (
476
354
  permissions=[
477
355
  "dcim.view_poweroutlet",
478
356
  ],
479
- buttons=(
480
- NavMenuImportButton(
481
- link="dcim:poweroutlet_import",
482
- permissions=[
483
- "dcim.add_poweroutlet",
484
- ],
485
- ),
486
- ),
357
+ buttons=(),
487
358
  ),
488
359
  NavMenuItem(
489
360
  link="dcim:devicebay_list",
@@ -492,14 +363,7 @@ menu_items = (
492
363
  permissions=[
493
364
  "dcim.view_devicebay",
494
365
  ],
495
- buttons=(
496
- NavMenuImportButton(
497
- link="dcim:devicebay_import",
498
- permissions=[
499
- "dcim.add_devicebay",
500
- ],
501
- ),
502
- ),
366
+ buttons=(),
503
367
  ),
504
368
  NavMenuItem(
505
369
  link="dcim:inventoryitem_list",
@@ -508,14 +372,7 @@ menu_items = (
508
372
  permissions=[
509
373
  "dcim.view_inventoryitem",
510
374
  ],
511
- buttons=(
512
- NavMenuImportButton(
513
- link="dcim:inventoryitem_import",
514
- permissions=[
515
- "dcim.add_inventoryitem",
516
- ],
517
- ),
518
- ),
375
+ buttons=(),
519
376
  ),
520
377
  ),
521
378
  ),
@@ -542,12 +399,6 @@ menu_items = (
542
399
  "dcim.add_powerfeed",
543
400
  ],
544
401
  ),
545
- NavMenuImportButton(
546
- link="dcim:powerfeed_import",
547
- permissions=[
548
- "dcim.add_powerfeed",
549
- ],
550
- ),
551
402
  ),
552
403
  ),
553
404
  NavMenuItem(
@@ -563,12 +414,6 @@ menu_items = (
563
414
  "dcim.add_powerpanel",
564
415
  ],
565
416
  ),
566
- NavMenuImportButton(
567
- link="dcim:powerpanel_import",
568
- permissions=[
569
- "dcim.add_powerpanel",
570
- ],
571
- ),
572
417
  ),
573
418
  ),
574
419
  ),
@@ -173,7 +173,7 @@
173
173
  <div class="panel-heading">
174
174
  <strong>Stats</strong>
175
175
  </div>
176
- <div class="row panel-body">
176
+ <div class="panel-body">
177
177
  <div class="col-md-4 text-center">
178
178
  <h2><a href="{% url 'dcim:rack_list' %}?location={{ object.pk }}" class="btn {% if stats.rack_count %}btn-primary{% else %}btn-default{% endif %} btn-lg">{{ stats.rack_count }}</a></h2>
179
179
  <p>Racks</p>
@@ -0,0 +1,143 @@
1
+ Feature: Locations
2
+ In order to represent the geographical structure of my organization's infrastructure,
3
+ As a Network Engineer
4
+ I want to record in Nautobot an appropriate set of LocationType and Location records.
5
+
6
+ Background:
7
+ Given I have appropriate Nautobot permissions:
8
+ | model | permissions |
9
+ | dcim.locationtype | add,change,delete,view |
10
+ | dcim.location | add,change,delete,view |
11
+ And I am logged in to Nautobot
12
+
13
+ Scenario: Creating a hierarchy of LocationTypes
14
+ When I navigate to the "Add LocationType" view
15
+ And I make the following form entries:
16
+ | name | nestable |
17
+ | Geographic Region | True |
18
+ And I submit the form
19
+ Then a LocationType exists in Nautobot with the following properties:
20
+ | name | parent | nestable |
21
+ | Geographic Region | None | True |
22
+ And Nautobot shows the "LocationType Detail" view for the LocationType with name "Geographic Region"
23
+
24
+ When I click the "Add child" button
25
+ Then Nautobot shows the "Add LocationType" view with the following presets:
26
+ | parent |
27
+ | Geographic Region |
28
+ When I make the following form entries:
29
+ | name |
30
+ | City |
31
+ And I submit the form
32
+ Then a LocationType exists in Nautobot with the following properties:
33
+ | name | parent | nestable |
34
+ | City | Geographic Region | False |
35
+ And Nautobot shows the "LocationType Detail" view for the LocationType with name "City"
36
+
37
+ When I click the "Add child" button
38
+ Then Nautobot shows the "Add LocationType" view with the following presets:
39
+ | parent |
40
+ | City |
41
+ When I make the following form entries:
42
+ | name | content_types |
43
+ | Building | [dcim.device] |
44
+ And I submit the form
45
+ Then a LocationType exists in Nautobot with the following properties:
46
+ | name | parent | nestable | content_types |
47
+ | Building | City | False | [dcim.device] |
48
+ And Nautobot shows the "LocationType Detail" view for the LocationType with name "Building"
49
+
50
+ Scenario: Creating a hierarchy of Locations
51
+ Given that LocationType records exist with the following properties:
52
+ | name | parent | nestable |
53
+ | Geographic Region | None | True |
54
+ | City | Geographic Region | False |
55
+ | Building | City | False |
56
+ When I navigate to the "Add Location" view
57
+ And I make the following form entries:
58
+ | name | location_type | status |
59
+ | United States | Geographic Region | Active |
60
+ And I submit the form
61
+ Then a Location exists in Nautobot with the following properties:
62
+ | name | location_type | parent | status |
63
+ | United States | Geographic Region | None | Active |
64
+ And Nautobot shows the "Location Detail" view for the Location with name "United States"
65
+
66
+ When I click the "Add child" button
67
+ Then Nautobot shows the "Add Location" view with the following presets:
68
+ | parent |
69
+ | United States |
70
+ When I make the following form entries:
71
+ | name | location_type | status | time_zone |
72
+ | North Carolina | Geographic Region | Active | America/New York |
73
+ And I submit the form
74
+ Then a Location exists in Nautobot with the following properties:
75
+ | name | location_type | parent | status | time_zone |
76
+ | North Carolina | Geographic Region | United States | Active | America/New York |
77
+ And Nautobot shows the "Location Detail" view for the Location with name "North Carolina"
78
+
79
+ When I click the "Add child" button
80
+ Then Nautobot shows the "Add Location" view with the following presets:
81
+ | parent |
82
+ | North Carolina |
83
+ When I make the following form entries:
84
+ | name | location_type | status |
85
+ | Durham | City | Planned |
86
+ And I submit the form
87
+ Then a Location exists in Nautobot with the following properties:
88
+ | name | location_type | parent | status |
89
+ | Durham | City | North Carolina | Planned |
90
+ And Nautobot shows the "Location Detail" view for the Location with name "Durham"
91
+
92
+ When I click the "Add child" button
93
+ Then Nautobot shows the "Add Location" view with the following presets:
94
+ | parent |
95
+ | Durham |
96
+ When I make the following form entries:
97
+ | name | location_type | status | physical_address |
98
+ | Durham Bulls Athletic Park | Building | Planned | 409 Blackwell Street |
99
+ And I submit the form via the "Create and Add Another" button
100
+ Then a Location exists in Nautobot with the following properties:
101
+ | name | location_type | parent | status | physical_address |
102
+ | Durham Bulls Athletic Park | Building | Durham | Planned | 409 Blackwell Street |
103
+ And Nautobot shows the "Add Location" view with the following presets:
104
+ | parent | location_type | status |
105
+ | Durham | Building | Planned |
106
+ When I make the following form entries:
107
+ | name |
108
+ | Durham Performing Arts Center |
109
+ And I submit the form
110
+ Then a Location exists in Nautobot with the following properties:
111
+ | name | location_type | parent | status |
112
+ | Durham Performing Arts Center | Building | Durham | Planned |
113
+ And Nautobot shows the "Location Detail" view for the Location with name "Durham Performing Arts Center"
114
+
115
+ When I click on the "Durham" link
116
+ Then Nautobot shows the "Location Detail" view for the Location with name "Durham"
117
+ And the table "Children" includes rows with the following properties:
118
+ | name | status |
119
+ | Durham Bulls Athletic Park | Planned |
120
+ | Durham Performing Arts Center | Planned |
121
+
122
+ Scenario Outline: Missing required fields for Location
123
+ Given that LocationType records exist with the following properties:
124
+ | name | parent | nestable |
125
+ | Geographic Region | None | True |
126
+ | City | Geographic Region | False |
127
+ | Building | Building | False |
128
+ When I navigate to the "Add Location" view
129
+ And I make the following form entries:
130
+ | name | location_type | parent | status |
131
+ | <name> | <location_type> | <parent> | <status> |
132
+ And I submit the form
133
+ Then Nautobot shows the "Add Location" view with the following presets:
134
+ | name | location_type | parent | status |
135
+ | <name> | <location_type> | <parent> | <status> |
136
+ And the field "<required_field>" shows error message "<error_message>"
137
+
138
+ Scenarios:
139
+ | name | location_type | parent | status | required_field | error_message |
140
+ | | Geographic Region | None | Active | name | Please fill out this field. |
141
+ | United States | None | None | Active | location_type | Please select an item in the list. |
142
+ | United States | Geographic Region | None | None | status | Please select an item in the list. |
143
+ | Durham | City | None | Active | parent | A Location of type City must have a parent Location. |
@@ -1546,7 +1546,7 @@ class InterfaceTest(Mixins.BasePortTestMixin):
1546
1546
  ),
1547
1547
  )
1548
1548
 
1549
- vlan_group = VLANGroup.objects.first()
1549
+ vlan_group = VLANGroup.objects.create(name="Test VLANGroup 1")
1550
1550
  vlan_status = Status.objects.get_for_model(VLAN).first()
1551
1551
  cls.vlans = (
1552
1552
  VLAN.objects.create(name="VLAN 1", vid=1, status=vlan_status, vlan_group=vlan_group),
@@ -137,12 +137,13 @@ def common_test_data(cls):
137
137
  CircuitTermination.objects.create(circuit=circuit, location=loc0, term_side="A")
138
138
  CircuitTermination.objects.create(circuit=circuit, location=loc1, term_side="Z")
139
139
 
140
- manufacturers = list(Manufacturer.objects.all()[:3])
140
+ manufacturers = list(
141
+ Manufacturer.objects.filter(device_types__isnull=False, platforms__isnull=False).distinct()[:3]
142
+ )
141
143
  cls.manufacturers = manufacturers
142
144
 
143
- platforms = Platform.objects.all()[:3]
145
+ platforms = Platform.objects.filter(manufacturer__in=manufacturers)[:3]
144
146
  for num, platform in enumerate(platforms):
145
- platform.manufacturer = manufacturers[num]
146
147
  platform.napalm_driver = f"driver-{num}"
147
148
  platform.napalm_args = ["--test", f"--arg{num}"]
148
149
  platform.network_driver = f"driver_{num}"
@@ -651,6 +652,7 @@ class LocationFilterSetTestCase(FilterTestCases.NameOnlyFilterTestCase, FilterTe
651
652
  ("racks", "racks__id"),
652
653
  ("racks", "racks__name"),
653
654
  ("shipping_address",),
655
+ ("status", "status__id"),
654
656
  ("status", "status__name"),
655
657
  ("time_zone",),
656
658
  ("vlan_groups", "vlan_groups__id"),
@@ -765,7 +767,9 @@ class RackTestCase(FilterTestCases.FilterTestCase, FilterTestCases.TenancyFilter
765
767
  ("rack_group", "rack_group__name"),
766
768
  ("rack_reservations", "rack_reservations__id"),
767
769
  ("role", "role__name"),
770
+ ("role", "role__id"),
768
771
  ("serial",),
772
+ ("status", "status__id"),
769
773
  ("status", "status__name"),
770
774
  ("type",),
771
775
  ("u_height",),
@@ -1331,6 +1335,7 @@ class DeviceTestCase(FilterTestCases.FilterTestCase, FilterTestCases.TenancyFilt
1331
1335
  ("role", "role__name"),
1332
1336
  ("secrets_group", "secrets_group__id"),
1333
1337
  ("secrets_group", "secrets_group__name"),
1338
+ ("status", "status__id"),
1334
1339
  ("status", "status__name"),
1335
1340
  ("vc_position",),
1336
1341
  ("vc_priority",),
@@ -1824,6 +1829,7 @@ class InterfaceTestCase(FilterTestCases.FilterTestCase):
1824
1829
  ("name",),
1825
1830
  ("parent_interface", "parent_interface__id"),
1826
1831
  ("parent_interface", "parent_interface__name"),
1832
+ ("status", "status__id"),
1827
1833
  ("status", "status__name"),
1828
1834
  ("type",),
1829
1835
  ("tagged_vlans", "tagged_vlans__id"),
@@ -2579,6 +2585,7 @@ class CableTestCase(FilterTestCases.FilterTestCase):
2579
2585
  ("color",),
2580
2586
  ("label",),
2581
2587
  ("length",),
2588
+ ("status", "status__id"),
2582
2589
  ("status", "status__name"),
2583
2590
  ("termination_a_id",),
2584
2591
  ("termination_b_id",),
@@ -2869,6 +2876,7 @@ class PowerFeedTestCase(FilterTestCases.FilterTestCase):
2869
2876
  ("power_panel", "power_panel__name"),
2870
2877
  ("rack", "rack__id"),
2871
2878
  ("rack", "rack__name"),
2879
+ ("status", "status__id"),
2872
2880
  ("status", "status__name"),
2873
2881
  ("voltage",),
2874
2882
  ]
nautobot/extras/admin.py CHANGED
@@ -31,7 +31,7 @@ class FileProxyForm(forms.ModelForm):
31
31
  @admin.register(FileProxy)
32
32
  class FileProxyAdmin(NautobotModelAdmin):
33
33
  form = FileProxyForm
34
- list_display = ["name", "uploaded_at"]
34
+ list_display = ["name", "file", "uploaded_at"]
35
35
  list_filter = ["uploaded_at"]
36
36
 
37
37