nautobot 2.4.0__py3-none-any.whl → 2.4.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 (592) hide show
  1. nautobot/apps/__init__.py +1 -1
  2. nautobot/apps/api.py +8 -8
  3. nautobot/apps/change_logging.py +2 -2
  4. nautobot/apps/choices.py +4 -4
  5. nautobot/apps/events.py +3 -3
  6. nautobot/apps/factory.py +2 -2
  7. nautobot/apps/filters.py +1 -1
  8. nautobot/apps/forms.py +20 -20
  9. nautobot/apps/graphql.py +2 -2
  10. nautobot/apps/jobs.py +8 -8
  11. nautobot/apps/models.py +19 -19
  12. nautobot/apps/tables.py +1 -1
  13. nautobot/apps/testing.py +10 -10
  14. nautobot/apps/ui.py +2 -2
  15. nautobot/apps/utils.py +7 -7
  16. nautobot/apps/views.py +7 -7
  17. nautobot/circuits/api/serializers.py +0 -1
  18. nautobot/circuits/api/views.py +8 -4
  19. nautobot/circuits/tables.py +1 -2
  20. nautobot/circuits/templates/circuits/circuit_create.html +7 -1
  21. nautobot/circuits/views.py +3 -3
  22. nautobot/cloud/api/views.py +10 -6
  23. nautobot/cloud/models.py +1 -1
  24. nautobot/cloud/views.py +16 -0
  25. nautobot/core/api/fields.py +5 -5
  26. nautobot/core/api/filter_backends.py +9 -3
  27. nautobot/core/api/schema.py +2 -13
  28. nautobot/core/api/serializers.py +34 -40
  29. nautobot/core/api/views.py +4 -56
  30. nautobot/core/celery/log.py +4 -4
  31. nautobot/core/celery/schedulers.py +1 -1
  32. nautobot/core/choices.py +2 -2
  33. nautobot/core/events/__init__.py +3 -3
  34. nautobot/core/filters.py +16 -21
  35. nautobot/core/fixtures/user-data.json +59 -0
  36. nautobot/core/forms/__init__.py +19 -19
  37. nautobot/core/forms/fields.py +11 -14
  38. nautobot/core/forms/forms.py +2 -33
  39. nautobot/core/graphql/types.py +1 -1
  40. nautobot/core/jobs/__init__.py +7 -28
  41. nautobot/core/jobs/cleanup.py +12 -48
  42. nautobot/core/jobs/groups.py +1 -1
  43. nautobot/core/management/commands/validate_models.py +1 -1
  44. nautobot/core/models/__init__.py +1 -1
  45. nautobot/core/models/query_functions.py +2 -2
  46. nautobot/core/models/tree_queries.py +3 -6
  47. nautobot/core/settings.py +2 -29
  48. nautobot/core/settings.yaml +0 -21
  49. nautobot/core/tables.py +60 -74
  50. nautobot/core/templates/inc/media.html +0 -3
  51. nautobot/core/templates/inc/nav_menu.html +0 -1
  52. nautobot/core/templates/nautobot_config.py.j2 +0 -13
  53. nautobot/core/templates/search.html +0 -7
  54. nautobot/core/templates/utilities/render_jinja2.html +1 -1
  55. nautobot/core/templates/utilities/templatetags/tag.html +1 -1
  56. nautobot/core/templates/utilities/theme_preview.html +0 -7
  57. nautobot/core/templatetags/helpers.py +2 -11
  58. nautobot/core/testing/__init__.py +8 -8
  59. nautobot/core/testing/api.py +15 -170
  60. nautobot/core/testing/filters.py +2 -25
  61. nautobot/core/testing/forms.py +0 -2
  62. nautobot/core/testing/mixins.py +2 -7
  63. nautobot/core/testing/views.py +29 -44
  64. nautobot/core/tests/integration/test_app_home.py +1 -0
  65. nautobot/core/tests/integration/test_app_navbar.py +1 -0
  66. nautobot/core/tests/integration/test_filters.py +2 -0
  67. nautobot/core/tests/integration/test_home.py +1 -0
  68. nautobot/core/tests/integration/test_navbar.py +1 -0
  69. nautobot/core/tests/integration/test_view_authentication.py +0 -1
  70. nautobot/core/tests/runner.py +1 -1
  71. nautobot/core/tests/test_api.py +1 -98
  72. nautobot/core/tests/test_csv.py +3 -25
  73. nautobot/core/tests/test_forms.py +0 -1
  74. nautobot/core/tests/test_jobs.py +1 -303
  75. nautobot/core/tests/test_settings_schema.py +0 -7
  76. nautobot/core/tests/test_tables.py +0 -100
  77. nautobot/core/tests/test_utils.py +1 -63
  78. nautobot/core/tests/test_views.py +3 -30
  79. nautobot/core/ui/nav.py +0 -1
  80. nautobot/core/ui/object_detail.py +1 -15
  81. nautobot/core/urls.py +0 -11
  82. nautobot/core/utils/lookup.py +8 -11
  83. nautobot/core/utils/requests.py +9 -24
  84. nautobot/core/views/__init__.py +0 -42
  85. nautobot/core/views/generic.py +176 -78
  86. nautobot/core/views/mixins.py +34 -94
  87. nautobot/core/views/renderers.py +6 -6
  88. nautobot/dcim/api/serializers.py +62 -54
  89. nautobot/dcim/api/views.py +113 -47
  90. nautobot/dcim/filters/__init__.py +2 -31
  91. nautobot/dcim/forms.py +17 -36
  92. nautobot/dcim/graphql/types.py +2 -2
  93. nautobot/dcim/models/__init__.py +1 -1
  94. nautobot/dcim/models/device_component_templates.py +2 -2
  95. nautobot/dcim/models/device_components.py +20 -22
  96. nautobot/dcim/models/devices.py +1 -10
  97. nautobot/dcim/models/locations.py +3 -3
  98. nautobot/dcim/models/power.py +5 -6
  99. nautobot/dcim/models/racks.py +4 -4
  100. nautobot/dcim/tables/__init__.py +3 -3
  101. nautobot/dcim/tables/devices.py +5 -7
  102. nautobot/dcim/tables/devicetypes.py +2 -2
  103. nautobot/dcim/tables/racks.py +1 -1
  104. nautobot/dcim/templates/dcim/controller_create.html +7 -1
  105. nautobot/dcim/templates/dcim/controller_retrieve.html +9 -1
  106. nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +0 -2
  107. nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +0 -5
  108. nautobot/dcim/templates/dcim/device.html +9 -1
  109. nautobot/dcim/templates/dcim/device_edit.html +37 -36
  110. nautobot/dcim/templates/dcim/location.html +9 -1
  111. nautobot/dcim/templates/dcim/location_edit.html +7 -1
  112. nautobot/dcim/templates/dcim/rack.html +9 -1
  113. nautobot/dcim/templates/dcim/rack_edit.html +7 -1
  114. nautobot/dcim/templates/dcim/rackreservation.html +9 -1
  115. nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +9 -1
  116. nautobot/dcim/templates/dcim/virtualdevicecontext_update.html +7 -1
  117. nautobot/dcim/tests/test_api.py +3 -16
  118. nautobot/dcim/tests/test_filters.py +0 -33
  119. nautobot/dcim/tests/test_forms.py +2 -51
  120. nautobot/dcim/tests/test_graphql.py +0 -52
  121. nautobot/dcim/tests/test_models.py +5 -34
  122. nautobot/dcim/tests/test_views.py +83 -21
  123. nautobot/dcim/views.py +13 -1
  124. nautobot/extras/api/customfields.py +2 -2
  125. nautobot/extras/api/serializers.py +85 -90
  126. nautobot/extras/api/views.py +27 -22
  127. nautobot/extras/constants.py +0 -2
  128. nautobot/extras/filters/__init__.py +6 -8
  129. nautobot/extras/forms/base.py +2 -2
  130. nautobot/extras/forms/forms.py +31 -139
  131. nautobot/extras/forms/mixins.py +5 -13
  132. nautobot/extras/group_sync.py +3 -3
  133. nautobot/extras/health_checks.py +2 -1
  134. nautobot/extras/jobs.py +12 -70
  135. nautobot/extras/managers.py +1 -3
  136. nautobot/extras/migrations/0018_joblog_data_migration.py +9 -7
  137. nautobot/extras/models/__init__.py +1 -1
  138. nautobot/extras/models/contacts.py +1 -1
  139. nautobot/extras/models/customfields.py +11 -12
  140. nautobot/extras/models/groups.py +9 -11
  141. nautobot/extras/models/jobs.py +4 -23
  142. nautobot/extras/models/models.py +2 -2
  143. nautobot/extras/plugins/__init__.py +2 -13
  144. nautobot/extras/plugins/marketplace_manifest.yml +79 -84
  145. nautobot/extras/plugins/tables.py +14 -16
  146. nautobot/extras/plugins/views.py +69 -65
  147. nautobot/extras/registry.py +1 -1
  148. nautobot/extras/secrets/__init__.py +2 -2
  149. nautobot/extras/tables.py +5 -7
  150. nautobot/extras/templates/extras/dynamicgroup.html +9 -1
  151. nautobot/extras/templates/extras/job_detail.html +0 -16
  152. nautobot/extras/templates/extras/job_edit.html +0 -1
  153. nautobot/extras/templates/extras/jobqueue_retrieve.html +9 -1
  154. nautobot/extras/templates/extras/marketplace.html +11 -29
  155. nautobot/extras/templates/extras/plugin_detail.html +15 -32
  156. nautobot/extras/templates/extras/plugins_tiles.html +10 -21
  157. nautobot/extras/test_jobs/api_test_job.py +1 -1
  158. nautobot/extras/test_jobs/atomic_transaction.py +2 -2
  159. nautobot/extras/test_jobs/dry_run.py +1 -1
  160. nautobot/extras/test_jobs/fail.py +5 -5
  161. nautobot/extras/test_jobs/file_output.py +1 -1
  162. nautobot/extras/test_jobs/file_upload_fail.py +1 -1
  163. nautobot/extras/test_jobs/file_upload_pass.py +1 -1
  164. nautobot/extras/test_jobs/ipaddress_vars.py +1 -3
  165. nautobot/extras/test_jobs/jobs_module/jobs_submodule/jobs.py +1 -1
  166. nautobot/extras/test_jobs/location_with_custom_field.py +1 -1
  167. nautobot/extras/test_jobs/log_redaction.py +1 -1
  168. nautobot/extras/test_jobs/log_skip_db_logging.py +1 -1
  169. nautobot/extras/test_jobs/modify_db.py +1 -1
  170. nautobot/extras/test_jobs/object_var_optional.py +1 -1
  171. nautobot/extras/test_jobs/object_var_required.py +1 -1
  172. nautobot/extras/test_jobs/object_vars.py +1 -1
  173. nautobot/extras/test_jobs/pass.py +3 -3
  174. nautobot/extras/test_jobs/profiling.py +1 -1
  175. nautobot/extras/test_jobs/relative_import.py +3 -3
  176. nautobot/extras/test_jobs/soft_time_limit_greater_than_time_limit.py +1 -1
  177. nautobot/extras/test_jobs/task_queues.py +1 -1
  178. nautobot/extras/tests/integration/test_plugin_banner.py +2 -0
  179. nautobot/extras/tests/test_api.py +13 -13
  180. nautobot/extras/tests/test_customfields.py +1 -1
  181. nautobot/extras/tests/test_datasources.py +1 -2
  182. nautobot/extras/tests/test_dynamicgroups.py +1 -1
  183. nautobot/extras/tests/test_filters.py +6 -6
  184. nautobot/extras/tests/test_forms.py +1 -20
  185. nautobot/extras/tests/test_jobs.py +19 -160
  186. nautobot/extras/tests/test_models.py +10 -10
  187. nautobot/extras/tests/test_plugins.py +9 -62
  188. nautobot/extras/tests/test_relationships.py +9 -120
  189. nautobot/extras/tests/test_views.py +191 -52
  190. nautobot/extras/utils.py +2 -3
  191. nautobot/extras/views.py +98 -30
  192. nautobot/ipam/api/fields.py +3 -3
  193. nautobot/ipam/api/serializers.py +33 -41
  194. nautobot/ipam/api/views.py +117 -68
  195. nautobot/ipam/factory.py +1 -1
  196. nautobot/ipam/filters.py +2 -3
  197. nautobot/ipam/lookups.py +62 -101
  198. nautobot/ipam/models.py +16 -66
  199. nautobot/ipam/querysets.py +2 -2
  200. nautobot/ipam/tables.py +7 -23
  201. nautobot/ipam/templates/ipam/ipaddress.html +9 -1
  202. nautobot/ipam/templates/ipam/ipaddress_bulk_add.html +7 -1
  203. nautobot/ipam/templates/ipam/ipaddress_edit.html +7 -1
  204. nautobot/ipam/templates/ipam/prefix.html +9 -1
  205. nautobot/ipam/templates/ipam/prefix_edit.html +7 -1
  206. nautobot/ipam/templates/ipam/vlan.html +9 -1
  207. nautobot/ipam/templates/ipam/vlan_edit.html +7 -1
  208. nautobot/ipam/templates/ipam/vrf_edit.html +7 -1
  209. nautobot/ipam/tests/test_api.py +3 -416
  210. nautobot/ipam/tests/test_forms.py +47 -49
  211. nautobot/ipam/tests/test_migrations.py +30 -30
  212. nautobot/ipam/tests/test_models.py +34 -95
  213. nautobot/ipam/tests/test_querysets.py +1 -63
  214. nautobot/ipam/tests/test_views.py +0 -3
  215. nautobot/ipam/utils/__init__.py +6 -36
  216. nautobot/ipam/views.py +87 -61
  217. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css.map +1 -1
  218. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css.map +1 -1
  219. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css +2 -40
  220. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css.map +1 -1
  221. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css +1 -1
  222. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css.map +1 -1
  223. nautobot/project-static/docs/404.html +4 -46
  224. nautobot/project-static/docs/apps/index.html +4 -46
  225. nautobot/project-static/docs/apps/nautobot-apps.html +6 -47
  226. nautobot/project-static/docs/assets/_mkdocstrings.css +1 -25
  227. nautobot/project-static/docs/assets/javascripts/{bundle.88dd0f4e.min.js → bundle.83f73b43.min.js} +2 -2
  228. nautobot/project-static/docs/assets/javascripts/{bundle.88dd0f4e.min.js.map → bundle.83f73b43.min.js.map} +2 -2
  229. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +10 -62
  230. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +7 -59
  231. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +122 -374
  232. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +18 -90
  233. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +21 -95
  234. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +6 -53
  235. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +5 -52
  236. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +17 -79
  237. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +28 -102
  238. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +21 -108
  239. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +38 -131
  240. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +65 -239
  241. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +165 -581
  242. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +36 -109
  243. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +167 -453
  244. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +211 -493
  245. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +8 -60
  246. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +15 -71
  247. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +55 -407
  248. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +205 -585
  249. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +412 -858
  250. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +7 -59
  251. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +186 -448
  252. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +147 -365
  253. nautobot/project-static/docs/development/apps/api/configuration-view.html +4 -46
  254. nautobot/project-static/docs/development/apps/api/database-backend-config.html +4 -46
  255. nautobot/project-static/docs/development/apps/api/models/django-admin.html +4 -46
  256. nautobot/project-static/docs/development/apps/api/models/global-search.html +4 -46
  257. nautobot/project-static/docs/development/apps/api/models/graphql.html +4 -46
  258. nautobot/project-static/docs/development/apps/api/models/index.html +4 -46
  259. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +4 -46
  260. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +4 -46
  261. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +4 -46
  262. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +4 -46
  263. nautobot/project-static/docs/development/apps/api/platform-features/index.html +4 -46
  264. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +4 -46
  265. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +4 -46
  266. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +4 -46
  267. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +4 -46
  268. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +7 -68
  269. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +4 -46
  270. nautobot/project-static/docs/development/apps/api/prometheus.html +4 -46
  271. nautobot/project-static/docs/development/apps/api/setup.html +4 -46
  272. nautobot/project-static/docs/development/apps/api/testing.html +4 -46
  273. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +4 -46
  274. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +4 -46
  275. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +4 -46
  276. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +4 -46
  277. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +4 -46
  278. nautobot/project-static/docs/development/apps/api/views/base-template.html +4 -46
  279. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +4 -46
  280. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +4 -46
  281. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +4 -46
  282. nautobot/project-static/docs/development/apps/api/views/index.html +4 -46
  283. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +4 -46
  284. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +4 -46
  285. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +4 -46
  286. nautobot/project-static/docs/development/apps/api/views/notes.html +4 -46
  287. nautobot/project-static/docs/development/apps/api/views/rest-api.html +6 -52
  288. nautobot/project-static/docs/development/apps/api/views/urls.html +4 -46
  289. nautobot/project-static/docs/development/apps/index.html +4 -46
  290. nautobot/project-static/docs/development/apps/migration/code-updates.html +4 -46
  291. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +4 -46
  292. nautobot/project-static/docs/development/apps/migration/from-v1.html +4 -46
  293. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +4 -46
  294. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +4 -46
  295. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +4 -46
  296. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +4 -46
  297. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +8 -50
  298. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +4 -46
  299. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +14 -211
  300. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +4 -46
  301. nautobot/project-static/docs/development/apps/porting-from-netbox.html +4 -46
  302. nautobot/project-static/docs/development/core/application-registry.html +4 -46
  303. nautobot/project-static/docs/development/core/best-practices.html +4 -46
  304. nautobot/project-static/docs/development/core/bootstrap-ui.html +4 -46
  305. nautobot/project-static/docs/development/core/caching.html +4 -46
  306. nautobot/project-static/docs/development/core/controllers.html +4 -46
  307. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +74 -73
  308. nautobot/project-static/docs/development/core/generic-views.html +4 -46
  309. nautobot/project-static/docs/development/core/getting-started.html +224 -249
  310. nautobot/project-static/docs/development/core/homepage.html +7 -49
  311. nautobot/project-static/docs/development/core/index.html +4 -46
  312. nautobot/project-static/docs/development/core/{minikube-dev-environment-for-k8s-jobs.html → local-k8s.html} +168 -469
  313. nautobot/project-static/docs/development/core/model-checklist.html +12 -56
  314. nautobot/project-static/docs/development/core/model-features.html +4 -46
  315. nautobot/project-static/docs/development/core/natural-keys.html +4 -46
  316. nautobot/project-static/docs/development/core/navigation-menu.html +4 -46
  317. nautobot/project-static/docs/development/core/release-checklist.html +7 -49
  318. nautobot/project-static/docs/development/core/role-internals.html +4 -46
  319. nautobot/project-static/docs/development/core/settings.html +4 -46
  320. nautobot/project-static/docs/development/core/style-guide.html +7 -49
  321. nautobot/project-static/docs/development/core/templates.html +4 -46
  322. nautobot/project-static/docs/development/core/testing.html +4 -46
  323. nautobot/project-static/docs/development/core/ui-component-framework.html +273 -369
  324. nautobot/project-static/docs/development/core/user-preferences.html +4 -46
  325. nautobot/project-static/docs/development/index.html +4 -46
  326. nautobot/project-static/docs/development/jobs/index.html +122 -216
  327. nautobot/project-static/docs/development/jobs/migration/from-v1.html +4 -46
  328. nautobot/project-static/docs/index.html +23 -54
  329. nautobot/project-static/docs/objects.inv +0 -0
  330. nautobot/project-static/docs/overview/application_stack.html +7 -47
  331. nautobot/project-static/docs/overview/design_philosophy.html +4 -46
  332. nautobot/project-static/docs/release-notes/index.html +12 -52
  333. nautobot/project-static/docs/release-notes/version-1.0.html +193 -234
  334. nautobot/project-static/docs/release-notes/version-1.1.html +190 -231
  335. nautobot/project-static/docs/release-notes/version-1.2.html +265 -306
  336. nautobot/project-static/docs/release-notes/version-1.3.html +291 -332
  337. nautobot/project-static/docs/release-notes/version-1.4.html +377 -417
  338. nautobot/project-static/docs/release-notes/version-1.5.html +566 -605
  339. nautobot/project-static/docs/release-notes/version-1.6.html +447 -904
  340. nautobot/project-static/docs/release-notes/version-2.0.html +489 -528
  341. nautobot/project-static/docs/release-notes/version-2.1.html +324 -363
  342. nautobot/project-static/docs/release-notes/version-2.2.html +317 -356
  343. nautobot/project-static/docs/release-notes/version-2.3.html +352 -997
  344. nautobot/project-static/docs/release-notes/version-2.4.html +101 -417
  345. nautobot/project-static/docs/requirements.txt +2 -2
  346. nautobot/project-static/docs/search/search_index.json +1 -1
  347. nautobot/project-static/docs/sitemap.xml +287 -295
  348. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  349. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +4 -46
  350. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +4 -46
  351. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +6 -48
  352. nautobot/project-static/docs/user-guide/administration/configuration/index.html +4 -46
  353. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +4 -46
  354. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +8 -110
  355. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +4 -46
  356. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +4 -46
  357. nautobot/project-static/docs/user-guide/administration/guides/docker.html +4 -46
  358. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +4 -46
  359. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +4 -46
  360. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +4 -46
  361. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +4 -46
  362. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +4 -46
  363. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +6 -48
  364. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +4 -46
  365. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +4 -46
  366. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +4 -46
  367. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +8 -66
  368. nautobot/project-static/docs/user-guide/administration/installation/index.html +4 -46
  369. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +5 -47
  370. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +4 -46
  371. nautobot/project-static/docs/user-guide/administration/installation/services.html +4 -46
  372. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +4 -46
  373. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +4 -46
  374. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +4 -46
  375. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +4 -46
  376. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +4 -46
  377. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +4 -46
  378. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +4 -46
  379. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +4 -46
  380. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +4 -46
  381. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +8 -49
  382. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +4 -46
  383. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +4 -46
  384. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +4 -46
  385. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +4 -46
  386. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +4 -46
  387. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +4 -46
  388. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +4 -46
  389. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +4 -46
  390. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +4 -46
  391. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +4 -46
  392. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +4 -46
  393. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +4 -46
  394. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +4 -46
  395. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +4 -46
  396. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +4 -46
  397. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +4 -46
  398. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +4 -46
  399. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +4 -46
  400. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +4 -46
  401. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +4 -46
  402. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +4 -46
  403. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +4 -46
  404. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +4 -46
  405. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +4 -46
  406. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +4 -46
  407. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +4 -46
  408. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +4 -46
  409. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +4 -46
  410. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +4 -46
  411. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +4 -46
  412. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +4 -46
  413. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +4 -46
  414. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +4 -46
  415. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +4 -46
  416. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +4 -46
  417. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +4 -46
  418. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +4 -46
  419. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +4 -46
  420. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +4 -46
  421. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +4 -46
  422. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +4 -46
  423. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +4 -46
  424. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +4 -46
  425. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +4 -46
  426. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +4 -46
  427. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +4 -46
  428. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +4 -46
  429. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +4 -46
  430. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +4 -46
  431. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +4 -46
  432. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +4 -46
  433. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +4 -46
  434. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +4 -46
  435. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +4 -46
  436. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +4 -46
  437. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +4 -46
  438. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +4 -46
  439. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +12 -50
  440. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +4 -46
  441. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +4 -46
  442. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +4 -46
  443. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +4 -46
  444. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +4 -46
  445. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +4 -46
  446. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +4 -46
  447. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +4 -46
  448. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +4 -46
  449. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +4 -46
  450. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +4 -46
  451. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +4 -46
  452. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +7 -49
  453. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +4 -46
  454. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +4 -46
  455. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +4 -46
  456. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +4 -46
  457. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +4 -46
  458. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +4 -46
  459. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +4 -46
  460. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +4 -46
  461. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +4 -46
  462. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +4 -46
  463. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +4 -46
  464. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +4 -46
  465. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +4 -46
  466. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +4 -46
  467. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +4 -46
  468. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +4 -46
  469. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +4 -46
  470. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +4 -46
  471. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +4 -46
  472. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +4 -46
  473. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +4 -46
  474. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +4 -46
  475. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +7 -51
  476. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +4 -46
  477. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +4 -46
  478. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +4 -46
  479. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +7 -49
  480. nautobot/project-static/docs/user-guide/index.html +4 -46
  481. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +4 -46
  482. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +8 -50
  483. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +4 -46
  484. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +4 -46
  485. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +4 -46
  486. nautobot/project-static/docs/user-guide/platform-functionality/events.html +4 -46
  487. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +4 -46
  488. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +4 -46
  489. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +4 -46
  490. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +4 -46
  491. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +4 -46
  492. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +4 -46
  493. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +7 -50
  494. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +4 -46
  495. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +7 -49
  496. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +4 -46
  497. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +4 -46
  498. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +4 -46
  499. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +4 -46
  500. nautobot/project-static/docs/user-guide/platform-functionality/note.html +4 -46
  501. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +4 -46
  502. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +5 -47
  503. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +4 -46
  504. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +4 -46
  505. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +25 -94
  506. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +5 -74
  507. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +4 -46
  508. nautobot/project-static/docs/user-guide/platform-functionality/role.html +4 -46
  509. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +4 -46
  510. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +4 -46
  511. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +4 -46
  512. nautobot/project-static/docs/user-guide/platform-functionality/status.html +4 -46
  513. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +4 -46
  514. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +4 -46
  515. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +4 -46
  516. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +4 -46
  517. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +4 -46
  518. nautobot/project-static/js/forms.js +1 -1
  519. nautobot/tenancy/api/views.py +13 -9
  520. nautobot/tenancy/views.py +2 -4
  521. nautobot/users/admin.py +1 -1
  522. nautobot/users/api/serializers.py +4 -5
  523. nautobot/users/api/views.py +3 -3
  524. nautobot/virtualization/api/serializers.py +4 -4
  525. nautobot/virtualization/api/views.py +24 -5
  526. nautobot/virtualization/filters.py +3 -20
  527. nautobot/virtualization/models.py +1 -1
  528. nautobot/virtualization/tables.py +2 -2
  529. nautobot/virtualization/templates/virtualization/cluster_edit.html +7 -1
  530. nautobot/virtualization/templates/virtualization/virtualmachine.html +9 -1
  531. nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +8 -2
  532. nautobot/virtualization/tests/test_filters.py +0 -17
  533. nautobot/wireless/filters.py +2 -2
  534. nautobot/wireless/forms.py +1 -1
  535. nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +9 -1
  536. nautobot/wireless/tests/test_filters.py +1 -29
  537. nautobot/wireless/views.py +10 -0
  538. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/METADATA +6 -6
  539. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/RECORD +543 -591
  540. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/WHEEL +1 -1
  541. nautobot/core/api/constants.py +0 -11
  542. nautobot/core/jobs/bulk_actions.py +0 -248
  543. nautobot/core/templates/about.html +0 -67
  544. nautobot/core/templates/inc/tenancy_form_panel.html +0 -9
  545. nautobot/core/templates/inc/tenant_table_row.html +0 -11
  546. nautobot/core/utils/querysets.py +0 -64
  547. nautobot/dcim/migrations/0067_controllermanageddevicegroup_tenant.py +0 -25
  548. nautobot/dcim/tests/integration/test_controller.py +0 -62
  549. nautobot/dcim/tests/integration/test_controller_managed_device_group.py +0 -71
  550. nautobot/dcim/tests/test_jobs.py +0 -118
  551. nautobot/extras/migrations/0120_job_is_singleton_job_is_singleton_override.py +0 -22
  552. nautobot/extras/migrations/0121_alter_team_contacts.py +0 -17
  553. nautobot/extras/test_jobs/singleton.py +0 -16
  554. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit.png +0 -0
  555. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit_button.png +0 -0
  556. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_nav.png +0 -0
  557. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_view.png +0 -0
  558. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue.png +0 -0
  559. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_add.png +0 -0
  560. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_config.png +0 -0
  561. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_completed.png +0 -0
  562. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_nav.png +0 -0
  563. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_pending.png +0 -0
  564. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_run_form.png +0 -0
  565. nautobot/project-static/docs/media/development/core/kubernetes/k8s_nautobot_login.png +0 -0
  566. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_job.png +0 -0
  567. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_scheduled_job_form.png +0 -0
  568. nautobot/project-static/docs/media/development/core/kubernetes/k8s_scheduled_job_result.png +0 -0
  569. nautobot/project-static/docs/media/development/core/ui-component-framework/buttons-example.png +0 -0
  570. nautobot/project-static/docs/media/development/core/ui-component-framework/cluster-type-before-after-example.png +0 -0
  571. nautobot/project-static/docs/media/development/core/ui-component-framework/object-fields-panel-example_2.png +0 -0
  572. nautobot/project-static/docs/media/development/core/ui-component-framework/stats-panel-example-code.png +0 -0
  573. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/central-mode.png +0 -0
  574. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-add.png +0 -0
  575. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-1.png +0 -0
  576. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-2.png +0 -0
  577. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-add.png +0 -0
  578. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-create.png +0 -0
  579. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-add.png +0 -0
  580. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-create.png +0 -0
  581. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-add.png +0 -0
  582. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-1.png +0 -0
  583. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-2.png +0 -0
  584. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-add.png +0 -0
  585. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-create.png +0 -0
  586. nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +0 -9444
  587. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +0 -9722
  588. nautobot/wireless/tests/integration/__init__.py +0 -0
  589. nautobot/wireless/tests/integration/test_radio_profile.py +0 -42
  590. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/LICENSE.txt +0 -0
  591. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/NOTICE +0 -0
  592. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/entry_points.txt +0 -0
