nautobot 2.4.6__py3-none-any.whl → 2.4.7__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/forms.py +2 -0
- nautobot/circuits/templates/circuits/providernetwork.html +1 -1
- nautobot/circuits/templates/circuits/providernetwork_retrieve.html +2 -55
- nautobot/circuits/views.py +20 -23
- nautobot/cloud/templates/cloud/cloudaccount_retrieve.html +2 -40
- nautobot/cloud/views.py +12 -0
- nautobot/core/api/urls.py +2 -2
- nautobot/core/api/views.py +39 -1
- nautobot/core/forms/__init__.py +2 -0
- nautobot/core/forms/fields.py +2 -2
- nautobot/core/forms/widgets.py +18 -0
- nautobot/core/templates/widgets/sluginput.html +5 -1
- nautobot/core/templatetags/helpers.py +15 -1
- nautobot/core/testing/integration.py +6 -2
- nautobot/core/ui/object_detail.py +16 -3
- nautobot/core/utils/lookup.py +2 -2
- nautobot/dcim/forms.py +10 -0
- nautobot/dcim/models/locations.py +9 -0
- nautobot/dcim/templates/dcim/device_list.html +1 -1
- nautobot/dcim/templates/dcim/devicetype.html +1 -1
- nautobot/dcim/templates/dcim/manufacturer.html +1 -63
- nautobot/dcim/templates/dcim/module_list.html +1 -1
- nautobot/dcim/templates/dcim/moduletype_retrieve.html +1 -1
- nautobot/dcim/tests/integration/test_module_bay_position.py +125 -0
- nautobot/dcim/tests/test_models.py +13 -0
- nautobot/dcim/tests/test_views.py +4 -1
- nautobot/dcim/urls.py +1 -45
- nautobot/dcim/views.py +35 -66
- nautobot/extras/choices.py +4 -0
- nautobot/extras/filters/__init__.py +6 -0
- nautobot/extras/forms/forms.py +76 -8
- nautobot/extras/models/customfields.py +10 -9
- nautobot/extras/signals.py +43 -4
- nautobot/extras/tasks.py +4 -2
- nautobot/extras/templates/extras/contact_retrieve.html +1 -58
- nautobot/extras/templates/extras/exporttemplate.html +1 -53
- nautobot/extras/templates/extras/team_retrieve.html +1 -58
- nautobot/extras/tests/test_customfields.py +24 -0
- nautobot/extras/tests/test_views.py +22 -0
- nautobot/extras/urls.py +2 -70
- nautobot/extras/views.py +101 -79
- nautobot/ipam/tables.py +1 -0
- nautobot/project-static/css/base.css +5 -0
- nautobot/project-static/docs/404.html +0 -2
- nautobot/project-static/docs/apps/index.html +0 -2
- nautobot/project-static/docs/apps/nautobot-apps.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/events.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +62 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +7 -5
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +0 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +0 -2
- nautobot/project-static/docs/development/apps/api/configuration-view.html +0 -2
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +0 -2
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +0 -2
- nautobot/project-static/docs/development/apps/api/models/global-search.html +0 -2
- nautobot/project-static/docs/development/apps/api/models/graphql.html +0 -2
- nautobot/project-static/docs/development/apps/api/models/index.html +0 -2
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +0 -2
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +0 -2
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +0 -2
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +0 -2
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +0 -2
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +0 -2
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +0 -2
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +0 -2
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +0 -2
- nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +0 -2
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +0 -2
- nautobot/project-static/docs/development/apps/api/prometheus.html +0 -2
- nautobot/project-static/docs/development/apps/api/setup.html +0 -2
- nautobot/project-static/docs/development/apps/api/testing.html +0 -2
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +0 -2
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +0 -2
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +0 -2
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +0 -2
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +0 -2
- nautobot/project-static/docs/development/apps/api/views/base-template.html +0 -2
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +0 -2
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +0 -2
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +0 -2
- nautobot/project-static/docs/development/apps/api/views/index.html +0 -2
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +0 -2
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +0 -2
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +0 -2
- nautobot/project-static/docs/development/apps/api/views/notes.html +0 -2
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +0 -2
- nautobot/project-static/docs/development/apps/api/views/urls.html +0 -2
- nautobot/project-static/docs/development/apps/index.html +0 -2
- nautobot/project-static/docs/development/apps/migration/code-updates.html +0 -2
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +0 -2
- nautobot/project-static/docs/development/apps/migration/from-v1.html +0 -2
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +0 -2
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +0 -2
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +0 -2
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +0 -2
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +0 -2
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +0 -2
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +0 -2
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +0 -2
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +0 -2
- nautobot/project-static/docs/development/core/application-registry.html +0 -2
- nautobot/project-static/docs/development/core/best-practices.html +0 -2
- nautobot/project-static/docs/development/core/bootstrap-ui.html +0 -2
- nautobot/project-static/docs/development/core/caching.html +0 -2
- nautobot/project-static/docs/development/core/controllers.html +0 -2
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +0 -2
- nautobot/project-static/docs/development/core/generic-views.html +0 -2
- nautobot/project-static/docs/development/core/getting-started.html +0 -2
- nautobot/project-static/docs/development/core/homepage.html +0 -2
- nautobot/project-static/docs/development/core/index.html +0 -2
- nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +0 -2
- nautobot/project-static/docs/development/core/model-checklist.html +0 -2
- nautobot/project-static/docs/development/core/model-features.html +0 -2
- nautobot/project-static/docs/development/core/natural-keys.html +0 -2
- nautobot/project-static/docs/development/core/navigation-menu.html +0 -2
- nautobot/project-static/docs/development/core/release-checklist.html +0 -2
- nautobot/project-static/docs/development/core/role-internals.html +0 -2
- nautobot/project-static/docs/development/core/settings.html +0 -2
- nautobot/project-static/docs/development/core/style-guide.html +0 -2
- nautobot/project-static/docs/development/core/templates.html +0 -2
- nautobot/project-static/docs/development/core/testing.html +0 -2
- nautobot/project-static/docs/development/core/ui-component-framework.html +0 -2
- nautobot/project-static/docs/development/core/user-preferences.html +0 -2
- nautobot/project-static/docs/development/index.html +0 -2
- nautobot/project-static/docs/development/jobs/index.html +0 -2
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +0 -2
- nautobot/project-static/docs/index.html +0 -2
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/overview/application_stack.html +0 -2
- nautobot/project-static/docs/overview/design_philosophy.html +0 -2
- nautobot/project-static/docs/release-notes/index.html +0 -2
- nautobot/project-static/docs/release-notes/version-1.0.html +0 -2
- nautobot/project-static/docs/release-notes/version-1.1.html +0 -2
- nautobot/project-static/docs/release-notes/version-1.2.html +0 -2
- nautobot/project-static/docs/release-notes/version-1.3.html +0 -2
- nautobot/project-static/docs/release-notes/version-1.4.html +0 -2
- nautobot/project-static/docs/release-notes/version-1.5.html +0 -2
- nautobot/project-static/docs/release-notes/version-1.6.html +0 -2
- nautobot/project-static/docs/release-notes/version-2.0.html +0 -2
- nautobot/project-static/docs/release-notes/version-2.1.html +0 -2
- nautobot/project-static/docs/release-notes/version-2.2.html +0 -2
- nautobot/project-static/docs/release-notes/version-2.3.html +0 -2
- nautobot/project-static/docs/release-notes/version-2.4.html +138 -2
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +290 -290
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +0 -2
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +0 -2
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +0 -2
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +0 -2
- nautobot/project-static/docs/user-guide/administration/configuration/redis.html +0 -2
- nautobot/project-static/docs/user-guide/administration/configuration/settings.html +0 -2
- nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +0 -2
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +0 -2
- nautobot/project-static/docs/user-guide/administration/guides/docker.html +0 -2
- nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +0 -2
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +0 -2
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +0 -2
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +0 -2
- nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +0 -2
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +0 -2
- nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +0 -2
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +0 -2
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +0 -2
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +0 -2
- nautobot/project-static/docs/user-guide/administration/installation/index.html +0 -2
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +0 -2
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +0 -2
- nautobot/project-static/docs/user-guide/administration/installation/services.html +0 -2
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +0 -2
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +0 -2
- nautobot/project-static/docs/user-guide/administration/security/index.html +0 -2
- nautobot/project-static/docs/user-guide/administration/security/notices.html +0 -2
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +0 -2
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +0 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +0 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +0 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +0 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +0 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +0 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +0 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +0 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +0 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +0 -2
- nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +0 -2
- nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +0 -2
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +0 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +0 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +0 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +0 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +0 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +0 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +0 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +0 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +0 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +0 -2
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +0 -2
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +0 -2
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +0 -2
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +0 -2
- nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +0 -2
- nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +0 -2
- nautobot/project-static/docs/user-guide/index.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/events.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +0 -2
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +0 -2
- nautobot/project-static/js/forms.js +88 -37
- nautobot/project-static/js/homepage_layout.js +12 -3
- {nautobot-2.4.6.dist-info → nautobot-2.4.7.dist-info}/METADATA +1 -1
- {nautobot-2.4.6.dist-info → nautobot-2.4.7.dist-info}/RECORD +346 -346
- nautobot/dcim/templates/dcim/modulebay_create.html +0 -39
- {nautobot-2.4.6.dist-info → nautobot-2.4.7.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.4.6.dist-info → nautobot-2.4.7.dist-info}/NOTICE +0 -0
- {nautobot-2.4.6.dist-info → nautobot-2.4.7.dist-info}/WHEEL +0 -0
- {nautobot-2.4.6.dist-info → nautobot-2.4.7.dist-info}/entry_points.txt +0 -0
|
@@ -1,59 +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>Contact</strong>
|
|
8
|
-
</div>
|
|
9
|
-
<table class="table table-hover panel-body attr-table">
|
|
10
|
-
<tr>
|
|
11
|
-
<td>Name</td>
|
|
12
|
-
<td>{{ object.name }}</td>
|
|
13
|
-
</tr>
|
|
14
|
-
<tr>
|
|
15
|
-
<td>Phone</td>
|
|
16
|
-
<td>{{ object.phone|hyperlinked_phone_number }}</td>
|
|
17
|
-
</tr>
|
|
18
|
-
<tr>
|
|
19
|
-
<td>E-mail</td>
|
|
20
|
-
<td>{{ object.email|hyperlinked_email }}</td>
|
|
21
|
-
</tr>
|
|
22
|
-
<tr>
|
|
23
|
-
<td>Address</td>
|
|
24
|
-
<td>
|
|
25
|
-
{% if object.address %}
|
|
26
|
-
<div class="pull-right noprint">
|
|
27
|
-
<a href="https://maps.google.com/?q={{ object.address|urlencode }}" target="_blank" class="btn btn-primary btn-xs">
|
|
28
|
-
<i class="mdi mdi-map-marker"></i> Map it
|
|
29
|
-
</a>
|
|
30
|
-
</div>
|
|
31
|
-
<span>{{ object.address|linebreaksbr }}</span>
|
|
32
|
-
{% else %}
|
|
33
|
-
<span class="text-muted">—</span>
|
|
34
|
-
{% endif %}
|
|
35
|
-
</td>
|
|
36
|
-
</tr>
|
|
37
|
-
</table>
|
|
38
|
-
</div>
|
|
39
|
-
<div class="panel panel-default">
|
|
40
|
-
<div class="panel-heading">
|
|
41
|
-
<strong>Comments</strong>
|
|
42
|
-
</div>
|
|
43
|
-
<div class="panel-body rendered-markdown">
|
|
44
|
-
{% if object.comments %}
|
|
45
|
-
{{ object.comments|render_markdown }}
|
|
46
|
-
{% else %}
|
|
47
|
-
<span class="text-muted">None</span>
|
|
48
|
-
{% endif %}
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
51
|
-
{% endblock %}
|
|
52
|
-
|
|
53
|
-
{% block content_right_page %}
|
|
54
|
-
{% include 'panel_table.html' with table=teams_table heading='Assigned Teams' %}
|
|
55
|
-
{% endblock %}
|
|
56
|
-
|
|
57
|
-
{% block content_full_width_page %}
|
|
58
|
-
{% include 'panel_table.html' with table=contact_associations_table heading='Contact For' %}
|
|
59
|
-
{% endblock %}
|
|
2
|
+
{% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|
|
@@ -1,54 +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>Details</strong>
|
|
8
|
-
</div>
|
|
9
|
-
|
|
10
|
-
<table class="table table-hover panel-body attr-table">
|
|
11
|
-
<tr>
|
|
12
|
-
<td>Name</td>
|
|
13
|
-
<td><span>{{ object.name }}</span></td>
|
|
14
|
-
</tr>
|
|
15
|
-
<tr>
|
|
16
|
-
<td>Owner</td>
|
|
17
|
-
<td>{{ object.owner|hyperlinked_object }}</td>
|
|
18
|
-
</tr>
|
|
19
|
-
<tr>
|
|
20
|
-
<td>Description</td>
|
|
21
|
-
<td>{{ object.description|placeholder }}</td>
|
|
22
|
-
</tr>
|
|
23
|
-
</table>
|
|
24
|
-
</div>
|
|
25
|
-
|
|
26
|
-
<div class="panel panel-default">
|
|
27
|
-
<div class="panel-heading">
|
|
28
|
-
<strong>Template</strong>
|
|
29
|
-
</div>
|
|
30
|
-
<table class="table table-hover panel-body attr-table">
|
|
31
|
-
<tr>
|
|
32
|
-
<td>Object Type</td>
|
|
33
|
-
<td><span>{{ object.content_type }}</span></td>
|
|
34
|
-
</tr>
|
|
35
|
-
<tr>
|
|
36
|
-
<td>Mime Type</td>
|
|
37
|
-
<td><span>{{ object.mime_type }}</span></td>
|
|
38
|
-
</tr>
|
|
39
|
-
<tr>
|
|
40
|
-
<td>File Extension</td>
|
|
41
|
-
<td><span>{{ object.file_extension }}</span></td>
|
|
42
|
-
</tr>
|
|
43
|
-
</table>
|
|
44
|
-
</div>
|
|
45
|
-
{% endblock content_left_page %}
|
|
46
|
-
|
|
47
|
-
{% block content_right_page %}
|
|
48
|
-
<div class="panel panel-default">
|
|
49
|
-
<div class="panel-heading">
|
|
50
|
-
<strong>Code Template</strong>
|
|
51
|
-
</div>
|
|
52
|
-
{% if object.template_code %} <pre>{{ object.template_code }}</pre> {% else %} {{ None }} {% endif %}
|
|
53
|
-
</div>
|
|
54
|
-
{% endblock content_right_page %}
|
|
2
|
+
{% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|
|
@@ -1,59 +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>Team</strong>
|
|
8
|
-
</div>
|
|
9
|
-
<table class="table table-hover panel-body attr-table">
|
|
10
|
-
<tr>
|
|
11
|
-
<td>Name</td>
|
|
12
|
-
<td>{{ object.name }}</td>
|
|
13
|
-
</tr>
|
|
14
|
-
<tr>
|
|
15
|
-
<td>Phone</td>
|
|
16
|
-
<td>{{ object.phone|hyperlinked_phone_number }}</td>
|
|
17
|
-
</tr>
|
|
18
|
-
<tr>
|
|
19
|
-
<td>E-mail</td>
|
|
20
|
-
<td>{{ object.email|hyperlinked_email }}</td>
|
|
21
|
-
</tr>
|
|
22
|
-
<tr>
|
|
23
|
-
<td>Address</td>
|
|
24
|
-
<td>
|
|
25
|
-
{% if object.address %}
|
|
26
|
-
<div class="pull-right noprint">
|
|
27
|
-
<a href="https://maps.google.com/?q={{ object.address|urlencode }}" target="_blank" class="btn btn-primary btn-xs">
|
|
28
|
-
<i class="mdi mdi-map-marker"></i> Map it
|
|
29
|
-
</a>
|
|
30
|
-
</div>
|
|
31
|
-
<span>{{ object.address|linebreaksbr }}</span>
|
|
32
|
-
{% else %}
|
|
33
|
-
<span class="text-muted">—</span>
|
|
34
|
-
{% endif %}
|
|
35
|
-
</td>
|
|
36
|
-
</tr>
|
|
37
|
-
</table>
|
|
38
|
-
</div>
|
|
39
|
-
<div class="panel panel-default">
|
|
40
|
-
<div class="panel-heading">
|
|
41
|
-
<strong>Comments</strong>
|
|
42
|
-
</div>
|
|
43
|
-
<div class="panel-body rendered-markdown">
|
|
44
|
-
{% if object.comments %}
|
|
45
|
-
{{ object.comments|render_markdown }}
|
|
46
|
-
{% else %}
|
|
47
|
-
<span class="text-muted">None</span>
|
|
48
|
-
{% endif %}
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
51
|
-
{% endblock %}
|
|
52
|
-
|
|
53
|
-
{% block content_right_page %}
|
|
54
|
-
{% include 'panel_table.html' with table=contacts_table heading='Assigned Contacts' %}
|
|
55
|
-
{% endblock %}
|
|
56
|
-
|
|
57
|
-
{% block content_full_width_page %}
|
|
58
|
-
{% include 'panel_table.html' with table=contact_associations_table heading='Contact For' %}
|
|
59
|
-
{% endblock %}
|
|
2
|
+
{% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|
|
@@ -2083,6 +2083,30 @@ class CustomFieldBackgroundTasks(TransactionTestCase):
|
|
|
2083
2083
|
self.assertEqual(oc_list[0].change_context_detail, "delete custom field data")
|
|
2084
2084
|
self.assertEqual(oc_list[0].user, self.user)
|
|
2085
2085
|
|
|
2086
|
+
def test_clear_custom_field_data_task(self):
|
|
2087
|
+
obj_type = ContentType.objects.get_for_model(Location)
|
|
2088
|
+
cf_1 = CustomField.objects.create(label="CF1", type=CustomFieldTypeChoices.TYPE_TEXT)
|
|
2089
|
+
cf_1.content_types.set([obj_type])
|
|
2090
|
+
location_type = LocationType.objects.create(name="Root Type 2")
|
|
2091
|
+
location_status = Status.objects.get_for_model(Location).first()
|
|
2092
|
+
location = Location.objects.create(
|
|
2093
|
+
name="Location 1",
|
|
2094
|
+
location_type=location_type,
|
|
2095
|
+
status=location_status,
|
|
2096
|
+
_custom_field_data={"cf1": "foo"},
|
|
2097
|
+
)
|
|
2098
|
+
|
|
2099
|
+
with web_request_context(self.user):
|
|
2100
|
+
cf_1.content_types.clear()
|
|
2101
|
+
location.refresh_from_db()
|
|
2102
|
+
self.assertNotIn("cf1", location.cf)
|
|
2103
|
+
|
|
2104
|
+
oc_list = get_changes_for_model(location)
|
|
2105
|
+
self.assertEqual(len(oc_list), 1)
|
|
2106
|
+
self.assertEqual(oc_list[0].changed_object, location)
|
|
2107
|
+
self.assertEqual(oc_list[0].change_context_detail, "delete custom field data from existing content types")
|
|
2108
|
+
self.assertEqual(oc_list[0].user, self.user)
|
|
2109
|
+
|
|
2086
2110
|
def test_update_custom_field_choice_data_task(self):
|
|
2087
2111
|
obj_type = ContentType.objects.get_for_model(Location)
|
|
2088
2112
|
cf = CustomField(
|
|
@@ -1069,12 +1069,14 @@ class ExportTemplateTestCase(
|
|
|
1069
1069
|
ViewTestCases.GetObjectViewTestCase,
|
|
1070
1070
|
ViewTestCases.GetObjectChangelogViewTestCase,
|
|
1071
1071
|
ViewTestCases.ListObjectsViewTestCase,
|
|
1072
|
+
ViewTestCases.BulkEditObjectsViewTestCase,
|
|
1072
1073
|
):
|
|
1073
1074
|
model = ExportTemplate
|
|
1074
1075
|
|
|
1075
1076
|
@classmethod
|
|
1076
1077
|
def setUpTestData(cls):
|
|
1077
1078
|
obj_type = ContentType.objects.get_for_model(Location)
|
|
1079
|
+
obj_type_1 = ContentType.objects.get_for_model(Interface)
|
|
1078
1080
|
|
|
1079
1081
|
templates = (
|
|
1080
1082
|
ExportTemplate(
|
|
@@ -1102,6 +1104,12 @@ class ExportTemplateTestCase(
|
|
|
1102
1104
|
"content_type": obj_type.pk,
|
|
1103
1105
|
"template_code": "template-4 test4",
|
|
1104
1106
|
}
|
|
1107
|
+
cls.bulk_edit_data = {
|
|
1108
|
+
"content_type": obj_type_1.pk,
|
|
1109
|
+
"description": "Updated template description",
|
|
1110
|
+
"mime_type": "application/json",
|
|
1111
|
+
"file_extension": "json",
|
|
1112
|
+
}
|
|
1105
1113
|
|
|
1106
1114
|
|
|
1107
1115
|
class ExternalIntegrationTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
|
@@ -3376,6 +3384,7 @@ class RelationshipTestCase(
|
|
|
3376
3384
|
ViewTestCases.GetObjectChangelogViewTestCase,
|
|
3377
3385
|
ViewTestCases.ListObjectsViewTestCase,
|
|
3378
3386
|
RequiredRelationshipTestMixin,
|
|
3387
|
+
ViewTestCases.BulkEditObjectsViewTestCase,
|
|
3379
3388
|
):
|
|
3380
3389
|
model = Relationship
|
|
3381
3390
|
slug_source = "label"
|
|
@@ -3422,6 +3431,19 @@ class RelationshipTestCase(
|
|
|
3422
3431
|
"destination_hidden": True,
|
|
3423
3432
|
"destination_filter": None,
|
|
3424
3433
|
}
|
|
3434
|
+
cls.bulk_edit_data = {
|
|
3435
|
+
"description": "This is a relationship between VLANs and Interfaces.",
|
|
3436
|
+
"type": "many-to-many",
|
|
3437
|
+
"source_type": vlan_type.pk,
|
|
3438
|
+
"source_label": "Interfaces",
|
|
3439
|
+
"source_hidden": False,
|
|
3440
|
+
"source_filter": '{"status": ["' + status.name + '"]}',
|
|
3441
|
+
"destination_type": interface_type.pk,
|
|
3442
|
+
"destination_label": "VLANs",
|
|
3443
|
+
"destination_hidden": True,
|
|
3444
|
+
"destination_filter": None,
|
|
3445
|
+
"advanced_ui": True,
|
|
3446
|
+
}
|
|
3425
3447
|
|
|
3426
3448
|
cls.slug_test_object = "Primary Interface"
|
|
3427
3449
|
|
nautobot/extras/urls.py
CHANGED
|
@@ -9,7 +9,6 @@ from nautobot.extras.models import (
|
|
|
9
9
|
CustomField,
|
|
10
10
|
CustomLink,
|
|
11
11
|
DynamicGroup,
|
|
12
|
-
ExportTemplate,
|
|
13
12
|
GitRepository,
|
|
14
13
|
GraphQLQuery,
|
|
15
14
|
Job,
|
|
@@ -26,11 +25,13 @@ app_name = "extras"
|
|
|
26
25
|
router = NautobotUIViewSetRouter()
|
|
27
26
|
router.register("contacts", views.ContactUIViewSet)
|
|
28
27
|
router.register("contact-associations", views.ContactAssociationUIViewSet)
|
|
28
|
+
router.register("export-templates", views.ExportTemplateUIViewSet)
|
|
29
29
|
router.register("external-integrations", views.ExternalIntegrationUIViewSet)
|
|
30
30
|
router.register("job-buttons", views.JobButtonUIViewSet)
|
|
31
31
|
router.register("job-queues", views.JobQueueUIViewSet)
|
|
32
32
|
router.register("metadata-types", views.MetadataTypeUIViewSet)
|
|
33
33
|
router.register("object-metadata", views.ObjectMetadataUIViewSet)
|
|
34
|
+
router.register("relationships", views.RelationshipUIViewSet)
|
|
34
35
|
router.register("roles", views.RoleUIViewSet)
|
|
35
36
|
router.register("saved-views", views.SavedViewUIViewSet)
|
|
36
37
|
router.register("secrets", views.SecretUIViewSet)
|
|
@@ -268,49 +269,6 @@ urlpatterns = [
|
|
|
268
269
|
name="dynamicgroup_notes",
|
|
269
270
|
kwargs={"model": DynamicGroup},
|
|
270
271
|
),
|
|
271
|
-
# Export Templates
|
|
272
|
-
path(
|
|
273
|
-
"export-templates/",
|
|
274
|
-
views.ExportTemplateListView.as_view(),
|
|
275
|
-
name="exporttemplate_list",
|
|
276
|
-
),
|
|
277
|
-
path(
|
|
278
|
-
"export-templates/add/",
|
|
279
|
-
views.ExportTemplateEditView.as_view(),
|
|
280
|
-
name="exporttemplate_add",
|
|
281
|
-
),
|
|
282
|
-
path(
|
|
283
|
-
"export-templates/delete/",
|
|
284
|
-
views.ExportTemplateBulkDeleteView.as_view(),
|
|
285
|
-
name="exporttemplate_bulk_delete",
|
|
286
|
-
),
|
|
287
|
-
path(
|
|
288
|
-
"export-templates/<uuid:pk>/",
|
|
289
|
-
views.ExportTemplateView.as_view(),
|
|
290
|
-
name="exporttemplate",
|
|
291
|
-
),
|
|
292
|
-
path(
|
|
293
|
-
"export-templates/<uuid:pk>/edit/",
|
|
294
|
-
views.ExportTemplateEditView.as_view(),
|
|
295
|
-
name="exporttemplate_edit",
|
|
296
|
-
),
|
|
297
|
-
path(
|
|
298
|
-
"export-templates/<uuid:pk>/delete/",
|
|
299
|
-
views.ExportTemplateDeleteView.as_view(),
|
|
300
|
-
name="exporttemplate_delete",
|
|
301
|
-
),
|
|
302
|
-
path(
|
|
303
|
-
"export-templates/<uuid:pk>/changelog/",
|
|
304
|
-
views.ObjectChangeLogView.as_view(),
|
|
305
|
-
name="exporttemplate_changelog",
|
|
306
|
-
kwargs={"model": ExportTemplate},
|
|
307
|
-
),
|
|
308
|
-
path(
|
|
309
|
-
"export-templates/<uuid:pk>/notes/",
|
|
310
|
-
views.ObjectNotesView.as_view(),
|
|
311
|
-
name="exporttemplate_notes",
|
|
312
|
-
kwargs={"model": ExportTemplate},
|
|
313
|
-
),
|
|
314
272
|
# Git repositories
|
|
315
273
|
path(
|
|
316
274
|
"git-repositories/",
|
|
@@ -512,32 +470,6 @@ urlpatterns = [
|
|
|
512
470
|
path("notes/<uuid:pk>/edit/", views.NoteEditView.as_view(), name="note_edit"),
|
|
513
471
|
path("notes/<uuid:pk>/delete/", views.NoteDeleteView.as_view(), name="note_delete"),
|
|
514
472
|
# Custom relationships
|
|
515
|
-
path("relationships/", views.RelationshipListView.as_view(), name="relationship_list"),
|
|
516
|
-
path(
|
|
517
|
-
"relationships/add/",
|
|
518
|
-
views.RelationshipEditView.as_view(),
|
|
519
|
-
name="relationship_add",
|
|
520
|
-
),
|
|
521
|
-
path(
|
|
522
|
-
"relationships/delete/",
|
|
523
|
-
views.RelationshipBulkDeleteView.as_view(),
|
|
524
|
-
name="relationship_bulk_delete",
|
|
525
|
-
),
|
|
526
|
-
path(
|
|
527
|
-
"relationships/<uuid:pk>/",
|
|
528
|
-
views.RelationshipView.as_view(),
|
|
529
|
-
name="relationship",
|
|
530
|
-
),
|
|
531
|
-
path(
|
|
532
|
-
"relationships/<uuid:pk>/edit/",
|
|
533
|
-
views.RelationshipEditView.as_view(),
|
|
534
|
-
name="relationship_edit",
|
|
535
|
-
),
|
|
536
|
-
path(
|
|
537
|
-
"relationships/<uuid:pk>/delete/",
|
|
538
|
-
views.RelationshipDeleteView.as_view(),
|
|
539
|
-
name="relationship_delete",
|
|
540
|
-
),
|
|
541
473
|
path(
|
|
542
474
|
"relationships/<uuid:pk>/changelog/",
|
|
543
475
|
views.ObjectChangeLogView.as_view(),
|
nautobot/extras/views.py
CHANGED
|
@@ -31,9 +31,10 @@ from nautobot.core.forms import restrict_form_fields
|
|
|
31
31
|
from nautobot.core.models.querysets import count_related
|
|
32
32
|
from nautobot.core.models.utils import pretty_print_query, serialize_object_v2
|
|
33
33
|
from nautobot.core.tables import ButtonsColumn
|
|
34
|
+
from nautobot.core.templatetags import helpers
|
|
34
35
|
from nautobot.core.ui import object_detail
|
|
35
36
|
from nautobot.core.ui.choices import SectionChoices
|
|
36
|
-
from nautobot.core.ui.object_detail import ObjectDetailContent, ObjectFieldsPanel
|
|
37
|
+
from nautobot.core.ui.object_detail import ObjectDetailContent, ObjectFieldsPanel, ObjectTextPanel
|
|
37
38
|
from nautobot.core.utils.config import get_settings_or_config
|
|
38
39
|
from nautobot.core.utils.lookup import (
|
|
39
40
|
get_filterset_for_model,
|
|
@@ -407,22 +408,37 @@ class ContactUIViewSet(NautobotUIViewSet):
|
|
|
407
408
|
serializer_class = serializers.ContactSerializer
|
|
408
409
|
table_class = tables.ContactTable
|
|
409
410
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
411
|
+
object_detail_content = object_detail.ObjectDetailContent(
|
|
412
|
+
panels=(
|
|
413
|
+
object_detail.ObjectFieldsPanel(
|
|
414
|
+
weight=100,
|
|
415
|
+
section=SectionChoices.LEFT_HALF,
|
|
416
|
+
fields="__all__",
|
|
417
|
+
value_transforms={
|
|
418
|
+
"address": [helpers.render_address],
|
|
419
|
+
"email": [helpers.hyperlinked_email],
|
|
420
|
+
"phone": [helpers.hyperlinked_phone_number],
|
|
421
|
+
},
|
|
422
|
+
),
|
|
423
|
+
object_detail.ObjectsTablePanel(
|
|
424
|
+
weight=100,
|
|
425
|
+
section=SectionChoices.RIGHT_HALF,
|
|
426
|
+
table_class=tables.TeamTable,
|
|
427
|
+
table_filter="contacts",
|
|
428
|
+
table_title="Assigned Teams",
|
|
429
|
+
exclude_columns=["actions"],
|
|
430
|
+
add_button_route=None,
|
|
431
|
+
),
|
|
432
|
+
object_detail.ObjectsTablePanel(
|
|
433
|
+
weight=200,
|
|
434
|
+
section=SectionChoices.FULL_WIDTH,
|
|
435
|
+
table_class=tables.ContactAssociationTable,
|
|
436
|
+
table_filter="contact",
|
|
437
|
+
table_title="Contact For",
|
|
438
|
+
add_button_route=None,
|
|
439
|
+
),
|
|
440
|
+
),
|
|
441
|
+
)
|
|
426
442
|
|
|
427
443
|
|
|
428
444
|
class ContactAssociationUIViewSet(
|
|
@@ -959,30 +975,38 @@ class ObjectDynamicGroupsView(generic.GenericView):
|
|
|
959
975
|
#
|
|
960
976
|
|
|
961
977
|
|
|
962
|
-
class
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
action_buttons = ("add",)
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
class ExportTemplateView(generic.ObjectView):
|
|
971
|
-
queryset = ExportTemplate.objects.all()
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
class ExportTemplateEditView(generic.ObjectEditView):
|
|
975
|
-
queryset = ExportTemplate.objects.all()
|
|
976
|
-
model_form = forms.ExportTemplateForm
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
class ExportTemplateDeleteView(generic.ObjectDeleteView):
|
|
978
|
+
class ExportTemplateUIViewSet(NautobotUIViewSet):
|
|
979
|
+
bulk_update_form_class = forms.ExportTemplateBulkEditForm
|
|
980
|
+
filterset_class = filters.ExportTemplateFilterSet
|
|
981
|
+
filterset_form_class = forms.ExportTemplateFilterForm
|
|
982
|
+
form_class = forms.ExportTemplateForm
|
|
980
983
|
queryset = ExportTemplate.objects.all()
|
|
984
|
+
serializer_class = serializers.ExportTemplateSerializer
|
|
985
|
+
table_class = tables.ExportTemplateTable
|
|
981
986
|
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
987
|
+
object_detail_content = ObjectDetailContent(
|
|
988
|
+
panels=[
|
|
989
|
+
ObjectFieldsPanel(
|
|
990
|
+
label="Details",
|
|
991
|
+
section=SectionChoices.LEFT_HALF,
|
|
992
|
+
weight=100,
|
|
993
|
+
fields=["name", "owner", "description"],
|
|
994
|
+
),
|
|
995
|
+
ObjectFieldsPanel(
|
|
996
|
+
label="Template",
|
|
997
|
+
section=SectionChoices.LEFT_HALF,
|
|
998
|
+
weight=200,
|
|
999
|
+
fields=["content_type", "mime_type", "file_extension"],
|
|
1000
|
+
),
|
|
1001
|
+
ObjectTextPanel(
|
|
1002
|
+
label="Code Template",
|
|
1003
|
+
section=SectionChoices.RIGHT_HALF,
|
|
1004
|
+
weight=100,
|
|
1005
|
+
object_field="template_code",
|
|
1006
|
+
render_as=ObjectTextPanel.RenderOptions.CODE,
|
|
1007
|
+
),
|
|
1008
|
+
]
|
|
1009
|
+
)
|
|
986
1010
|
|
|
987
1011
|
|
|
988
1012
|
#
|
|
@@ -2403,16 +2427,15 @@ class ObjectNotesView(generic.GenericView):
|
|
|
2403
2427
|
#
|
|
2404
2428
|
|
|
2405
2429
|
|
|
2406
|
-
class
|
|
2430
|
+
class RelationshipUIViewSet(NautobotUIViewSet):
|
|
2431
|
+
bulk_update_form_class = forms.RelationshipBulkEditForm
|
|
2432
|
+
filterset_class = filters.RelationshipFilterSet
|
|
2433
|
+
filterset_form_class = forms.RelationshipFilterForm
|
|
2434
|
+
form_class = forms.RelationshipForm
|
|
2435
|
+
serializer_class = serializers.RelationshipSerializer
|
|
2436
|
+
table_class = tables.RelationshipTable
|
|
2407
2437
|
queryset = Relationship.objects.all()
|
|
2408
|
-
filterset = filters.RelationshipFilterSet
|
|
2409
|
-
filterset_form = forms.RelationshipFilterForm
|
|
2410
|
-
table = tables.RelationshipTable
|
|
2411
|
-
action_buttons = ("add",)
|
|
2412
|
-
|
|
2413
2438
|
|
|
2414
|
-
class RelationshipView(generic.ObjectView):
|
|
2415
|
-
queryset = Relationship.objects.all()
|
|
2416
2439
|
object_detail_content = ObjectDetailContent(
|
|
2417
2440
|
panels=(
|
|
2418
2441
|
ObjectFieldsPanel(
|
|
@@ -2447,22 +2470,6 @@ class RelationshipView(generic.ObjectView):
|
|
|
2447
2470
|
)
|
|
2448
2471
|
|
|
2449
2472
|
|
|
2450
|
-
class RelationshipEditView(generic.ObjectEditView):
|
|
2451
|
-
queryset = Relationship.objects.all()
|
|
2452
|
-
model_form = forms.RelationshipForm
|
|
2453
|
-
template_name = "extras/relationship_edit.html"
|
|
2454
|
-
|
|
2455
|
-
|
|
2456
|
-
class RelationshipBulkDeleteView(generic.BulkDeleteView):
|
|
2457
|
-
queryset = Relationship.objects.all()
|
|
2458
|
-
table = tables.RelationshipTable
|
|
2459
|
-
filterset = filters.RelationshipFilterSet
|
|
2460
|
-
|
|
2461
|
-
|
|
2462
|
-
class RelationshipDeleteView(generic.ObjectDeleteView):
|
|
2463
|
-
queryset = Relationship.objects.all()
|
|
2464
|
-
|
|
2465
|
-
|
|
2466
2473
|
class RelationshipAssociationListView(generic.ObjectListView):
|
|
2467
2474
|
queryset = RelationshipAssociation.objects.all()
|
|
2468
2475
|
filterset = filters.RelationshipAssociationFilterSet
|
|
@@ -3021,22 +3028,37 @@ class TeamUIViewSet(NautobotUIViewSet):
|
|
|
3021
3028
|
serializer_class = serializers.TeamSerializer
|
|
3022
3029
|
table_class = tables.TeamTable
|
|
3023
3030
|
|
|
3024
|
-
|
|
3025
|
-
|
|
3026
|
-
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
|
|
3035
|
-
|
|
3036
|
-
|
|
3037
|
-
|
|
3038
|
-
|
|
3039
|
-
|
|
3031
|
+
object_detail_content = object_detail.ObjectDetailContent(
|
|
3032
|
+
panels=(
|
|
3033
|
+
object_detail.ObjectFieldsPanel(
|
|
3034
|
+
weight=100,
|
|
3035
|
+
section=SectionChoices.LEFT_HALF,
|
|
3036
|
+
fields="__all__",
|
|
3037
|
+
value_transforms={
|
|
3038
|
+
"address": [helpers.render_address],
|
|
3039
|
+
"email": [helpers.hyperlinked_email],
|
|
3040
|
+
"phone": [helpers.hyperlinked_phone_number],
|
|
3041
|
+
},
|
|
3042
|
+
),
|
|
3043
|
+
object_detail.ObjectsTablePanel(
|
|
3044
|
+
weight=100,
|
|
3045
|
+
section=SectionChoices.RIGHT_HALF,
|
|
3046
|
+
table_class=tables.ContactTable,
|
|
3047
|
+
table_filter="teams",
|
|
3048
|
+
table_title="Assigned Contacts",
|
|
3049
|
+
exclude_columns=["actions"],
|
|
3050
|
+
add_button_route=None,
|
|
3051
|
+
),
|
|
3052
|
+
object_detail.ObjectsTablePanel(
|
|
3053
|
+
weight=200,
|
|
3054
|
+
section=SectionChoices.FULL_WIDTH,
|
|
3055
|
+
table_class=tables.ContactAssociationTable,
|
|
3056
|
+
table_filter="team",
|
|
3057
|
+
table_title="Contact For",
|
|
3058
|
+
add_button_route=None,
|
|
3059
|
+
),
|
|
3060
|
+
)
|
|
3061
|
+
)
|
|
3040
3062
|
|
|
3041
3063
|
|
|
3042
3064
|
#
|
nautobot/ipam/tables.py
CHANGED
|
@@ -709,6 +709,7 @@ class VLANTable(StatusTableMixin, RoleTableMixin, BaseTable):
|
|
|
709
709
|
location_count = LinkedCountColumn(
|
|
710
710
|
viewname="dcim:location_list",
|
|
711
711
|
url_params={"vlans": "pk"},
|
|
712
|
+
display_field="name",
|
|
712
713
|
verbose_name="Locations",
|
|
713
714
|
)
|
|
714
715
|
tenant = TenantColumn()
|
|
@@ -890,6 +890,11 @@ td span.hover_copy:hover .hover_copy_button {
|
|
|
890
890
|
cursor: move;
|
|
891
891
|
}
|
|
892
892
|
|
|
893
|
+
/* Make text in homepage panels selectable */
|
|
894
|
+
#draggable-homepage-panels .list-group-item {
|
|
895
|
+
user-select: text !important;
|
|
896
|
+
}
|
|
897
|
+
|
|
893
898
|
/* Make panel being dragged opaque */
|
|
894
899
|
.dragging {
|
|
895
900
|
opacity: 0.5;
|
|
@@ -9338,8 +9338,6 @@
|
|
|
9338
9338
|
|
|
9339
9339
|
<script src="../assets/javascripts/bundle.60a45f97.min.js"></script>
|
|
9340
9340
|
|
|
9341
|
-
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
|
9342
|
-
|
|
9343
9341
|
|
|
9344
9342
|
<script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});
|
|
9345
9343
|
document$.subscribe(() => { lightbox.reload() });
|
|
@@ -9271,8 +9271,6 @@
|
|
|
9271
9271
|
|
|
9272
9272
|
<script src="../assets/javascripts/bundle.60a45f97.min.js"></script>
|
|
9273
9273
|
|
|
9274
|
-
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
|
9275
|
-
|
|
9276
9274
|
|
|
9277
9275
|
<script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});
|
|
9278
9276
|
document$.subscribe(() => { lightbox.reload() });
|
|
@@ -9539,8 +9539,6 @@ Relationships, etc.</p>
|
|
|
9539
9539
|
|
|
9540
9540
|
<script src="../../../assets/javascripts/bundle.60a45f97.min.js"></script>
|
|
9541
9541
|
|
|
9542
|
-
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
|
9543
|
-
|
|
9544
9542
|
|
|
9545
9543
|
<script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});
|
|
9546
9544
|
document$.subscribe(() => { lightbox.reload() });
|
|
@@ -9407,8 +9407,6 @@
|
|
|
9407
9407
|
|
|
9408
9408
|
<script src="../../../assets/javascripts/bundle.60a45f97.min.js"></script>
|
|
9409
9409
|
|
|
9410
|
-
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
|
9411
|
-
|
|
9412
9410
|
|
|
9413
9411
|
<script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});
|
|
9414
9412
|
document$.subscribe(() => { lightbox.reload() });
|