nautobot 3.0.3__py3-none-any.whl → 3.0.5__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.
- nautobot/core/authentication.py +0 -1
- nautobot/core/celery/schedulers.py +1 -3
- nautobot/core/cli/__init__.py +81 -39
- nautobot/core/settings.yaml +12 -4
- nautobot/core/tables.py +28 -17
- nautobot/core/templates/graphene/graphiql.html +3 -5
- nautobot/core/templates/inc/javascript.html +5 -10
- nautobot/core/templates/inc/media.html +5 -4
- nautobot/core/templates/inc/media_failure.html +73 -0
- nautobot/core/templates/media_failure.html +1 -0
- nautobot/core/tests/test_cli.py +120 -1
- nautobot/core/tests/test_templatetags_helpers.py +9 -9
- nautobot/core/ui/object_detail.py +1 -0
- nautobot/dcim/forms.py +1 -0
- nautobot/dcim/tables/devices.py +6 -5
- nautobot/dcim/tables/template_code.py +8 -4
- nautobot/dcim/templates/dcim/platform_create.html +3 -4
- nautobot/dcim/tests/test_tables.py +5 -6
- nautobot/dcim/views.py +6 -7
- nautobot/extras/models/jobs.py +7 -1
- nautobot/extras/signals.py +143 -113
- nautobot/extras/tables.py +3 -3
- nautobot/extras/templates/extras/inc/jobresult_js.html +1 -2
- nautobot/extras/templates/extras/scheduledjob.html +3 -1
- nautobot/extras/tests/test_customfields.py +75 -9
- nautobot/extras/tests/test_utils.py +116 -1
- nautobot/extras/utils.py +18 -16
- nautobot/extras/views.py +2 -14
- nautobot/ipam/apps.py +1 -0
- nautobot/ipam/filters.py +58 -3
- nautobot/ipam/tables.py +8 -4
- nautobot/ipam/tests/test_filters.py +55 -0
- nautobot/project-static/dist/css/nautobot.css +1 -1
- nautobot/project-static/dist/css/nautobot.css.map +1 -1
- nautobot/project-static/docs/404.html +64 -8
- nautobot/project-static/docs/apps/index.html +64 -8
- nautobot/project-static/docs/apps/nautobot-apps.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/events.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/templatetags.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +64 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +64 -8
- nautobot/project-static/docs/development/apps/api/configuration-view.html +64 -8
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +64 -8
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +67 -11
- nautobot/project-static/docs/development/apps/api/models/global-search.html +64 -8
- nautobot/project-static/docs/development/apps/api/models/graphql.html +64 -8
- nautobot/project-static/docs/development/apps/api/models/index.html +64 -8
- nautobot/project-static/docs/development/apps/api/models/queryset.html +13440 -0
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +64 -8
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +64 -8
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +64 -8
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +64 -8
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +64 -8
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +64 -8
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +64 -8
- nautobot/project-static/docs/development/apps/api/platform-features/prepopulating-data.html +64 -8
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +64 -8
- nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +64 -8
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +64 -8
- nautobot/project-static/docs/development/apps/api/prometheus.html +64 -8
- nautobot/project-static/docs/development/apps/api/setup.html +64 -8
- nautobot/project-static/docs/development/apps/api/testing.html +64 -8
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +64 -8
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +64 -8
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +64 -8
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +64 -8
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +64 -8
- nautobot/project-static/docs/development/apps/api/views/base-template.html +64 -8
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +64 -8
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +64 -8
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +64 -8
- nautobot/project-static/docs/development/apps/api/views/index.html +67 -11
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +64 -8
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +64 -8
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +64 -8
- nautobot/project-static/docs/development/apps/api/views/notes.html +64 -8
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +64 -8
- nautobot/project-static/docs/development/apps/api/views/urls.html +64 -8
- nautobot/project-static/docs/development/apps/index.html +64 -8
- nautobot/project-static/docs/development/apps/migration/code-updates.html +64 -8
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +64 -8
- nautobot/project-static/docs/development/apps/migration/from-v1.html +64 -8
- nautobot/project-static/docs/development/apps/migration/from-v2/migrating-v2-to-v3.html +64 -8
- nautobot/project-static/docs/development/apps/migration/from-v2/new-nautobot-custom-ui-apis.html +64 -8
- nautobot/project-static/docs/development/apps/migration/from-v2/overview.html +68 -8
- nautobot/project-static/docs/development/apps/migration/from-v2/upgrading-from-bootstrap-v3-to-v5.html +64 -8
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +64 -8
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +64 -8
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +64 -8
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +64 -8
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +64 -8
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/breadcrumbs-titles.html +64 -8
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +64 -8
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +64 -8
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +64 -8
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +64 -8
- nautobot/project-static/docs/development/core/application-registry.html +64 -8
- nautobot/project-static/docs/development/core/best-practices.html +64 -8
- nautobot/project-static/docs/development/core/caching.html +64 -8
- nautobot/project-static/docs/development/core/controllers.html +64 -8
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +64 -8
- nautobot/project-static/docs/development/core/docs-media-standards.html +64 -8
- nautobot/project-static/docs/development/core/generic-views.html +64 -8
- nautobot/project-static/docs/development/core/getting-started.html +64 -8
- nautobot/project-static/docs/development/core/homepage.html +64 -8
- nautobot/project-static/docs/development/core/index.html +64 -8
- nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +64 -8
- nautobot/project-static/docs/development/core/model-checklist.html +64 -8
- nautobot/project-static/docs/development/core/model-features.html +64 -8
- nautobot/project-static/docs/development/core/natural-keys.html +64 -8
- nautobot/project-static/docs/development/core/navigation-menu.html +64 -8
- nautobot/project-static/docs/development/core/release-checklist.html +66 -8
- nautobot/project-static/docs/development/core/role-internals.html +64 -8
- nautobot/project-static/docs/development/core/settings.html +64 -8
- nautobot/project-static/docs/development/core/style-guide.html +64 -8
- nautobot/project-static/docs/development/core/templates.html +64 -8
- nautobot/project-static/docs/development/core/testing.html +64 -8
- nautobot/project-static/docs/development/core/ui-best-practices.html +64 -8
- nautobot/project-static/docs/development/core/ui-component-framework.html +64 -8
- nautobot/project-static/docs/development/core/user-preferences.html +64 -8
- nautobot/project-static/docs/development/index.html +64 -8
- nautobot/project-static/docs/development/jobs/getting-started.html +64 -8
- nautobot/project-static/docs/development/jobs/index.html +64 -8
- nautobot/project-static/docs/development/jobs/installation.html +64 -8
- nautobot/project-static/docs/development/jobs/job-extensions.html +64 -8
- nautobot/project-static/docs/development/jobs/job-logging.html +64 -8
- nautobot/project-static/docs/development/jobs/job-patterns.html +64 -8
- nautobot/project-static/docs/development/jobs/job-structure.html +64 -8
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +64 -8
- nautobot/project-static/docs/development/jobs/testing.html +64 -8
- nautobot/project-static/docs/index.html +64 -8
- nautobot/project-static/docs/overview/application_stack.html +64 -8
- nautobot/project-static/docs/overview/design_philosophy.html +64 -8
- nautobot/project-static/docs/release-notes/index.html +64 -8
- nautobot/project-static/docs/release-notes/version-1.0.html +64 -8
- nautobot/project-static/docs/release-notes/version-1.1.html +64 -8
- nautobot/project-static/docs/release-notes/version-1.2.html +65 -9
- nautobot/project-static/docs/release-notes/version-1.3.html +64 -8
- nautobot/project-static/docs/release-notes/version-1.4.html +64 -8
- nautobot/project-static/docs/release-notes/version-1.5.html +64 -8
- nautobot/project-static/docs/release-notes/version-1.6.html +64 -8
- nautobot/project-static/docs/release-notes/version-2.0.html +64 -8
- nautobot/project-static/docs/release-notes/version-2.1.html +64 -8
- nautobot/project-static/docs/release-notes/version-2.2.html +64 -8
- nautobot/project-static/docs/release-notes/version-2.3.html +64 -8
- nautobot/project-static/docs/release-notes/version-2.4.html +584 -8
- nautobot/project-static/docs/release-notes/version-3.0.html +467 -8
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +337 -329
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +64 -8
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +64 -8
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +64 -8
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +64 -8
- nautobot/project-static/docs/user-guide/administration/configuration/redis.html +64 -8
- nautobot/project-static/docs/user-guide/administration/configuration/settings.html +75 -12
- nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +64 -8
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +64 -8
- nautobot/project-static/docs/user-guide/administration/guides/docker.html +64 -8
- nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +64 -8
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +64 -8
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +64 -8
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +64 -8
- nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +64 -8
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +64 -8
- nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +64 -8
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +64 -8
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +64 -8
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +72 -9
- nautobot/project-static/docs/user-guide/administration/installation/index.html +64 -8
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +64 -8
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +64 -8
- nautobot/project-static/docs/user-guide/administration/installation/services.html +64 -8
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +65 -9
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +64 -8
- nautobot/project-static/docs/user-guide/administration/security/index.html +64 -8
- nautobot/project-static/docs/user-guide/administration/security/notices.html +64 -8
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +64 -8
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +64 -8
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +67 -11
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +64 -8
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +64 -8
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +64 -8
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +64 -8
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +64 -8
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +64 -8
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +64 -8
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v2/index.html +68 -8
- nautobot/project-static/docs/user-guide/administration/upgrading/postgresql.html +13391 -0
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +125 -15
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulefamily.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/load-balancers/certificateprofile.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/load-balancers/healthcheckmonitor.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/load-balancers/index.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/load-balancers/loadbalancerpool.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/load-balancers/loadbalancerpoolmember.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/load-balancers/virtualserver.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/vpn/index.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/vpn/vpn.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/vpn/vpnphase1policy.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/vpn/vpnphase2policy.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/vpn/vpnprofile.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/vpn/vpntunnel.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/vpn/vpntunnelendpoint.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +64 -8
- nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +64 -8
- nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +64 -8
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +64 -8
- nautobot/project-static/docs/user-guide/feature-guides/data-compliance.html +64 -8
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +64 -8
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +64 -8
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +64 -8
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +64 -8
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +64 -8
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +64 -8
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +64 -8
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +75 -12
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +85 -17
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +64 -8
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +64 -8
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/12-add-tenant-dark.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/12-add-tenant-light.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/13-assign-tenant-to-device-dark.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/13-assign-tenant-to-device-light.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/14-assign-tenant-to-device-2-dark.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/14-assign-tenant-to-device-2-light.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/22-create-vlans-dark.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/22-create-vlans-light.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/23-create-vlans-2-dark.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/23-create-vlans-2-light.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/24-vlan-main-page-dark.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/24-vlan-main-page-light.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/25-add-vlan-to-interface-dark.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/25-add-vlan-to-interface-light.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/26-add-vlan-to-interface-2-dark.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/26-add-vlan-to-interface-2-light.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +64 -8
- nautobot/project-static/docs/user-guide/feature-guides/load-balancers.html +64 -8
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +64 -8
- nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +64 -8
- nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +64 -8
- nautobot/project-static/docs/user-guide/index.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/approval-workflow.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/data-validation.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/echarts.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/events.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/managing-jobs.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +116 -34
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/user-interface/configurablecolumns.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/user-interface/savedview.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/user-interface/search.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/users/groups.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +64 -8
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +64 -8
- nautobot/tenancy/tables.py +1 -1
- nautobot/ui/package-lock.json +36 -36
- nautobot/ui/package.json +3 -3
- nautobot/ui/src/scss/nautobot.scss +2 -1
- nautobot/users/models.py +33 -0
- nautobot/users/tests/test_models.py +83 -0
- {nautobot-3.0.3.dist-info → nautobot-3.0.5.dist-info}/METADATA +4 -4
- {nautobot-3.0.3.dist-info → nautobot-3.0.5.dist-info}/RECORD +397 -386
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/12-add-tenant.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/13-assign-tenant-to-device.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/14-assign-tenant-to-device-2.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/22-create-vlans.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/23-create-vlans-2.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/24-vlan-main-page.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/25-add-vlan-to-interface.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/26-add-vlan-to-interface-2.png +0 -0
- {nautobot-3.0.3.dist-info → nautobot-3.0.5.dist-info}/LICENSE.txt +0 -0
- {nautobot-3.0.3.dist-info → nautobot-3.0.5.dist-info}/NOTICE +0 -0
- {nautobot-3.0.3.dist-info → nautobot-3.0.5.dist-info}/WHEEL +0 -0
- {nautobot-3.0.3.dist-info → nautobot-3.0.5.dist-info}/entry_points.txt +0 -0
|
@@ -974,6 +974,34 @@
|
|
|
974
974
|
|
|
975
975
|
|
|
976
976
|
|
|
977
|
+
<li class="md-nav__item">
|
|
978
|
+
<a href="../../administration/upgrading/postgresql.html" class="md-nav__link">
|
|
979
|
+
|
|
980
|
+
|
|
981
|
+
|
|
982
|
+
<span class="md-ellipsis">
|
|
983
|
+
|
|
984
|
+
|
|
985
|
+
Upgrading PostgreSQL
|
|
986
|
+
|
|
987
|
+
|
|
988
|
+
|
|
989
|
+
</span>
|
|
990
|
+
|
|
991
|
+
|
|
992
|
+
|
|
993
|
+
</a>
|
|
994
|
+
</li>
|
|
995
|
+
|
|
996
|
+
|
|
997
|
+
|
|
998
|
+
|
|
999
|
+
|
|
1000
|
+
|
|
1001
|
+
|
|
1002
|
+
|
|
1003
|
+
|
|
1004
|
+
|
|
977
1005
|
<li class="md-nav__item">
|
|
978
1006
|
<a href="../../administration/upgrading/upgrading.html" class="md-nav__link">
|
|
979
1007
|
|
|
@@ -1014,7 +1042,7 @@
|
|
|
1014
1042
|
|
|
1015
1043
|
|
|
1016
1044
|
|
|
1017
|
-
<input class="md-nav__toggle md-toggle " type="checkbox" id="
|
|
1045
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_2_4">
|
|
1018
1046
|
|
|
1019
1047
|
|
|
1020
1048
|
<div class="md-nav__link md-nav__container">
|
|
@@ -1036,14 +1064,14 @@
|
|
|
1036
1064
|
</a>
|
|
1037
1065
|
|
|
1038
1066
|
|
|
1039
|
-
<label class="md-nav__link " for="
|
|
1067
|
+
<label class="md-nav__link " for="__nav_2_1_2_4" id="__nav_2_1_2_4_label" tabindex="0">
|
|
1040
1068
|
<span class="md-nav__icon md-icon"></span>
|
|
1041
1069
|
</label>
|
|
1042
1070
|
|
|
1043
1071
|
</div>
|
|
1044
1072
|
|
|
1045
|
-
<nav class="md-nav" data-md-level="4" aria-labelledby="
|
|
1046
|
-
<label class="md-nav__title" for="
|
|
1073
|
+
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_1_2_4_label" aria-expanded="false">
|
|
1074
|
+
<label class="md-nav__title" for="__nav_2_1_2_4">
|
|
1047
1075
|
<span class="md-nav__icon md-icon"></span>
|
|
1048
1076
|
|
|
1049
1077
|
|
|
@@ -1099,7 +1127,7 @@
|
|
|
1099
1127
|
|
|
1100
1128
|
|
|
1101
1129
|
|
|
1102
|
-
<input class="md-nav__toggle md-toggle " type="checkbox" id="
|
|
1130
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_2_4_2">
|
|
1103
1131
|
|
|
1104
1132
|
|
|
1105
1133
|
<div class="md-nav__link md-nav__container">
|
|
@@ -1121,14 +1149,14 @@
|
|
|
1121
1149
|
</a>
|
|
1122
1150
|
|
|
1123
1151
|
|
|
1124
|
-
<label class="md-nav__link " for="
|
|
1152
|
+
<label class="md-nav__link " for="__nav_2_1_2_4_2" id="__nav_2_1_2_4_2_label" tabindex="0">
|
|
1125
1153
|
<span class="md-nav__icon md-icon"></span>
|
|
1126
1154
|
</label>
|
|
1127
1155
|
|
|
1128
1156
|
</div>
|
|
1129
1157
|
|
|
1130
|
-
<nav class="md-nav" data-md-level="5" aria-labelledby="
|
|
1131
|
-
<label class="md-nav__title" for="
|
|
1158
|
+
<nav class="md-nav" data-md-level="5" aria-labelledby="__nav_2_1_2_4_2_label" aria-expanded="false">
|
|
1159
|
+
<label class="md-nav__title" for="__nav_2_1_2_4_2">
|
|
1132
1160
|
<span class="md-nav__icon md-icon"></span>
|
|
1133
1161
|
|
|
1134
1162
|
|
|
@@ -8932,6 +8960,34 @@
|
|
|
8932
8960
|
|
|
8933
8961
|
|
|
8934
8962
|
|
|
8963
|
+
|
|
8964
|
+
|
|
8965
|
+
|
|
8966
|
+
|
|
8967
|
+
|
|
8968
|
+
|
|
8969
|
+
<li class="md-nav__item">
|
|
8970
|
+
<a href="../../../development/apps/api/models/queryset.html" class="md-nav__link">
|
|
8971
|
+
|
|
8972
|
+
|
|
8973
|
+
|
|
8974
|
+
<span class="md-ellipsis">
|
|
8975
|
+
|
|
8976
|
+
|
|
8977
|
+
QuerySet
|
|
8978
|
+
|
|
8979
|
+
|
|
8980
|
+
|
|
8981
|
+
</span>
|
|
8982
|
+
|
|
8983
|
+
|
|
8984
|
+
|
|
8985
|
+
</a>
|
|
8986
|
+
</li>
|
|
8987
|
+
|
|
8988
|
+
|
|
8989
|
+
|
|
8990
|
+
|
|
8935
8991
|
</ul>
|
|
8936
8992
|
</nav>
|
|
8937
8993
|
|
|
@@ -974,6 +974,34 @@
|
|
|
974
974
|
|
|
975
975
|
|
|
976
976
|
|
|
977
|
+
<li class="md-nav__item">
|
|
978
|
+
<a href="../administration/upgrading/postgresql.html" class="md-nav__link">
|
|
979
|
+
|
|
980
|
+
|
|
981
|
+
|
|
982
|
+
<span class="md-ellipsis">
|
|
983
|
+
|
|
984
|
+
|
|
985
|
+
Upgrading PostgreSQL
|
|
986
|
+
|
|
987
|
+
|
|
988
|
+
|
|
989
|
+
</span>
|
|
990
|
+
|
|
991
|
+
|
|
992
|
+
|
|
993
|
+
</a>
|
|
994
|
+
</li>
|
|
995
|
+
|
|
996
|
+
|
|
997
|
+
|
|
998
|
+
|
|
999
|
+
|
|
1000
|
+
|
|
1001
|
+
|
|
1002
|
+
|
|
1003
|
+
|
|
1004
|
+
|
|
977
1005
|
<li class="md-nav__item">
|
|
978
1006
|
<a href="../administration/upgrading/upgrading.html" class="md-nav__link">
|
|
979
1007
|
|
|
@@ -1014,7 +1042,7 @@
|
|
|
1014
1042
|
|
|
1015
1043
|
|
|
1016
1044
|
|
|
1017
|
-
<input class="md-nav__toggle md-toggle " type="checkbox" id="
|
|
1045
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_2_4">
|
|
1018
1046
|
|
|
1019
1047
|
|
|
1020
1048
|
<div class="md-nav__link md-nav__container">
|
|
@@ -1036,14 +1064,14 @@
|
|
|
1036
1064
|
</a>
|
|
1037
1065
|
|
|
1038
1066
|
|
|
1039
|
-
<label class="md-nav__link " for="
|
|
1067
|
+
<label class="md-nav__link " for="__nav_2_1_2_4" id="__nav_2_1_2_4_label" tabindex="0">
|
|
1040
1068
|
<span class="md-nav__icon md-icon"></span>
|
|
1041
1069
|
</label>
|
|
1042
1070
|
|
|
1043
1071
|
</div>
|
|
1044
1072
|
|
|
1045
|
-
<nav class="md-nav" data-md-level="4" aria-labelledby="
|
|
1046
|
-
<label class="md-nav__title" for="
|
|
1073
|
+
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_1_2_4_label" aria-expanded="false">
|
|
1074
|
+
<label class="md-nav__title" for="__nav_2_1_2_4">
|
|
1047
1075
|
<span class="md-nav__icon md-icon"></span>
|
|
1048
1076
|
|
|
1049
1077
|
|
|
@@ -1099,7 +1127,7 @@
|
|
|
1099
1127
|
|
|
1100
1128
|
|
|
1101
1129
|
|
|
1102
|
-
<input class="md-nav__toggle md-toggle " type="checkbox" id="
|
|
1130
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_2_4_2">
|
|
1103
1131
|
|
|
1104
1132
|
|
|
1105
1133
|
<div class="md-nav__link md-nav__container">
|
|
@@ -1121,14 +1149,14 @@
|
|
|
1121
1149
|
</a>
|
|
1122
1150
|
|
|
1123
1151
|
|
|
1124
|
-
<label class="md-nav__link " for="
|
|
1152
|
+
<label class="md-nav__link " for="__nav_2_1_2_4_2" id="__nav_2_1_2_4_2_label" tabindex="0">
|
|
1125
1153
|
<span class="md-nav__icon md-icon"></span>
|
|
1126
1154
|
</label>
|
|
1127
1155
|
|
|
1128
1156
|
</div>
|
|
1129
1157
|
|
|
1130
|
-
<nav class="md-nav" data-md-level="5" aria-labelledby="
|
|
1131
|
-
<label class="md-nav__title" for="
|
|
1158
|
+
<nav class="md-nav" data-md-level="5" aria-labelledby="__nav_2_1_2_4_2_label" aria-expanded="false">
|
|
1159
|
+
<label class="md-nav__title" for="__nav_2_1_2_4_2">
|
|
1132
1160
|
<span class="md-nav__icon md-icon"></span>
|
|
1133
1161
|
|
|
1134
1162
|
|
|
@@ -9039,6 +9067,34 @@
|
|
|
9039
9067
|
|
|
9040
9068
|
|
|
9041
9069
|
|
|
9070
|
+
|
|
9071
|
+
|
|
9072
|
+
|
|
9073
|
+
|
|
9074
|
+
|
|
9075
|
+
|
|
9076
|
+
<li class="md-nav__item">
|
|
9077
|
+
<a href="../../development/apps/api/models/queryset.html" class="md-nav__link">
|
|
9078
|
+
|
|
9079
|
+
|
|
9080
|
+
|
|
9081
|
+
<span class="md-ellipsis">
|
|
9082
|
+
|
|
9083
|
+
|
|
9084
|
+
QuerySet
|
|
9085
|
+
|
|
9086
|
+
|
|
9087
|
+
|
|
9088
|
+
</span>
|
|
9089
|
+
|
|
9090
|
+
|
|
9091
|
+
|
|
9092
|
+
</a>
|
|
9093
|
+
</li>
|
|
9094
|
+
|
|
9095
|
+
|
|
9096
|
+
|
|
9097
|
+
|
|
9042
9098
|
</ul>
|
|
9043
9099
|
</nav>
|
|
9044
9100
|
|
nautobot/tenancy/tables.py
CHANGED
|
@@ -35,7 +35,7 @@ class TenantColumn(tables.TemplateColumn):
|
|
|
35
35
|
{% elif record.vrf.tenant %}
|
|
36
36
|
<a href="{{ record.vrf.tenant.get_absolute_url }}" title="{{ record.vrf.tenant.description }}">{{ record.vrf.tenant }}</a>*
|
|
37
37
|
{% else %}
|
|
38
|
-
|
|
38
|
+
<span class="text-secondary">—</span>
|
|
39
39
|
{% endif %}
|
|
40
40
|
"""
|
|
41
41
|
|
nautobot/ui/package-lock.json
CHANGED
|
@@ -41,10 +41,10 @@
|
|
|
41
41
|
"npm-run-all2": "^8.0.4",
|
|
42
42
|
"postcss": "^8.5.6",
|
|
43
43
|
"postcss-loader": "^8.2.0",
|
|
44
|
-
"prettier": "^3.
|
|
45
|
-
"sass": "^1.
|
|
44
|
+
"prettier": "^3.7.4",
|
|
45
|
+
"sass": "^1.97.1",
|
|
46
46
|
"sass-loader": "^16.0.6",
|
|
47
|
-
"webpack": "^5.
|
|
47
|
+
"webpack": "^5.104.1",
|
|
48
48
|
"webpack-cli": "^6.0.1"
|
|
49
49
|
}
|
|
50
50
|
},
|
|
@@ -98,9 +98,9 @@
|
|
|
98
98
|
}
|
|
99
99
|
},
|
|
100
100
|
"node_modules/@codemirror/state": {
|
|
101
|
-
"version": "6.5.
|
|
102
|
-
"resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.
|
|
103
|
-
"integrity": "sha512-
|
|
101
|
+
"version": "6.5.3",
|
|
102
|
+
"resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.3.tgz",
|
|
103
|
+
"integrity": "sha512-MerMzJzlXogk2fxWFU1nKp36bY5orBG59HnPiz0G9nLRebWa0zXuv2siH6PLIHBvv5TH8CkQRqjBs0MlxCZu+A==",
|
|
104
104
|
"license": "MIT",
|
|
105
105
|
"peer": true,
|
|
106
106
|
"dependencies": {
|
|
@@ -108,9 +108,9 @@
|
|
|
108
108
|
}
|
|
109
109
|
},
|
|
110
110
|
"node_modules/@codemirror/view": {
|
|
111
|
-
"version": "6.39.
|
|
112
|
-
"resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.39.
|
|
113
|
-
"integrity": "sha512-
|
|
111
|
+
"version": "6.39.8",
|
|
112
|
+
"resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.39.8.tgz",
|
|
113
|
+
"integrity": "sha512-1rASYd9Z/mE3tkbC9wInRlCNyCkSn+nLsiQKZhEDUUJiUfs/5FHDpCUDaQpoTIaNGeDc6/bhaEAyLmeEucEFPw==",
|
|
114
114
|
"license": "MIT",
|
|
115
115
|
"peer": true,
|
|
116
116
|
"dependencies": {
|
|
@@ -131,9 +131,9 @@
|
|
|
131
131
|
}
|
|
132
132
|
},
|
|
133
133
|
"node_modules/@eslint-community/eslint-utils": {
|
|
134
|
-
"version": "4.9.
|
|
135
|
-
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.
|
|
136
|
-
"integrity": "sha512-
|
|
134
|
+
"version": "4.9.1",
|
|
135
|
+
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
|
|
136
|
+
"integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
|
|
137
137
|
"dev": true,
|
|
138
138
|
"license": "MIT",
|
|
139
139
|
"dependencies": {
|
|
@@ -481,9 +481,9 @@
|
|
|
481
481
|
}
|
|
482
482
|
},
|
|
483
483
|
"node_modules/@lezer/common": {
|
|
484
|
-
"version": "1.
|
|
485
|
-
"resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.
|
|
486
|
-
"integrity": "sha512-
|
|
484
|
+
"version": "1.5.0",
|
|
485
|
+
"resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.5.0.tgz",
|
|
486
|
+
"integrity": "sha512-PNGcolp9hr4PJdXR4ix7XtixDrClScvtSCYW3rQG106oVMOOI+jFb+0+J3mbeL/53g1Zd6s0kJzaw6Ri68GmAA==",
|
|
487
487
|
"license": "MIT",
|
|
488
488
|
"peer": true
|
|
489
489
|
},
|
|
@@ -1146,9 +1146,9 @@
|
|
|
1146
1146
|
"license": "MIT"
|
|
1147
1147
|
},
|
|
1148
1148
|
"node_modules/@types/node": {
|
|
1149
|
-
"version": "25.0.
|
|
1150
|
-
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.
|
|
1151
|
-
"integrity": "sha512-
|
|
1149
|
+
"version": "25.0.3",
|
|
1150
|
+
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz",
|
|
1151
|
+
"integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==",
|
|
1152
1152
|
"devOptional": true,
|
|
1153
1153
|
"license": "MIT",
|
|
1154
1154
|
"dependencies": {
|
|
@@ -1702,9 +1702,9 @@
|
|
|
1702
1702
|
"license": "MIT"
|
|
1703
1703
|
},
|
|
1704
1704
|
"node_modules/baseline-browser-mapping": {
|
|
1705
|
-
"version": "2.9.
|
|
1706
|
-
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.
|
|
1707
|
-
"integrity": "sha512-
|
|
1705
|
+
"version": "2.9.11",
|
|
1706
|
+
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz",
|
|
1707
|
+
"integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==",
|
|
1708
1708
|
"dev": true,
|
|
1709
1709
|
"license": "Apache-2.0",
|
|
1710
1710
|
"bin": {
|
|
@@ -1857,9 +1857,9 @@
|
|
|
1857
1857
|
}
|
|
1858
1858
|
},
|
|
1859
1859
|
"node_modules/caniuse-lite": {
|
|
1860
|
-
"version": "1.0.
|
|
1861
|
-
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.
|
|
1862
|
-
"integrity": "sha512-
|
|
1860
|
+
"version": "1.0.30001762",
|
|
1861
|
+
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz",
|
|
1862
|
+
"integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==",
|
|
1863
1863
|
"dev": true,
|
|
1864
1864
|
"funding": [
|
|
1865
1865
|
{
|
|
@@ -2794,9 +2794,9 @@
|
|
|
2794
2794
|
}
|
|
2795
2795
|
},
|
|
2796
2796
|
"node_modules/esquery": {
|
|
2797
|
-
"version": "1.
|
|
2798
|
-
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.
|
|
2799
|
-
"integrity": "sha512-
|
|
2797
|
+
"version": "1.7.0",
|
|
2798
|
+
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
|
|
2799
|
+
"integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
|
|
2800
2800
|
"dev": true,
|
|
2801
2801
|
"license": "BSD-3-Clause",
|
|
2802
2802
|
"dependencies": {
|
|
@@ -5432,9 +5432,9 @@
|
|
|
5432
5432
|
}
|
|
5433
5433
|
},
|
|
5434
5434
|
"node_modules/sass": {
|
|
5435
|
-
"version": "1.97.
|
|
5436
|
-
"resolved": "https://registry.npmjs.org/sass/-/sass-1.97.
|
|
5437
|
-
"integrity": "sha512-
|
|
5435
|
+
"version": "1.97.1",
|
|
5436
|
+
"resolved": "https://registry.npmjs.org/sass/-/sass-1.97.1.tgz",
|
|
5437
|
+
"integrity": "sha512-uf6HoO8fy6ClsrShvMgaKUn14f2EHQLQRtpsZZLeU/Mv0Q1K5P0+x2uvH6Cub39TVVbWNSrraUhDAoFph6vh0A==",
|
|
5438
5438
|
"dev": true,
|
|
5439
5439
|
"license": "MIT",
|
|
5440
5440
|
"dependencies": {
|
|
@@ -6326,9 +6326,9 @@
|
|
|
6326
6326
|
"peer": true
|
|
6327
6327
|
},
|
|
6328
6328
|
"node_modules/watchpack": {
|
|
6329
|
-
"version": "2.
|
|
6330
|
-
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.
|
|
6331
|
-
"integrity": "sha512-
|
|
6329
|
+
"version": "2.5.0",
|
|
6330
|
+
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.0.tgz",
|
|
6331
|
+
"integrity": "sha512-e6vZvY6xboSwLz2GD36c16+O/2Z6fKvIf4pOXptw2rY9MVwE/TXc6RGqxD3I3x0a28lwBY7DE+76uTPSsBrrCA==",
|
|
6332
6332
|
"dev": true,
|
|
6333
6333
|
"license": "MIT",
|
|
6334
6334
|
"dependencies": {
|
|
@@ -6340,9 +6340,9 @@
|
|
|
6340
6340
|
}
|
|
6341
6341
|
},
|
|
6342
6342
|
"node_modules/webpack": {
|
|
6343
|
-
"version": "5.104.
|
|
6344
|
-
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.
|
|
6345
|
-
"integrity": "sha512-
|
|
6343
|
+
"version": "5.104.1",
|
|
6344
|
+
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz",
|
|
6345
|
+
"integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==",
|
|
6346
6346
|
"dev": true,
|
|
6347
6347
|
"license": "MIT",
|
|
6348
6348
|
"dependencies": {
|
nautobot/ui/package.json
CHANGED
|
@@ -47,10 +47,10 @@
|
|
|
47
47
|
"npm-run-all2": "^8.0.4",
|
|
48
48
|
"postcss": "^8.5.6",
|
|
49
49
|
"postcss-loader": "^8.2.0",
|
|
50
|
-
"prettier": "^3.
|
|
51
|
-
"sass": "^1.
|
|
50
|
+
"prettier": "^3.7.4",
|
|
51
|
+
"sass": "^1.97.1",
|
|
52
52
|
"sass-loader": "^16.0.6",
|
|
53
|
-
"webpack": "^5.
|
|
53
|
+
"webpack": "^5.104.1",
|
|
54
54
|
"webpack-cli": "^6.0.1"
|
|
55
55
|
},
|
|
56
56
|
"devEngines": {
|
|
@@ -1526,12 +1526,13 @@ body {
|
|
|
1526
1526
|
@include transition(padding-inline .35s ease);
|
|
1527
1527
|
display: grid;
|
|
1528
1528
|
grid-template-areas:
|
|
1529
|
+
"sidenav banner-global-area drawer"
|
|
1529
1530
|
"sidenav header drawer"
|
|
1530
1531
|
"sidenav main-content drawer"
|
|
1531
1532
|
"sidenav banner-bottom-area drawer"
|
|
1532
1533
|
"sidenav footer drawer";
|
|
1533
1534
|
grid-template-columns: fit-content(0) minmax(0, 1fr) fit-content(0);
|
|
1534
|
-
grid-template-rows: fit-content(0) 1fr fit-content(0) fit-content(0);
|
|
1535
|
+
grid-template-rows: fit-content(0) fit-content(0) 1fr fit-content(0) fit-content(0);
|
|
1535
1536
|
overflow-y: scroll;
|
|
1536
1537
|
|
|
1537
1538
|
#sidenav {
|
nautobot/users/models.py
CHANGED
|
@@ -14,6 +14,7 @@ from nautobot.core.constants import CHARFIELD_MAX_LENGTH
|
|
|
14
14
|
from nautobot.core.models import BaseManager, BaseModel, CompositeKeyQuerySetMixin
|
|
15
15
|
from nautobot.core.models.fields import JSONArrayField
|
|
16
16
|
from nautobot.core.utils.data import flatten_dict
|
|
17
|
+
from nautobot.core.utils.permissions import resolve_permission
|
|
17
18
|
from nautobot.extras.models.change_logging import ChangeLoggedModel
|
|
18
19
|
|
|
19
20
|
__all__ = (
|
|
@@ -73,6 +74,38 @@ class User(BaseModel, AbstractUser):
|
|
|
73
74
|
db_table = "auth_user"
|
|
74
75
|
ordering = ["username"]
|
|
75
76
|
|
|
77
|
+
def has_perm(self, perm, obj=None):
|
|
78
|
+
"""
|
|
79
|
+
Override Django's default permission check to enforce read-only access
|
|
80
|
+
during Nautobot Version Control time-travel mode.
|
|
81
|
+
|
|
82
|
+
If the ``nautobot_version_control`` plugin is installed and time-travel
|
|
83
|
+
mode is active, all non-view permissions (e.g. add, change, delete) are
|
|
84
|
+
explicitly denied, regardless of the user's role or superuser status.
|
|
85
|
+
|
|
86
|
+
When the plugin is not installed or time-travel mode is inactive, this
|
|
87
|
+
method delegates entirely to Django's standard permission handling via
|
|
88
|
+
the parent implementation.
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
perm (str): Permission string in the form "app_label.codename".
|
|
92
|
+
obj (Optional[Model]): Optional object-level permission target.
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
bool: False when time-travel mode is active and the requested
|
|
96
|
+
permission is not a view permission; otherwise, the boolean result
|
|
97
|
+
returned by Django's default permission resolution logic.
|
|
98
|
+
"""
|
|
99
|
+
if "nautobot_version_control" in settings.PLUGINS:
|
|
100
|
+
from nautobot_version_control.utils import get_time_travel_datetime # pylint: disable=import-error
|
|
101
|
+
|
|
102
|
+
if get_time_travel_datetime() is not None:
|
|
103
|
+
_app_label, action, _model_name = resolve_permission(perm)
|
|
104
|
+
if action != "view":
|
|
105
|
+
return False
|
|
106
|
+
|
|
107
|
+
return super().has_perm(perm, obj)
|
|
108
|
+
|
|
76
109
|
def get_config(self, path, default=None):
|
|
77
110
|
"""
|
|
78
111
|
Retrieve a configuration parameter specified by its dotted path. Example:
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
from datetime import date, timedelta
|
|
2
|
+
from unittest import mock
|
|
3
|
+
|
|
1
4
|
from django.contrib.auth import get_user_model
|
|
5
|
+
from django.test.utils import override_settings
|
|
2
6
|
|
|
3
7
|
from nautobot.core.testing.models import ModelTestCases
|
|
4
8
|
from nautobot.users.models import ObjectPermission, Token
|
|
@@ -121,3 +125,82 @@ class UserConfigTest(ModelTestCases.BaseModelTestCase):
|
|
|
121
125
|
|
|
122
126
|
# Clear a non-existing value; should fail silently
|
|
123
127
|
self.user.clear_config("invalid")
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
@override_settings(PLUGINS=["nautobot_version_control"])
|
|
131
|
+
class UserHasPermTest(ModelTestCases.BaseModelTestCase):
|
|
132
|
+
model = User
|
|
133
|
+
|
|
134
|
+
def setUp(self):
|
|
135
|
+
self.user = User.objects.create_user(username="testuser")
|
|
136
|
+
self.add_permissions("dcim.add_device", "dcim.view_device")
|
|
137
|
+
|
|
138
|
+
@mock.patch("django.contrib.auth.models.AbstractUser.has_perm")
|
|
139
|
+
def test_time_travel_blocks_non_view_permission(self, mock_super_has_perm):
|
|
140
|
+
with mock.patch.dict(
|
|
141
|
+
"sys.modules",
|
|
142
|
+
{
|
|
143
|
+
"nautobot_version_control.utils": mock.MagicMock(),
|
|
144
|
+
},
|
|
145
|
+
):
|
|
146
|
+
from nautobot_version_control.utils import get_time_travel_datetime # pylint: disable=import-error
|
|
147
|
+
|
|
148
|
+
get_time_travel_datetime.return_value = (date.today() + timedelta(days=1)).isoformat()
|
|
149
|
+
|
|
150
|
+
perm = "dcim.add_device"
|
|
151
|
+
result = self.user.has_perm(perm)
|
|
152
|
+
self.assertFalse(result)
|
|
153
|
+
mock_super_has_perm.assert_not_called()
|
|
154
|
+
|
|
155
|
+
@mock.patch("django.contrib.auth.models.AbstractUser.has_perm")
|
|
156
|
+
def test_time_travel_blocks_non_view_permission_for_superuser(self, mock_super_has_perm):
|
|
157
|
+
with mock.patch.dict(
|
|
158
|
+
"sys.modules",
|
|
159
|
+
{
|
|
160
|
+
"nautobot_version_control.utils": mock.MagicMock(),
|
|
161
|
+
},
|
|
162
|
+
):
|
|
163
|
+
from nautobot_version_control.utils import get_time_travel_datetime # pylint: disable=import-error
|
|
164
|
+
|
|
165
|
+
get_time_travel_datetime.return_value = date.today() + timedelta(days=1)
|
|
166
|
+
perm = "dcim.add_device"
|
|
167
|
+
self.user.is_superuser = True
|
|
168
|
+
self.user.save()
|
|
169
|
+
|
|
170
|
+
self.assertTrue(self.user.is_superuser)
|
|
171
|
+
|
|
172
|
+
result = self.user.has_perm(perm)
|
|
173
|
+
self.assertFalse(result)
|
|
174
|
+
mock_super_has_perm.assert_not_called()
|
|
175
|
+
|
|
176
|
+
@mock.patch("django.contrib.auth.models.AbstractUser.has_perm")
|
|
177
|
+
def test_time_travel_allows_view_permission(self, mock_super_has_perm):
|
|
178
|
+
with mock.patch.dict(
|
|
179
|
+
"sys.modules",
|
|
180
|
+
{
|
|
181
|
+
"nautobot_version_control.utils": mock.MagicMock(),
|
|
182
|
+
},
|
|
183
|
+
):
|
|
184
|
+
from nautobot_version_control.utils import get_time_travel_datetime # pylint: disable=import-error
|
|
185
|
+
|
|
186
|
+
get_time_travel_datetime.return_value = date.today() + timedelta(days=1)
|
|
187
|
+
perm = "dcim.view_device"
|
|
188
|
+
result = self.user.has_perm(perm)
|
|
189
|
+
self.assertTrue(result)
|
|
190
|
+
mock_super_has_perm.assert_called_once_with(perm, None)
|
|
191
|
+
|
|
192
|
+
@mock.patch("django.contrib.auth.models.AbstractUser.has_perm")
|
|
193
|
+
def test_no_time_travel_does_not_block_permissions(self, mock_super_has_perm):
|
|
194
|
+
with mock.patch.dict(
|
|
195
|
+
"sys.modules",
|
|
196
|
+
{
|
|
197
|
+
"nautobot_version_control.utils": mock.MagicMock(),
|
|
198
|
+
},
|
|
199
|
+
):
|
|
200
|
+
from nautobot_version_control.utils import get_time_travel_datetime # pylint: disable=import-error
|
|
201
|
+
|
|
202
|
+
get_time_travel_datetime.return_value = None
|
|
203
|
+
perm = "dcim.add_device"
|
|
204
|
+
result = self.user.has_perm(perm)
|
|
205
|
+
self.assertTrue(result)
|
|
206
|
+
mock_super_has_perm.assert_called_once_with(perm, None)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: nautobot
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.5
|
|
4
4
|
Summary: Source of truth and network automation platform.
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Keywords: Nautobot
|
|
@@ -22,12 +22,12 @@ Provides-Extra: napalm
|
|
|
22
22
|
Provides-Extra: remote-storage
|
|
23
23
|
Provides-Extra: sso
|
|
24
24
|
Requires-Dist: Django (>=4.2.27,<4.3.0)
|
|
25
|
-
Requires-Dist: GitPython (>=3.1.
|
|
25
|
+
Requires-Dist: GitPython (>=3.1.46,<3.2.0)
|
|
26
26
|
Requires-Dist: Jinja2 (>=3.1.6,<3.2.0)
|
|
27
27
|
Requires-Dist: Markdown (>=3.8.2,<3.9.0)
|
|
28
28
|
Requires-Dist: Pillow (>=12.0.0,<12.1.0)
|
|
29
29
|
Requires-Dist: PyYAML (>=6.0.3,<6.1.0)
|
|
30
|
-
Requires-Dist: celery (>=5.6.
|
|
30
|
+
Requires-Dist: celery (>=5.6.1,<5.7.0)
|
|
31
31
|
Requires-Dist: cryptography (>=46.0.3,<46.1.0)
|
|
32
32
|
Requires-Dist: django-ajax-tables (>=1.1.1,<1.2.0)
|
|
33
33
|
Requires-Dist: django-auth-ldap (>=5.2.0,<5.3.0) ; extra == "all" or extra == "ldap"
|
|
@@ -38,7 +38,7 @@ Requires-Dist: django-cors-headers (>=4.9.0,<4.10.0)
|
|
|
38
38
|
Requires-Dist: django-db-file-storage (>=0.5.6.1,<0.6.0.0)
|
|
39
39
|
Requires-Dist: django-extensions (>=4.1,<4.2)
|
|
40
40
|
Requires-Dist: django-filter (>=25.1,<25.2)
|
|
41
|
-
Requires-Dist: django-health-check (>=3.20.
|
|
41
|
+
Requires-Dist: django-health-check (>=3.20.8,<3.21.0)
|
|
42
42
|
Requires-Dist: django-jinja (>=2.11.0,<2.12.0)
|
|
43
43
|
Requires-Dist: django-prometheus (>=2.4.1,<2.5.0)
|
|
44
44
|
Requires-Dist: django-redis (>=6.0.0,<6.1.0)
|