@@ -10,31 +10,31 @@ class InstalledAppsTable(tables.Table):
10
10
  """
11
11
 
12
12
  name = tables.Column(linkify=lambda record: reverse("apps:app_detail", kwargs={"app": record["app_label"]}))
13
- package = tables.Column(verbose_name="Package Name")
13
+ package_name = tables.Column()
14
14
  author = tables.Column()
15
15
  author_email = tables.Column()
16
- headline = tables.Column()
16
+ description = tables.Column()
17
17
  version = tables.Column()
18
18
  actions = tables.TemplateColumn(
19
19
  template_code="""
20
- {% if record.home_url %}
21
- <a href="{% url record.home_url %}" class="btn btn-primary btn-xs" title="Home">
20
+ {% if record.actions.home %}
21
+ <a href="{% url record.actions.home %}" class="btn btn-success btn-xs" title="Home">
22
22
  {% else %}
23
- <a href="" class="btn btn-primary btn-xs disabled" title="No home link provided">
23
+ <a href="" class="btn btn-success btn-xs disabled" title="No home link provided">
24
24
  {% endif %}
25
25
  <i class="mdi mdi-home"></i>
26
26
  </a>
27
- {% if record.config_url %}
28
- <a href="{% url record.config_url %}" class="btn btn-warning btn-xs" title="Configure">
27
+ {% if record.actions.configure %}
28
+ <a href="{% url record.actions.configure %}" class="btn btn-warning btn-xs" title="Configure">
29
29
  {% else %}
