nautobot 2.4.17__py3-none-any.whl → 2.4.19__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.
- nautobot/apps/ui.py +6 -0
- nautobot/apps/views.py +2 -0
- nautobot/circuits/tables.py +1 -1
- nautobot/circuits/templates/circuits/circuit_create.html +7 -7
- nautobot/circuits/templates/circuits/circuit_retrieve.html +1 -5
- nautobot/circuits/templates/circuits/circuittermination_create.html +26 -26
- nautobot/circuits/templates/circuits/circuittermination_retrieve.html +1 -8
- nautobot/circuits/templates/circuits/inc/circuit_termination.html +20 -20
- nautobot/circuits/templates/circuits/inc/circuit_termination_header_extra_content.html +3 -3
- nautobot/circuits/templates/circuits/inc/circuit_termination_speed_fragment.html +9 -0
- nautobot/circuits/templates/circuits/providernetwork_retrieve.html +1 -3
- nautobot/circuits/tests/integration/test_circuit.py +2 -2
- nautobot/circuits/views.py +49 -15
- nautobot/cloud/templates/cloud/cloudaccount_retrieve.html +1 -4
- nautobot/cloud/templates/cloud/cloudnetwork_retrieve.html +1 -7
- nautobot/cloud/templates/cloud/cloudresourcetype_retrieve.html +1 -3
- nautobot/cloud/templates/cloud/cloudservice_retrieve.html +1 -5
- nautobot/cloud/views.py +45 -0
- nautobot/core/filters.py +2 -2
- nautobot/core/graphql/generators.py +5 -2
- nautobot/core/jobs/bulk_actions.py +48 -85
- nautobot/core/models/querysets.py +2 -1
- nautobot/core/settings.py +1 -0
- nautobot/core/settings.yaml +9 -0
- nautobot/core/tables.py +21 -23
- nautobot/core/templates/40x.html +15 -15
- nautobot/core/templates/500.html +21 -21
- nautobot/core/templates/admin/app_index.html +8 -8
- nautobot/core/templates/admin/base.html +104 -104
- nautobot/core/templates/admin/change_form.html +65 -65
- nautobot/core/templates/admin/change_list.html +60 -60
- nautobot/core/templates/admin/change_list_results.html +39 -39
- nautobot/core/templates/admin/config/config.html +47 -47
- nautobot/core/templates/admin/delete_confirmation.html +47 -47
- nautobot/core/templates/admin/edit_inline/stacked.html +124 -124
- nautobot/core/templates/admin/edit_inline/tabular.html +60 -60
- nautobot/core/templates/admin/includes/fieldset.html +4 -4
- nautobot/core/templates/admin/index.html +60 -60
- nautobot/core/templates/admin/prepopulated_fields_js.html +18 -18
- nautobot/core/templates/admin/submit_line.html +4 -4
- nautobot/core/templates/base_django.html +46 -46
- nautobot/core/templates/buttons/consolidated_bulk_action_buttons.html +8 -8
- nautobot/core/templates/buttons/consolidated_detail_view_action_buttons.html +8 -8
- nautobot/core/templates/buttons/export.html +3 -3
- nautobot/core/templates/components/breadcrumbs.html +19 -0
- nautobot/core/templates/components/button/default.html +3 -3
- nautobot/core/templates/components/button/dropdown.html +7 -7
- nautobot/core/templates/components/button/formbutton.html +4 -4
- nautobot/core/templates/components/panel/body_content_data_table.html +1 -1
- nautobot/core/templates/components/panel/body_wrapper_generic_table.html +3 -0
- nautobot/core/templates/components/panel/footer_content_table.html +3 -1
- nautobot/core/templates/components/panel/header_extra_content_table.html +10 -1
- nautobot/core/templates/components/tab/content_wrapper.html +1 -1
- nautobot/core/templates/components/tab/label_wrapper.html +1 -1
- nautobot/core/templates/components/tab/label_wrapper_distinct_view.html +10 -3
- nautobot/core/templates/generic/object_bulk_add_component.html +40 -40
- nautobot/core/templates/generic/object_bulk_create.html +3 -3
- nautobot/core/templates/generic/object_bulk_destroy.html +6 -6
- nautobot/core/templates/generic/object_bulk_update.html +52 -52
- nautobot/core/templates/generic/object_changelog.html +0 -2
- nautobot/core/templates/generic/object_import.html +33 -33
- nautobot/core/templates/generic/object_list.html +271 -268
- nautobot/core/templates/generic/object_notes.html +0 -2
- nautobot/core/templates/generic/object_retrieve.html +264 -257
- nautobot/core/templates/graphene/graphiql.html +127 -127
- nautobot/core/templates/home.html +62 -62
- nautobot/core/templates/inc/computed_fields/panel_data.html +13 -13
- nautobot/core/templates/inc/created_updated.html +8 -8
- nautobot/core/templates/inc/custom_fields/panel_data.html +13 -13
- nautobot/core/templates/inc/dynamic_groups_panel.html +11 -11
- nautobot/core/templates/inc/footer.html +19 -19
- nautobot/core/templates/inc/javascript.html +1 -1
- nautobot/core/templates/inc/media.html +46 -46
- nautobot/core/templates/inc/nav_menu.html +1 -1
- nautobot/core/templates/inc/relationships_table_rows.html +22 -22
- nautobot/core/templates/inc/tenant_table_row.html +1 -1
- nautobot/core/templates/login.html +77 -77
- nautobot/core/templates/media_failure.html +38 -38
- nautobot/core/templates/panel_table.html +1 -1
- nautobot/core/templates/rest_framework/api.html +3 -3
- nautobot/core/templates/search.html +1 -1
- nautobot/core/templates/swagger_ui.html +9 -9
- nautobot/core/templates/utilities/confirmation_form.html +18 -18
- nautobot/core/templates/utilities/render_field.html +1 -1
- nautobot/core/templates/utilities/render_jinja2.html +43 -43
- nautobot/core/templates/utilities/templatetags/filter_form_modal.html +56 -56
- nautobot/core/templates/utilities/templatetags/utilization_graph.html +1 -1
- nautobot/core/templates/utilities/theme_preview.html +799 -799
- nautobot/core/templates/utilities/worker_status.html +122 -122
- nautobot/core/templates/widgets/clearable_file.html +3 -3
- nautobot/core/templates/widgets/sluginput.html +1 -1
- nautobot/core/templatetags/buttons.py +8 -2
- nautobot/core/templatetags/helpers.py +24 -0
- nautobot/core/templatetags/ui_framework.py +40 -5
- nautobot/core/testing/filters.py +37 -21
- nautobot/core/testing/integration.py +7 -4
- nautobot/core/testing/views.py +49 -5
- nautobot/core/tests/test_breadcrumbs.py +78 -4
- nautobot/core/tests/test_commands.py +7 -4
- nautobot/core/tests/test_graphql.py +20 -5
- nautobot/core/tests/test_jobs.py +34 -21
- nautobot/core/tests/test_tables.py +43 -6
- nautobot/core/tests/test_templatetags_ui_framework.py +146 -0
- nautobot/core/tests/test_titles.py +2 -2
- nautobot/core/tests/test_ui.py +188 -1
- nautobot/core/tests/test_utils.py +35 -0
- nautobot/core/tests/test_views.py +45 -0
- nautobot/core/tests/test_views_generic.py +43 -0
- nautobot/core/tests/test_views_utils.py +239 -5
- nautobot/core/ui/breadcrumbs.py +220 -28
- nautobot/core/ui/bulk_buttons.py +8 -0
- nautobot/core/ui/object_detail.py +181 -60
- nautobot/core/ui/titles.py +10 -5
- nautobot/core/utils/requests.py +27 -2
- nautobot/core/views/__init__.py +24 -3
- nautobot/core/views/generic.py +70 -35
- nautobot/core/views/mixins.py +226 -122
- nautobot/core/views/utils.py +270 -1
- nautobot/dcim/api/serializers.py +8 -2
- nautobot/dcim/constants.py +1 -0
- nautobot/dcim/factory.py +4 -3
- nautobot/dcim/filters/mixins.py +1 -2
- nautobot/dcim/forms.py +5 -1
- nautobot/dcim/migrations/0074_alter_rack_u_height.py +21 -0
- nautobot/dcim/models/devices.py +30 -1
- nautobot/dcim/models/racks.py +2 -2
- nautobot/dcim/tables/__init__.py +2 -0
- nautobot/dcim/tables/devices.py +24 -0
- nautobot/dcim/tables/power.py +2 -2
- nautobot/dcim/templates/dcim/cable.html +53 -53
- nautobot/dcim/templates/dcim/cable_connect.html +182 -182
- nautobot/dcim/templates/dcim/cable_trace.html +1 -1
- nautobot/dcim/templates/dcim/console_port_connection_list.html +5 -5
- nautobot/dcim/templates/dcim/consoleport.html +86 -86
- nautobot/dcim/templates/dcim/consoleserverport.html +86 -86
- nautobot/dcim/templates/dcim/controller_create.html +34 -34
- nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +68 -68
- nautobot/dcim/templates/dcim/device/base.html +1 -114
- nautobot/dcim/templates/dcim/device/config.html +17 -17
- nautobot/dcim/templates/dcim/device/consoleports.html +1 -52
- nautobot/dcim/templates/dcim/device/consoleserverports.html +1 -52
- nautobot/dcim/templates/dcim/device/devicebays.html +1 -48
- nautobot/dcim/templates/dcim/device/frontports.html +1 -52
- nautobot/dcim/templates/dcim/device/interfaces.html +1 -56
- nautobot/dcim/templates/dcim/device/inventory.html +1 -48
- nautobot/dcim/templates/dcim/device/lldp_neighbors.html +64 -64
- nautobot/dcim/templates/dcim/device/modulebays.html +1 -48
- nautobot/dcim/templates/dcim/device/poweroutlets.html +1 -52
- nautobot/dcim/templates/dcim/device/powerports.html +1 -52
- nautobot/dcim/templates/dcim/device/rearports.html +1 -52
- nautobot/dcim/templates/dcim/device/status.html +66 -66
- nautobot/dcim/templates/dcim/device/wireless.html +1 -72
- nautobot/dcim/templates/dcim/device.html +4 -422
- nautobot/dcim/templates/dcim/device_component.html +0 -19
- nautobot/dcim/templates/dcim/device_component_add.html +25 -25
- nautobot/dcim/templates/dcim/device_create.html +229 -0
- nautobot/dcim/templates/dcim/device_edit.html +2 -227
- nautobot/dcim/templates/dcim/devicebay.html +41 -41
- nautobot/dcim/templates/dcim/devicebay_populate.html +32 -32
- nautobot/dcim/templates/dcim/devicetype_component_add.html +28 -28
- nautobot/dcim/templates/dcim/devicetype_retrieve.html +1 -3
- nautobot/dcim/templates/dcim/frontport.html +84 -84
- nautobot/dcim/templates/dcim/inc/cable_toggle_buttons.html +1 -1
- nautobot/dcim/templates/dcim/inc/device_interface_filter.html +8 -0
- nautobot/dcim/templates/dcim/inc/device_napalm_tabs.html +1 -15
- nautobot/dcim/templates/dcim/inc/location_hierarchy.html +22 -22
- nautobot/dcim/templates/dcim/interface.html +206 -206
- nautobot/dcim/templates/dcim/interface_connection_list.html +5 -5
- nautobot/dcim/templates/dcim/interfaceredundancygroupassociation_create.html +6 -6
- nautobot/dcim/templates/dcim/inventoryitem.html +44 -44
- nautobot/dcim/templates/dcim/inventoryitem_add.html +32 -32
- nautobot/dcim/templates/dcim/inventoryitem_edit.html +22 -22
- nautobot/dcim/templates/dcim/location_migrate_data_to_contact.html +46 -46
- nautobot/dcim/templates/dcim/location_retrieve.html +1 -7
- nautobot/dcim/templates/dcim/locationtype.html +1 -6
- nautobot/dcim/templates/dcim/locationtype_retrieve.html +1 -7
- nautobot/dcim/templates/dcim/module/base.html +85 -85
- nautobot/dcim/templates/dcim/module_interfaces.html +1 -1
- nautobot/dcim/templates/dcim/module_modulebays.html +1 -1
- nautobot/dcim/templates/dcim/module_retrieve.html +52 -52
- nautobot/dcim/templates/dcim/module_update.html +61 -61
- nautobot/dcim/templates/dcim/modulebay_destroy.html +1 -1
- nautobot/dcim/templates/dcim/modulebay_retrieve.html +83 -99
- nautobot/dcim/templates/dcim/modulebay_update.html +33 -33
- nautobot/dcim/templates/dcim/modulefamily_retrieve.html +1 -1
- nautobot/dcim/templates/dcim/moduletype_retrieve.html +140 -144
- nautobot/dcim/templates/dcim/platform_create.html +38 -38
- nautobot/dcim/templates/dcim/power_port_connection_list.html +5 -5
- nautobot/dcim/templates/dcim/powerfeed_retrieve.html +1 -8
- nautobot/dcim/templates/dcim/poweroutlet.html +85 -85
- nautobot/dcim/templates/dcim/powerpanel_retrieve.html +1 -8
- nautobot/dcim/templates/dcim/powerport.html +91 -91
- nautobot/dcim/templates/dcim/rack_elevation_list.html +18 -18
- nautobot/dcim/templates/dcim/rack_retrieve.html +264 -274
- nautobot/dcim/templates/dcim/rackreservation_retrieve.html +0 -3
- nautobot/dcim/templates/dcim/rearport.html +78 -78
- nautobot/dcim/templates/dcim/virtualchassis_retrieve.html +1 -50
- nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +1 -5
- nautobot/dcim/tests/integration/test_device_bulk_operations.py +3 -2
- nautobot/dcim/tests/integration/test_location_bulk_operations.py +6 -2
- nautobot/dcim/tests/test_api.py +33 -1
- nautobot/dcim/tests/test_views.py +189 -4
- nautobot/dcim/ui.py +29 -0
- nautobot/dcim/urls.py +1 -109
- nautobot/dcim/utils.py +30 -0
- nautobot/dcim/views.py +1149 -550
- nautobot/extras/filters/mixins.py +1 -1
- nautobot/extras/forms/forms.py +15 -0
- nautobot/extras/models/groups.py +10 -1
- nautobot/extras/models/jobs.py +2 -2
- nautobot/extras/plugins/views.py +18 -5
- nautobot/extras/tables.py +24 -2
- nautobot/extras/templates/extras/computedfield_edit.html +4 -4
- nautobot/extras/templates/extras/configcontext_update.html +1 -1
- nautobot/extras/templates/extras/configcontextschema_retrieve.html +32 -32
- nautobot/extras/templates/extras/customfield_retrieve.html +1 -128
- nautobot/extras/templates/extras/customfield_update.html +23 -23
- nautobot/extras/templates/extras/dynamicgroup.html +2 -99
- nautobot/extras/templates/extras/dynamicgroup_edit.html +2 -199
- nautobot/extras/templates/extras/dynamicgroup_retrieve.html +99 -0
- nautobot/extras/templates/extras/dynamicgroup_update.html +199 -0
- nautobot/extras/templates/extras/gitrepository.html +2 -82
- nautobot/extras/templates/extras/gitrepository_list.html +10 -10
- nautobot/extras/templates/extras/gitrepository_object_edit.html +2 -13
- nautobot/extras/templates/extras/gitrepository_retrieve.html +82 -0
- nautobot/extras/templates/extras/gitrepository_update.html +13 -0
- nautobot/extras/templates/extras/graphqlquery_retrieve.html +73 -73
- nautobot/extras/templates/extras/inc/configcontext_format.html +2 -2
- nautobot/extras/templates/extras/inc/job_table.html +10 -10
- nautobot/extras/templates/extras/inc/jobresult.html +21 -21
- nautobot/extras/templates/extras/inc/jobresult_js.html +6 -6
- nautobot/extras/templates/extras/inc/tags_panel.html +10 -10
- nautobot/extras/templates/extras/job.html +64 -64
- nautobot/extras/templates/extras/job_approval_request.html +9 -9
- nautobot/extras/templates/extras/job_bulk_edit.html +13 -13
- nautobot/extras/templates/extras/job_edit.html +45 -45
- nautobot/extras/templates/extras/job_list.html +4 -4
- nautobot/extras/templates/extras/jobresult_retrieve.html +0 -25
- nautobot/extras/templates/extras/marketplace.html +101 -101
- nautobot/extras/templates/extras/metadatatype_create.html +20 -20
- nautobot/extras/templates/extras/note_retrieve.html +0 -52
- nautobot/extras/templates/extras/object_assign_contact_or_team.html +18 -18
- nautobot/extras/templates/extras/object_configcontext.html +1 -3
- nautobot/extras/templates/extras/objectchange.html +2 -165
- nautobot/extras/templates/extras/objectchange_retrieve.html +165 -0
- nautobot/extras/templates/extras/plugin_detail.html +44 -48
- nautobot/extras/templates/extras/plugins_list.html +9 -11
- nautobot/extras/templates/extras/plugins_tiles.html +26 -26
- nautobot/extras/templates/extras/relationship_edit.html +4 -4
- nautobot/extras/templates/extras/role_retrieve.html +13 -13
- nautobot/extras/templates/extras/scheduled_jobs_approval_queue_list.html +21 -21
- nautobot/extras/templates/extras/scheduledjob.html +128 -128
- nautobot/extras/templates/extras/secret_create.html +53 -53
- nautobot/extras/templates/extras/secretsgroup_update.html +13 -13
- nautobot/extras/templates/extras/templatetags/plugin_object_detail_tabs.html +3 -3
- nautobot/extras/templates/extras/webhook.html +79 -79
- nautobot/extras/tests/integration/test_relationships.py +6 -6
- nautobot/extras/tests/test_dynamicgroups.py +73 -18
- nautobot/extras/tests/test_filters.py +1 -1
- nautobot/extras/tests/test_jobs.py +2 -0
- nautobot/extras/tests/test_views.py +8 -3
- nautobot/extras/urls.py +3 -97
- nautobot/extras/views.py +524 -456
- nautobot/ipam/filters.py +2 -2
- nautobot/ipam/migrations/0053_alter_vrfdeviceassignment_options_and_more.py +20 -0
- nautobot/ipam/models.py +34 -0
- nautobot/ipam/querysets.py +3 -3
- nautobot/ipam/signals.py +6 -1
- nautobot/ipam/tables.py +3 -1
- nautobot/ipam/templates/ipam/inc/prefix_header_extra_content_table.html +4 -0
- nautobot/ipam/templates/ipam/inc/toggle_available.html +8 -8
- nautobot/ipam/templates/ipam/inc/vlangroup_header.html +4 -4
- nautobot/ipam/templates/ipam/ipaddress.html +119 -123
- nautobot/ipam/templates/ipam/ipaddress_assign.html +10 -10
- nautobot/ipam/templates/ipam/ipaddress_edit.html +1 -1
- nautobot/ipam/templates/ipam/ipaddress_merge.html +180 -180
- nautobot/ipam/templates/ipam/ipaddresstointerface_retrieve.html +48 -48
- nautobot/ipam/templates/ipam/prefix.html +2 -115
- nautobot/ipam/templates/ipam/prefix_create.html +34 -0
- nautobot/ipam/templates/ipam/prefix_edit.html +1 -34
- nautobot/ipam/templates/ipam/prefix_retrieve.html +3 -0
- nautobot/ipam/templates/ipam/service_retrieve.html +1 -6
- nautobot/ipam/templates/ipam/vlan_retrieve.html +1 -7
- nautobot/ipam/templates/ipam/vrf_edit.html +1 -1
- nautobot/ipam/tests/test_api.py +5 -0
- nautobot/ipam/tests/test_models.py +387 -0
- nautobot/ipam/tests/test_querysets.py +46 -0
- nautobot/ipam/tests/test_views.py +34 -0
- nautobot/ipam/ui.py +145 -0
- nautobot/ipam/urls.py +1 -46
- nautobot/ipam/utils/__init__.py +26 -0
- nautobot/ipam/utils/migrations.py +1 -1
- nautobot/ipam/views.py +234 -112
- nautobot/project-static/docs/404.html +11 -11
- nautobot/project-static/docs/apps/index.html +11 -11
- nautobot/project-static/docs/apps/nautobot-apps.html +11 -11
- nautobot/project-static/docs/assets/javascripts/{bundle.92b07e13.min.js → bundle.f55a23d4.min.js} +2 -2
- nautobot/project-static/docs/assets/javascripts/{bundle.92b07e13.min.js.map → bundle.f55a23d4.min.js.map} +2 -2
- nautobot/project-static/docs/assets/stylesheets/{main.7e37652d.min.css → main.e53b48f4.min.css} +1 -1
- nautobot/project-static/docs/assets/stylesheets/{main.7e37652d.min.css.map → main.e53b48f4.min.css.map} +1 -1
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/events.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +83 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +1265 -281
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +11 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +12 -12
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +452 -29
- nautobot/project-static/docs/development/apps/api/configuration-view.html +11 -11
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +11 -11
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +11 -11
- nautobot/project-static/docs/development/apps/api/models/global-search.html +11 -11
- nautobot/project-static/docs/development/apps/api/models/graphql.html +11 -11
- nautobot/project-static/docs/development/apps/api/models/index.html +11 -11
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +12 -12
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +11 -11
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +11 -11
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +11 -11
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +11 -11
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +11 -11
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +11 -11
- nautobot/project-static/docs/development/apps/api/platform-features/prepopulating-data.html +11 -11
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +11 -11
- nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +11 -11
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +11 -11
- nautobot/project-static/docs/development/apps/api/prometheus.html +11 -11
- nautobot/project-static/docs/development/apps/api/setup.html +11 -11
- nautobot/project-static/docs/development/apps/api/testing.html +11 -11
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +11 -11
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +11 -11
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +11 -11
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +11 -11
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +11 -11
- nautobot/project-static/docs/development/apps/api/views/base-template.html +11 -11
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +11 -11
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +11 -11
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +11 -11
- nautobot/project-static/docs/development/apps/api/views/index.html +11 -11
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +11 -11
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +11 -11
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +11 -11
- nautobot/project-static/docs/development/apps/api/views/notes.html +11 -11
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +11 -11
- nautobot/project-static/docs/development/apps/api/views/urls.html +11 -11
- nautobot/project-static/docs/development/apps/index.html +11 -11
- nautobot/project-static/docs/development/apps/migration/code-updates.html +11 -11
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +11 -11
- nautobot/project-static/docs/development/apps/migration/from-v1.html +11 -11
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +11 -11
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +11 -11
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +11 -11
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +11 -11
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +11 -11
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/breadcrumbs-titles.html +11 -11
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +11 -11
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +11 -11
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +11 -11
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +11 -11
- nautobot/project-static/docs/development/core/application-registry.html +11 -11
- nautobot/project-static/docs/development/core/best-practices.html +11 -11
- nautobot/project-static/docs/development/core/bootstrap-ui.html +11 -11
- nautobot/project-static/docs/development/core/caching.html +11 -11
- nautobot/project-static/docs/development/core/controllers.html +11 -11
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +11 -11
- nautobot/project-static/docs/development/core/generic-views.html +11 -11
- nautobot/project-static/docs/development/core/getting-started.html +50 -63
- nautobot/project-static/docs/development/core/homepage.html +11 -11
- nautobot/project-static/docs/development/core/index.html +11 -11
- nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +11 -11
- nautobot/project-static/docs/development/core/model-checklist.html +11 -11
- nautobot/project-static/docs/development/core/model-features.html +11 -11
- nautobot/project-static/docs/development/core/natural-keys.html +11 -11
- nautobot/project-static/docs/development/core/navigation-menu.html +11 -11
- nautobot/project-static/docs/development/core/release-checklist.html +11 -11
- nautobot/project-static/docs/development/core/role-internals.html +11 -11
- nautobot/project-static/docs/development/core/settings.html +11 -11
- nautobot/project-static/docs/development/core/style-guide.html +15 -11
- nautobot/project-static/docs/development/core/templates.html +11 -11
- nautobot/project-static/docs/development/core/testing.html +11 -11
- nautobot/project-static/docs/development/core/ui-component-framework.html +17 -22
- nautobot/project-static/docs/development/core/user-preferences.html +11 -11
- nautobot/project-static/docs/development/index.html +11 -11
- nautobot/project-static/docs/development/jobs/getting-started.html +11 -11
- nautobot/project-static/docs/development/jobs/index.html +11 -11
- nautobot/project-static/docs/development/jobs/installation.html +11 -11
- nautobot/project-static/docs/development/jobs/job-extensions.html +11 -11
- nautobot/project-static/docs/development/jobs/job-logging.html +11 -11
- nautobot/project-static/docs/development/jobs/job-patterns.html +11 -11
- nautobot/project-static/docs/development/jobs/job-structure.html +11 -11
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +11 -11
- nautobot/project-static/docs/development/jobs/testing.html +11 -11
- nautobot/project-static/docs/index.html +11 -11
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/overview/application_stack.html +11 -11
- nautobot/project-static/docs/overview/design_philosophy.html +11 -11
- nautobot/project-static/docs/release-notes/index.html +11 -11
- nautobot/project-static/docs/release-notes/version-1.0.html +11 -11
- nautobot/project-static/docs/release-notes/version-1.1.html +11 -11
- nautobot/project-static/docs/release-notes/version-1.2.html +11 -11
- nautobot/project-static/docs/release-notes/version-1.3.html +11 -11
- nautobot/project-static/docs/release-notes/version-1.4.html +11 -11
- nautobot/project-static/docs/release-notes/version-1.5.html +11 -11
- nautobot/project-static/docs/release-notes/version-1.6.html +11 -11
- nautobot/project-static/docs/release-notes/version-2.0.html +11 -11
- nautobot/project-static/docs/release-notes/version-2.1.html +11 -11
- nautobot/project-static/docs/release-notes/version-2.2.html +11 -11
- nautobot/project-static/docs/release-notes/version-2.3.html +11 -11
- nautobot/project-static/docs/release-notes/version-2.4.html +418 -11
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +300 -300
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +11 -11
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +11 -11
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +11 -11
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +11 -11
- nautobot/project-static/docs/user-guide/administration/configuration/redis.html +11 -11
- nautobot/project-static/docs/user-guide/administration/configuration/settings.html +38 -11
- nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +11 -11
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +89 -14
- nautobot/project-static/docs/user-guide/administration/guides/docker.html +11 -11
- nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +11 -11
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +11 -11
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +11 -11
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +11 -11
- nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +11 -11
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +11 -11
- nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +11 -11
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +11 -11
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +11 -11
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +11 -11
- nautobot/project-static/docs/user-guide/administration/installation/index.html +11 -11
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +11 -11
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +11 -11
- nautobot/project-static/docs/user-guide/administration/installation/services.html +11 -11
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +11 -11
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +11 -11
- nautobot/project-static/docs/user-guide/administration/security/index.html +11 -11
- nautobot/project-static/docs/user-guide/administration/security/notices.html +11 -11
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +11 -11
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +11 -11
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +11 -11
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +11 -11
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +11 -11
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +11 -11
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +11 -11
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +11 -11
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +11 -11
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +11 -11
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulefamily.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +11 -11
- nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +11 -11
- nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +11 -11
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +11 -11
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +11 -11
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +11 -11
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +11 -11
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +11 -11
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +11 -11
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +11 -11
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +11 -11
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +11 -11
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +11 -11
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +11 -11
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +11 -11
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +11 -11
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +11 -11
- nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +11 -11
- nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +11 -11
- nautobot/project-static/docs/user-guide/index.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/events.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/managing-jobs.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +11 -11
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +11 -11
- nautobot/project-static/img/nautobot_icon.svg +32 -34
- nautobot/project-static/js/table_sorting_indicator.js +0 -2
- nautobot/tenancy/templates/tenancy/tenant.html +1 -7
- nautobot/tenancy/views.py +13 -0
- nautobot/users/templates/users/api_tokens.html +4 -4
- nautobot/users/templates/users/base.html +28 -28
- nautobot/virtualization/templates/virtualization/cluster.html +64 -64
- nautobot/virtualization/templates/virtualization/inc/virtualmachine_vminterface_filter.html +8 -0
- nautobot/virtualization/templates/virtualization/virtualmachine_component_add.html +25 -25
- nautobot/virtualization/templates/virtualization/virtualmachine_retrieve.html +1 -251
- nautobot/virtualization/templates/virtualization/vminterface.html +70 -70
- nautobot/virtualization/urls.py +0 -12
- nautobot/virtualization/views.py +158 -54
- nautobot/wireless/templates/wireless/wirelessnetwork_create.html +13 -13
- nautobot/wireless/tests/integration/test_radio_profile.py +1 -1
- {nautobot-2.4.17.dist-info → nautobot-2.4.19.dist-info}/METADATA +4 -4
- {nautobot-2.4.17.dist-info → nautobot-2.4.19.dist-info}/RECORD +623 -607
- nautobot/core/templates/inc/breadcrumbs.html +0 -14
- nautobot/ipam/templates/ipam/prefix_ipaddresses.html +0 -11
- nautobot/ipam/templates/ipam/prefix_prefixes.html +0 -11
- nautobot/project-static/docs/requirements.txt +0 -14
- {nautobot-2.4.17.dist-info → nautobot-2.4.19.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.4.17.dist-info → nautobot-2.4.19.dist-info}/NOTICE +0 -0
- {nautobot-2.4.17.dist-info → nautobot-2.4.19.dist-info}/WHEEL +0 -0
- {nautobot-2.4.17.dist-info → nautobot-2.4.19.dist-info}/entry_points.txt +0 -0
|
@@ -7,10 +7,9 @@ from django.core.exceptions import (
|
|
|
7
7
|
)
|
|
8
8
|
from django.db.models import ManyToManyField, ProtectedError
|
|
9
9
|
|
|
10
|
-
from nautobot.core import exceptions
|
|
11
10
|
from nautobot.core.forms.utils import restrict_form_fields
|
|
12
|
-
from nautobot.core.utils.
|
|
13
|
-
from nautobot.core.utils
|
|
11
|
+
from nautobot.core.utils.lookup import get_form_for_model
|
|
12
|
+
from nautobot.core.views.utils import get_bulk_queryset_from_view
|
|
14
13
|
from nautobot.extras.context_managers import deferred_change_logging_for_bulk_operation
|
|
15
14
|
from nautobot.extras.jobs import (
|
|
16
15
|
BooleanVar,
|
|
@@ -19,6 +18,7 @@ from nautobot.extras.jobs import (
|
|
|
19
18
|
ObjectVar,
|
|
20
19
|
RunJobTaskFailed,
|
|
21
20
|
)
|
|
21
|
+
from nautobot.extras.models import SavedView
|
|
22
22
|
from nautobot.extras.utils import bulk_delete_with_bulk_change_logging, remove_prefix_from_cf_key
|
|
23
23
|
|
|
24
24
|
name = "System Jobs"
|
|
@@ -32,8 +32,10 @@ class BulkEditObjects(Job):
|
|
|
32
32
|
description="Type of objects to update",
|
|
33
33
|
)
|
|
34
34
|
form_data = JSONVar(description="BulkEditForm data")
|
|
35
|
+
pk_list = JSONVar(description="List of objects pks to edit", required=False)
|
|
35
36
|
edit_all = BooleanVar(description="Bulk Edit all object / all filtered objects", required=False)
|
|
36
37
|
filter_query_params = JSONVar(label="Filter Query Params", required=False)
|
|
38
|
+
saved_view = ObjectVar(model=SavedView, required=False)
|
|
37
39
|
|
|
38
40
|
class Meta:
|
|
39
41
|
name = "Bulk Edit Objects"
|
|
@@ -41,42 +43,14 @@ class BulkEditObjects(Job):
|
|
|
41
43
|
has_sensitive_variables = False
|
|
42
44
|
soft_time_limit = 1800
|
|
43
45
|
time_limit = 2000
|
|
46
|
+
hidden = True
|
|
47
|
+
|
|
48
|
+
def _update_objects(self, model, form, filter_query_params, pk_list, edit_all, nullified_fields, saved_view_id):
|
|
49
|
+
base_queryset = model.objects.restrict(self.user, "change")
|
|
50
|
+
queryset = get_bulk_queryset_from_view(user=self.user, action="change", log=self.logger, **self.key_params)
|
|
44
51
|
|
|
45
|
-
def _update_objects(self, model, form, filter_query_params, edit_all, nullified_fields):
|
|
46
52
|
with deferred_change_logging_for_bulk_operation():
|
|
47
|
-
base_queryset = model.objects.restrict(self.user, "change")
|
|
48
53
|
updated_objects_pk = []
|
|
49
|
-
filterset_cls = get_filterset_for_model(model)
|
|
50
|
-
|
|
51
|
-
if filter_query_params:
|
|
52
|
-
if not filterset_cls:
|
|
53
|
-
self.logger.error(f"Filterset not found for {model._meta.verbose_name}")
|
|
54
|
-
raise RunJobTaskFailed(
|
|
55
|
-
f"Filter query provided but {model._meta.verbose_name} does not have a filterset."
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
# Discarding non-filter query params
|
|
59
|
-
new_filter_query_params = {}
|
|
60
|
-
|
|
61
|
-
for key, value in filter_query_params.items():
|
|
62
|
-
try:
|
|
63
|
-
get_filterset_field(filterset_cls(), key)
|
|
64
|
-
new_filter_query_params[key] = value
|
|
65
|
-
except exceptions.FilterSetFieldNotFound:
|
|
66
|
-
self.logger.debug(
|
|
67
|
-
f"Query parameter `{key}` not found in filterset for `{filterset_cls}`, discarding it"
|
|
68
|
-
)
|
|
69
|
-
|
|
70
|
-
filter_query_params = new_filter_query_params
|
|
71
|
-
|
|
72
|
-
if edit_all:
|
|
73
|
-
if filter_query_params:
|
|
74
|
-
queryset = filterset_cls(filter_query_params).qs.restrict(self.user, "change")
|
|
75
|
-
else:
|
|
76
|
-
queryset = model.objects.restrict(self.user, "change")
|
|
77
|
-
else:
|
|
78
|
-
queryset = model.objects.restrict(self.user, "change").filter(pk__in=form.cleaned_data["pk"])
|
|
79
|
-
|
|
80
54
|
form_custom_fields = getattr(form, "custom_fields", [])
|
|
81
55
|
form_relationships = getattr(form, "relationships", [])
|
|
82
56
|
standard_fields = [
|
|
@@ -130,14 +104,18 @@ class BulkEditObjects(Job):
|
|
|
130
104
|
if hasattr(form, "save_note") and callable(form.save_note):
|
|
131
105
|
form.save_note(instance=obj, user=self.user)
|
|
132
106
|
total_updated_objs = len(updated_objects_pk)
|
|
133
|
-
# Enforce object-level permissions
|
|
107
|
+
# Enforce object-level permissions. This works because we used .restrict() above and if the user
|
|
108
|
+
# doesn't have permission to change one of the objects after the change, it won't be in base_queryset
|
|
109
|
+
# filtered to the pks of the objects we just changed.
|
|
134
110
|
if base_queryset.filter(pk__in=updated_objects_pk).count() != total_updated_objs:
|
|
135
111
|
raise ObjectDoesNotExist
|
|
136
112
|
return total_updated_objs
|
|
137
113
|
|
|
138
|
-
def _process_valid_form(self, model, form, filter_query_params, edit_all, nullified_fields):
|
|
114
|
+
def _process_valid_form(self, model, form, filter_query_params, pk_list, edit_all, nullified_fields, saved_view_id):
|
|
139
115
|
try:
|
|
140
|
-
total_updated_objs = self._update_objects(
|
|
116
|
+
total_updated_objs = self._update_objects(
|
|
117
|
+
model, form, filter_query_params, pk_list, edit_all, nullified_fields, saved_view_id
|
|
118
|
+
)
|
|
141
119
|
msg = f"Updated {total_updated_objs} {model._meta.verbose_name_plural}"
|
|
142
120
|
self.logger.info(msg)
|
|
143
121
|
return msg
|
|
@@ -149,12 +127,24 @@ class BulkEditObjects(Job):
|
|
|
149
127
|
raise RunJobTaskFailed("Bulk Edit not fully successful, see logs")
|
|
150
128
|
|
|
151
129
|
def run( # pylint: disable=arguments-differ
|
|
152
|
-
self, *, content_type, form_data, edit_all=False, filter_query_params=None
|
|
130
|
+
self, *, content_type, form_data, pk_list=None, edit_all=False, filter_query_params=None, saved_view=None
|
|
153
131
|
):
|
|
132
|
+
saved_view_id = saved_view.pk if saved_view is not None else None
|
|
133
|
+
if not filter_query_params:
|
|
134
|
+
filter_query_params = {}
|
|
135
|
+
|
|
154
136
|
if not self.user.has_perm(f"{content_type.app_label}.change_{content_type.model}"):
|
|
155
137
|
self.logger.error('User "%s" does not have permission to update %s objects', self.user, content_type.model)
|
|
156
138
|
raise PermissionDenied("User does not have change permissions on the requested content-type")
|
|
157
139
|
|
|
140
|
+
self.key_params = {
|
|
141
|
+
"content_type": content_type,
|
|
142
|
+
"edit_all": edit_all,
|
|
143
|
+
"filter_query_params": filter_query_params,
|
|
144
|
+
"pk_list": pk_list,
|
|
145
|
+
"saved_view_id": saved_view_id,
|
|
146
|
+
}
|
|
147
|
+
|
|
158
148
|
model = content_type.model_class()
|
|
159
149
|
if model is None:
|
|
160
150
|
self.logger.error(
|
|
@@ -178,7 +168,9 @@ class BulkEditObjects(Job):
|
|
|
178
168
|
if form.is_valid():
|
|
179
169
|
self.logger.debug("Form validation was successful")
|
|
180
170
|
nullified_fields = form_data.get("_nullify")
|
|
181
|
-
return self._process_valid_form(
|
|
171
|
+
return self._process_valid_form(
|
|
172
|
+
model, form, filter_query_params, pk_list, edit_all, nullified_fields, saved_view_id
|
|
173
|
+
)
|
|
182
174
|
else:
|
|
183
175
|
self.logger.error(f"Form validation unsuccessful: {form.errors.as_json()}")
|
|
184
176
|
|
|
@@ -197,6 +189,7 @@ class BulkDeleteObjects(Job):
|
|
|
197
189
|
pk_list = JSONVar(description="List of objects pks to delete", required=False)
|
|
198
190
|
delete_all = BooleanVar(description="Delete all (filtered) objects instead of a list of PKs", required=False)
|
|
199
191
|
filter_query_params = JSONVar(label="Filter Query Params", required=False)
|
|
192
|
+
saved_view = ObjectVar(model=SavedView, required=False)
|
|
200
193
|
|
|
201
194
|
class Meta:
|
|
202
195
|
name = "Bulk Delete Objects"
|
|
@@ -204,14 +197,26 @@ class BulkDeleteObjects(Job):
|
|
|
204
197
|
has_sensitive_variables = False
|
|
205
198
|
soft_time_limit = 1800
|
|
206
199
|
time_limit = 2000
|
|
200
|
+
hidden = True
|
|
207
201
|
|
|
208
202
|
def run( # pylint: disable=arguments-differ
|
|
209
|
-
self, *, content_type, pk_list=None, delete_all=False, filter_query_params=None
|
|
203
|
+
self, *, content_type, pk_list=None, delete_all=False, filter_query_params=None, saved_view=None
|
|
210
204
|
):
|
|
205
|
+
saved_view_id = saved_view.pk if saved_view is not None else None
|
|
206
|
+
if not filter_query_params:
|
|
207
|
+
filter_query_params = {}
|
|
211
208
|
if not self.user.has_perm(f"{content_type.app_label}.delete_{content_type.model}"):
|
|
212
209
|
self.logger.error('User "%s" does not have permission to delete %s objects', self.user, content_type.model)
|
|
213
210
|
raise PermissionDenied("User does not have delete permissions on the requested content-type")
|
|
214
211
|
|
|
212
|
+
key_params = {
|
|
213
|
+
"content_type": content_type,
|
|
214
|
+
"delete_all": delete_all,
|
|
215
|
+
"filter_query_params": filter_query_params,
|
|
216
|
+
"pk_list": pk_list,
|
|
217
|
+
"saved_view_id": saved_view_id,
|
|
218
|
+
}
|
|
219
|
+
|
|
215
220
|
model = content_type.model_class()
|
|
216
221
|
if model is None:
|
|
217
222
|
self.logger.error(
|
|
@@ -221,49 +226,7 @@ class BulkDeleteObjects(Job):
|
|
|
221
226
|
)
|
|
222
227
|
raise RunJobTaskFailed("Model not found")
|
|
223
228
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
if filter_query_params:
|
|
227
|
-
if not filterset_cls:
|
|
228
|
-
self.logger.error(f"Filterset not found for {model._meta.verbose_name}")
|
|
229
|
-
raise RunJobTaskFailed(
|
|
230
|
-
f"Filter query provided but {model._meta.verbose_name} does not have a filterset."
|
|
231
|
-
)
|
|
232
|
-
|
|
233
|
-
# Discarding non-filter query params
|
|
234
|
-
new_filter_query_params = {}
|
|
235
|
-
|
|
236
|
-
for key, value in filter_query_params.items():
|
|
237
|
-
try:
|
|
238
|
-
get_filterset_field(filterset_cls(), key)
|
|
239
|
-
new_filter_query_params[key] = value
|
|
240
|
-
except exceptions.FilterSetFieldNotFound:
|
|
241
|
-
self.logger.debug(f"Query parameter `{key}` not found in `{filterset_cls}`, discarding it")
|
|
242
|
-
|
|
243
|
-
filter_query_params = new_filter_query_params
|
|
244
|
-
|
|
245
|
-
if delete_all:
|
|
246
|
-
# Case for selecting all objects (or all filtered objects) to delete
|
|
247
|
-
if filter_query_params:
|
|
248
|
-
# If there is filter query params, we need to apply it to the queryset
|
|
249
|
-
queryset = filterset_cls(filter_query_params).qs.restrict(self.user, "delete")
|
|
250
|
-
# We take this approach because filterset.qs has already applied .distinct(),
|
|
251
|
-
# and performing a .delete directly on a queryset with .distinct applied is not allowed.
|
|
252
|
-
queryset = model.objects.filter(pk__in=queryset)
|
|
253
|
-
else:
|
|
254
|
-
# If there is not, we can just restrict the queryset to the user's permissions
|
|
255
|
-
queryset = model.objects.restrict(self.user, "delete")
|
|
256
|
-
elif pk_list:
|
|
257
|
-
# Case for selecting specific objects to delete, delete_all overrides this option
|
|
258
|
-
queryset = model.objects.restrict(self.user, "delete").filter(pk__in=pk_list)
|
|
259
|
-
if queryset.count() < len(pk_list):
|
|
260
|
-
# We do not check ObjectPermission error for `delete_all` case because user is trying to
|
|
261
|
-
# delete all objs they have permission to which would not raise any issue.
|
|
262
|
-
self.logger.error("You do not have permissions to delete some of the objects provided in `pk_list`.")
|
|
263
|
-
raise RunJobTaskFailed("Caught ObjectPermission error while attempting to delete objects")
|
|
264
|
-
elif not pk_list and not delete_all:
|
|
265
|
-
self.logger.error("You must select at least one object instance to delete.")
|
|
266
|
-
raise RunJobTaskFailed("Either `pk_list` or `delete_all` is required.")
|
|
229
|
+
queryset = get_bulk_queryset_from_view(user=self.user, action="delete", log=self.logger, **key_params)
|
|
267
230
|
|
|
268
231
|
verbose_name_plural = model._meta.verbose_name_plural
|
|
269
232
|
|
|
@@ -122,7 +122,8 @@ class RestrictedQuerySet(CompositeKeyQuerySetMixin, QuerySet):
|
|
|
122
122
|
|
|
123
123
|
# Bypass restriction for superusers and exempt views
|
|
124
124
|
if user.is_superuser or permissions.permission_is_exempt(permission_required):
|
|
125
|
-
|
|
125
|
+
# This is a cache buster to ensure that we always return a new QuerySet
|
|
126
|
+
qs = self.all()
|
|
126
127
|
|
|
127
128
|
# User is anonymous or has not been granted the requisite permission
|
|
128
129
|
elif not user.is_authenticated or permission_required not in user.get_all_permissions():
|
nautobot/core/settings.py
CHANGED
|
@@ -157,6 +157,7 @@ METRICS_AUTHENTICATED = is_truthy(os.getenv("NAUTOBOT_METRICS_AUTHENTICATED", "F
|
|
|
157
157
|
METRICS_DISABLED_APPS = []
|
|
158
158
|
if "NAUTOBOT_METRICS_DISABLED_APPS" in os.environ and os.environ["NAUTOBOT_METRICS_DISABLED_APPS"] != "":
|
|
159
159
|
METRICS_DISABLED_APPS = os.getenv("NAUTOBOT_METRICS_DISABLED_APPS", "").split(_CONFIG_SETTING_SEPARATOR)
|
|
160
|
+
METRICS_EXPERIMENTAL_CACHING_DURATION = int(os.getenv("NAUTOBOT_METRICS_EXPERIMENTAL_CACHING_DURATION", "0"))
|
|
160
161
|
|
|
161
162
|
# Napalm
|
|
162
163
|
NAPALM_ARGS = {}
|
nautobot/core/settings.yaml
CHANGED
|
@@ -1377,6 +1377,15 @@ properties:
|
|
|
1377
1377
|
see_also:
|
|
1378
1378
|
"Guide to Nautobot Prometheus metrics": "../guides/prometheus-metrics.md"
|
|
1379
1379
|
type: "boolean"
|
|
1380
|
+
METRICS_EXPERIMENTAL_CACHING_DURATION:
|
|
1381
|
+
default: 0
|
|
1382
|
+
description: >-
|
|
1383
|
+
The number of seconds to cache Nautobot App metrics before refreshing them.
|
|
1384
|
+
A value of `0` means no caching (i.e. always recompute metrics on each request). This feature is experimental
|
|
1385
|
+
and may change or be removed in a future release, including patch releases.
|
|
1386
|
+
environment_variable: "NAUTOBOT_METRICS_EXPERIMENTAL_CACHING_DURATION"
|
|
1387
|
+
type: "integer"
|
|
1388
|
+
version_added: "2.4.18"
|
|
1380
1389
|
NAPALM_ARGS:
|
|
1381
1390
|
additionalProperties: true
|
|
1382
1391
|
default: {}
|
nautobot/core/tables.py
CHANGED
|
@@ -17,7 +17,6 @@ import django_tables2
|
|
|
17
17
|
from django_tables2.data import TableData, TableQuerysetData
|
|
18
18
|
from django_tables2.rows import BoundRows
|
|
19
19
|
from django_tables2.utils import Accessor, OrderBy, OrderByTuple
|
|
20
|
-
from tree_queries.models import TreeNode
|
|
21
20
|
|
|
22
21
|
from nautobot.core.models.querysets import count_related
|
|
23
22
|
from nautobot.core.templatetags import helpers
|
|
@@ -107,6 +106,12 @@ class BaseTable(django_tables2.Table):
|
|
|
107
106
|
if order_by is None and saved_view is not None:
|
|
108
107
|
order_by = saved_view.config.get("sort_order", None)
|
|
109
108
|
|
|
109
|
+
# Don't show hierarchy if we're sorted
|
|
110
|
+
if order_by is not None and hide_hierarchy_ui is None:
|
|
111
|
+
hide_hierarchy_ui = True
|
|
112
|
+
|
|
113
|
+
self.hide_hierarchy_ui = hide_hierarchy_ui
|
|
114
|
+
|
|
110
115
|
# Init table
|
|
111
116
|
super().__init__(*args, order_by=order_by, **kwargs)
|
|
112
117
|
|
|
@@ -118,12 +123,6 @@ class BaseTable(django_tables2.Table):
|
|
|
118
123
|
*[column.name for column in self.columns if isinstance(column.column, LinkedCountColumn)],
|
|
119
124
|
]
|
|
120
125
|
|
|
121
|
-
# Don't show hierarchy if we're sorted
|
|
122
|
-
if order_by is not None and hide_hierarchy_ui is None:
|
|
123
|
-
hide_hierarchy_ui = True
|
|
124
|
-
|
|
125
|
-
self.hide_hierarchy_ui = hide_hierarchy_ui
|
|
126
|
-
|
|
127
126
|
# Set default empty_text if none was provided
|
|
128
127
|
if self.empty_text is None:
|
|
129
128
|
self.empty_text = f"No {self._meta.model._meta.verbose_name_plural} found"
|
|
@@ -304,6 +303,10 @@ class BaseTable(django_tables2.Table):
|
|
|
304
303
|
Arguments:
|
|
305
304
|
value: iterable or comma separated string of order by aliases.
|
|
306
305
|
"""
|
|
306
|
+
# The below block of code is copied from Table.order_by()
|
|
307
|
+
# due to limitations in directly calling parent class methods within a property setter.
|
|
308
|
+
# See Python bug report: https://bugs.python.org/issue14965
|
|
309
|
+
|
|
307
310
|
# collapse empty values to ()
|
|
308
311
|
order_by = () if not value else value
|
|
309
312
|
# accept string
|
|
@@ -316,22 +319,17 @@ class BaseTable(django_tables2.Table):
|
|
|
316
319
|
valid.append(alias)
|
|
317
320
|
self._order_by = OrderByTuple(valid)
|
|
318
321
|
|
|
319
|
-
#
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
queryset = model.objects.filter(pk__in=[instance.pk for instance in self.data.data])
|
|
331
|
-
self.data.data = queryset.extra(order_by=self._order_by)
|
|
332
|
-
else:
|
|
333
|
-
# Otherwise, use the default sorting method
|
|
334
|
-
self.data.order_by(self._order_by)
|
|
322
|
+
# Nautobot-specific logic begins here
|
|
323
|
+
if self._order_by:
|
|
324
|
+
self.hide_hierarchy_ui = True
|
|
325
|
+
if isinstance(self.data.data, QuerySet) and hasattr(self.data.data, "without_tree_fields"):
|
|
326
|
+
self.data.data = self.data.data.without_tree_fields()
|
|
327
|
+
elif not self.hide_hierarchy_ui:
|
|
328
|
+
if isinstance(self.data.data, QuerySet) and hasattr(self.data.data, "with_tree_fields"):
|
|
329
|
+
self.data.data = self.data.data.with_tree_fields()
|
|
330
|
+
|
|
331
|
+
# Resume base class implementation
|
|
332
|
+
self.data.order_by(self._order_by)
|
|
335
333
|
|
|
336
334
|
def add_conditional_prefetch(self, table_field, db_column=None, prefetch=None):
|
|
337
335
|
"""Conditionally prefetch the specified database column if the related table field is visible.
|
nautobot/core/templates/40x.html
CHANGED
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
{% load helpers %}
|
|
3
3
|
|
|
4
4
|
{% block content %}
|
|
5
|
-
<div class="row" style="margin-top: 150px;">
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
5
|
+
<div class="row" style="margin-top: 150px;">
|
|
6
|
+
<div class="col-sm-4 col-sm-offset-4">
|
|
7
|
+
<div class="panel panel-default">
|
|
8
|
+
<div class="panel-heading">
|
|
9
|
+
<strong>{% block icon %}{% endblock %} {% block title %}{% endblock %}</strong>
|
|
10
|
+
</div>
|
|
11
|
+
<div class="panel-body">
|
|
12
|
+
<p>
|
|
13
|
+
{% block message %}{% endblock %}
|
|
14
|
+
</p>
|
|
15
|
+
{% support_message %}
|
|
16
|
+
</div>
|
|
17
|
+
<div class="panel-footer text-right">
|
|
18
|
+
<a href="{% url 'home' %}" class="btn btn-xs btn-primary">Home Page</a>
|
|
19
|
+
</div>
|
|
19
20
|
</div>
|
|
20
21
|
</div>
|
|
21
22
|
</div>
|
|
22
|
-
</div>
|
|
23
23
|
{% endblock %}
|
nautobot/core/templates/500.html
CHANGED
|
@@ -4,34 +4,34 @@
|
|
|
4
4
|
{% block title %}Server Error{% endblock %}
|
|
5
5
|
|
|
6
6
|
{% block content %}
|
|
7
|
-
<div class="row" style="margin-top: 150px;">
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
7
|
+
<div class="row" style="margin-top: 150px;">
|
|
8
|
+
<div class="col-sm-4 col-sm-offset-4">
|
|
9
|
+
<div class="panel panel-default">
|
|
10
|
+
<div class="panel-heading">
|
|
11
|
+
<strong><i class="mdi mdi-alert"></i>Server Error</strong>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="panel-body">
|
|
14
|
+
{% block message %}
|
|
15
|
+
<p>
|
|
16
|
+
There was a problem with your request. Please contact an administrator.
|
|
17
|
+
</p>
|
|
18
|
+
{% endblock %}
|
|
19
|
+
<hr />
|
|
20
|
+
<p>
|
|
21
|
+
The complete exception is provided below:
|
|
22
|
+
</p>
|
|
23
23
|
<pre><strong>{{ exception }}</strong><br />
|
|
24
24
|
{{ error }}
|
|
25
25
|
|
|
26
26
|
Python version: {{ python_version }}
|
|
27
27
|
Nautobot version: {{ nautobot_version }}
|
|
28
28
|
</pre>
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
{% support_message %}
|
|
30
|
+
</div>
|
|
31
|
+
<div class="panel-footer text-right">
|
|
32
|
+
<a href="{% url 'home' %}" class="btn btn-xs btn-primary">Home Page</a>
|
|
33
|
+
</div>
|
|
33
34
|
</div>
|
|
34
35
|
</div>
|
|
35
36
|
</div>
|
|
36
|
-
</div>
|
|
37
37
|
{% endblock %}
|
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
{% block bodyclass %}{{ block.super }} app-{{ app_label }}{% endblock %}
|
|
5
5
|
|
|
6
6
|
{% if not is_popup %}
|
|
7
|
-
{% block breadcrumbs %}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
{% block breadcrumbs %}
|
|
8
|
+
<ol class="breadcrumb">
|
|
9
|
+
<li><a href="{% url 'admin:index' %}">{% trans 'Admin Home' %}</a></li>
|
|
10
|
+
{% for app in app_list %}
|
|
11
|
+
<li>{{ app.name }}</li>
|
|
12
|
+
{% endfor %}
|
|
13
|
+
</ol>
|
|
14
|
+
{% endblock %}
|
|
15
15
|
{% endif %}
|
|
16
16
|
|
|
17
17
|
{% block sidebar %}{% endblock %}
|