nautobot 2.4.8__py3-none-any.whl → 2.4.9__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/circuits/templates/circuits/circuittype.html +1 -1
- nautobot/circuits/templates/circuits/circuittype_retrieve.html +1 -39
- nautobot/circuits/views.py +18 -23
- nautobot/cloud/templates/cloud/cloudresourcetype_retrieve.html +4 -111
- nautobot/cloud/views.py +56 -25
- nautobot/core/celery/schedulers.py +1 -0
- nautobot/core/filters.py +1 -1
- nautobot/core/graphql/schema.py +1 -0
- nautobot/core/jobs/__init__.py +14 -3
- nautobot/core/tables.py +13 -6
- nautobot/core/testing/views.py +27 -2
- nautobot/core/tests/test_jobs.py +113 -0
- nautobot/core/tests/test_ui.py +53 -1
- nautobot/core/tests/test_utils.py +11 -0
- nautobot/core/ui/object_detail.py +19 -12
- nautobot/core/utils/filtering.py +3 -0
- nautobot/core/views/renderers.py +1 -1
- nautobot/dcim/forms.py +10 -0
- nautobot/dcim/templates/dcim/devicefamily_retrieve.html +1 -43
- nautobot/dcim/templates/dcim/deviceredundancygroup_retrieve.html +1 -59
- nautobot/dcim/templates/dcim/devicetype.html +2 -217
- nautobot/dcim/templates/dcim/devicetype_edit.html +2 -32
- nautobot/dcim/templates/dcim/devicetype_retrieve.html +217 -0
- nautobot/dcim/templates/dcim/devicetype_update.html +32 -0
- nautobot/dcim/templates/dcim/inc/rack_elevation.html +1 -1
- nautobot/dcim/templates/dcim/modulebay_retrieve.html +1 -84
- nautobot/dcim/templates/dcim/rack_elevation.html +14 -0
- nautobot/dcim/templates/dcim/rackreservation_retrieve.html +0 -68
- nautobot/dcim/tests/integration/test_fileinputpicker.py +1 -1
- nautobot/dcim/urls.py +1 -36
- nautobot/dcim/views.py +133 -81
- nautobot/extras/api/views.py +4 -6
- nautobot/extras/migrations/0024_job_data_migration.py +1 -1
- nautobot/extras/models/jobs.py +78 -62
- nautobot/extras/tables.py +11 -1
- nautobot/extras/templates/extras/computedfield_retrieve.html +1 -55
- nautobot/extras/templates/extras/inc/job_tiles.html +1 -1
- nautobot/extras/templates/extras/jobresult.html +1 -1
- nautobot/extras/templates/extras/metadatatype_retrieve.html +1 -66
- nautobot/extras/templates/extras/scheduledjob.html +25 -9
- nautobot/extras/tests/test_api.py +1 -1
- nautobot/extras/tests/test_views.py +15 -2
- nautobot/extras/utils.py +18 -16
- nautobot/extras/views.py +65 -26
- nautobot/ipam/tables.py +3 -4
- nautobot/project-static/docs/404.html +4 -4
- nautobot/project-static/docs/apps/index.html +4 -4
- nautobot/project-static/docs/apps/nautobot-apps.html +4 -4
- nautobot/project-static/docs/assets/javascripts/{bundle.c8b220af.min.js → bundle.13a4f30d.min.js} +4 -4
- nautobot/project-static/docs/assets/javascripts/{bundle.c8b220af.min.js.map → bundle.13a4f30d.min.js.map} +2 -2
- nautobot/project-static/docs/assets/javascripts/workers/{search.f8cc74c7.min.js → search.d50fe291.min.js} +2 -2
- nautobot/project-static/docs/assets/javascripts/workers/{search.f8cc74c7.min.js.map → search.d50fe291.min.js.map} +1 -1
- nautobot/project-static/docs/assets/stylesheets/{main.2afb09e1.min.css → main.342714a4.min.css} +1 -1
- nautobot/project-static/docs/assets/stylesheets/{main.2afb09e1.min.css.map → main.342714a4.min.css.map} +1 -1
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/events.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +6 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +4 -4
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +36 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +4 -4
- nautobot/project-static/docs/development/apps/api/configuration-view.html +4 -4
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +4 -4
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +4 -4
- nautobot/project-static/docs/development/apps/api/models/global-search.html +4 -4
- nautobot/project-static/docs/development/apps/api/models/graphql.html +4 -4
- nautobot/project-static/docs/development/apps/api/models/index.html +4 -4
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +4 -4
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +4 -4
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +4 -4
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +4 -4
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +4 -4
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +4 -4
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +4 -4
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +4 -4
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +4 -4
- nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +4 -4
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +4 -4
- nautobot/project-static/docs/development/apps/api/prometheus.html +4 -4
- nautobot/project-static/docs/development/apps/api/setup.html +4 -4
- nautobot/project-static/docs/development/apps/api/testing.html +4 -4
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +4 -4
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +4 -4
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +4 -4
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +4 -4
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +4 -4
- nautobot/project-static/docs/development/apps/api/views/base-template.html +4 -4
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +4 -4
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +4 -4
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +4 -4
- nautobot/project-static/docs/development/apps/api/views/index.html +4 -4
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +4 -4
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +4 -4
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +4 -4
- nautobot/project-static/docs/development/apps/api/views/notes.html +4 -4
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +4 -4
- nautobot/project-static/docs/development/apps/api/views/urls.html +4 -4
- nautobot/project-static/docs/development/apps/index.html +4 -4
- nautobot/project-static/docs/development/apps/migration/code-updates.html +4 -4
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +4 -4
- nautobot/project-static/docs/development/apps/migration/from-v1.html +4 -4
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +4 -4
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +4 -4
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +4 -4
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +4 -4
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +4 -4
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +4 -4
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +4 -4
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +4 -4
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +4 -4
- nautobot/project-static/docs/development/core/application-registry.html +4 -4
- nautobot/project-static/docs/development/core/best-practices.html +4 -4
- nautobot/project-static/docs/development/core/bootstrap-ui.html +4 -4
- nautobot/project-static/docs/development/core/caching.html +4 -4
- nautobot/project-static/docs/development/core/controllers.html +4 -4
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +41 -55
- nautobot/project-static/docs/development/core/generic-views.html +4 -4
- nautobot/project-static/docs/development/core/getting-started.html +4 -4
- nautobot/project-static/docs/development/core/homepage.html +4 -4
- nautobot/project-static/docs/development/core/index.html +4 -4
- nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +4 -4
- nautobot/project-static/docs/development/core/model-checklist.html +4 -4
- nautobot/project-static/docs/development/core/model-features.html +4 -4
- nautobot/project-static/docs/development/core/natural-keys.html +4 -4
- nautobot/project-static/docs/development/core/navigation-menu.html +4 -4
- nautobot/project-static/docs/development/core/release-checklist.html +4 -4
- nautobot/project-static/docs/development/core/role-internals.html +4 -4
- nautobot/project-static/docs/development/core/settings.html +4 -4
- nautobot/project-static/docs/development/core/style-guide.html +4 -4
- nautobot/project-static/docs/development/core/templates.html +4 -4
- nautobot/project-static/docs/development/core/testing.html +4 -4
- nautobot/project-static/docs/development/core/ui-component-framework.html +4 -4
- nautobot/project-static/docs/development/core/user-preferences.html +4 -4
- nautobot/project-static/docs/development/index.html +4 -4
- nautobot/project-static/docs/development/jobs/getting-started.html +4 -4
- nautobot/project-static/docs/development/jobs/index.html +4 -4
- nautobot/project-static/docs/development/jobs/installation.html +4 -4
- nautobot/project-static/docs/development/jobs/job-extensions.html +4 -4
- nautobot/project-static/docs/development/jobs/job-logging.html +4 -4
- nautobot/project-static/docs/development/jobs/job-patterns.html +4 -4
- nautobot/project-static/docs/development/jobs/job-structure.html +4 -4
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +4 -4
- nautobot/project-static/docs/development/jobs/testing.html +4 -4
- nautobot/project-static/docs/index.html +4 -4
- nautobot/project-static/docs/overview/application_stack.html +4 -4
- nautobot/project-static/docs/overview/design_philosophy.html +4 -4
- nautobot/project-static/docs/release-notes/index.html +4 -4
- nautobot/project-static/docs/release-notes/version-1.0.html +4 -4
- nautobot/project-static/docs/release-notes/version-1.1.html +4 -4
- nautobot/project-static/docs/release-notes/version-1.2.html +4 -4
- nautobot/project-static/docs/release-notes/version-1.3.html +4 -4
- nautobot/project-static/docs/release-notes/version-1.4.html +4 -4
- nautobot/project-static/docs/release-notes/version-1.5.html +4 -4
- nautobot/project-static/docs/release-notes/version-1.6.html +4 -4
- nautobot/project-static/docs/release-notes/version-2.0.html +4 -4
- nautobot/project-static/docs/release-notes/version-2.1.html +4 -4
- nautobot/project-static/docs/release-notes/version-2.2.html +4 -4
- nautobot/project-static/docs/release-notes/version-2.3.html +4 -4
- nautobot/project-static/docs/release-notes/version-2.4.html +190 -4
- nautobot/project-static/docs/requirements.txt +1 -1
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +298 -298
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +4 -4
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +4 -4
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +4 -4
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +4 -4
- nautobot/project-static/docs/user-guide/administration/configuration/redis.html +4 -4
- nautobot/project-static/docs/user-guide/administration/configuration/settings.html +4 -4
- nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +4 -4
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +4 -4
- nautobot/project-static/docs/user-guide/administration/guides/docker.html +4 -4
- nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +4 -4
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +4 -4
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +4 -4
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +4 -4
- nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +4 -4
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +4 -4
- nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +4 -4
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +4 -4
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +4 -4
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +4 -4
- nautobot/project-static/docs/user-guide/administration/installation/index.html +4 -4
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +4 -4
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +4 -4
- nautobot/project-static/docs/user-guide/administration/installation/services.html +4 -4
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +4 -4
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +4 -4
- nautobot/project-static/docs/user-guide/administration/security/index.html +4 -4
- nautobot/project-static/docs/user-guide/administration/security/notices.html +4 -4
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +4 -4
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +4 -4
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +4 -4
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +4 -4
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +4 -4
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +4 -4
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +4 -4
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +4 -4
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +4 -4
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +4 -4
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +4 -4
- nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +4 -4
- nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +4 -4
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +4 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +4 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +4 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +4 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +4 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +4 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +4 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +4 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +4 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +4 -4
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +4 -4
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +4 -4
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +4 -4
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +4 -4
- nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +4 -4
- nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +4 -4
- nautobot/project-static/docs/user-guide/index.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/events.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/managing-jobs.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +4 -4
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +4 -4
- nautobot/project-static/js/forms.js +0 -14
- nautobot/wireless/tables.py +1 -0
- nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +1 -55
- nautobot/wireless/views.py +33 -28
- {nautobot-2.4.8.dist-info → nautobot-2.4.9.dist-info}/METADATA +3 -3
- {nautobot-2.4.8.dist-info → nautobot-2.4.9.dist-info}/RECORD +364 -361
- {nautobot-2.4.8.dist-info → nautobot-2.4.9.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.4.8.dist-info → nautobot-2.4.9.dist-info}/NOTICE +0 -0
- {nautobot-2.4.8.dist-info → nautobot-2.4.9.dist-info}/WHEEL +0 -0
- {nautobot-2.4.8.dist-info → nautobot-2.4.9.dist-info}/entry_points.txt +0 -0
nautobot/core/tests/test_ui.py
CHANGED
|
@@ -3,10 +3,13 @@
|
|
|
3
3
|
from unittest.mock import patch
|
|
4
4
|
|
|
5
5
|
from django.template import Context
|
|
6
|
+
from django.test import RequestFactory
|
|
6
7
|
|
|
7
8
|
from nautobot.core.templatetags.helpers import HTML_NONE
|
|
8
9
|
from nautobot.core.testing import TestCase
|
|
9
|
-
from nautobot.core.ui.object_detail import BaseTextPanel, DataTablePanel, Panel
|
|
10
|
+
from nautobot.core.ui.object_detail import BaseTextPanel, DataTablePanel, ObjectsTablePanel, Panel
|
|
11
|
+
from nautobot.dcim.models import DeviceRedundancyGroup
|
|
12
|
+
from nautobot.dcim.tables.devices import DeviceTable
|
|
10
13
|
|
|
11
14
|
|
|
12
15
|
class DataTablePanelTest(TestCase):
|
|
@@ -148,3 +151,52 @@ class BaseTextPanelTest(TestCase):
|
|
|
148
151
|
panel = BaseTextPanel(weight=100)
|
|
149
152
|
with self.assertRaises(NotImplementedError):
|
|
150
153
|
panel.get_value({})
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
class ObjectsTablePanelTest(TestCase):
|
|
157
|
+
def setUp(self):
|
|
158
|
+
super().setUp()
|
|
159
|
+
self.factory = RequestFactory()
|
|
160
|
+
self.request = self.factory.get("/")
|
|
161
|
+
self.request.user = self.user
|
|
162
|
+
|
|
163
|
+
def test_include_exclude_columns(self):
|
|
164
|
+
panel = ObjectsTablePanel(
|
|
165
|
+
weight=100,
|
|
166
|
+
table_class=DeviceTable,
|
|
167
|
+
table_attribute="devices_sorted",
|
|
168
|
+
related_field_name="device_redundancy_group",
|
|
169
|
+
include_columns=[
|
|
170
|
+
"device_redundancy_group_priority",
|
|
171
|
+
],
|
|
172
|
+
exclude_columns=[
|
|
173
|
+
"rack",
|
|
174
|
+
],
|
|
175
|
+
)
|
|
176
|
+
redundancy_group = DeviceRedundancyGroup.objects.first()
|
|
177
|
+
context = {
|
|
178
|
+
"request": self.request,
|
|
179
|
+
"object": redundancy_group,
|
|
180
|
+
}
|
|
181
|
+
result = panel.get_extra_context(context)
|
|
182
|
+
columns = result["body_content_table"].columns
|
|
183
|
+
self.assertIn("device_redundancy_group_priority", [col.name for col in columns])
|
|
184
|
+
self.assertNotIn("rack", [col.name for col in columns])
|
|
185
|
+
|
|
186
|
+
def test_invalid_include_columns(self):
|
|
187
|
+
with self.assertRaises(ValueError) as context:
|
|
188
|
+
panel = ObjectsTablePanel(
|
|
189
|
+
weight=100,
|
|
190
|
+
table_class=DeviceTable,
|
|
191
|
+
table_attribute="devices_sorted",
|
|
192
|
+
related_field_name="device_redundancy_group",
|
|
193
|
+
include_columns=["non_existent_column"],
|
|
194
|
+
)
|
|
195
|
+
redundancy_group = DeviceRedundancyGroup.objects.first()
|
|
196
|
+
context_data = {
|
|
197
|
+
"request": self.request,
|
|
198
|
+
"object": redundancy_group,
|
|
199
|
+
}
|
|
200
|
+
panel.get_extra_context(context_data)
|
|
201
|
+
|
|
202
|
+
self.assertIn("non-existent column `non_existent_column`", str(context.exception))
|
|
@@ -714,6 +714,17 @@ class LookupRelatedFunctionTest(TestCase):
|
|
|
714
714
|
form_field.queryset, extras_utils.ChangeLoggedModelsQuery().as_queryset()
|
|
715
715
|
)
|
|
716
716
|
|
|
717
|
+
form_field = filtering.get_filterset_parameter_form_field(
|
|
718
|
+
extras_models.ObjectMetadata, "assigned_object_type"
|
|
719
|
+
)
|
|
720
|
+
self.assertIsInstance(form_field, forms.MultipleContentTypeField)
|
|
721
|
+
self.assertQuerysetEqualAndNotEmpty(
|
|
722
|
+
form_field.queryset,
|
|
723
|
+
ContentType.objects.filter(extras_utils.FeatureQuery("metadata").get_query()).order_by(
|
|
724
|
+
"app_label", "model"
|
|
725
|
+
),
|
|
726
|
+
)
|
|
727
|
+
|
|
717
728
|
with self.subTest("Test prefers_id"):
|
|
718
729
|
form_field = filtering.get_filterset_parameter_form_field(dcim_models.Device, "location")
|
|
719
730
|
self.assertEqual("id", form_field.to_field_name)
|
|
@@ -728,9 +728,7 @@ class ObjectsTablePanel(Panel):
|
|
|
728
728
|
table_title (str, optional): The title to display in the panel heading for the table.
|
|
729
729
|
If None, defaults to the plural verbose name of the table model.
|
|
730
730
|
include_columns (list, optional): A list of field names to include in the table display.
|
|
731
|
-
If provided, only these fields will be displayed in the table.
|
|
732
731
|
exclude_columns (list, optional): A list of field names to exclude from the table display.
|
|
733
|
-
Mutually exclusive with `include_columns`.
|
|
734
732
|
add_button_route (str, optional): The route used to generate the "add" button URL. Defaults to "default",
|
|
735
733
|
which uses the default table's model `add` route.
|
|
736
734
|
add_permissions (list, optional): A list of permissions required for the "add" button to be displayed.
|
|
@@ -777,8 +775,6 @@ class ObjectsTablePanel(Panel):
|
|
|
777
775
|
self.order_by_fields = order_by_fields
|
|
778
776
|
self.table_title = table_title
|
|
779
777
|
self.max_display_count = max_display_count
|
|
780
|
-
if exclude_columns and include_columns:
|
|
781
|
-
raise ValueError("You can only specify either `exclude_columns` or `include_columns`")
|
|
782
778
|
self.include_columns = include_columns
|
|
783
779
|
self.exclude_columns = exclude_columns
|
|
784
780
|
self.add_button_route = add_button_route
|
|
@@ -878,14 +874,17 @@ class ObjectsTablePanel(Panel):
|
|
|
878
874
|
# to redirect the user back to the correct tab after editing/deleteing an object
|
|
879
875
|
body_content_table.columns["actions"].column.extra_context["return_url_extra"] = f"?tab={self.tab_id}"
|
|
880
876
|
|
|
881
|
-
if self.exclude_columns
|
|
877
|
+
if self.exclude_columns:
|
|
882
878
|
for column in body_content_table.columns:
|
|
883
|
-
if
|
|
884
|
-
self.include_columns and column.name not in self.include_columns
|
|
885
|
-
):
|
|
879
|
+
if column.name in self.exclude_columns:
|
|
886
880
|
body_content_table.columns.hide(column.name)
|
|
887
|
-
|
|
888
|
-
|
|
881
|
+
|
|
882
|
+
if self.include_columns:
|
|
883
|
+
for column in self.include_columns:
|
|
884
|
+
if column not in body_content_table.base_columns:
|
|
885
|
+
raise ValueError(f"You are specifying a non-existent column `{column}`")
|
|
886
|
+
body_content_table.columns.show(column)
|
|
887
|
+
|
|
889
888
|
# Enable bulk action toggle if the user has appropriate permissions
|
|
890
889
|
user = request.user
|
|
891
890
|
if self.enable_bulk_actions and (
|
|
@@ -906,10 +905,18 @@ class ObjectsTablePanel(Panel):
|
|
|
906
905
|
body_content_table_model = body_content_table.Meta.model
|
|
907
906
|
related_field_name = self.related_field_name or self.table_filter or obj._meta.model_name
|
|
908
907
|
|
|
908
|
+
list_url = getattr(self.table_class, "list_url", None)
|
|
909
|
+
if not list_url:
|
|
910
|
+
list_url = get_route_for_model(body_content_table_model, "list")
|
|
911
|
+
|
|
909
912
|
try:
|
|
910
|
-
list_route = reverse(
|
|
911
|
-
body_content_table_list_url = f"{list_route}?{related_field_name}={obj.pk}"
|
|
913
|
+
list_route = reverse(list_url)
|
|
912
914
|
except NoReverseMatch:
|
|
915
|
+
list_route = None
|
|
916
|
+
|
|
917
|
+
if list_route:
|
|
918
|
+
body_content_table_list_url = f"{list_route}?{related_field_name}={obj.pk}"
|
|
919
|
+
else:
|
|
913
920
|
body_content_table_list_url = None
|
|
914
921
|
|
|
915
922
|
body_content_table_add_url = self._get_table_add_url(context)
|
nautobot/core/utils/filtering.py
CHANGED
|
@@ -135,11 +135,14 @@ def get_filterset_parameter_form_field(model, parameter, filterset=None):
|
|
|
135
135
|
from nautobot.core.models.fields import slugify_dashes_to_underscores # Avoid circular import
|
|
136
136
|
|
|
137
137
|
plural_name = slugify_dashes_to_underscores(model._meta.verbose_name_plural)
|
|
138
|
+
|
|
138
139
|
# Cable-connectable models use "cable_terminations", not "cables", as the feature name
|
|
139
140
|
if plural_name == "cables":
|
|
140
141
|
plural_name = "cable_terminations"
|
|
141
142
|
elif plural_name == "metadata_types":
|
|
142
143
|
plural_name = "metadata"
|
|
144
|
+
elif plural_name == "object_metadata":
|
|
145
|
+
plural_name = "metadata"
|
|
143
146
|
try:
|
|
144
147
|
form_field = MultipleContentTypeField(choices_as_strings=True, feature=plural_name)
|
|
145
148
|
except KeyError:
|
nautobot/core/views/renderers.py
CHANGED
|
@@ -301,7 +301,7 @@ class NautobotHTMLRenderer(renderers.BrowsableAPIRenderer):
|
|
|
301
301
|
# If the view does not have a object_detail_content attribute, set it to None.
|
|
302
302
|
context["object_detail_content"] = None
|
|
303
303
|
context.update(common_detail_view_context(request, instance))
|
|
304
|
-
|
|
304
|
+
if view.action == "list":
|
|
305
305
|
# Construct valid actions for list view.
|
|
306
306
|
valid_actions = self.validate_action_buttons(view, request)
|
|
307
307
|
# Query SavedViews for dropdown button
|
nautobot/dcim/forms.py
CHANGED
|
@@ -727,6 +727,16 @@ class RackReservationForm(NautobotModelForm, TenancyForm):
|
|
|
727
727
|
"tags",
|
|
728
728
|
]
|
|
729
729
|
|
|
730
|
+
def __init__(self, *args, **kwargs):
|
|
731
|
+
super().__init__(*args, **kwargs)
|
|
732
|
+
|
|
733
|
+
rack = getattr(self.instance, "rack", None)
|
|
734
|
+
if rack:
|
|
735
|
+
if not self.initial.get("location"):
|
|
736
|
+
self.initial["location"] = rack.location
|
|
737
|
+
if not self.initial.get("rack_group"):
|
|
738
|
+
self.initial["rack_group"] = rack.rack_group
|
|
739
|
+
|
|
730
740
|
|
|
731
741
|
class RackReservationBulkEditForm(TagsBulkEditFormMixin, NautobotBulkEditForm):
|
|
732
742
|
pk = forms.ModelMultipleChoiceField(queryset=RackReservation.objects.all(), widget=forms.MultipleHiddenInput())
|
|
@@ -1,44 +1,2 @@
|
|
|
1
1
|
{% extends 'generic/object_retrieve.html' %}
|
|
2
|
-
|
|
3
|
-
{% block content_left_page %}
|
|
4
|
-
<div class="panel panel-default">
|
|
5
|
-
<div class="panel-heading">
|
|
6
|
-
<strong>Device Family</strong>
|
|
7
|
-
</div>
|
|
8
|
-
<table class="table table-hover panel-body attr-table">
|
|
9
|
-
<tr>
|
|
10
|
-
<td>Name</td>
|
|
11
|
-
<td>{{ object.name }}</a></td>
|
|
12
|
-
</tr>
|
|
13
|
-
<tr>
|
|
14
|
-
<td>Description</td>
|
|
15
|
-
<td>{{ object.description }}</a></td>
|
|
16
|
-
</tr>
|
|
17
|
-
<tr>
|
|
18
|
-
<td>Device Types</td>
|
|
19
|
-
<td><a href="{% url 'dcim:devicetype_list' %}?device_family={{ object.name }}">{{ device_type_count }}</a></td>
|
|
20
|
-
</tr>
|
|
21
|
-
<tr>
|
|
22
|
-
<td>Total Devices</td>
|
|
23
|
-
<td><a href="{% url 'dcim:device_list' %}?device_family={{ object.name }}">{{ total_devices }}</a></td>
|
|
24
|
-
</tr>
|
|
25
|
-
</table>
|
|
26
|
-
</div>
|
|
27
|
-
{% endblock %}
|
|
28
|
-
|
|
29
|
-
{% block content_full_width_page %}
|
|
30
|
-
<div class="panel panel-default">
|
|
31
|
-
<div class="panel-heading">
|
|
32
|
-
<strong>Device Types</strong>
|
|
33
|
-
</div>
|
|
34
|
-
{% include 'panel_table.html' with table=device_type_table %}
|
|
35
|
-
{% if perms.dcim.add_devicetype %}
|
|
36
|
-
<div class="panel-footer text-right noprint">
|
|
37
|
-
<a href="{% url 'dcim:devicetype_add' %}?device_family={{ object.pk }}" class="btn btn-xs btn-primary">
|
|
38
|
-
<span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add Device Type
|
|
39
|
-
</a>
|
|
40
|
-
</div>
|
|
41
|
-
{% endif %}
|
|
42
|
-
</div>
|
|
43
|
-
{% include 'inc/paginator.html' with paginator=device_type_table.paginator page=device_type_table.page %}
|
|
44
|
-
{% endblock content_full_width_page %}
|
|
2
|
+
{% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|
|
@@ -1,60 +1,2 @@
|
|
|
1
1
|
{% extends 'generic/object_retrieve.html' %}
|
|
2
|
-
{%
|
|
3
|
-
|
|
4
|
-
{% block content_left_page %}
|
|
5
|
-
<div class="panel panel-default">
|
|
6
|
-
<div class="panel-heading">
|
|
7
|
-
<strong>Device Redundancy Group</strong>
|
|
8
|
-
</div>
|
|
9
|
-
<table class="table table-hover panel-body attr-table">
|
|
10
|
-
<tr>
|
|
11
|
-
<td>Status</td>
|
|
12
|
-
<td>
|
|
13
|
-
{{ object.status| hyperlinked_object_with_color }}
|
|
14
|
-
</td>
|
|
15
|
-
</tr>
|
|
16
|
-
<tr>
|
|
17
|
-
<td>Description</td>
|
|
18
|
-
<td>{{ object.description }}</td>
|
|
19
|
-
</tr>
|
|
20
|
-
<tr>
|
|
21
|
-
<td>Failover Strategy</td>
|
|
22
|
-
<td>{{ object.get_failover_strategy_display }}</td>
|
|
23
|
-
</tr>
|
|
24
|
-
<tr>
|
|
25
|
-
<td>Secrets Group</td>
|
|
26
|
-
<td>{{ object.secrets_group|hyperlinked_object }}</td>
|
|
27
|
-
</tr>
|
|
28
|
-
</table>
|
|
29
|
-
</div>
|
|
30
|
-
{% endblock content_left_page %}
|
|
31
|
-
|
|
32
|
-
{% block content_right_page %}
|
|
33
|
-
<div class="panel panel-default">
|
|
34
|
-
<div class="panel-heading">
|
|
35
|
-
<strong>Comments</strong>
|
|
36
|
-
</div>
|
|
37
|
-
<div class="panel-body rendered-markdown">
|
|
38
|
-
{% if object.comments %}
|
|
39
|
-
{{ object.comments|render_markdown }}
|
|
40
|
-
{% else %}
|
|
41
|
-
<span class="text-muted">None</span>
|
|
42
|
-
{% endif %}
|
|
43
|
-
</div>
|
|
44
|
-
</div>
|
|
45
|
-
{% endblock content_right_page %}
|
|
46
|
-
|
|
47
|
-
{% block content_full_width_page %}
|
|
48
|
-
<div class="panel panel-default">
|
|
49
|
-
<div class="panel-heading">
|
|
50
|
-
<strong>Controllers</strong>
|
|
51
|
-
</div>
|
|
52
|
-
{% include 'responsive_table.html' with table=controllers_table %}
|
|
53
|
-
</div>
|
|
54
|
-
<div class="panel panel-default">
|
|
55
|
-
<div class="panel-heading">
|
|
56
|
-
<strong>Devices</strong>
|
|
57
|
-
</div>
|
|
58
|
-
{% include 'responsive_table.html' with table=devices_table %}
|
|
59
|
-
</div>
|
|
60
|
-
{% endblock content_full_width_page %}
|
|
2
|
+
{% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|
|
@@ -1,217 +1,2 @@
|
|
|
1
|
-
{% extends '
|
|
2
|
-
{%
|
|
3
|
-
{% load helpers %}
|
|
4
|
-
{% load plugins %}
|
|
5
|
-
|
|
6
|
-
{% block extra_breadcrumbs %}
|
|
7
|
-
<li><a href="{% url 'dcim:devicetype_list' %}?manufacturer={{ object.manufacturer.name }}">{{ object.manufacturer }}</a></li>
|
|
8
|
-
{% endblock extra_breadcrumbs %}
|
|
9
|
-
|
|
10
|
-
{% block extra_buttons %}
|
|
11
|
-
{% if perms.dcim.change_devicetype %}
|
|
12
|
-
<div class="btn-group">
|
|
13
|
-
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" id="device-type-add-components-button">
|
|
14
|
-
<span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add Components <span class="caret"></span>
|
|
15
|
-
</button>
|
|
16
|
-
<ul class="dropdown-menu">
|
|
17
|
-
{% if perms.dcim.add_consoleporttemplate %}
|
|
18
|
-
<li><a href="{% url 'dcim:consoleporttemplate_add' %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%3Ftab=consoleports">Console Ports</a></li>
|
|
19
|
-
{% endif %}
|
|
20
|
-
{% if perms.dcim.add_consoleserverporttemplate %}
|
|
21
|
-
<li><a href="{% url 'dcim:consoleserverporttemplate_add' %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%3Ftab=consoleserverports">Console Server Ports</a></li>
|
|
22
|
-
{% endif %}
|
|
23
|
-
{% if perms.dcim.add_powerporttemplate %}
|
|
24
|
-
<li><a href="{% url 'dcim:powerporttemplate_add' %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%3Ftab=powerports">Power Ports</a></li>
|
|
25
|
-
{% endif %}
|
|
26
|
-
{% if perms.dcim.add_poweroutlettemplate %}
|
|
27
|
-
<li><a href="{% url 'dcim:poweroutlettemplate_add' %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%3Ftab=poweroutlets">Power Outlets</a></li>
|
|
28
|
-
{% endif %}
|
|
29
|
-
{% if perms.dcim.add_interfacetemplate %}
|
|
30
|
-
<li><a href="{% url 'dcim:interfacetemplate_add' %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%3Ftab=interfaces">Interfaces</a></li>
|
|
31
|
-
{% endif %}
|
|
32
|
-
{% if perms.dcim.add_frontporttemplate %}
|
|
33
|
-
<li><a href="{% url 'dcim:frontporttemplate_add' %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%3Ftab=frontports">Front Ports</a></li>
|
|
34
|
-
{% endif %}
|
|
35
|
-
{% if perms.dcim.add_rearporttemplate %}
|
|
36
|
-
<li><a href="{% url 'dcim:rearporttemplate_add' %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%3Ftab=rearports">Rear Ports</a></li>
|
|
37
|
-
{% endif %}
|
|
38
|
-
{% if perms.dcim.add_devicebaytemplate %}
|
|
39
|
-
<li><a href="{% url 'dcim:devicebaytemplate_add' %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%3Ftab=devicebays">Device Bays</a></li>
|
|
40
|
-
{% endif %}
|
|
41
|
-
{% if perms.dcim.add_modulebaytemplate %}
|
|
42
|
-
<li><a href="{% url 'dcim:modulebaytemplate_add' %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%3Ftab=modulebays">Module Bays</a></li>
|
|
43
|
-
{% endif %}
|
|
44
|
-
</ul>
|
|
45
|
-
</div>
|
|
46
|
-
{% endif %}
|
|
47
|
-
{% endblock extra_buttons %}
|
|
48
|
-
|
|
49
|
-
{% block title %}{{ object.manufacturer }} {{ object.model }}{% endblock title %}
|
|
50
|
-
|
|
51
|
-
{% block extra_nav_tabs %}
|
|
52
|
-
<li role="presentation" {% if request.GET.tab == 'interfaces' %} class="active"{% endif %}>
|
|
53
|
-
<a href="{{ object.get_absolute_url }}#interfaces" onclick="switch_tab(this.href)" aria-controls="interfaces" role="tab" data-toggle="tab">
|
|
54
|
-
Interfaces {% badge interface_table.rows|length %}
|
|
55
|
-
</a>
|
|
56
|
-
</li>
|
|
57
|
-
<li role="presentation" {% if request.GET.tab == 'frontports' %} class="active"{% endif %}>
|
|
58
|
-
<a href="{{ object.get_absolute_url }}#frontports" onclick="switch_tab(this.href)" aria-controls="frontports" role="tab" data-toggle="tab">
|
|
59
|
-
Front Ports {% badge front_port_table.rows|length %}
|
|
60
|
-
</a>
|
|
61
|
-
</li>
|
|
62
|
-
<li role="presentation" {% if request.GET.tab == 'rearports' %} class="active"{% endif %}>
|
|
63
|
-
<a href="{{ object.get_absolute_url }}#rearports" onclick="switch_tab(this.href)" aria-controls="rearports" role="tab" data-toggle="tab">
|
|
64
|
-
Rear Ports {% badge rear_port_table.rows|length %}
|
|
65
|
-
</a>
|
|
66
|
-
</li>
|
|
67
|
-
<li role="presentation" {% if request.GET.tab == 'consoleports' %} class="active"{% endif %}>
|
|
68
|
-
<a href="{{ object.get_absolute_url }}#consoleports" onclick="switch_tab(this.href)" aria-controls="consoleports" role="tab" data-toggle="tab">
|
|
69
|
-
Console Ports {% badge consoleport_table.rows|length %}
|
|
70
|
-
</a>
|
|
71
|
-
</li>
|
|
72
|
-
<li role="presentation" {% if request.GET.tab == 'consoleserverports' %} class="active"{% endif %}>
|
|
73
|
-
<a href="{{ object.get_absolute_url }}#consoleserverports" onclick="switch_tab(this.href)" aria-controls="consoleserverports" role="tab" data-toggle="tab">
|
|
74
|
-
Console Server Ports {% badge consoleserverport_table.rows|length %}
|
|
75
|
-
</a>
|
|
76
|
-
</li>
|
|
77
|
-
<li role="presentation" {% if request.GET.tab == 'powerports' %} class="active"{% endif %}>
|
|
78
|
-
<a href="{{ object.get_absolute_url }}#powerports" onclick="switch_tab(this.href)" aria-controls="powerports" role="tab" data-toggle="tab">
|
|
79
|
-
Power Ports {% badge powerport_table.rows|length %}
|
|
80
|
-
</a>
|
|
81
|
-
</li>
|
|
82
|
-
<li role="presentation" {% if request.GET.tab == 'poweroutlets' %} class="active"{% endif %}>
|
|
83
|
-
<a href="{{ object.get_absolute_url }}#poweroutlets" onclick="switch_tab(this.href)" aria-controls="poweroutlets" role="tab" data-toggle="tab">
|
|
84
|
-
Power Outlets {% badge poweroutlet_table.rows|length %}
|
|
85
|
-
</a>
|
|
86
|
-
</li>
|
|
87
|
-
<li role="presentation"{% if request.GET.tab == 'devicebays' %} class="active"{% endif %}>
|
|
88
|
-
<a href="{{ object.get_absolute_url }}#devicebays" onclick="switch_tab(this.href)" aria-controls="devicebays" role="tab" data-toggle="tab">
|
|
89
|
-
Device Bays {% badge devicebay_table.rows|length %}
|
|
90
|
-
</a>
|
|
91
|
-
</li>
|
|
92
|
-
<li role="presentation"{% if request.GET.tab == 'modulebays' %} class="active"{% endif %}>
|
|
93
|
-
<a href="{{ object.get_absolute_url }}#modulebays" onclick="switch_tab(this.href)" aria-controls="modulebays" role="tab" data-toggle="tab">
|
|
94
|
-
Module Bays {% badge modulebay_table.rows|length %}
|
|
95
|
-
</a>
|
|
96
|
-
</li>
|
|
97
|
-
{% endblock extra_nav_tabs %}
|
|
98
|
-
|
|
99
|
-
{% block content_left_page %}
|
|
100
|
-
<div class="panel panel-default">
|
|
101
|
-
<div class="panel-heading">
|
|
102
|
-
<strong>Chassis</strong>
|
|
103
|
-
</div>
|
|
104
|
-
<table class="table table-hover panel-body attr-table">
|
|
105
|
-
<tr>
|
|
106
|
-
<td>Manufacturer</td>
|
|
107
|
-
<td><a href="{% url 'dcim:devicetype_list' %}?manufacturer={{ object.manufacturer.name }}">{{ object.manufacturer }}</a></td>
|
|
108
|
-
</tr>
|
|
109
|
-
<tr>
|
|
110
|
-
<td>Device Family</td>
|
|
111
|
-
<td>
|
|
112
|
-
{{ object.device_family | hyperlinked_object }}
|
|
113
|
-
</td>
|
|
114
|
-
</tr>
|
|
115
|
-
<tr>
|
|
116
|
-
<td>Model Name</td>
|
|
117
|
-
<td>
|
|
118
|
-
{{ object.model }}<br/>
|
|
119
|
-
</td>
|
|
120
|
-
</tr>
|
|
121
|
-
<tr>
|
|
122
|
-
<td>Part Number</td>
|
|
123
|
-
<td>{{ object.part_number|placeholder }}</td>
|
|
124
|
-
</tr>
|
|
125
|
-
<tr>
|
|
126
|
-
<td>Height (U)</td>
|
|
127
|
-
<td>{{ object.u_height }}</td>
|
|
128
|
-
</tr>
|
|
129
|
-
<tr>
|
|
130
|
-
<td>Full Depth</td>
|
|
131
|
-
<td>{{ object.is_full_depth | render_boolean }}</td>
|
|
132
|
-
</tr>
|
|
133
|
-
<tr>
|
|
134
|
-
<td>Parent/Child</td>
|
|
135
|
-
<td>
|
|
136
|
-
{{ object.get_subdevice_role_display|placeholder }}
|
|
137
|
-
</td>
|
|
138
|
-
</tr>
|
|
139
|
-
<tr>
|
|
140
|
-
<td>Front Image</td>
|
|
141
|
-
<td>
|
|
142
|
-
{% if object.front_image %}
|
|
143
|
-
<a href="{{ object.front_image.url }}">
|
|
144
|
-
<img src="{{ object.front_image.url }}" alt="{{ object.front_image.name }}" class="img-responsive" />
|
|
145
|
-
</a>
|
|
146
|
-
{% else %}
|
|
147
|
-
<span class="text-muted">—</span>
|
|
148
|
-
{% endif %}
|
|
149
|
-
</td>
|
|
150
|
-
</tr>
|
|
151
|
-
<tr>
|
|
152
|
-
<td>Rear Image</td>
|
|
153
|
-
<td>
|
|
154
|
-
{% if object.rear_image %}
|
|
155
|
-
<a href="{{ object.rear_image.url }}">
|
|
156
|
-
<img src="{{ object.rear_image.url }}" alt="{{ object.rear_image.name }}" class="img-responsive" />
|
|
157
|
-
</a>
|
|
158
|
-
{% else %}
|
|
159
|
-
<span class="text-muted">—</span>
|
|
160
|
-
{% endif %}
|
|
161
|
-
</td>
|
|
162
|
-
</tr>
|
|
163
|
-
<tr>
|
|
164
|
-
<td>Device Instances</td>
|
|
165
|
-
<td><a href="{% url 'dcim:device_list' %}?device_type={{ object.pk }}">{{ instance_count }}</a></td>
|
|
166
|
-
</tr>
|
|
167
|
-
</table>
|
|
168
|
-
</div>
|
|
169
|
-
{% endblock content_left_page %}
|
|
170
|
-
|
|
171
|
-
{% block content_right_page %}
|
|
172
|
-
<div class="panel panel-default">
|
|
173
|
-
<div class="panel-heading">
|
|
174
|
-
<strong>Comments</strong>
|
|
175
|
-
</div>
|
|
176
|
-
<div class="panel-body rendered-markdown">
|
|
177
|
-
{% if object.comments %}
|
|
178
|
-
{{ object.comments|render_markdown }}
|
|
179
|
-
{% else %}
|
|
180
|
-
<span class="text-muted">None</span>
|
|
181
|
-
{% endif %}
|
|
182
|
-
</div>
|
|
183
|
-
</div>
|
|
184
|
-
{% if object.software_image_files.count %}
|
|
185
|
-
{% include 'panel_table.html' with table=software_image_files_table heading='Software Image Files' %}
|
|
186
|
-
{% endif %}
|
|
187
|
-
{% endblock content_right_page %}
|
|
188
|
-
|
|
189
|
-
{% block extra_tab_content %}
|
|
190
|
-
<div role="tabpanel" class="tab-pane {% if request.GET.tab == 'interfaces' %}active{% else %}fade{% endif %}" id="interfaces">
|
|
191
|
-
{% include 'dcim/inc/devicetype_component_table.html' with table=interface_table title='Interfaces' tab='interfaces' %}
|
|
192
|
-
</div>
|
|
193
|
-
<div role="tabpanel" class="tab-pane {% if request.GET.tab == 'frontports' %}active{% else %}fade{% endif %}" id="frontports">
|
|
194
|
-
{% include 'dcim/inc/devicetype_component_table.html' with table=front_port_table title='Front Ports' tab='frontports' %}
|
|
195
|
-
</div>
|
|
196
|
-
<div role="tabpanel" class="tab-pane {% if request.GET.tab == 'rearports' %}active{% else %}fade{% endif %}" id="rearports">
|
|
197
|
-
{% include 'dcim/inc/devicetype_component_table.html' with table=rear_port_table title='Rear Ports' tab='rearports' %}
|
|
198
|
-
</div>
|
|
199
|
-
<div role="tabpanel" class="tab-pane {% if request.GET.tab == 'consoleports' %}active{% else %}fade{% endif %}" id="consoleports">
|
|
200
|
-
{% include 'dcim/inc/devicetype_component_table.html' with table=consoleport_table title='Console Ports' tab='consoleports' %}
|
|
201
|
-
</div>
|
|
202
|
-
<div role="tabpanel" class="tab-pane {% if request.GET.tab == 'consoleserverports' %}active{% else %}fade{% endif %}" id="consoleserverports">
|
|
203
|
-
{% include 'dcim/inc/devicetype_component_table.html' with table=consoleserverport_table title='Console Server Ports' tab='consoleserverports' %}
|
|
204
|
-
</div>
|
|
205
|
-
<div role="tabpanel" class="tab-pane {% if request.GET.tab == 'powerports' %}active{% else %}fade{% endif %}" id="powerports">
|
|
206
|
-
{% include 'dcim/inc/devicetype_component_table.html' with table=powerport_table title='Power Ports' tab='powerports' %}
|
|
207
|
-
</div>
|
|
208
|
-
<div role="tabpanel" class="tab-pane {% if request.GET.tab == 'poweroutlets' %}active{% else %}fade{% endif %}" id="poweroutlets">
|
|
209
|
-
{% include 'dcim/inc/devicetype_component_table.html' with table=poweroutlet_table title='Power Outlets' tab='poweroutlets' %}
|
|
210
|
-
</div>
|
|
211
|
-
<div role="tabpanel" class="tab-pane {% if request.GET.tab == 'devicebays' %}active{% else %}fade{% endif %}" id="devicebays">
|
|
212
|
-
{% include 'dcim/inc/devicetype_component_table.html' with table=devicebay_table title='Device Bays' tab='devicebays' %}
|
|
213
|
-
</div>
|
|
214
|
-
<div role="tabpanel" class="tab-pane {% if request.GET.tab == 'modulebays' %}active{% else %}fade{% endif %}" id="modulebays">
|
|
215
|
-
{% include 'dcim/inc/devicetype_component_table.html' with table=modulebay_table title='Module Bays' tab='modulebays' %}
|
|
216
|
-
</div>
|
|
217
|
-
{% endblock extra_tab_content %}
|
|
1
|
+
{% extends 'dcim/devicetype_retrieve.html' %}
|
|
2
|
+
{% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|
|
@@ -1,32 +1,2 @@
|
|
|
1
|
-
{% extends
|
|
2
|
-
{%
|
|
3
|
-
|
|
4
|
-
{% block form %}
|
|
5
|
-
<div class="panel panel-default">
|
|
6
|
-
<div class="panel-heading"><strong>Device Type</strong></div>
|
|
7
|
-
<div class="panel-body">
|
|
8
|
-
{% render_field form.manufacturer %}
|
|
9
|
-
{% render_field form.device_family %}
|
|
10
|
-
{% render_field form.model %}
|
|
11
|
-
{% render_field form.part_number %}
|
|
12
|
-
{% render_field form.u_height %}
|
|
13
|
-
{% render_field form.is_full_depth %}
|
|
14
|
-
{% render_field form.subdevice_role %}
|
|
15
|
-
{% render_field form.software_image_files %}
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
18
|
-
<div class="panel panel-default">
|
|
19
|
-
<div class="panel-heading"><strong>Rack Images</strong></div>
|
|
20
|
-
<div class="panel-body">
|
|
21
|
-
{% render_field form.front_image %}
|
|
22
|
-
{% render_field form.rear_image %}
|
|
23
|
-
</div>
|
|
24
|
-
</div>
|
|
25
|
-
{% include 'inc/extras_features_edit_form_fields.html' %}
|
|
26
|
-
<div class="panel panel-default">
|
|
27
|
-
<div class="panel-heading"><strong>Comments</strong></div>
|
|
28
|
-
<div class="panel-body">
|
|
29
|
-
{% render_field form.comments %}
|
|
30
|
-
</div>
|
|
31
|
-
</div>
|
|
32
|
-
{% endblock %}
|
|
1
|
+
{% extends "dcim/devicetype_update.html" %}
|
|
2
|
+
{% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|