30
- <a href="" class="btn btn-warning btn-xs disabled" title="No configuration link provided">
30
+ <a href="" class="btn btn-warning btn-xs disabled" title="No configuration link provided">
31
31
  {% endif %}
32
32
  <i class="mdi mdi-cog"></i>
33
33
  </a>
34
- {% if record.docs_url %}
35
- <a href="{% url record.docs_url %}" class="btn btn-info btn-xs" title="Docs">
34
+ {% if record.actions.docs %}
35
+ <a href="{% url record.actions.docs %}" class="btn btn-info btn-xs" title="Docs">
36
36
  {% else %}
37
- <a href="" class="btn btn-info btn-xs disabled" title="No docs provided">
37
+ <a href="" class="btn btn-info btn-xs disabled" title="No docs provided">
38
38
  {% endif %}
39
39
  <i class="mdi mdi-book-open-page-variant"></i>
40
40
  </a>
@@ -47,7 +47,7 @@ class InstalledAppsTable(tables.Table):
47
47
  attrs = {
48
48
  "class": "table table-hover table-headings",
49
49
  }
50
- default_columns = ("name", "headline", "version", "actions")
50
+ default_columns = ("name", "description", "version", "actions")
51
51
 
52
52
  def __init__(self, *args, user=None, **kwargs):
