nautobot 2.3.8__py3-none-any.whl → 2.3.10__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/tables.py +2 -0
- nautobot/core/forms/__init__.py +4 -0
- nautobot/core/forms/fields.py +32 -0
- nautobot/core/jobs/__init__.py +24 -8
- nautobot/core/models/query_functions.py +147 -1
- nautobot/core/models/tree_queries.py +8 -0
- nautobot/core/settings.py +7 -0
- nautobot/core/settings.yaml +10 -0
- nautobot/core/signals.py +5 -4
- nautobot/core/templates/nautobot_config.py.j2 +4 -0
- nautobot/core/tests/test_models_query_functions.py +108 -0
- nautobot/dcim/forms.py +30 -27
- nautobot/dcim/models/device_components.py +5 -0
- nautobot/dcim/tables/devices.py +4 -2
- nautobot/dcim/templates/dcim/modulebay_create.html +39 -0
- nautobot/dcim/templates/dcim/modulebay_update.html +39 -0
- nautobot/dcim/tests/test_models.py +16 -0
- nautobot/dcim/views.py +1 -1
- nautobot/extras/api/customfields.py +3 -10
- nautobot/extras/context_managers.py +28 -9
- nautobot/extras/datasources/__init__.py +2 -0
- nautobot/extras/datasources/git.py +30 -49
- nautobot/extras/datasources/registry.py +2 -2
- nautobot/extras/jobs.py +30 -12
- nautobot/extras/models/customfields.py +12 -0
- nautobot/extras/models/datasources.py +6 -0
- nautobot/extras/models/groups.py +47 -33
- nautobot/extras/models/jobs.py +1 -1
- nautobot/extras/plugins/__init__.py +165 -0
- nautobot/extras/signals.py +2 -0
- nautobot/extras/tasks.py +88 -69
- nautobot/extras/templates/extras/plugin_detail.html +33 -0
- nautobot/extras/tests/test_context_managers.py +23 -9
- nautobot/extras/tests/test_datasources.py +88 -1
- nautobot/extras/tests/test_dynamicgroups.py +12 -0
- nautobot/extras/tests/test_plugins.py +94 -0
- nautobot/extras/tests/test_webhooks.py +1 -1
- nautobot/extras/views.py +3 -1
- nautobot/extras/webhooks.py +16 -7
- nautobot/project-static/docs/404.html +24 -3
- nautobot/project-static/docs/apps/index.html +24 -3
- nautobot/project-static/docs/apps/nautobot-apps.html +24 -3
- nautobot/project-static/docs/assets/javascripts/{bundle.525ec568.min.js → bundle.83f73b43.min.js} +2 -2
- nautobot/project-static/docs/assets/javascripts/{bundle.525ec568.min.js.map → bundle.83f73b43.min.js.map} +3 -3
- nautobot/project-static/docs/assets/stylesheets/main.0253249f.min.css +1 -0
- nautobot/project-static/docs/assets/stylesheets/main.0253249f.min.css.map +1 -0
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +106 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +138 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +24 -3
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +24 -3
- nautobot/project-static/docs/development/apps/api/configuration-view.html +24 -3
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +24 -3
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +24 -3
- nautobot/project-static/docs/development/apps/api/models/global-search.html +24 -3
- nautobot/project-static/docs/development/apps/api/models/graphql.html +24 -3
- nautobot/project-static/docs/development/apps/api/models/index.html +24 -3
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +24 -3
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +24 -3
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +24 -3
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +24 -3
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +24 -3
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +24 -3
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +24 -3
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +24 -3
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +27 -6
- nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +8823 -0
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +27 -6
- nautobot/project-static/docs/development/apps/api/prometheus.html +24 -3
- nautobot/project-static/docs/development/apps/api/setup.html +33 -11
- nautobot/project-static/docs/development/apps/api/testing.html +24 -3
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +24 -3
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +24 -3
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +24 -3
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +24 -3
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +24 -3
- nautobot/project-static/docs/development/apps/api/views/base-template.html +24 -3
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +24 -3
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +24 -3
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +24 -3
- nautobot/project-static/docs/development/apps/api/views/index.html +24 -3
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +24 -3
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +24 -3
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +24 -3
- nautobot/project-static/docs/development/apps/api/views/notes.html +24 -3
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +24 -3
- nautobot/project-static/docs/development/apps/api/views/urls.html +24 -3
- nautobot/project-static/docs/development/apps/index.html +24 -3
- nautobot/project-static/docs/development/apps/migration/code-updates.html +24 -3
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +24 -3
- nautobot/project-static/docs/development/apps/migration/from-v1.html +24 -3
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +24 -3
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +24 -3
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +24 -3
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +24 -3
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +24 -3
- nautobot/project-static/docs/development/core/application-registry.html +24 -3
- nautobot/project-static/docs/development/core/best-practices.html +24 -3
- nautobot/project-static/docs/development/core/bootstrap-ui.html +24 -3
- nautobot/project-static/docs/development/core/caching.html +24 -3
- nautobot/project-static/docs/development/core/controllers.html +24 -3
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +24 -3
- nautobot/project-static/docs/development/core/generic-views.html +24 -3
- nautobot/project-static/docs/development/core/getting-started.html +24 -3
- nautobot/project-static/docs/development/core/homepage.html +24 -3
- nautobot/project-static/docs/development/core/index.html +24 -3
- nautobot/project-static/docs/development/core/model-checklist.html +24 -3
- nautobot/project-static/docs/development/core/model-features.html +24 -3
- nautobot/project-static/docs/development/core/natural-keys.html +24 -3
- nautobot/project-static/docs/development/core/navigation-menu.html +24 -3
- nautobot/project-static/docs/development/core/release-checklist.html +24 -3
- nautobot/project-static/docs/development/core/role-internals.html +24 -3
- nautobot/project-static/docs/development/core/settings.html +24 -3
- nautobot/project-static/docs/development/core/style-guide.html +24 -3
- nautobot/project-static/docs/development/core/templates.html +24 -3
- nautobot/project-static/docs/development/core/testing.html +24 -3
- nautobot/project-static/docs/development/core/user-preferences.html +24 -3
- nautobot/project-static/docs/development/index.html +24 -3
- nautobot/project-static/docs/development/jobs/index.html +24 -3
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +24 -3
- nautobot/project-static/docs/index.html +24 -3
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/overview/application_stack.html +24 -3
- nautobot/project-static/docs/overview/design_philosophy.html +24 -3
- nautobot/project-static/docs/release-notes/index.html +24 -3
- nautobot/project-static/docs/release-notes/version-1.0.html +24 -3
- nautobot/project-static/docs/release-notes/version-1.1.html +24 -3
- nautobot/project-static/docs/release-notes/version-1.2.html +24 -3
- nautobot/project-static/docs/release-notes/version-1.3.html +24 -3
- nautobot/project-static/docs/release-notes/version-1.4.html +24 -3
- nautobot/project-static/docs/release-notes/version-1.5.html +24 -3
- nautobot/project-static/docs/release-notes/version-1.6.html +24 -3
- nautobot/project-static/docs/release-notes/version-2.0.html +24 -3
- nautobot/project-static/docs/release-notes/version-2.1.html +24 -3
- nautobot/project-static/docs/release-notes/version-2.2.html +24 -3
- nautobot/project-static/docs/release-notes/version-2.3.html +430 -114
- nautobot/project-static/docs/requirements.txt +1 -1
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +273 -269
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +24 -3
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +24 -3
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +24 -3
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +24 -3
- nautobot/project-static/docs/user-guide/administration/configuration/redis.html +24 -3
- nautobot/project-static/docs/user-guide/administration/configuration/settings.html +29 -4
- nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +24 -3
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +24 -3
- nautobot/project-static/docs/user-guide/administration/guides/docker.html +24 -3
- nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +24 -3
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +24 -3
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +24 -3
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +24 -3
- nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +24 -3
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +24 -3
- nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +24 -3
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +24 -3
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +24 -3
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +24 -3
- nautobot/project-static/docs/user-guide/administration/installation/index.html +24 -3
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +24 -3
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +24 -3
- nautobot/project-static/docs/user-guide/administration/installation/services.html +24 -3
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +24 -3
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +24 -3
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +24 -3
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +24 -3
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +24 -3
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +24 -3
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +24 -3
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +24 -3
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +24 -3
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +24 -3
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +24 -3
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +24 -3
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +24 -3
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +24 -3
- nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +24 -3
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +24 -3
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +24 -3
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +24 -3
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +24 -3
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +24 -3
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +24 -3
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +24 -3
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +24 -3
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +24 -3
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +24 -3
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +24 -3
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +24 -3
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +24 -3
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +24 -3
- nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +24 -3
- nautobot/project-static/docs/user-guide/index.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +24 -3
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +24 -3
- nautobot/project-static/js/forms.js +3 -5
- nautobot/virtualization/tables.py +1 -1
- {nautobot-2.3.8.dist-info → nautobot-2.3.10.dist-info}/METADATA +3 -3
- {nautobot-2.3.8.dist-info → nautobot-2.3.10.dist-info}/RECORD +327 -323
- nautobot/project-static/docs/assets/stylesheets/main.8c3ca2c6.min.css +0 -1
- nautobot/project-static/docs/assets/stylesheets/main.8c3ca2c6.min.css.map +0 -1
- {nautobot-2.3.8.dist-info → nautobot-2.3.10.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.3.8.dist-info → nautobot-2.3.10.dist-info}/NOTICE +0 -0
- {nautobot-2.3.8.dist-info → nautobot-2.3.10.dist-info}/WHEEL +0 -0
- {nautobot-2.3.8.dist-info → nautobot-2.3.10.dist-info}/entry_points.txt +0 -0
|
@@ -304,6 +304,10 @@ class DynamicGroupModelTest(DynamicGroupTestBase): # TODO: BaseModelTestCase mi
|
|
|
304
304
|
sg.add_members(Prefix.objects.filter(ip_version=4))
|
|
305
305
|
self.assertIsInstance(sg.members, PrefixQuerySet)
|
|
306
306
|
self.assertQuerysetEqualAndNotEmpty(sg.members, Prefix.objects.filter(ip_version=4))
|
|
307
|
+
# test cumulative construction and alternate code path
|
|
308
|
+
sg.add_members(list(Prefix.objects.filter(ip_version=6)))
|
|
309
|
+
self.assertQuerysetEqualAndNotEmpty(sg.members, Prefix.objects.all())
|
|
310
|
+
self.assertEqual(sg.static_group_associations.count(), Prefix.objects.all().count())
|
|
307
311
|
# test duplicate objects aren't re-added
|
|
308
312
|
sg.add_members(Prefix.objects.all())
|
|
309
313
|
self.assertQuerysetEqualAndNotEmpty(sg.members, Prefix.objects.all())
|
|
@@ -321,10 +325,18 @@ class DynamicGroupModelTest(DynamicGroupTestBase): # TODO: BaseModelTestCase mi
|
|
|
321
325
|
sg.remove_members(list(Prefix.objects.filter(ip_version=4)))
|
|
322
326
|
self.assertQuerysetEqualAndNotEmpty(sg.members, Prefix.objects.filter(ip_version=6))
|
|
323
327
|
self.assertEqual(sg.static_group_associations.count(), Prefix.objects.filter(ip_version=6).count())
|
|
328
|
+
# test cumulative removal and alternate code path
|
|
329
|
+
sg.remove_members(list(Prefix.objects.filter(ip_version=6)))
|
|
330
|
+
self.assertQuerysetEqual(sg.members, Prefix.objects.none())
|
|
331
|
+
self.assertEqual(sg.static_group_associations.count(), 0)
|
|
324
332
|
|
|
325
333
|
# test property setter
|
|
326
334
|
sg.members = Prefix.objects.filter(ip_version=4)
|
|
327
335
|
self.assertQuerysetEqualAndNotEmpty(sg.members, Prefix.objects.filter(ip_version=4))
|
|
336
|
+
sg.members = Prefix.objects.filter(ip_version=6)
|
|
337
|
+
self.assertQuerysetEqualAndNotEmpty(sg.members, Prefix.objects.filter(ip_version=6))
|
|
338
|
+
sg.members = list(Prefix.objects.filter(ip_version=4))
|
|
339
|
+
self.assertQuerysetEqualAndNotEmpty(sg.members, Prefix.objects.filter(ip_version=4))
|
|
328
340
|
sg.members = list(Prefix.objects.filter(ip_version=6))
|
|
329
341
|
self.assertQuerysetEqualAndNotEmpty(sg.members, Prefix.objects.filter(ip_version=6))
|
|
330
342
|
|
|
@@ -6,12 +6,15 @@ from django.core.exceptions import ValidationError
|
|
|
6
6
|
from django.template import engines
|
|
7
7
|
from django.test import override_settings
|
|
8
8
|
from django.urls import NoReverseMatch, reverse
|
|
9
|
+
import django_tables2 as tables
|
|
9
10
|
import netaddr
|
|
10
11
|
|
|
11
12
|
from nautobot.circuits.models import Circuit, CircuitType, Provider
|
|
12
13
|
from nautobot.core.testing import APIViewTestCases, disable_warnings, extract_page_body, TestCase, ViewTestCases
|
|
14
|
+
from nautobot.core.utils.lookup import get_table_for_model
|
|
13
15
|
from nautobot.dcim.models import Device, DeviceType, Location, LocationType, Manufacturer
|
|
14
16
|
from nautobot.dcim.tests.test_views import create_test_device
|
|
17
|
+
from nautobot.extras import plugins
|
|
15
18
|
from nautobot.extras.choices import CustomFieldTypeChoices, RelationshipTypeChoices
|
|
16
19
|
from nautobot.extras.jobs import get_job
|
|
17
20
|
from nautobot.extras.models import CustomField, Relationship, RelationshipAssociation, Role, Secret, Status
|
|
@@ -647,6 +650,97 @@ class FilterExtensionTest(TestCase):
|
|
|
647
650
|
self.assertIn("example_app_description", form.fields.keys())
|
|
648
651
|
|
|
649
652
|
|
|
653
|
+
class TableExtensionTest(TestCase):
|
|
654
|
+
"""Tests for adding table extensions."""
|
|
655
|
+
|
|
656
|
+
def test_alter_queryset(self):
|
|
657
|
+
"""Test the 'alter_queryset' method of the TableExtension class."""
|
|
658
|
+
extension = plugins.TableExtension()
|
|
659
|
+
queryset = object()
|
|
660
|
+
result = extension.alter_queryset(queryset)
|
|
661
|
+
self.assertEqual(result, queryset)
|
|
662
|
+
|
|
663
|
+
def test__add_columns_into_model_table(self):
|
|
664
|
+
"""Test the '_add_columns_into_model_table' function."""
|
|
665
|
+
extension = plugins.TableExtension()
|
|
666
|
+
extension.model = "tenancy.tenant"
|
|
667
|
+
extension.table_columns = {
|
|
668
|
+
"tenant_group": tables.Column(verbose_name="Name conflicts with existing column"),
|
|
669
|
+
"tenant_success": tables.Column(verbose_name="This name should be registered"),
|
|
670
|
+
}
|
|
671
|
+
extension.add_to_default_columns = ["tenant_group", "tenant_success"]
|
|
672
|
+
|
|
673
|
+
with self.assertLogs("nautobot.extras.plugins", level="WARNING") as logger:
|
|
674
|
+
plugins._add_columns_into_model_table(extension, "tenant")
|
|
675
|
+
table = get_table_for_model(extension.model)
|
|
676
|
+
expected = [
|
|
677
|
+
"ERROR:nautobot.extras.plugins:tenant: There was a name conflict with existing "
|
|
678
|
+
"table column `tenant_group`, the custom column was ignored."
|
|
679
|
+
]
|
|
680
|
+
with self.subTest("error is logged"):
|
|
681
|
+
self.assertEqual(logger.output, expected)
|
|
682
|
+
|
|
683
|
+
with self.subTest("column is added to default_columns"):
|
|
684
|
+
self.assertIn("tenant_success", table.base_columns)
|
|
685
|
+
|
|
686
|
+
def test__add_column_to_table_base_columns(self):
|
|
687
|
+
"""Test the '_add_column_to_table_base_columns' function."""
|
|
688
|
+
table = get_table_for_model("tenancy.tenant")
|
|
689
|
+
|
|
690
|
+
with self.subTest("raises TypeError"):
|
|
691
|
+
column = object()
|
|
692
|
+
with self.assertRaises(TypeError) as context:
|
|
693
|
+
plugins._add_column_to_table_base_columns(table, "test_column", column, "my_app")
|
|
694
|
+
self.assertEqual(
|
|
695
|
+
context.exception, "Custom column `test_column` is not an instance of django_tables2.Column."
|
|
696
|
+
)
|
|
697
|
+
|
|
698
|
+
with self.subTest("raises AttributeError"):
|
|
699
|
+
column = tables.Column()
|
|
700
|
+
with self.assertRaises(AttributeError) as context:
|
|
701
|
+
plugins._add_column_to_table_base_columns(table, "pk", column, "my_app")
|
|
702
|
+
self.assertEqual(
|
|
703
|
+
context.exception, "There was a conflict with table column `pk`, the custom column was ignored."
|
|
704
|
+
)
|
|
705
|
+
|
|
706
|
+
with self.subTest("Adds column to base_columns"):
|
|
707
|
+
column = tables.Column()
|
|
708
|
+
plugins._add_column_to_table_base_columns(table, "unique_name", column, "my_app")
|
|
709
|
+
self.assertIn("unique_name", table.base_columns)
|
|
710
|
+
|
|
711
|
+
def test__modify_default_table_columns(self):
|
|
712
|
+
"""Test the '_modify_default_table_columns' function."""
|
|
713
|
+
extension = plugins.TableExtension()
|
|
714
|
+
extension.model = "tenancy.tenant"
|
|
715
|
+
extension.add_to_default_columns = ["new_column"]
|
|
716
|
+
extension.remove_from_default_columns = ["description"]
|
|
717
|
+
|
|
718
|
+
table = get_table_for_model(extension.model)
|
|
719
|
+
table.base_columns["new_column"] = tables.Column()
|
|
720
|
+
|
|
721
|
+
plugins._modify_default_table_columns(extension, "my_app")
|
|
722
|
+
|
|
723
|
+
with self.subTest("column is added to default_columns"):
|
|
724
|
+
self.assertIn("new_column", table.Meta.default_columns)
|
|
725
|
+
|
|
726
|
+
with self.subTest("column is removed from default_columns"):
|
|
727
|
+
self.assertNotIn("description", table.Meta.default_columns)
|
|
728
|
+
|
|
729
|
+
def test__validate_is_subclass_of_table_extension(self):
|
|
730
|
+
"""Test the '_validate_is_subclass_of_table_extension' function."""
|
|
731
|
+
with self.assertRaises(TypeError):
|
|
732
|
+
plugins._validate_is_subclass_of_table_extension(object)
|
|
733
|
+
|
|
734
|
+
def test__validate_table_column_name_is_prefixed_with_app_name(self):
|
|
735
|
+
"""Test the '_validate_table_column_name_is_prefixed_with_app_name' function."""
|
|
736
|
+
with self.assertRaises(ValueError) as context:
|
|
737
|
+
plugins._validate_table_column_name_is_prefixed_with_app_name("not_prefixed", "prefix")
|
|
738
|
+
self.assertEqual(
|
|
739
|
+
context.exception,
|
|
740
|
+
"Attempted to create a custom table column `not_prefixed` that did not start with `prefix`",
|
|
741
|
+
)
|
|
742
|
+
|
|
743
|
+
|
|
650
744
|
class LoadPluginTest(TestCase):
|
|
651
745
|
"""
|
|
652
746
|
Validate that plugin helpers work as intended.
|
|
@@ -345,7 +345,7 @@ class WebhookTest(APITestCase):
|
|
|
345
345
|
|
|
346
346
|
all_changes = get_changes_for_model(location)
|
|
347
347
|
self.assertEqual(all_changes.count(), 1)
|
|
348
|
-
mock_enqueue_webhooks.assert_called_once_with(all_changes.first())
|
|
348
|
+
mock_enqueue_webhooks.assert_called_once_with(all_changes.first(), webhook_queryset=None)
|
|
349
349
|
|
|
350
350
|
def test_all_webhook_supported_models(self):
|
|
351
351
|
"""
|
nautobot/extras/views.py
CHANGED
|
@@ -737,7 +737,9 @@ class DynamicGroupView(generic.ObjectView):
|
|
|
737
737
|
|
|
738
738
|
if table_class is not None:
|
|
739
739
|
# Members table (for display on Members nav tab)
|
|
740
|
-
members_table = table_class(
|
|
740
|
+
members_table = table_class(
|
|
741
|
+
members.restrict(request.user, "view"), orderable=False, exclude=["dynamic_group_count"]
|
|
742
|
+
)
|
|
741
743
|
paginate = {
|
|
742
744
|
"paginator_class": EnhancedPaginator,
|
|
743
745
|
"per_page": get_paginate_count(request),
|
nautobot/extras/webhooks.py
CHANGED
|
@@ -6,16 +6,22 @@ from nautobot.extras.registry import registry
|
|
|
6
6
|
from nautobot.extras.tasks import process_webhook
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
def enqueue_webhooks(object_change):
|
|
9
|
+
def enqueue_webhooks(object_change, webhook_queryset=None):
|
|
10
10
|
"""
|
|
11
|
-
Find Webhook(s) assigned to this instance + action and enqueue them
|
|
12
|
-
|
|
11
|
+
Find Webhook(s) assigned to this instance + action and enqueue them to be processed.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
object_change (ObjectChange): The change that may trigger Webhooks to be sent.
|
|
15
|
+
webhook_queryset (QuerySet): Previously retrieved set of Webhooks to potentially send.
|
|
16
|
+
|
|
17
|
+
Returns:
|
|
18
|
+
webhook_queryset (QuerySet): for reuse when processing multiple ObjectChange with the same content-type+action.
|
|
13
19
|
"""
|
|
14
20
|
# Determine whether this type of object supports webhooks
|
|
15
21
|
app_label = object_change.changed_object_type.app_label
|
|
16
22
|
model_name = object_change.changed_object_type.model
|
|
17
23
|
if model_name not in registry["model_features"]["webhooks"].get(app_label, []):
|
|
18
|
-
return
|
|
24
|
+
return webhook_queryset
|
|
19
25
|
|
|
20
26
|
# Retrieve any applicable Webhooks
|
|
21
27
|
content_type = object_change.changed_object_type
|
|
@@ -24,16 +30,17 @@ def enqueue_webhooks(object_change):
|
|
|
24
30
|
ObjectChangeActionChoices.ACTION_UPDATE: "type_update",
|
|
25
31
|
ObjectChangeActionChoices.ACTION_DELETE: "type_delete",
|
|
26
32
|
}[object_change.action]
|
|
27
|
-
|
|
33
|
+
if webhook_queryset is None:
|
|
34
|
+
webhook_queryset = Webhook.objects.filter(content_types=content_type, enabled=True, **{action_flag: True})
|
|
28
35
|
|
|
29
|
-
if
|
|
36
|
+
if webhook_queryset: # not .exists() as we *want* to populate the queryset cache
|
|
30
37
|
# fall back to object_data if object_data_v2 is not available
|
|
31
38
|
serialized_data = object_change.object_data_v2
|
|
32
39
|
if serialized_data is None:
|
|
33
40
|
serialized_data = object_change.object_data
|
|
34
41
|
|
|
35
42
|
# Enqueue the webhooks
|
|
36
|
-
for webhook in
|
|
43
|
+
for webhook in webhook_queryset:
|
|
37
44
|
args = [
|
|
38
45
|
webhook.pk,
|
|
39
46
|
serialized_data,
|
|
@@ -45,3 +52,5 @@ def enqueue_webhooks(object_change):
|
|
|
45
52
|
object_change.get_snapshots(),
|
|
46
53
|
]
|
|
47
54
|
process_webhook.apply_async(args=args)
|
|
55
|
+
|
|
56
|
+
return webhook_queryset
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
<link rel="icon" href="/projects/core/en/stable/assets/favicon.ico">
|
|
15
|
-
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.
|
|
15
|
+
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42">
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
<link rel="stylesheet" href="/projects/core/en/stable/assets/stylesheets/main.
|
|
23
|
+
<link rel="stylesheet" href="/projects/core/en/stable/assets/stylesheets/main.0253249f.min.css">
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
<link rel="stylesheet" href="/projects/core/en/stable/assets/stylesheets/palette.06af60db.min.css">
|
|
@@ -6364,6 +6364,27 @@
|
|
|
6364
6364
|
|
|
6365
6365
|
|
|
6366
6366
|
|
|
6367
|
+
<li class="md-nav__item">
|
|
6368
|
+
<a href="/projects/core/en/stable/development/apps/api/platform-features/table-extensions.html" class="md-nav__link">
|
|
6369
|
+
|
|
6370
|
+
|
|
6371
|
+
<span class="md-ellipsis">
|
|
6372
|
+
Table Extensions
|
|
6373
|
+
</span>
|
|
6374
|
+
|
|
6375
|
+
|
|
6376
|
+
</a>
|
|
6377
|
+
</li>
|
|
6378
|
+
|
|
6379
|
+
|
|
6380
|
+
|
|
6381
|
+
|
|
6382
|
+
|
|
6383
|
+
|
|
6384
|
+
|
|
6385
|
+
|
|
6386
|
+
|
|
6387
|
+
|
|
6367
6388
|
<li class="md-nav__item">
|
|
6368
6389
|
<a href="/projects/core/en/stable/development/apps/api/platform-features/uniquely-identify-objects.html" class="md-nav__link">
|
|
6369
6390
|
|
|
@@ -8629,7 +8650,7 @@
|
|
|
8629
8650
|
<script id="__config" type="application/json">{"base": "/projects/core/en/stable/", "features": ["content.code.copy", "content.tabs.link", "navigation.footer", "navigation.tabs", "navigation.tabs.sticky", "navigation.tracking", "search.highlight", "search.share", "search.suggest"], "search": "/projects/core/en/stable/assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
|
8630
8651
|
|
|
8631
8652
|
|
|
8632
|
-
<script src="/projects/core/en/stable/assets/javascripts/bundle.
|
|
8653
|
+
<script src="/projects/core/en/stable/assets/javascripts/bundle.83f73b43.min.js"></script>
|
|
8633
8654
|
|
|
8634
8655
|
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
|
8635
8656
|
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
<link rel="icon" href="../assets/favicon.ico">
|
|
21
|
-
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.
|
|
21
|
+
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42">
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
<link rel="stylesheet" href="../assets/stylesheets/main.
|
|
29
|
+
<link rel="stylesheet" href="../assets/stylesheets/main.0253249f.min.css">
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
|
|
@@ -6386,6 +6386,27 @@
|
|
|
6386
6386
|
|
|
6387
6387
|
|
|
6388
6388
|
|
|
6389
|
+
<li class="md-nav__item">
|
|
6390
|
+
<a href="../development/apps/api/platform-features/table-extensions.html" class="md-nav__link">
|
|
6391
|
+
|
|
6392
|
+
|
|
6393
|
+
<span class="md-ellipsis">
|
|
6394
|
+
Table Extensions
|
|
6395
|
+
</span>
|
|
6396
|
+
|
|
6397
|
+
|
|
6398
|
+
</a>
|
|
6399
|
+
</li>
|
|
6400
|
+
|
|
6401
|
+
|
|
6402
|
+
|
|
6403
|
+
|
|
6404
|
+
|
|
6405
|
+
|
|
6406
|
+
|
|
6407
|
+
|
|
6408
|
+
|
|
6409
|
+
|
|
6389
6410
|
<li class="md-nav__item">
|
|
6390
6411
|
<a href="../development/apps/api/platform-features/uniquely-identify-objects.html" class="md-nav__link">
|
|
6391
6412
|
|
|
@@ -8796,7 +8817,7 @@
|
|
|
8796
8817
|
<script id="__config" type="application/json">{"base": "..", "features": ["content.code.copy", "content.tabs.link", "navigation.footer", "navigation.tabs", "navigation.tabs.sticky", "navigation.tracking", "search.highlight", "search.share", "search.suggest"], "search": "../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
|
8797
8818
|
|
|
8798
8819
|
|
|
8799
|
-
<script src="../assets/javascripts/bundle.
|
|
8820
|
+
<script src="../assets/javascripts/bundle.83f73b43.min.js"></script>
|
|
8800
8821
|
|
|
8801
8822
|
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
|
8802
8823
|
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
<link rel="icon" href="../assets/favicon.ico">
|
|
19
|
-
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.
|
|
19
|
+
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42">
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
<link rel="stylesheet" href="../assets/stylesheets/main.
|
|
27
|
+
<link rel="stylesheet" href="../assets/stylesheets/main.0253249f.min.css">
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
|
|
@@ -6384,6 +6384,27 @@
|
|
|
6384
6384
|
|
|
6385
6385
|
|
|
6386
6386
|
|
|
6387
|
+
<li class="md-nav__item">
|
|
6388
|
+
<a href="../development/apps/api/platform-features/table-extensions.html" class="md-nav__link">
|
|
6389
|
+
|
|
6390
|
+
|
|
6391
|
+
<span class="md-ellipsis">
|
|
6392
|
+
Table Extensions
|
|
6393
|
+
</span>
|
|
6394
|
+
|
|
6395
|
+
|
|
6396
|
+
</a>
|
|
6397
|
+
</li>
|
|
6398
|
+
|
|
6399
|
+
|
|
6400
|
+
|
|
6401
|
+
|
|
6402
|
+
|
|
6403
|
+
|
|
6404
|
+
|
|
6405
|
+
|
|
6406
|
+
|
|
6407
|
+
|
|
6387
6408
|
<li class="md-nav__item">
|
|
6388
6409
|
<a href="../development/apps/api/platform-features/uniquely-identify-objects.html" class="md-nav__link">
|
|
6389
6410
|
|
|
@@ -8730,7 +8751,7 @@
|
|
|
8730
8751
|
<script id="__config" type="application/json">{"base": "..", "features": ["content.code.copy", "content.tabs.link", "navigation.footer", "navigation.tabs", "navigation.tabs.sticky", "navigation.tracking", "search.highlight", "search.share", "search.suggest"], "search": "../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
|
8731
8752
|
|
|
8732
8753
|
|
|
8733
|
-
<script src="../assets/javascripts/bundle.
|
|
8754
|
+
<script src="../assets/javascripts/bundle.83f73b43.min.js"></script>
|
|
8734
8755
|
|
|
8735
8756
|
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
|
8736
8757
|
|