nautobot 2.4.11__py3-none-any.whl → 2.4.12__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of nautobot might be problematic. Click here for more details.
- nautobot/circuits/templates/circuits/circuittermination_retrieve.html +1 -114
- nautobot/circuits/templates/circuits/inc/circuit_termination_header_extra_content.html +1 -1
- nautobot/circuits/views.py +76 -6
- nautobot/cloud/navigation.py +1 -1
- nautobot/core/jobs/cleanup.py +4 -4
- nautobot/core/templates/components/panel/header_extra_content_table.html +12 -1
- nautobot/core/templates/components/panel/panel.html +4 -0
- nautobot/core/templates/generic/object_retrieve.html +1 -0
- nautobot/core/tests/test_utils.py +1 -177
- nautobot/core/tests/test_views.py +2 -2
- nautobot/core/ui/object_detail.py +1 -1
- nautobot/core/utils/module_loading.py +58 -63
- nautobot/dcim/filters/__init__.py +6 -0
- nautobot/dcim/filters/mixins.py +2 -1
- nautobot/dcim/models/devices.py +10 -0
- nautobot/dcim/tables/devices.py +2 -0
- nautobot/dcim/templates/dcim/controller/base.html +1 -9
- nautobot/dcim/templates/dcim/controller_retrieve.html +2 -83
- nautobot/dcim/templates/dcim/controller_wirelessnetworks.html +2 -25
- nautobot/dcim/templates/dcim/virtualchassis.html +2 -51
- nautobot/dcim/templates/dcim/virtualchassis_add.html +2 -22
- nautobot/dcim/templates/dcim/virtualchassis_create.html +22 -0
- nautobot/dcim/templates/dcim/virtualchassis_edit.html +2 -93
- nautobot/dcim/templates/dcim/virtualchassis_retrieve.html +51 -0
- nautobot/dcim/templates/dcim/virtualchassis_update.html +93 -0
- nautobot/dcim/urls.py +1 -58
- nautobot/dcim/views.py +145 -189
- nautobot/extras/datasources/git.py +2 -2
- nautobot/extras/jobs_ui.py +208 -0
- nautobot/extras/models/tags.py +4 -0
- nautobot/extras/tables.py +1 -1
- nautobot/extras/templates/extras/configcontextschema_retrieve.html +2 -2
- nautobot/extras/templates/extras/inc/configcontext_data.html +1 -1
- nautobot/extras/templates/extras/inc/configcontext_format.html +6 -0
- nautobot/extras/templates/extras/inc/json_data.html +1 -1
- nautobot/extras/templates/extras/inc/json_format.html +2 -2
- nautobot/extras/templates/extras/job_detail.html +1 -326
- nautobot/extras/templates/extras/tag_retrieve.html +1 -51
- nautobot/extras/views.py +80 -27
- nautobot/project-static/docs/404.html +2 -2
- nautobot/project-static/docs/apps/index.html +2 -2
- nautobot/project-static/docs/apps/nautobot-apps.html +2 -2
- nautobot/project-static/docs/assets/javascripts/{bundle.13a4f30d.min.js → bundle.56ea9cef.min.js} +2 -2
- nautobot/project-static/docs/assets/javascripts/{bundle.13a4f30d.min.js.map → bundle.56ea9cef.min.js.map} +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/events.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +2 -2
- nautobot/project-static/docs/development/apps/api/configuration-view.html +2 -2
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +2 -2
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +2 -2
- nautobot/project-static/docs/development/apps/api/models/global-search.html +2 -2
- nautobot/project-static/docs/development/apps/api/models/graphql.html +2 -2
- nautobot/project-static/docs/development/apps/api/models/index.html +2 -2
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +2 -2
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +2 -2
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +2 -2
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +2 -2
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +2 -2
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +2 -2
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +2 -2
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +2 -2
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +2 -2
- nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +2 -2
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +2 -2
- nautobot/project-static/docs/development/apps/api/prometheus.html +2 -2
- nautobot/project-static/docs/development/apps/api/setup.html +2 -2
- nautobot/project-static/docs/development/apps/api/testing.html +2 -2
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +2 -2
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +2 -2
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +2 -2
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +2 -2
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +2 -2
- nautobot/project-static/docs/development/apps/api/views/base-template.html +2 -2
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +2 -2
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +2 -2
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +2 -2
- nautobot/project-static/docs/development/apps/api/views/index.html +2 -2
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +2 -2
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +2 -2
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +2 -2
- nautobot/project-static/docs/development/apps/api/views/notes.html +2 -2
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +2 -2
- nautobot/project-static/docs/development/apps/api/views/urls.html +2 -2
- nautobot/project-static/docs/development/apps/index.html +2 -2
- nautobot/project-static/docs/development/apps/migration/code-updates.html +2 -2
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +2 -2
- nautobot/project-static/docs/development/apps/migration/from-v1.html +2 -2
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +2 -2
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +2 -2
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +2 -2
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +2 -2
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +2 -2
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +2 -2
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +2 -2
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +2 -2
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +2 -2
- nautobot/project-static/docs/development/core/application-registry.html +2 -2
- nautobot/project-static/docs/development/core/best-practices.html +2 -2
- nautobot/project-static/docs/development/core/bootstrap-ui.html +2 -2
- nautobot/project-static/docs/development/core/caching.html +2 -2
- nautobot/project-static/docs/development/core/controllers.html +2 -2
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +2 -2
- nautobot/project-static/docs/development/core/generic-views.html +2 -2
- nautobot/project-static/docs/development/core/getting-started.html +2 -2
- nautobot/project-static/docs/development/core/homepage.html +2 -2
- nautobot/project-static/docs/development/core/index.html +2 -2
- nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +2 -2
- nautobot/project-static/docs/development/core/model-checklist.html +2 -2
- nautobot/project-static/docs/development/core/model-features.html +2 -2
- nautobot/project-static/docs/development/core/natural-keys.html +2 -2
- nautobot/project-static/docs/development/core/navigation-menu.html +2 -2
- nautobot/project-static/docs/development/core/release-checklist.html +2 -2
- nautobot/project-static/docs/development/core/role-internals.html +2 -2
- nautobot/project-static/docs/development/core/settings.html +2 -2
- nautobot/project-static/docs/development/core/style-guide.html +2 -2
- nautobot/project-static/docs/development/core/templates.html +2 -2
- nautobot/project-static/docs/development/core/testing.html +2 -2
- nautobot/project-static/docs/development/core/ui-component-framework.html +2 -2
- nautobot/project-static/docs/development/core/user-preferences.html +2 -2
- nautobot/project-static/docs/development/index.html +2 -2
- nautobot/project-static/docs/development/jobs/getting-started.html +2 -6
- nautobot/project-static/docs/development/jobs/index.html +2 -2
- nautobot/project-static/docs/development/jobs/installation.html +2 -2
- nautobot/project-static/docs/development/jobs/job-extensions.html +2 -2
- nautobot/project-static/docs/development/jobs/job-logging.html +2 -2
- nautobot/project-static/docs/development/jobs/job-patterns.html +2 -2
- nautobot/project-static/docs/development/jobs/job-structure.html +2 -2
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +2 -2
- nautobot/project-static/docs/development/jobs/testing.html +2 -2
- nautobot/project-static/docs/index.html +2 -2
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/overview/application_stack.html +2 -2
- nautobot/project-static/docs/overview/design_philosophy.html +2 -2
- nautobot/project-static/docs/release-notes/index.html +2 -2
- nautobot/project-static/docs/release-notes/version-1.0.html +2 -2
- nautobot/project-static/docs/release-notes/version-1.1.html +2 -2
- nautobot/project-static/docs/release-notes/version-1.2.html +2 -2
- nautobot/project-static/docs/release-notes/version-1.3.html +2 -2
- nautobot/project-static/docs/release-notes/version-1.4.html +2 -2
- nautobot/project-static/docs/release-notes/version-1.5.html +2 -2
- nautobot/project-static/docs/release-notes/version-1.6.html +2 -2
- nautobot/project-static/docs/release-notes/version-2.0.html +2 -2
- nautobot/project-static/docs/release-notes/version-2.1.html +2 -2
- nautobot/project-static/docs/release-notes/version-2.2.html +2 -2
- nautobot/project-static/docs/release-notes/version-2.3.html +2 -2
- nautobot/project-static/docs/release-notes/version-2.4.html +111 -2
- nautobot/project-static/docs/requirements.txt +1 -1
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +299 -299
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +2 -2
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +2 -2
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +2 -2
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +2 -2
- nautobot/project-static/docs/user-guide/administration/configuration/redis.html +2 -2
- nautobot/project-static/docs/user-guide/administration/configuration/settings.html +2 -2
- nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +2 -2
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +2 -2
- nautobot/project-static/docs/user-guide/administration/guides/docker.html +2 -2
- nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +2 -2
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +2 -2
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +2 -2
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +2 -2
- nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +2 -2
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +2 -2
- nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +2 -2
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +2 -2
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +2 -2
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +2 -2
- nautobot/project-static/docs/user-guide/administration/installation/index.html +2 -2
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +2 -2
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +2 -2
- nautobot/project-static/docs/user-guide/administration/installation/services.html +2 -2
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +2 -2
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +2 -2
- nautobot/project-static/docs/user-guide/administration/security/index.html +2 -2
- nautobot/project-static/docs/user-guide/administration/security/notices.html +2 -2
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +2 -2
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +2 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +2 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +2 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +2 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +2 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +2 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +2 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +2 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +2 -2
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulefamily.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +2 -2
- nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +2 -2
- nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +2 -2
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +2 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +2 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +2 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +2 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +2 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +2 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +2 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +2 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +2 -2
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +2 -2
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +3 -3
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +2 -2
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +2 -2
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +2 -2
- nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +2 -2
- nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +2 -2
- nautobot/project-static/docs/user-guide/index.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/events.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/managing-jobs.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +2 -2
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +2 -2
- nautobot/wireless/navigation.py +1 -1
- nautobot/wireless/tables.py +13 -5
- {nautobot-2.4.11.dist-info → nautobot-2.4.12.dist-info}/METADATA +1 -1
- {nautobot-2.4.11.dist-info → nautobot-2.4.12.dist-info}/RECORD +354 -349
- {nautobot-2.4.11.dist-info → nautobot-2.4.12.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.4.11.dist-info → nautobot-2.4.12.dist-info}/NOTICE +0 -0
- {nautobot-2.4.11.dist-info → nautobot-2.4.12.dist-info}/WHEEL +0 -0
- {nautobot-2.4.11.dist-info → nautobot-2.4.12.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
from django.template import Context
|
|
2
|
+
from django.template.loader import render_to_string
|
|
3
|
+
from django.utils.html import format_html, format_html_join
|
|
4
|
+
from django.utils.safestring import mark_safe
|
|
5
|
+
|
|
6
|
+
from nautobot.core.templatetags import helpers
|
|
7
|
+
from nautobot.core.ui.object_detail import Button, KeyValueTablePanel, ObjectFieldsPanel
|
|
8
|
+
from nautobot.core.views.utils import get_obj_from_context
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class JobRunScheduleButton(Button):
|
|
12
|
+
"""
|
|
13
|
+
A custom button for running or scheduling a job.
|
|
14
|
+
|
|
15
|
+
This button is rendered only if the user has the 'extras.run_job' permission.
|
|
16
|
+
It also disables itself (via HTML 'disabled' attribute) if the related object is not
|
|
17
|
+
installed or not enabled.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
def get_extra_context(self, context):
|
|
21
|
+
"""Inject dynamic attributes (e.g. 'disabled') based on object state into the rendering context."""
|
|
22
|
+
extra_context = super().get_extra_context(context)
|
|
23
|
+
obj = context.get("object")
|
|
24
|
+
if not obj.installed or not obj.enabled:
|
|
25
|
+
if extra_context["attributes"] is None:
|
|
26
|
+
extra_context["attributes"] = {}
|
|
27
|
+
extra_context["attributes"]["disabled"] = "disabled"
|
|
28
|
+
return extra_context
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class JobKeyValueOverrideValueTablePanel(KeyValueTablePanel):
|
|
32
|
+
"""A table panel for displaying key-value pairs of job-related attributes, along with any override values defined on the job object."""
|
|
33
|
+
|
|
34
|
+
def _render_overridden_text(self, text):
|
|
35
|
+
"""
|
|
36
|
+
Render a simple overridden value inside a muted <span>, with a customizable prefix.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
value (str): The content to display.
|
|
40
|
+
prefix (str): The label shown before the value (default: 'default is').
|
|
41
|
+
"""
|
|
42
|
+
return format_html('<span class="text-muted">overridden; default is {}</span>', mark_safe(text)) # noqa: S308
|
|
43
|
+
|
|
44
|
+
def _render_overridden_block(self, content):
|
|
45
|
+
"""
|
|
46
|
+
Render a more complex block of HTML content (like rendered markdown or JSON)
|
|
47
|
+
in a div with a muted label indicating it's an overridden value.
|
|
48
|
+
"""
|
|
49
|
+
return format_html('<div class="text-muted">overridden; default is:<br>{}</div>', content)
|
|
50
|
+
|
|
51
|
+
def render_description_default(self, default_value):
|
|
52
|
+
"""
|
|
53
|
+
Render a description field's default value as markdown.
|
|
54
|
+
|
|
55
|
+
If the default value is a string, it is rendered as markdown;
|
|
56
|
+
otherwise, a placeholder is shown.
|
|
57
|
+
"""
|
|
58
|
+
rendered = (
|
|
59
|
+
helpers.render_markdown(default_value)
|
|
60
|
+
if isinstance(default_value, str)
|
|
61
|
+
else helpers.placeholder(default_value)
|
|
62
|
+
)
|
|
63
|
+
return self._render_overridden_block(rendered)
|
|
64
|
+
|
|
65
|
+
def render_time_limit_default(self, default_value, system_default_value, override=True):
|
|
66
|
+
"""
|
|
67
|
+
Render a time limit value, falling back to the system default if needed.
|
|
68
|
+
"""
|
|
69
|
+
message = "{} seconds" if default_value > 0 else "{} seconds (system default)"
|
|
70
|
+
value = default_value if default_value > 0 else system_default_value
|
|
71
|
+
if not override:
|
|
72
|
+
return message.format(value)
|
|
73
|
+
return self._render_overridden_text(message.format(value))
|
|
74
|
+
|
|
75
|
+
def render_job_queues_default(self, obj):
|
|
76
|
+
"""
|
|
77
|
+
Render the job's default task queues as JSON.
|
|
78
|
+
|
|
79
|
+
Attempts to retrieve the `task_queues` from the job's class and render
|
|
80
|
+
it using a JSON template. Falls back to a placeholder on error.
|
|
81
|
+
"""
|
|
82
|
+
try:
|
|
83
|
+
data = obj.job_class.task_queues
|
|
84
|
+
rendered = render_to_string("extras/inc/json_data.html", {"data": data, "format": "json"})
|
|
85
|
+
except Exception:
|
|
86
|
+
rendered = helpers.placeholder(None)
|
|
87
|
+
return self._render_overridden_block(rendered)
|
|
88
|
+
|
|
89
|
+
def render_default_job_queue_default(self, obj):
|
|
90
|
+
"""
|
|
91
|
+
Render the default job queue name from the job class.
|
|
92
|
+
|
|
93
|
+
Retrieves the first queue from `task_queues` if available.
|
|
94
|
+
Falls back to a placeholder if no queues are present.
|
|
95
|
+
"""
|
|
96
|
+
try:
|
|
97
|
+
queue = obj.job_class.task_queues[0]
|
|
98
|
+
except (AttributeError, IndexError, TypeError):
|
|
99
|
+
queue = helpers.placeholder("not specified")
|
|
100
|
+
return self._render_overridden_text(queue)
|
|
101
|
+
|
|
102
|
+
def render_boolean_default(self, default_value):
|
|
103
|
+
"""Render a boolean default value using a standardized visual format."""
|
|
104
|
+
return self._render_overridden_text(helpers.render_boolean(default_value))
|
|
105
|
+
|
|
106
|
+
def render_override_value(self, key, obj):
|
|
107
|
+
"""Render the override value for a given key on a job object."""
|
|
108
|
+
override_attr = f"{key}_override"
|
|
109
|
+
|
|
110
|
+
if not getattr(obj, override_attr, None):
|
|
111
|
+
return ""
|
|
112
|
+
|
|
113
|
+
if not obj.installed:
|
|
114
|
+
return self._render_overridden_text("default is unknown (not currently installed)")
|
|
115
|
+
|
|
116
|
+
try:
|
|
117
|
+
default_value = getattr(obj.job_class, key)
|
|
118
|
+
except Exception:
|
|
119
|
+
default_value = "unknown"
|
|
120
|
+
|
|
121
|
+
renderers = {
|
|
122
|
+
"description": self.render_description_default,
|
|
123
|
+
"soft_time_limit": lambda v: self.render_time_limit_default(
|
|
124
|
+
v, helpers.settings_or_config("CELERY_TASK_SOFT_TIME_LIMIT")
|
|
125
|
+
),
|
|
126
|
+
"time_limit": lambda v: self.render_time_limit_default(
|
|
127
|
+
v, helpers.settings_or_config("CELERY_TASK_TIME_LIMIT")
|
|
128
|
+
),
|
|
129
|
+
"job_queues": lambda _: self.render_job_queues_default(obj),
|
|
130
|
+
"default_job_queue": lambda _: self.render_default_job_queue_default(obj),
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if key in renderers:
|
|
134
|
+
return renderers[key](default_value)
|
|
135
|
+
|
|
136
|
+
if isinstance(default_value, bool):
|
|
137
|
+
return self.render_boolean_default(default_value)
|
|
138
|
+
|
|
139
|
+
return self._render_overridden_text(f'"{default_value}"')
|
|
140
|
+
|
|
141
|
+
def render_job_queues_list(self, value):
|
|
142
|
+
"""Renders a <ul> HTML list of job queues with hyperlinks, or a placeholder if none exist."""
|
|
143
|
+
if not value or not value.exists():
|
|
144
|
+
return helpers.placeholder(None)
|
|
145
|
+
|
|
146
|
+
items = format_html_join("\n", "<li>{}</li>", ((helpers.hyperlinked_object(q),) for q in value.all()))
|
|
147
|
+
return format_html("<ul>{}</ul>", items)
|
|
148
|
+
|
|
149
|
+
def render_body_content(self, context: Context):
|
|
150
|
+
"""Render the body content of the panel as a table of key-value rows, including any override information."""
|
|
151
|
+
data = self.get_data(context)
|
|
152
|
+
obj = get_obj_from_context(context)
|
|
153
|
+
|
|
154
|
+
if not data:
|
|
155
|
+
return format_html('<tr><td colspan="2">{}</td></tr>', helpers.placeholder(data))
|
|
156
|
+
|
|
157
|
+
result = format_html("")
|
|
158
|
+
panel_label = helpers.slugify(self.label or "")
|
|
159
|
+
for key, value in data.items():
|
|
160
|
+
key_display = self.render_key(key, value, context)
|
|
161
|
+
override_value_display = self.render_override_value(key, obj)
|
|
162
|
+
if value_display := self.render_value(key, value, context):
|
|
163
|
+
if value_display is helpers.HTML_NONE:
|
|
164
|
+
value_tag = value_display
|
|
165
|
+
else:
|
|
166
|
+
value_tag = format_html(
|
|
167
|
+
"""
|
|
168
|
+
<span class="hover_copy">
|
|
169
|
+
<span id="{unique_id}_value_{key}">{value}</span>
|
|
170
|
+
<button class="btn btn-inline btn-default hover_copy_button" data-clipboard-target="#{unique_id}_value_{key}">
|
|
171
|
+
<span class="mdi mdi-content-copy"></span>
|
|
172
|
+
</button>
|
|
173
|
+
</span>
|
|
174
|
+
""",
|
|
175
|
+
# key might not be globally unique in a page, but is unique to a panel;
|
|
176
|
+
# Hence we add the panel label to make it globally unique to the page
|
|
177
|
+
unique_id=panel_label,
|
|
178
|
+
key=helpers.slugify(key),
|
|
179
|
+
value=value_display,
|
|
180
|
+
)
|
|
181
|
+
result += format_html(
|
|
182
|
+
"<tr><td>{}</td><td>{}</td><td>{}</td></tr>",
|
|
183
|
+
key_display,
|
|
184
|
+
value_tag,
|
|
185
|
+
override_value_display,
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
return result
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
class JobObjectFieldsPanel(ObjectFieldsPanel, JobKeyValueOverrideValueTablePanel):
|
|
192
|
+
"""
|
|
193
|
+
ObjectFieldsPanel that renders its fields in a 3-column layout.
|
|
194
|
+
Inherits behavior from ObjectFieldsPanel but overrides rendering with JobKeyValueOverrideValueTablePanel.
|
|
195
|
+
"""
|
|
196
|
+
|
|
197
|
+
def render_value(self, key, value, context: Context):
|
|
198
|
+
if key == "job_queues":
|
|
199
|
+
return self.render_job_queues_list(value)
|
|
200
|
+
if key == "soft_time_limit":
|
|
201
|
+
value = self.render_time_limit_default(
|
|
202
|
+
value, helpers.settings_or_config("CELERY_TASK_SOFT_TIME_LIMIT"), override=False
|
|
203
|
+
)
|
|
204
|
+
if key == "time_limit":
|
|
205
|
+
value = self.render_time_limit_default(
|
|
206
|
+
value, helpers.settings_or_config("CELERY_TASK_TIME_LIMIT"), override=False
|
|
207
|
+
)
|
|
208
|
+
return super().render_value(key, value, context)
|
nautobot/extras/models/tags.py
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from django.contrib.contenttypes.models import ContentType
|
|
2
2
|
from django.db import models
|
|
3
|
+
from django.utils.html import format_html
|
|
3
4
|
from taggit.models import GenericUUIDTaggedItemBase
|
|
4
5
|
|
|
5
6
|
from nautobot.core.choices import ColorChoices
|
|
@@ -65,6 +66,9 @@ class Tag(
|
|
|
65
66
|
class Meta:
|
|
66
67
|
ordering = ["name"]
|
|
67
68
|
|
|
69
|
+
def get_color_display(self):
|
|
70
|
+
return format_html('<span class="label color-block" style="background-color: #{}"> </span>', self.color)
|
|
71
|
+
|
|
68
72
|
def validate_content_types_removal(self, content_types_id):
|
|
69
73
|
"""Validate content_types to be removed are not tagged to a model"""
|
|
70
74
|
errors = {}
|
nautobot/extras/tables.py
CHANGED
|
@@ -908,7 +908,7 @@ class JobResultTable(BaseTable):
|
|
|
908
908
|
def __init__(self, *args, **kwargs):
|
|
909
909
|
super().__init__(*args, **kwargs)
|
|
910
910
|
# Only calculate log counts for "summary" column if it's actually visible.
|
|
911
|
-
if self.columns["summary"].visible and isinstance(self.data.data, QuerySet):
|
|
911
|
+
if "summary" in self.columns and self.columns["summary"].visible and isinstance(self.data.data, QuerySet):
|
|
912
912
|
self.data = TableData.from_data(
|
|
913
913
|
self.data.data.annotate(
|
|
914
914
|
debug_log_count=count_related(
|
|
@@ -39,10 +39,10 @@
|
|
|
39
39
|
<div class="panel panel-default">
|
|
40
40
|
<div class="panel-heading">
|
|
41
41
|
<strong>Data Schema</strong>
|
|
42
|
-
{% include 'extras/inc/
|
|
42
|
+
{% include 'extras/inc/configcontext_format.html' %}
|
|
43
43
|
</div>
|
|
44
44
|
<div class="panel-body">
|
|
45
|
-
{% include 'extras/inc/json_data.html' with data=object.data_schema format=
|
|
45
|
+
{% include 'extras/inc/json_data.html' with data=object.data_schema format=data_format %}
|
|
46
46
|
</div>
|
|
47
47
|
</div>
|
|
48
48
|
{% endblock content_right_page %}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{% include 'extras/inc/json_data.html' with data=object.data format=
|
|
1
|
+
{% include 'extras/inc/json_data.html' with data=object.data format=data_format %}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<div class="pull-right">
|
|
2
|
+
<div class="btn-group btn-group-xs" role="group">
|
|
3
|
+
<a href="?data_format=json" class="btn btn-default{% if data_format == 'json' %} active{% endif %}">JSON</a>
|
|
4
|
+
<a href="?data_format=yaml" class="btn btn-default{% if data_format == 'yaml' %} active{% endif %}">YAML</a>
|
|
5
|
+
</div>
|
|
6
|
+
</div>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{% load helpers %}
|
|
2
2
|
|
|
3
3
|
<div class="rendered-json-data">
|
|
4
|
-
<pre>{% if
|
|
4
|
+
<pre>{% if format == 'json' %}{{ data|render_json }}{% elif format == 'yaml' %}{{ data|render_yaml }}{% else %}{{ data }}{% endif %}</pre>
|
|
5
5
|
</div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<div class="pull-right">
|
|
2
2
|
<div class="btn-group btn-group-xs" role="group">
|
|
3
|
-
<a href="?
|
|
4
|
-
<a href="?
|
|
3
|
+
<a href="?format=json" class="btn btn-default{% if format == 'json' %} active{% endif %}">JSON</a>
|
|
4
|
+
<a href="?format=yaml" class="btn btn-default{% if format == 'yaml' %} active{% endif %}">YAML</a>
|
|
5
5
|
</div>
|
|
6
6
|
</div>
|
|
@@ -1,327 +1,2 @@
|
|
|
1
1
|
{% extends 'generic/object_retrieve.html' %}
|
|
2
|
-
{%
|
|
3
|
-
{% load perms %}
|
|
4
|
-
{% load plugins %}
|
|
5
|
-
|
|
6
|
-
{% block extra_breadcrumbs %}
|
|
7
|
-
<li>{{ object.grouping }}</li>
|
|
8
|
-
{% endblock extra_breadcrumbs %}
|
|
9
|
-
|
|
10
|
-
{% block extra_buttons %}
|
|
11
|
-
{% if perms.extras.run_job %}
|
|
12
|
-
<a href="{% url 'extras:job_run' pk=object.pk %}" class="btn btn-primary"
|
|
13
|
-
{% if not object.installed or not object.enabled %}disabled="disabled"{% endif %}>
|
|
14
|
-
<i class="mdi mdi-play" aria-hidden="true"></i> Run/Schedule
|
|
15
|
-
</a>
|
|
16
|
-
{% endif %}
|
|
17
|
-
{% endblock extra_buttons %}
|
|
18
|
-
|
|
19
|
-
{% block content_left_page %}
|
|
20
|
-
<div class="panel panel-default">
|
|
21
|
-
<div class="panel-heading">
|
|
22
|
-
<strong>Source Code</strong>
|
|
23
|
-
</div>
|
|
24
|
-
<table class="table table-hover panel-body attr-table">
|
|
25
|
-
<tr>
|
|
26
|
-
<td>Module</td>
|
|
27
|
-
<td><code>{{ object.module_name }}</code></td>
|
|
28
|
-
</tr>
|
|
29
|
-
<tr>
|
|
30
|
-
<td>Job Class</td>
|
|
31
|
-
<td><code>{{ object.job_class_name }}</code></td>
|
|
32
|
-
</tr>
|
|
33
|
-
<tr>
|
|
34
|
-
<td>Class Path</td>
|
|
35
|
-
<td>
|
|
36
|
-
<span class="hover_copy">
|
|
37
|
-
<span id="job_class_path_copy"><code>{{ object.class_path }}</code></span>
|
|
38
|
-
<button class="btn btn-inline btn-default hover_copy_button" data-clipboard-target="#job_class_path_copy">
|
|
39
|
-
<span class="mdi mdi-content-copy"></span>
|
|
40
|
-
</button>
|
|
41
|
-
</span>
|
|
42
|
-
</td>
|
|
43
|
-
</tr>
|
|
44
|
-
<tr>
|
|
45
|
-
<td>Installed</td>
|
|
46
|
-
<td>{{ object.installed | render_boolean }}</td>
|
|
47
|
-
</tr>
|
|
48
|
-
<tr>
|
|
49
|
-
<td>Is Job Hook Receiver</td>
|
|
50
|
-
<td>{{ object.is_job_hook_receiver | render_boolean }}</td>
|
|
51
|
-
</tr>
|
|
52
|
-
<tr>
|
|
53
|
-
<td>Is Job Button Receiver</td>
|
|
54
|
-
<td>{{ object.is_job_button_receiver | render_boolean }}</td>
|
|
55
|
-
</tr>
|
|
56
|
-
</table>
|
|
57
|
-
</div>
|
|
58
|
-
<div class="panel panel-default">
|
|
59
|
-
<div class="panel-heading">
|
|
60
|
-
<strong>Job</strong>
|
|
61
|
-
</div>
|
|
62
|
-
<table class="table table-hover panel-body attr-table">
|
|
63
|
-
<tr>
|
|
64
|
-
<td>Grouping</td>
|
|
65
|
-
<td>{{ object.grouping }}</td>
|
|
66
|
-
<td>
|
|
67
|
-
{% if object.grouping_override %}
|
|
68
|
-
<span class="text-muted">
|
|
69
|
-
overridden; default is
|
|
70
|
-
{% if object.installed %}
|
|
71
|
-
“{{ object.job_class.grouping }}”
|
|
72
|
-
{% else %}
|
|
73
|
-
unknown (not currently installed)
|
|
74
|
-
{% endif %}
|
|
75
|
-
</span>
|
|
76
|
-
{% endif %}
|
|
77
|
-
</td>
|
|
78
|
-
</tr>
|
|
79
|
-
<tr>
|
|
80
|
-
<td>Name</td>
|
|
81
|
-
<td>{{ object.name }}</td>
|
|
82
|
-
<td>
|
|
83
|
-
{% if object.name_override %}
|
|
84
|
-
<span class="text-muted">
|
|
85
|
-
overridden; default is
|
|
86
|
-
{% if object.installed %}
|
|
87
|
-
“{{ object.job_class.name }}”
|
|
88
|
-
{% else %}
|
|
89
|
-
unknown (not currently installed)
|
|
90
|
-
{% endif %}
|
|
91
|
-
</span>
|
|
92
|
-
{% endif %}
|
|
93
|
-
</td>
|
|
94
|
-
</tr>
|
|
95
|
-
<tr>
|
|
96
|
-
<td>Description</td>
|
|
97
|
-
<td>{{ object.description | render_markdown | placeholder }}</td>
|
|
98
|
-
<td>
|
|
99
|
-
{% if object.description_override %}
|
|
100
|
-
<div class="text-muted">
|
|
101
|
-
overridden; default is:<br>
|
|
102
|
-
{% if object.installed %}
|
|
103
|
-
{{ object.job_class.description | render_markdown | placeholder }}
|
|
104
|
-
{% else %}
|
|
105
|
-
unknown (not currently installed)
|
|
106
|
-
{% endif %}
|
|
107
|
-
</div>
|
|
108
|
-
{% endif %}
|
|
109
|
-
</td>
|
|
110
|
-
</tr>
|
|
111
|
-
<tr>
|
|
112
|
-
<td>Enabled</td>
|
|
113
|
-
<td>{{ object.enabled | render_boolean }}</td>
|
|
114
|
-
<td></td>
|
|
115
|
-
</tr>
|
|
116
|
-
<tr>
|
|
117
|
-
<td>Job Results</td>
|
|
118
|
-
<td>
|
|
119
|
-
{% if object.job_results.exists %}
|
|
120
|
-
<a href="{% url 'extras:jobresult_list' %}?job_model={{ object.name | urlencode }}">{{ object.job_results.count }}</a>
|
|
121
|
-
{% else %}
|
|
122
|
-
{{ None|placeholder }}
|
|
123
|
-
{% endif %}
|
|
124
|
-
</td>
|
|
125
|
-
<td></td>
|
|
126
|
-
</tr>
|
|
127
|
-
</table>
|
|
128
|
-
</div>
|
|
129
|
-
{% endblock content_left_page %}
|
|
130
|
-
|
|
131
|
-
{% block content_right_page %}
|
|
132
|
-
<div class="panel panel-default">
|
|
133
|
-
<div class="panel-heading">
|
|
134
|
-
<strong>Properties</strong>
|
|
135
|
-
</div>
|
|
136
|
-
<table class="table table-hover panel-body attr-table">
|
|
137
|
-
<tr>
|
|
138
|
-
<td>Approval Required to Execute</td>
|
|
139
|
-
<td>{{ object.approval_required | render_boolean }}</td>
|
|
140
|
-
<td>
|
|
141
|
-
{% if object.approval_required_override %}
|
|
142
|
-
<span class="text-muted">
|
|
143
|
-
overridden; default is
|
|
144
|
-
{% if object.installed %}
|
|
145
|
-
{{ object.job_class.approval_required | render_boolean }}
|
|
146
|
-
{% else %}
|
|
147
|
-
unknown (not currently installed)
|
|
148
|
-
{% endif %}
|
|
149
|
-
</span>
|
|
150
|
-
{% endif %}
|
|
151
|
-
</td>
|
|
152
|
-
</tr>
|
|
153
|
-
<tr>
|
|
154
|
-
<td>Supports Dryrun</td>
|
|
155
|
-
<td colspan="2">{{ object.supports_dryrun | render_boolean }}</td>
|
|
156
|
-
</tr>
|
|
157
|
-
<tr>
|
|
158
|
-
<td>Default to Dryrun</td>
|
|
159
|
-
<td>{{ object.dryrun_default | render_boolean }}</td>
|
|
160
|
-
<td>
|
|
161
|
-
{% if object.dryrun_default_override %}
|
|
162
|
-
<span class="text-muted">
|
|
163
|
-
overridden; default is
|
|
164
|
-
{% if object.installed %}
|
|
165
|
-
{{ object.job_class.dryrun_default | render_boolean }}
|
|
166
|
-
{% else %}
|
|
167
|
-
unknown (not currently installed)
|
|
168
|
-
{% endif %}
|
|
169
|
-
</span>
|
|
170
|
-
{% endif %}
|
|
171
|
-
</td>
|
|
172
|
-
</tr>
|
|
173
|
-
<tr>
|
|
174
|
-
<td>Read-Only Execution</td>
|
|
175
|
-
<td colspan="2">{{ object.read_only | render_boolean }}</td>
|
|
176
|
-
</tr>
|
|
177
|
-
<tr>
|
|
178
|
-
<td>Hide from Default UI</td>
|
|
179
|
-
<td>{{ object.hidden | render_boolean }}</td>
|
|
180
|
-
<td>
|
|
181
|
-
{% if object.hidden_override %}
|
|
182
|
-
<span class="text-muted">
|
|
183
|
-
overridden; default is
|
|
184
|
-
{% if object.installed %}
|
|
185
|
-
{{ object.job_class.hidden | render_boolean }}
|
|
186
|
-
{% else %}
|
|
187
|
-
unknown (not currently installed)
|
|
188
|
-
{% endif %}
|
|
189
|
-
</span>
|
|
190
|
-
{% endif %}
|
|
191
|
-
</td>
|
|
192
|
-
</tr>
|
|
193
|
-
<tr>
|
|
194
|
-
<td>Has Sensitive Variables</td>
|
|
195
|
-
<td>{{ object.has_sensitive_variables | render_boolean }}</td>
|
|
196
|
-
<td>
|
|
197
|
-
{% if object.has_sensitive_variables_override %}
|
|
198
|
-
<span class="text-muted">
|
|
199
|
-
overridden; default is
|
|
200
|
-
{% if object.installed %}
|
|
201
|
-
{{ object.job_class.has_sensitive_variables | render_boolean }}
|
|
202
|
-
{% else %}
|
|
203
|
-
unknown (not currently installed)
|
|
204
|
-
{% endif %}
|
|
205
|
-
</span>
|
|
206
|
-
{% endif %}
|
|
207
|
-
</td>
|
|
208
|
-
</tr>
|
|
209
|
-
<tr>
|
|
210
|
-
<td>Is Singleton</td>
|
|
211
|
-
<td>{{ object.is_singleton | render_boolean }}</td>
|
|
212
|
-
<td>
|
|
213
|
-
{% if object.is_singleton_override %}
|
|
214
|
-
<span class="text-muted">
|
|
215
|
-
overridden; default is
|
|
216
|
-
{% if object.installed %}
|
|
217
|
-
{{ object.job_class.is_singleton | render_boolean }}
|
|
218
|
-
{% else %}
|
|
219
|
-
unknown (not currently installed)
|
|
220
|
-
{% endif %}
|
|
221
|
-
</span>
|
|
222
|
-
{% endif %}
|
|
223
|
-
</td>
|
|
224
|
-
</tr>
|
|
225
|
-
<tr>
|
|
226
|
-
<td>Execution Soft Time Limit</td>
|
|
227
|
-
<td>
|
|
228
|
-
{% if object.soft_time_limit > 0 %}
|
|
229
|
-
{{ object.soft_time_limit }} seconds
|
|
230
|
-
{% else %}
|
|
231
|
-
{{ "CELERY_TASK_SOFT_TIME_LIMIT" | settings_or_config }} seconds (system default)
|
|
232
|
-
{% endif %}
|
|
233
|
-
</td>
|
|
234
|
-
<td>
|
|
235
|
-
{% if object.soft_time_limit_override %}
|
|
236
|
-
<span class="text-muted">
|
|
237
|
-
overridden; default is
|
|
238
|
-
{% if object.installed %}
|
|
239
|
-
{% if object.job_class.soft_time_limit > 0 %}
|
|
240
|
-
{{ object.job_class.soft_time_limit }} seconds
|
|
241
|
-
{% else %}
|
|
242
|
-
{{ "CELERY_TASK_SOFT_TIME_LIMIT" | settings_or_config }} seconds (system default)
|
|
243
|
-
{% endif %}
|
|
244
|
-
{% else %}
|
|
245
|
-
unknown (not currently installed)
|
|
246
|
-
{% endif %}
|
|
247
|
-
</span>
|
|
248
|
-
{% endif %}
|
|
249
|
-
</td>
|
|
250
|
-
</tr>
|
|
251
|
-
<tr>
|
|
252
|
-
<td>Execution Hard Time Limit</td>
|
|
253
|
-
<td>
|
|
254
|
-
{% if object.time_limit > 0 %}
|
|
255
|
-
{{ object.time_limit }} seconds
|
|
256
|
-
{% else %}
|
|
257
|
-
{{ "CELERY_TASK_TIME_LIMIT" | settings_or_config }} seconds (system default)
|
|
258
|
-
{% endif %}
|
|
259
|
-
</td>
|
|
260
|
-
<td>
|
|
261
|
-
{% if object.time_limit_override %}
|
|
262
|
-
<span class="text-muted">
|
|
263
|
-
overridden; default is
|
|
264
|
-
{% if object.installed %}
|
|
265
|
-
{% if object.job_class.time_limit > 0 %}
|
|
266
|
-
{{ object.job_class.time_limit }} seconds
|
|
267
|
-
{% else %}
|
|
268
|
-
{{ "CELERY_TASK_TIME_LIMIT" | settings_or_config }} seconds (system default)
|
|
269
|
-
{% endif %}
|
|
270
|
-
{% else %}
|
|
271
|
-
unknown (not currently installed)
|
|
272
|
-
{% endif %}
|
|
273
|
-
</span>
|
|
274
|
-
{% endif %}
|
|
275
|
-
</td>
|
|
276
|
-
</tr>
|
|
277
|
-
<tr>
|
|
278
|
-
<td>Job Queues</td>
|
|
279
|
-
<td>
|
|
280
|
-
{% if object.job_queues.exists %}
|
|
281
|
-
<ul>
|
|
282
|
-
{% for queue in object.job_queues.all %}
|
|
283
|
-
<li>{{ queue|hyperlinked_object }}</li>
|
|
284
|
-
{% endfor %}
|
|
285
|
-
</ul>
|
|
286
|
-
{% else %}
|
|
287
|
-
{{ None|placeholder }}
|
|
288
|
-
{% endif %}
|
|
289
|
-
</td>
|
|
290
|
-
<td>
|
|
291
|
-
{% if object.job_queues_override %}
|
|
292
|
-
<span class="text-muted">
|
|
293
|
-
overridden; default is:<br>
|
|
294
|
-
{% if object.installed %}
|
|
295
|
-
{% include 'extras/inc/json_data.html' with data=object.job_class.task_queues format="json" %}
|
|
296
|
-
{% else %}
|
|
297
|
-
unknown (not currently installed)
|
|
298
|
-
{% endif %}
|
|
299
|
-
</span>
|
|
300
|
-
{% endif %}
|
|
301
|
-
</td>
|
|
302
|
-
</tr>
|
|
303
|
-
<tr>
|
|
304
|
-
<td>Default Job Queue</td>
|
|
305
|
-
<td>
|
|
306
|
-
{{ object.default_job_queue|hyperlinked_object }}
|
|
307
|
-
</td>
|
|
308
|
-
<td>
|
|
309
|
-
{% if object.default_job_queue_override %}
|
|
310
|
-
<span class="text-muted">
|
|
311
|
-
overridden; default is:
|
|
312
|
-
{% if object.installed %}
|
|
313
|
-
{% if object.job_class.task_queues|length > 1 %}
|
|
314
|
-
{{ object.job_class.task_queues.0 }}
|
|
315
|
-
{% else %}
|
|
316
|
-
{{ None|placeholder }}
|
|
317
|
-
{% endif %}
|
|
318
|
-
{% else %}
|
|
319
|
-
unknown (not currently installed)
|
|
320
|
-
{% endif %}
|
|
321
|
-
</span>
|
|
322
|
-
{% endif %}
|
|
323
|
-
</td>
|
|
324
|
-
</tr>
|
|
325
|
-
</table>
|
|
326
|
-
</div>
|
|
327
|
-
{% endblock content_right_page %}
|
|
2
|
+
{% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|
|
@@ -1,52 +1,2 @@
|
|
|
1
1
|
{% extends 'generic/object_retrieve.html' %}
|
|
2
|
-
{%
|
|
3
|
-
|
|
4
|
-
{% block content_left_page %}
|
|
5
|
-
<div class="panel panel-default">
|
|
6
|
-
<div class="panel-heading">
|
|
7
|
-
<strong>Tag</strong>
|
|
8
|
-
</div>
|
|
9
|
-
<table class="table table-hover panel-body attr-table">
|
|
10
|
-
<tr>
|
|
11
|
-
<td>Name</td>
|
|
12
|
-
<td>
|
|
13
|
-
{{ object.name }}
|
|
14
|
-
</td>
|
|
15
|
-
</tr>
|
|
16
|
-
<tr>
|
|
17
|
-
<td>Tagged Items</td>
|
|
18
|
-
<td>
|
|
19
|
-
{{ items_count }}
|
|
20
|
-
</td>
|
|
21
|
-
</tr>
|
|
22
|
-
<tr>
|
|
23
|
-
<td>Color</td>
|
|
24
|
-
<td>
|
|
25
|
-
<span class="label color-block" style="background-color: #{{ object.color }}"> </span>
|
|
26
|
-
</td>
|
|
27
|
-
</tr>
|
|
28
|
-
<tr>
|
|
29
|
-
<td>Content Type(s)</td>
|
|
30
|
-
<td>
|
|
31
|
-
<ul class="list-unstyled">
|
|
32
|
-
{% for ct in content_types %}
|
|
33
|
-
<li>{{ ct }}</li>
|
|
34
|
-
{% endfor %}
|
|
35
|
-
</ul>
|
|
36
|
-
</td>
|
|
37
|
-
</tr>
|
|
38
|
-
<tr>
|
|
39
|
-
<td>Description</td>
|
|
40
|
-
<td>
|
|
41
|
-
{{ object.description|placeholder }}
|
|
42
|
-
</td>
|
|
43
|
-
</tr>
|
|
44
|
-
</table>
|
|
45
|
-
</div>
|
|
46
|
-
{% endblock content_left_page %}
|
|
47
|
-
|
|
48
|
-
{% block content_right_page %}
|
|
49
|
-
{% include 'panel_table.html' with table=items_table heading='Tagged Objects' %}
|
|
50
|
-
{% include 'inc/paginator.html' with paginator=items_table.paginator page=items_table.page %}
|
|
51
|
-
<div class="row"></div>
|
|
52
|
-
{% endblock content_right_page %}
|
|
2
|
+
{% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|