53
53
  super().__init__(*args, **kwargs)
@@ -83,9 +83,7 @@ class InstalledAppsTable(tables.Table):
83
83
  @property
84
84
  def configurable_columns(self):
85
85
  selected_columns = [
86
- (name, column.verbose_name)
87
- for name, column in self.columns.items()
88
- if name in self.sequence and name not in ["pk", "actions"]
86
+ (name, self.columns[name].verbose_name) for name in self.sequence if name not in ["pk", "actions"]
89
87
  ]
90
88
  available_columns = [
91
89
  (name, column.verbose_name)
@@ -96,7 +94,7 @@ class InstalledAppsTable(tables.Table):
96
94
 
97
95
  @property
98
96
  def visible_columns(self):
99
- return [name for name, column in self.columns.items() if column.visible]
97
+ return [name for name in self.sequence if self.columns[name].visible]
100
98
 
101
99
  def render_package_name(self, value):
102
100
  return format_html(f"<code>{value}</code>")
@@ -29,55 +29,6 @@ def load_marketplace_data():
29
29
  return marketplace_data
30
30
 
31
31
 
32
- def override_app_data_with_marketplace_data(package_name, app_data, marketplace_data):
33
- """If the given package_name is in the marketplace_data, update/replace the app_data with marketplace_data."""
34
- for marketplace_app in marketplace_data["apps"]:
35
- if marketplace_app["package_name"] != package_name:
36
- continue
37
- for key in "author", "description", "headline", "availability", "name":
38
- if marketplace_app.get(key, None):
39
- app_data[key] = marketplace_app[key]
40
- break
41
- return app_data
42
-
43
-
44
- def extract_app_data(app_config, marketplace_data):
45
- if app_config.name not in settings.PLUGINS:
46
- return None
47
- try:
48
- reverse(app_config.home_view_name)
49
- home_url = app_config.home_view_name
50
- except NoReverseMatch:
51
- home_url = None
52
- try:
53
- reverse(app_config.config_view_name)
54
- config_url = app_config.config_view_name
55
- except NoReverseMatch:
56
- config_url = None
57
- try:
58
- reverse(app_config.docs_view_name)
59
- docs_url = app_config.docs_view_name
60
- except NoReverseMatch:
61
- docs_url = None
62
- return override_app_data_with_marketplace_data(
63
- app_config.name,
64
- {
65
- "name": app_config.verbose_name,
66
- "package": app_config.name,
67
- "app_label": app_config.label,
68
- "author": app_config.author,
69
- "author_email": app_config.author_email,
70
- "description": app_config.description,
71
- "headline": app_config.description,
72
- "version": app_config.version,
73
- "home_url": home_url,
74
- "config_url": config_url,
75
- "docs_url": docs_url,
76
- },
77
- marketplace_data,
78
- )
79
-
80
-
81
32
  class InstalledAppsView(GenericView):
82
33
  """
83
34
  View for listing all installed Apps.
@@ -86,12 +37,40 @@ class InstalledAppsView(GenericView):
86
37
  table = InstalledAppsTable
87
38
 
88
39
  def get(self, request):
89
- marketplace_data = load_marketplace_data()
90
- app_configs = apps.get_app_configs()
91
40
  data = []
92
- for app_config in app_configs:
93
- if app_data := extract_app_data(app_config, marketplace_data):
94
- data.append(app_data)
41
+ for app in apps.get_app_configs():
42
+ if app.name in settings.PLUGINS:
43
+ try:
44
+ reverse(app.home_view_name)
45
+ home_url = app.home_view_name
46
+ except NoReverseMatch:
47
+ home_url = None
48
+ try:
49
+ reverse(app.config_view_name)
50
+ config_url = app.config_view_name
51
+ except NoReverseMatch:
52
+ config_url = None
53
+ try:
54
+ reverse(app.docs_view_name)
55
+ docs_url = app.docs_view_name
56
+ except NoReverseMatch:
57
+ docs_url = None
58
+ data.append(
59
+ {
60
+ "name": app.verbose_name,
61
+ "package_name": app.name,
62
+ "app_label": app.label,
63
+ "author": app.author,
64
+ "author_email": app.author_email,
65
+ "description": app.description,
66
+ "version": app.version,
67
+ "actions": {
68
+ "home": home_url,
69
+ "configure": config_url,
70
+ "docs": docs_url,
71
+ },
72
+ }
73
+ )
95
74
  table = self.table(data, user=request.user)
96
75
 
97
76
  paginate = {
@@ -100,6 +79,7 @@ class InstalledAppsView(GenericView):
100
79
  }
101
80
  RequestConfig(request, paginate).configure(table)
102
81
 
82
+ marketplace_data = load_marketplace_data()
103
83
  app_icons = {app["package_name"]: app.get("icon") for app in marketplace_data["apps"]}
104
84
 
105
85
  # Determine user's preferred display
@@ -143,7 +123,6 @@ class InstalledAppDetailView(GenericView):
143
123
  request,
144
124
  "extras/plugin_detail.html",
145
125
  {
146
- "app_data": extract_app_data(app_config, load_marketplace_data()),
147
126
  "object": app_config,
148
127
  },
149
128
  )
@@ -159,10 +138,35 @@ class InstalledAppsAPIView(NautobotAPIVersionMixin, APIView):
159
138
  def get_view_name(self):
160
139
  return "Installed Apps"
161
140
 
141
+ @staticmethod
142
+ def _get_app_data(app_config):
143
+ try:
144
+ home_url = reverse(app_config.home_view_name)
145
+ except NoReverseMatch:
146
+ home_url = None
147
+ try:
148
+ config_url = reverse(app_config.config_view_name)
149
+ except NoReverseMatch:
150
+ config_url = None
151
+ try:
152
+ docs_url = reverse(app_config.docs_view_name)
153
+ except NoReverseMatch:
154
+ docs_url = None
155
+ return {
156
+ "name": app_config.verbose_name,
157
+ "package": app_config.name,
158
+ "author": app_config.author,
159
+ "author_email": app_config.author_email,
160
+ "description": app_config.description,
161
+ "version": app_config.version,
162
+ "home_url": home_url,
163
+ "config_url": config_url,
164
+ "docs_url": docs_url,
165
+ }
166
+
162
167
  @extend_schema(exclude=True)
163
168
  def get(self, request, format=None): # pylint: disable=redefined-builtin
164
- marketplace_data = load_marketplace_data()
165
- return Response([extract_app_data(apps.get_app_config(app), marketplace_data) for app in settings.PLUGINS])
169
+ return Response([self._get_app_data(apps.get_app_config(app)) for app in settings.PLUGINS])
166
170
 
167
171
 
168
172
  class AppsAPIRootView(AuthenticatedAPIRootView):
@@ -189,7 +193,7 @@ class AppsAPIRootView(AuthenticatedAPIRootView):
189
193
  return entry
190
194
 
191
195
  @extend_schema(exclude=True)
192
- def get(self, request, *args, format=None, **kwargs): # pylint: disable=redefined-builtin
196
+ def get(self, request, format=None): # pylint: disable=redefined-builtin
193
197
  entries = []
194
198
  for app_name in settings.PLUGINS:
195
199
  app_config = apps.get_app_config(app_name)
@@ -233,11 +237,11 @@ class MarketplaceView(GenericView):
233
237
 
234
238
  installed_apps = [app for app in apps.get_app_configs() if app.name in settings.PLUGINS]
235
239
 
236
- # Flag already installed apps
237
- for installed_app in installed_apps:
238
- for marketplace_app in marketplace_data["apps"]:
239
- if installed_app.name == marketplace_app["package_name"]:
240
- marketplace_app["installed"] = True
241
- break
240
+ # Filter out already installed apps from apps marketplace listing.
241
+ visible_marketplace_apps = [
242
+ app
243
+ for app in marketplace_data["apps"]
244
+ if all(installed_app.name != app["package_name"] for installed_app in installed_apps)
245
+ ]
242
246
 
243
- return render(request, "extras/marketplace.html", {"apps": marketplace_data["apps"]})
247
+ return render(request, "extras/marketplace.html", {"apps": visible_marketplace_apps})
@@ -41,7 +41,7 @@ class DatasourceContent:
41
41
  weight (int): Defines the order in which datasources will be loaded.
42
42
  """
43
43
 
44
- __slots__ = ["callback", "content_identifier", "icon", "name", "weight"]
44
+ __slots__ = ["name", "content_identifier", "icon", "callback", "weight"]
45
45
 
46
46
  def __init__(self, name, content_identifier, icon, callback, weight=1000):
47
47
  """Ensure datasource properties."""
@@ -57,10 +57,10 @@ def register_secrets_provider(provider):
57
57
 
58
58
 
59
59
  __all__ = (
60
+ "register_secrets_provider",
60
61
  "SecretError",
61
62
  "SecretParametersError",
62
63
  "SecretProviderError",
63
- "SecretValueNotFoundError",
64
64
  "SecretsProvider",
65
- "register_secrets_provider",
65
+ "SecretValueNotFoundError",
66
66
  )
nautobot/extras/tables.py CHANGED
@@ -244,7 +244,7 @@ class ConfigContextSchemaValidationStateColumn(tables.Column):
244
244
  self.validator = validator
245
245
  self.data_field = data_field
246
246
 
247
- def render(self, *, record): # pylint: disable=arguments-differ # tables2 varies its kwargs
247
+ def render(self, record):
248
248
  data = getattr(record, self.data_field)
249
249
  try:
250
250
  self.validator.validate(data)
@@ -628,13 +628,13 @@ class GitRepositoryTable(BaseTable):
628
628
  )
629
629
 
630
630
  def render_last_sync_time(self, record):
631
- if record.name in self.context["job_results"]: # pylint: disable=no-member
632
- return self.context["job_results"][record.name].date_done # pylint: disable=no-member
631
+ if record.name in self.context["job_results"]:
632
+ return self.context["job_results"][record.name].date_done
633
633
  return self.default
634
634
 
635
635
  def render_last_sync_user(self, record):
636
- if record.name in self.context["job_results"]: # pylint: disable=no-member
637
- user = self.context["job_results"][record.name].user # pylint: disable=no-member
636
+ if record.name in self.context["job_results"]:
637
+ user = self.context["job_results"][record.name].user
638
638
  return user
639
639
  return self.default
640
640
 
@@ -910,12 +910,10 @@ class JobResultTable(BaseTable):
910
910
  """
911
911
  return format_html(
912
912
  """<label class="label label-default">{}</label>
913
- <label class="label label-success">{}</label>
914
913
  <label class="label label-info">{}</label>
915
914
  <label class="label label-warning">{}</label>
916
915
  <label class="label label-danger">{}</label>""",
917
916
  record.debug_log_count,
918
- record.success_log_count,
919
917
  record.info_log_count,
920
918
  record.warning_log_count,
921
919
  record.error_log_count,
@@ -50,7 +50,15 @@
50
50
  <td>Group Type</td>
51
51
  <td><span>{{ object.get_group_type_display }}</span></td>
52
52
  </tr>
53
- {% include 'inc/tenant_table_row.html' %}
53
+ <tr>
54
+ <td>Tenant</td>
55
+ <td>
56
+ {% if object.tenant and object.tenant.tenant_group %}
57
+ {{ object.tenant.tenant_group|hyperlinked_object }} /
58
+ {% endif %}
59
+ {{ object.tenant|hyperlinked_object }}
60
+ </td>
61
+ </tr>
54
62
  </table>
55
63
  </div>
56
64
  {% endblock content_left_page %}
@@ -206,22 +206,6 @@
206
206
  {% endif %}
207
207
  </td>
208
208
  </tr>
209
- <tr>
210
- <td>Is Singleton</td>
211
- <td>{{ object.is_singleton | render_boolean }}</td>
212
- <td>
213
- {% if object.is_singleton_override %}
214
- <span class="text-muted">
215
- overridden; default is
216
- {% if object.installed %}
217
- {{ object.job_class.is_singleton | render_boolean }}
218
- {% else %}
219
- unknown (not currently installed)
220
- {% endif %}
221
- </span>
222
- {% endif %}
223
- </td>
224
- </tr>
225
209
  <tr>
226
210
  <td>Execution Soft Time Limit</td>
227
211
  <td>
@@ -94,7 +94,6 @@
94
94
  {% include "extras/inc/overridable_field.html" with field=form.has_sensitive_variables override_field=form.has_sensitive_variables_override %}
95
95
  {% include "extras/inc/overridable_field.html" with field=form.job_queues override_field=form.job_queues_override %}
96
96
  {% include "extras/inc/overridable_field.html" with field=form.default_job_queue override_field=form.default_job_queue_override %}
97
- {% include "extras/inc/overridable_field.html" with field=form.is_singleton override_field=form.is_singleton_override %}
98
97
  </div>
99
98
  </div>
100
99
  {% include 'inc/extras_features_edit_form_fields.html' %}
@@ -26,7 +26,15 @@
26
26
  {{ object.description|placeholder }}
27
27
  </td>
28
28
  </tr>
29
- {% include 'inc/tenant_table_row.html' %}
29
+ <tr>
30
+ <td>Tenant</td>
31
+ <td>
32
+ {% if object.tenant and object.tenant.tenant_group %}
33
+ {{ object.tenant.tenant_group|hyperlinked_object }} /
34
+ {% endif %}
35
+ {{ object.tenant|hyperlinked_object }}
36
+ </td>
37
+ </tr>
30
38
  </table>
31
39
  </div>
32
40
  {% endblock %}
@@ -6,7 +6,6 @@
6
6
  <style>
7
7
  .tile-header {
8
8
  display: block;
9
- min-height: 85px; /* allow room for two rows of tags */
10
9
  }
11
10
 
12
11
  .tile-header h2 {
@@ -22,7 +21,6 @@
22
21
 
23
22
  .tile-description {
24
23
  margin-top: 10px;
25
- min-height: 72px; /* allow room for three rows of text */
26
24
  }
27
25
 
28
26
  .tile-actions {
@@ -57,16 +55,6 @@
57
55
  {% endblock %}
58
56
 
59
57
  {% block content %}
60
- <div class="row noprint">
61
- <div class="col-md-12">
62
- <ol class="breadcrumb">
63
- {% block breadcrumbs %}
64
- <li><a href="{% url 'apps:apps_marketplace' %}">Apps Marketplace</a></li>
65
- {% endblock breadcrumbs %}
66
- </ol>
67
- </div>
68
- </div>
69
-
70
58
  <div class="pull-right noprint">
71
59
  <a class="btn btn-primary" href="{% url 'apps:apps_list' %}">See Installed Apps</a>
72
60
  </div>
@@ -104,11 +92,8 @@
104
92
  <p class="tile-description">{{ app.headline }}</p>
105
93
 
106
94
  <footer class="tile-footer">
107
- <div>By: {{ app.author }}</div>
108
- <div>
109
- {% if app.installed %}<label class="label label-success">Installed</label>{% endif %}
110
- <label class="label label-transparent">{{ app.availability }}</label>
111
- </div>
95
+ <div>Author: {{ app.author }}</div>
96
+ <div>Availability: {{ app.availability }}</div>
112
97
  </footer>
113
98
  </a>
114
99
 
@@ -136,10 +121,7 @@
136
121
  <span aria-hidden="true">&times;</span>
137
122
  </button>
138
123
 
139
- <h4 class="modal-title">
140
- {{ app.name }}
141
- {% if app.installed %}<label class="label label-success">Installed</label>{% endif %}
142
- </h4>
124
+ <h4 class="modal-title">{{ app.name }}</h4>
143
125
  </div>
144
126
 
145
127
  <div class="modal-body">
@@ -153,11 +135,11 @@
153
135
  />
154
136
 
155
137
  <dl>
156
- <dt class="text-muted text-uppercase">By</dt>
138
+ <dt class="text-muted text-uppercase">Author</dt>
157
139
  <dd>{{ app.author }}</dd>
158
140
 
159
- <dt class="text-muted text-uppercase">License</dt>
160
- <dd><label class="label label-transparent">{{ app.availability }}</label></dd>
141
+ <dt class="text-muted text-uppercase">Availability</dt>
142
+ <dd>{{ app.availability }}</dd>
161
143
 
162
144
  {% if app.requires|length > 0 %}
163
145
  <dt class="text-muted text-uppercase">Requirements</dt>
@@ -189,7 +171,7 @@
189
171
  <div>
190
172
  <h5>{{ app.headline }}</h5>
191
173
 
192
- <p>{{ app.description|render_markdown }}</p>
174
+ <p>{{ app.description }}</p>
193
175
 
194
176
  {% if app.docs|default:None != None %}
195
177
  <p>
@@ -200,12 +182,12 @@
200
182
  </p>
201
183
  {% endif %}
202
184
 
203
- {% if app.availability == "NTC License" %}
185
+ {% if app.availability == "Private" %}
204
186
  <p>
205
187
  <strong>
206
- This Nautobot App requires a license to use.
207
- <a href="https://networktocode.com/contact/" target="_blank">
208
- Reach out to Network to Code
188
+ This app is private. Reach out to
189
+ <a href="https://networktocode.com/nautobot/" target="_blank">
190
+ Nautobot Team
209
191
  </a>
210
192
  for more information.
211
193
  </strong>
@@ -7,32 +7,27 @@
7
7
  <ol class="breadcrumb">
8
8
  {% block breadcrumbs %}
9
9
  <li><a href="{% url 'apps:apps_list' %}">Installed Apps</a></li>
10
- <li><a href="{% url 'apps:app_detail' app=app_data.package %}">{{ app_data.name | bettertitle }}</a></li>
10
+ <li><a href="{% url 'apps:app_detail' app=object.name %}">{{ object.verbose_name | bettertitle }}</a></li>
11
11
  {% endblock breadcrumbs %}
12
12
  </ol>
13
13
  </div>
14
14
  </div>
15
15
  <div class="pull-right noprint">
16
16
  {% block buttons %}
17
- {% if app_data.home_url %}
18
- <a href="{% url app_data.home_url %}" class="btn btn-primary">
17
+ {% if object.home_view_name %}
18
+ <a href="{% url object.home_view_name %}" class="btn btn-success">
19
19
  <i class="mdi mdi-home"></i> App Home
20
20
  </a>
21
21
  {% endif %}
22
- {% if app_data.config_url %}
23
- <a href="{% url app_data.config_url %}" class="btn btn-warning">
22
+ {% if object.config_view_name %}
23
+ <a href="{% url object.config_view_name %}" class="btn btn-warning">
24
24
  <i class="mdi mdi-cog"></i> App Configuration
25
25
  </a>
26
26
  {% endif %}
27
- {% if app_data.docs_url %}
28
- <a href="{% url app_data.docs_url %}" class="btn btn-info">
29
- <i class="mdi mdi-cog"></i> App Documentation
30
- </a>
31
- {% endif %}
32
27
  {% endblock buttons %}
33
28
  </div>
34
29
  {% block masthead %}
35
- <h1>{% block title %}{{ app_data.name | bettertitle }}{% endblock %}</h1>
30
+ <h1>{% block title %}{{ object.verbose_name | bettertitle }}{% endblock %}</h1>
36
31
  {% endblock masthead %}
37
32
  {% endblock header %}
38
33
 
@@ -47,37 +42,25 @@
47
42
  <table class="table table-hover panel-body attr-table">
48
43
  <tr>
49
44
  <td>Package Name</td>
50
- <td><code>{{ app_data.package }}</code></td>
51
- </tr>
52
- <tr>
53
- <td>Headline</td>
54
- <td>{{ app_data.headline }}</td>
45
+ <td><code>{{ object.name }}</code></td>
55
46
  </tr>
56
- {% if app_data.description and app_data.headline != app_data.description %}
57
47
  <tr>
58
48
  <td>Description</td>
59
- <td>{{ app_data.description }}</td>
49
+ <td>{{ object.description }}</td>
60
50
  </tr>
61
- {% endif %}
62
51
  <tr>
63
52
  <td>Version</td>
64
- <td>v{{ app_data.version }}</td>
53
+ <td>{{ object.version }}</td>
65
54
  </tr>
66
55
  <tr>
67
- <td>By</td>
56
+ <td>Author</td>
68
57
  <td>
69
- {{ app_data.author | placeholder }}
70
- {% if app_data.author_email %}
71
- (<a href="mailto:{{ app_data.author_email }}">{{ app_data.author_email }}</a>)
58
+ {{ object.author | placeholder }}
59
+ {% if object.author_email %}
60
+ (<a href="mailto:{{ object.author_email }}">{{ object.author_email }}</a>)
72
61
  {% endif %}
73
62
  </td>
74
63
  </tr>
75
- {% if app_data.availability %}
76
- <tr>
77
- <td>License</td>
78
- <td><label class="label label-transparent">{{ app_data.availability }}</label></td>
79
- </tr>
80
- {% endif %}
81
64
  </table>
82
65
  </div>
83
66
  <div class="panel panel-default">
@@ -87,11 +70,11 @@
87
70
  <table class="table table-hover panel-body attr-table">
88
71
  <tr>
89
72
  <td>Min Nautobot Version</td>
90
- <td>v{{ object.min_version | placeholder }}</td>
73
+ <td>{{ object.min_version | placeholder }}</td>
91
74
  </tr>
92
75
  <tr>
93
76
  <td>Max Nautobot Version</td>
94
- <td>v{{ object.max_version | placeholder }}</td>
77
+ <td>{{ object.max_version | placeholder }}</td>
95
78
  </tr>
96
79
  </table>
97
80
  </div>
@@ -9,7 +9,6 @@
9
9
  }
10
10
 
11
11
  .tile-header h2 {
12
- margin-bottom: 5px;
13
12
  margin-top: 0;
14
13
  }
15
14
 
@@ -18,11 +17,6 @@
18
17
  margin-left: 3px;
19
18
  }
20
19
 
21
- .tile-description {
22
- margin-top: 10px;
23
- min-height: 72px; /* allow room for three rows of text */
24
- }
25
-
26
20
  .tile-actions {
27
21
  position: absolute;
28
22
  right: 21px;
@@ -42,7 +36,7 @@
42
36
  <header class="tile-header">
43
37
  <img
44
38
  alt="{{ row.record.name }}"
45
- src="{% if app_icons|get_item:row.record.package != None %}{{ app_icons|get_item:row.record.package }}{% else %}{% static 'img/nautobot_icon_192x192.png' %}{% endif %}"
39
+ src="{% if app_icons|get_item:row.record.package_name != None %}{{ app_icons|get_item:row.record.package_name }}{% else %}{% static 'img/nautobot_icon_192x192.png' %}{% endif %}"
46
40
  height="64"
47
41
  width="64"
48
42
  />
@@ -51,25 +45,20 @@
51
45
  Occupy `.tile-actions` dedicated space with `.tile-actions-placeholder`. See comment above
52
46
  `.tile-actions` element for detailed explanation of this solution and why it is required here.
53
47
  -->
54
- {% with actions_count=3 %}
55
- <div
56
- aria-hidden="true"
57
- class="tile-actions-placeholder pull-right"
58
- style="width: calc(32px * {{ actions_count }} + 3px * {{ actions_count|add:-1 }})">
59
- </div>
60
- {% endwith %}
48
+ <div
49
+ aria-hidden="true"
50
+ class="tile-actions-placeholder pull-right"
51
+ style="width: calc(32px * {{ row.record.actions|length }} + 3px * {{ row.record.actions|length|add:-1 }})">
52
+ </div>
61
53
 
62
54
  <h2>{{ row.record.name }}</h2>
63
- </header>
64
55
 
65
- <p class="tile-description">{{ row.record.headline }}</p>
56
+ <p class="tile-description">{{ row.record.description }}</p>
57
+ </header>
66
58
 
67
59
  <footer class="tile-footer">
68
- <div>By: {{ row.record.author }}</div>
69
- <div>
70
- <label class="label label-transparent">{{ row.record.availability }}</label>
71
- v{{ row.record.version }}
72
- </div>
60
+ <div>Author: {{ row.record.author }}</div>
61
+ <div>Version: {{ row.record.version }}</div>
73
62
  </footer>
74
63
  </a>
75
64
 
@@ -18,7 +18,7 @@ class APITestJob(Job):
18
18
  var3 = BooleanVar()
19
19
  var4 = ObjectVar(model=Role)
20
20
 
21
- def run(self, var1, var2, var3, var4): # pylint:disable=arguments-differ
21
+ def run(self, var1, var2, var3, var4):
22
22
  logger.debug(var1)
23
23
  logger.info(var2)
24
24
  logger.warning(var3)