nautobot 2.4.16__py3-none-any.whl → 2.4.17__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/utils.py +2 -0
- nautobot/cloud/templates/cloud/cloudresourcetype_retrieve.html +3 -3
- nautobot/cloud/views.py +7 -0
- nautobot/core/apps/__init__.py +1 -0
- nautobot/core/celery/__init__.py +2 -1
- nautobot/core/templates/components/panel/panel.html +1 -1
- nautobot/core/templates/inc/paginator.html +3 -3
- nautobot/core/templates/inc/table.html +2 -2
- nautobot/core/templatetags/helpers.py +80 -6
- nautobot/core/testing/mixins.py +1 -1
- nautobot/core/testing/views.py +2 -4
- nautobot/core/ui/bulk_buttons.py +53 -53
- nautobot/core/ui/object_detail.py +9 -4
- nautobot/core/utils/data.py +13 -0
- nautobot/core/utils/deprecation.py +2 -0
- nautobot/dcim/migrations/0073_alter_powerport_power_factor_and_more.py +41 -0
- nautobot/dcim/models/device_component_templates.py +4 -2
- nautobot/dcim/models/device_components.py +3 -2
- nautobot/dcim/templates/dcim/rack_elevation_list.html +4 -4
- nautobot/dcim/views.py +9 -0
- nautobot/extras/models/customfields.py +45 -9
- nautobot/extras/templates/extras/configcontext_retrieve.html +1 -1
- nautobot/extras/templates/extras/configcontext_update.html +49 -49
- nautobot/extras/templates/extras/configcontextschema_retrieve.html +47 -47
- nautobot/extras/templates/extras/configcontextschema_update.html +18 -18
- nautobot/extras/templates/extras/inc/job_table.html +1 -1
- nautobot/extras/templates/extras/inc/object_contact_header.html +2 -2
- nautobot/extras/templates/extras/note_retrieve.html +53 -53
- nautobot/extras/templates/extras/tag_retrieve.html +1 -1
- nautobot/extras/templates/extras/tag_update.html +14 -14
- nautobot/extras/templates/extras/team_retrieve.html +1 -1
- nautobot/extras/tests/test_models.py +216 -0
- nautobot/extras/tests/test_views.py +2 -2
- nautobot/extras/views.py +1 -0
- nautobot/ipam/apps.py +1 -0
- nautobot/ipam/jobs/__init__.py +10 -0
- nautobot/ipam/jobs/cleanup.py +296 -0
- nautobot/ipam/models.py +301 -178
- nautobot/ipam/templates/ipam/inc/ipadress_edit_header.html +3 -3
- nautobot/ipam/templates/ipam/inc/toggle_available.html +2 -2
- nautobot/ipam/templates/ipam/ipaddress_assign.html +1 -1
- nautobot/ipam/templates/ipam/prefix_list.html +1 -1
- nautobot/ipam/templates/ipam/vlan_retrieve.html +1 -77
- nautobot/ipam/tests/test_jobs.py +454 -0
- nautobot/ipam/tests/test_models.py +290 -122
- nautobot/ipam/tests/test_views.py +40 -164
- nautobot/ipam/urls.py +0 -11
- nautobot/ipam/utils/testing.py +9 -4
- nautobot/ipam/views.py +166 -235
- nautobot/project-static/docs/404.html +9 -6
- nautobot/project-static/docs/apps/index.html +9 -6
- nautobot/project-static/docs/apps/nautobot-apps.html +9 -6
- nautobot/project-static/docs/assets/javascripts/bundle.92b07e13.min.js +16 -0
- nautobot/project-static/docs/assets/javascripts/{bundle.50899def.min.js.map → bundle.92b07e13.min.js.map} +2 -2
- nautobot/project-static/docs/assets/javascripts/workers/{search.d50fe291.min.js → search.973d3a69.min.js} +4 -4
- nautobot/project-static/docs/assets/javascripts/workers/{search.d50fe291.min.js.map → search.973d3a69.min.js.map} +1 -1
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +10 -7
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/events.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +11 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +11 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +28 -9
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +69 -7
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +9 -6
- nautobot/project-static/docs/development/apps/api/configuration-view.html +13 -10
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +11 -8
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +13 -10
- nautobot/project-static/docs/development/apps/api/models/global-search.html +10 -7
- nautobot/project-static/docs/development/apps/api/models/graphql.html +18 -15
- nautobot/project-static/docs/development/apps/api/models/index.html +14 -11
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +11 -8
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +15 -12
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +9 -6
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +15 -12
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +9 -6
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +11 -8
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +16 -13
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +12 -10305
- nautobot/project-static/docs/development/apps/api/platform-features/prepopulating-data.html +10722 -0
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +15 -12
- nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +14 -11
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +9 -6
- nautobot/project-static/docs/development/apps/api/prometheus.html +15 -12
- nautobot/project-static/docs/development/apps/api/setup.html +9 -6
- nautobot/project-static/docs/development/apps/api/testing.html +9 -6
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +12 -9
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +9 -6
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +9 -6
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +9 -6
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +20 -17
- nautobot/project-static/docs/development/apps/api/views/base-template.html +9 -6
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +15 -12
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +14 -11
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +9 -6
- nautobot/project-static/docs/development/apps/api/views/index.html +9 -6
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +10 -7
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +24 -21
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +12 -9
- nautobot/project-static/docs/development/apps/api/views/notes.html +10 -7
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +19 -16
- nautobot/project-static/docs/development/apps/api/views/urls.html +11 -8
- nautobot/project-static/docs/development/apps/index.html +9 -6
- nautobot/project-static/docs/development/apps/migration/code-updates.html +19 -16
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +9 -6
- nautobot/project-static/docs/development/apps/migration/from-v1.html +9 -6
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +22 -19
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +9 -6
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +9 -6
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +9 -6
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +9 -6
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/breadcrumbs-titles.html +14 -11
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +27 -24
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +20 -17
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +20 -17
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +9 -6
- nautobot/project-static/docs/development/core/application-registry.html +23 -20
- nautobot/project-static/docs/development/core/best-practices.html +23 -20
- nautobot/project-static/docs/development/core/bootstrap-ui.html +9 -6
- nautobot/project-static/docs/development/core/caching.html +9 -6
- nautobot/project-static/docs/development/core/controllers.html +9 -6
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +10 -7
- nautobot/project-static/docs/development/core/generic-views.html +9 -6
- nautobot/project-static/docs/development/core/getting-started.html +9 -6
- nautobot/project-static/docs/development/core/homepage.html +12 -9
- nautobot/project-static/docs/development/core/index.html +9 -6
- nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +9 -6
- nautobot/project-static/docs/development/core/model-checklist.html +9 -6
- nautobot/project-static/docs/development/core/model-features.html +11 -8
- nautobot/project-static/docs/development/core/natural-keys.html +21 -18
- nautobot/project-static/docs/development/core/navigation-menu.html +10 -7
- nautobot/project-static/docs/development/core/release-checklist.html +9 -6
- nautobot/project-static/docs/development/core/role-internals.html +9 -6
- nautobot/project-static/docs/development/core/settings.html +9 -6
- nautobot/project-static/docs/development/core/style-guide.html +32 -29
- nautobot/project-static/docs/development/core/templates.html +9 -6
- nautobot/project-static/docs/development/core/testing.html +10 -7
- nautobot/project-static/docs/development/core/ui-component-framework.html +36 -33
- nautobot/project-static/docs/development/core/user-preferences.html +9 -6
- nautobot/project-static/docs/development/index.html +9 -6
- nautobot/project-static/docs/development/jobs/getting-started.html +13 -10
- nautobot/project-static/docs/development/jobs/index.html +9 -6
- nautobot/project-static/docs/development/jobs/installation.html +23 -20
- nautobot/project-static/docs/development/jobs/job-extensions.html +25 -22
- nautobot/project-static/docs/development/jobs/job-logging.html +12 -9
- nautobot/project-static/docs/development/jobs/job-patterns.html +45 -42
- nautobot/project-static/docs/development/jobs/job-structure.html +53 -50
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +23 -20
- nautobot/project-static/docs/development/jobs/testing.html +14 -11
- nautobot/project-static/docs/index.html +9 -6
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/overview/application_stack.html +9 -6
- nautobot/project-static/docs/overview/design_philosophy.html +9 -6
- nautobot/project-static/docs/release-notes/index.html +9 -6
- nautobot/project-static/docs/release-notes/version-1.0.html +9 -6
- nautobot/project-static/docs/release-notes/version-1.1.html +9 -6
- nautobot/project-static/docs/release-notes/version-1.2.html +10 -7
- nautobot/project-static/docs/release-notes/version-1.3.html +9 -6
- nautobot/project-static/docs/release-notes/version-1.4.html +9 -6
- nautobot/project-static/docs/release-notes/version-1.5.html +13 -10
- nautobot/project-static/docs/release-notes/version-1.6.html +9 -6
- nautobot/project-static/docs/release-notes/version-2.0.html +9 -6
- nautobot/project-static/docs/release-notes/version-2.1.html +9 -6
- nautobot/project-static/docs/release-notes/version-2.2.html +9 -6
- nautobot/project-static/docs/release-notes/version-2.3.html +9 -6
- nautobot/project-static/docs/release-notes/version-2.4.html +267 -6
- nautobot/project-static/docs/requirements.txt +2 -2
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +301 -301
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +15 -12
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +9 -6
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +16 -13
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +9 -6
- nautobot/project-static/docs/user-guide/administration/configuration/redis.html +9 -6
- nautobot/project-static/docs/user-guide/administration/configuration/settings.html +11 -8
- nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +9 -6
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +9 -6
- nautobot/project-static/docs/user-guide/administration/guides/docker.html +9 -6
- nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +9 -6
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +9 -6
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +9 -6
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +9 -6
- nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +9 -6
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +16 -13
- nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +9 -6
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +9 -6
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +9 -6
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +9 -6
- nautobot/project-static/docs/user-guide/administration/installation/index.html +9 -6
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +9 -6
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +9 -6
- nautobot/project-static/docs/user-guide/administration/installation/services.html +12 -9
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +13 -10
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +10 -7
- nautobot/project-static/docs/user-guide/administration/security/index.html +9 -6
- nautobot/project-static/docs/user-guide/administration/security/notices.html +9 -6
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +9 -6
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +10 -7
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +9 -6
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +9 -6
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +9 -6
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +9 -6
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +9 -6
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +9 -6
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +9 -6
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +15 -12
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +13 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulefamily.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +11 -8
- nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +11 -8
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +41 -41
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +197 -54
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +13 -10
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +9 -6
- nautobot/project-static/docs/user-guide/index.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +10 -7
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/events.html +11 -8
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/managing-jobs.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +12 -9
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +11 -8
- nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +9 -6
- nautobot/project-static/fonts/UFL.txt +96 -96
- nautobot/project-static/js/forms.js +35 -2
- nautobot/virtualization/filters.py +7 -0
- {nautobot-2.4.16.dist-info → nautobot-2.4.17.dist-info}/METADATA +6 -6
- {nautobot-2.4.16.dist-info → nautobot-2.4.17.dist-info}/RECORD +369 -364
- nautobot/project-static/docs/assets/javascripts/bundle.50899def.min.js +0 -16
- {nautobot-2.4.16.dist-info → nautobot-2.4.17.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.4.16.dist-info → nautobot-2.4.17.dist-info}/NOTICE +0 -0
- {nautobot-2.4.16.dist-info → nautobot-2.4.17.dist-info}/WHEEL +0 -0
- {nautobot-2.4.16.dist-info → nautobot-2.4.17.dist-info}/entry_points.txt +0 -0
|
@@ -13,6 +13,7 @@ from django.core.validators import RegexValidator, ValidationError
|
|
|
13
13
|
from django.db import models, transaction
|
|
14
14
|
from django.forms.widgets import TextInput
|
|
15
15
|
from django.utils.html import format_html
|
|
16
|
+
from jinja2 import TemplateError, TemplateSyntaxError
|
|
16
17
|
|
|
17
18
|
from nautobot.core.constants import CHARFIELD_MAX_LENGTH
|
|
18
19
|
from nautobot.core.forms import (
|
|
@@ -35,7 +36,7 @@ from nautobot.core.models.querysets import RestrictedQuerySet
|
|
|
35
36
|
from nautobot.core.models.validators import validate_regex
|
|
36
37
|
from nautobot.core.settings_funcs import is_truthy
|
|
37
38
|
from nautobot.core.templatetags.helpers import render_markdown
|
|
38
|
-
from nautobot.core.utils.data import render_jinja2
|
|
39
|
+
from nautobot.core.utils.data import render_jinja2, validate_jinja2
|
|
39
40
|
from nautobot.extras.choices import CustomFieldFilterLogicChoices, CustomFieldTypeChoices
|
|
40
41
|
from nautobot.extras.models import ChangeLoggedModel
|
|
41
42
|
from nautobot.extras.models.mixins import ContactMixin, DynamicGroupsModelMixin, NotesMixin, SavedViewMixin
|
|
@@ -84,6 +85,31 @@ class ComputedFieldManager(BaseManager.from_queryset(RestrictedQuerySet)):
|
|
|
84
85
|
label = f"{ct.app_label}.{ct.model}"
|
|
85
86
|
cache.set(f"{self.get_for_model.cache_key_prefix}.{label}.list", listings[label])
|
|
86
87
|
|
|
88
|
+
def bulk_create(self, objs, *args, **kwargs):
|
|
89
|
+
"""Validate templates before saving."""
|
|
90
|
+
self._validate_templates_bulk(objs)
|
|
91
|
+
return super().bulk_create(objs, *args, **kwargs)
|
|
92
|
+
|
|
93
|
+
def bulk_update(self, objs, fields, *args, **kwargs):
|
|
94
|
+
"""Validate templates before updating if template field is being modified."""
|
|
95
|
+
if "template" in fields:
|
|
96
|
+
self._validate_templates_bulk(objs)
|
|
97
|
+
|
|
98
|
+
return super().bulk_update(objs, fields, *args, **kwargs)
|
|
99
|
+
|
|
100
|
+
def _validate_templates_bulk(self, objs):
|
|
101
|
+
"""Helper method to validate templates for multiple objects."""
|
|
102
|
+
errors = []
|
|
103
|
+
for obj in objs:
|
|
104
|
+
try:
|
|
105
|
+
obj.validate_template()
|
|
106
|
+
except ValidationError as exc:
|
|
107
|
+
message_list = [f"'{obj.label}': {x}" for x in exc.messages]
|
|
108
|
+
errors.extend(message_list)
|
|
109
|
+
|
|
110
|
+
if errors:
|
|
111
|
+
raise ValidationError(f"Template validation failed - {'; '.join(errors)}")
|
|
112
|
+
|
|
87
113
|
|
|
88
114
|
@extras_features("graphql")
|
|
89
115
|
class ComputedField(
|
|
@@ -144,14 +170,7 @@ class ComputedField(
|
|
|
144
170
|
|
|
145
171
|
def render(self, context):
|
|
146
172
|
try:
|
|
147
|
-
|
|
148
|
-
# If there is an undefined variable within a template, it returns nothing
|
|
149
|
-
# Doesn't raise an exception either most likely due to using Undefined rather
|
|
150
|
-
# than StrictUndefined, but return fallback_value if None is returned
|
|
151
|
-
if rendered is None:
|
|
152
|
-
logger.warning("Failed to render computed field %s", self.key)
|
|
153
|
-
return self.fallback_value
|
|
154
|
-
return rendered
|
|
173
|
+
return render_jinja2(self.template, context)
|
|
155
174
|
except Exception as exc:
|
|
156
175
|
logger.warning("Failed to render computed field %s: %s", self.key, exc)
|
|
157
176
|
return self.fallback_value
|
|
@@ -162,9 +181,26 @@ class ComputedField(
|
|
|
162
181
|
|
|
163
182
|
def clean(self):
|
|
164
183
|
super().clean()
|
|
184
|
+
|
|
185
|
+
self.validate_template()
|
|
186
|
+
|
|
165
187
|
if self.key != "":
|
|
166
188
|
check_if_key_is_graphql_safe(self.__class__.__name__, self.key)
|
|
167
189
|
|
|
190
|
+
def validate_template(self):
|
|
191
|
+
"""
|
|
192
|
+
Validate that the template contains valid Jinja2 syntax.
|
|
193
|
+
"""
|
|
194
|
+
try:
|
|
195
|
+
validate_jinja2(self.template)
|
|
196
|
+
except TemplateSyntaxError as exc:
|
|
197
|
+
raise ValidationError({"template": f"Template syntax error on line {exc.lineno}: {exc.message}"})
|
|
198
|
+
except TemplateError as exc:
|
|
199
|
+
raise ValidationError({"template": f"Template error: {exc}"})
|
|
200
|
+
except Exception as exc:
|
|
201
|
+
# System-level exceptions (very rare) - memory, recursion, encoding issues
|
|
202
|
+
raise ValidationError(f"Template validation failed: {exc}")
|
|
203
|
+
|
|
168
204
|
|
|
169
205
|
class CustomFieldModel(models.Model):
|
|
170
206
|
"""
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
{% extends 'generic/object_retrieve.html' %}
|
|
1
|
+
{% extends 'generic/object_retrieve.html' %}
|
|
2
2
|
{% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
{% extends 'generic/object_create.html' %}
|
|
2
|
-
{% load form_helpers %}
|
|
3
|
-
|
|
4
|
-
{% block form %}
|
|
5
|
-
<div class="panel panel-default">
|
|
6
|
-
<div class="panel-heading"><strong>Config Context</strong></div>
|
|
7
|
-
<div class="panel-body">
|
|
8
|
-
{% render_field form.name %}
|
|
9
|
-
{% render_field form.weight %}
|
|
10
|
-
{% render_field form.description %}
|
|
11
|
-
{% render_field form.config_context_schema %}
|
|
12
|
-
{% render_field form.is_active %}
|
|
13
|
-
</div>
|
|
14
|
-
</div>
|
|
15
|
-
<div class="panel panel-default">
|
|
16
|
-
<div class="panel-heading"><strong>Assignment</strong></div>
|
|
17
|
-
<div class="panel-body">
|
|
18
|
-
{% render_field form.locations %}
|
|
19
|
-
{% render_field form.roles %}
|
|
20
|
-
{% render_field form.device_types %}
|
|
21
|
-
{% render_field form.platforms %}
|
|
22
|
-
{% render_field form.cluster_groups %}
|
|
23
|
-
{% render_field form.clusters %}
|
|
24
|
-
{% render_field form.tenant_groups %}
|
|
25
|
-
{% render_field form.tenants %}
|
|
26
|
-
{% render_field form.device_redundancy_groups %}
|
|
27
|
-
{% render_field form.tags %}
|
|
28
|
-
{% if settings.CONFIG_CONTEXT_DYNAMIC_GROUPS_ENABLED %}
|
|
29
|
-
{% render_field form.dynamic_groups %}
|
|
30
|
-
{% endif %}
|
|
31
|
-
</div>
|
|
32
|
-
</div>
|
|
33
|
-
<div class="panel panel-default">
|
|
34
|
-
<div class="panel-heading"><strong>Data</strong></div>
|
|
35
|
-
<div class="panel-body">
|
|
36
|
-
{% render_field form.data %}
|
|
37
|
-
</div>
|
|
38
|
-
</div>
|
|
39
|
-
{% comment %}
|
|
40
|
-
We don't use 'inc/extras_features_edit_form_fields.html' because it would add a second,
|
|
41
|
-
and incorrect, "Tags" field to the form. Currently config-contexts don't support custom-fields or relationships,
|
|
42
|
-
but they do support notes.
|
|
43
|
-
{% endcomment %}
|
|
44
|
-
<div class="panel panel-default">
|
|
45
|
-
<div class="panel-heading"><strong>Notes</strong></div>
|
|
46
|
-
<div class="panel-body">
|
|
47
|
-
{% render_field form.object_note %}
|
|
48
|
-
</div>
|
|
49
|
-
</div>
|
|
1
|
+
{% extends 'generic/object_create.html' %}
|
|
2
|
+
{% load form_helpers %}
|
|
3
|
+
|
|
4
|
+
{% block form %}
|
|
5
|
+
<div class="panel panel-default">
|
|
6
|
+
<div class="panel-heading"><strong>Config Context</strong></div>
|
|
7
|
+
<div class="panel-body">
|
|
8
|
+
{% render_field form.name %}
|
|
9
|
+
{% render_field form.weight %}
|
|
10
|
+
{% render_field form.description %}
|
|
11
|
+
{% render_field form.config_context_schema %}
|
|
12
|
+
{% render_field form.is_active %}
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
<div class="panel panel-default">
|
|
16
|
+
<div class="panel-heading"><strong>Assignment</strong></div>
|
|
17
|
+
<div class="panel-body">
|
|
18
|
+
{% render_field form.locations %}
|
|
19
|
+
{% render_field form.roles %}
|
|
20
|
+
{% render_field form.device_types %}
|
|
21
|
+
{% render_field form.platforms %}
|
|
22
|
+
{% render_field form.cluster_groups %}
|
|
23
|
+
{% render_field form.clusters %}
|
|
24
|
+
{% render_field form.tenant_groups %}
|
|
25
|
+
{% render_field form.tenants %}
|
|
26
|
+
{% render_field form.device_redundancy_groups %}
|
|
27
|
+
{% render_field form.tags %}
|
|
28
|
+
{% if settings.CONFIG_CONTEXT_DYNAMIC_GROUPS_ENABLED %}
|
|
29
|
+
{% render_field form.dynamic_groups %}
|
|
30
|
+
{% endif %}
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
<div class="panel panel-default">
|
|
34
|
+
<div class="panel-heading"><strong>Data</strong></div>
|
|
35
|
+
<div class="panel-body">
|
|
36
|
+
{% render_field form.data %}
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
{% comment %}
|
|
40
|
+
We don't use 'inc/extras_features_edit_form_fields.html' because it would add a second,
|
|
41
|
+
and incorrect, "Tags" field to the form. Currently config-contexts don't support custom-fields or relationships,
|
|
42
|
+
but they do support notes.
|
|
43
|
+
{% endcomment %}
|
|
44
|
+
<div class="panel panel-default">
|
|
45
|
+
<div class="panel-heading"><strong>Notes</strong></div>
|
|
46
|
+
<div class="panel-body">
|
|
47
|
+
{% render_field form.object_note %}
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
50
|
{% endblock %}
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
{% extends 'generic/object_retrieve.html' %}
|
|
2
|
-
{% load buttons %}
|
|
3
|
-
{% load plugins %}
|
|
4
|
-
{% load helpers %}
|
|
5
|
-
|
|
6
|
-
{% block extra_nav_tabs %}
|
|
7
|
-
<li role="presentation"{% if active_tab == 'validation' %} class="active"{% endif %}>
|
|
8
|
-
<a href="{% url 'extras:configcontextschema_object_validation' pk=object.pk %}">Validation</a>
|
|
9
|
-
</li>
|
|
10
|
-
{% endblock extra_nav_tabs %}
|
|
11
|
-
|
|
12
|
-
{% block content_left_page %}
|
|
13
|
-
<div class="panel panel-default">
|
|
14
|
-
<div class="panel-heading">
|
|
15
|
-
<strong>Config Context Schema</strong>
|
|
16
|
-
</div>
|
|
17
|
-
<table class="table table-hover panel-body attr-table">
|
|
18
|
-
<tr>
|
|
19
|
-
<td>Name</td>
|
|
20
|
-
<td>
|
|
21
|
-
{{ object.name }}
|
|
22
|
-
</td>
|
|
23
|
-
</tr>
|
|
24
|
-
{% if object.owner %}
|
|
25
|
-
<tr>
|
|
26
|
-
<td>Owner</td>
|
|
27
|
-
<td>{{ object.owner|hyperlinked_object }}</td>
|
|
28
|
-
</tr>
|
|
29
|
-
{% endif %}
|
|
30
|
-
<tr>
|
|
31
|
-
<td>Description</td>
|
|
32
|
-
<td>{{ object.description|placeholder }}</td>
|
|
33
|
-
</tr>
|
|
34
|
-
</table>
|
|
35
|
-
</div>
|
|
36
|
-
{% endblock content_left_page %}
|
|
37
|
-
|
|
38
|
-
{% block content_right_page %}
|
|
39
|
-
<div class="panel panel-default">
|
|
40
|
-
<div class="panel-heading">
|
|
41
|
-
<strong>Data Schema</strong>
|
|
42
|
-
{% include 'extras/inc/configcontext_format.html' %}
|
|
43
|
-
</div>
|
|
44
|
-
<div class="panel-body">
|
|
45
|
-
{% include 'extras/inc/json_data.html' with data=object.data_schema format=data_format %}
|
|
46
|
-
</div>
|
|
47
|
-
</div>
|
|
1
|
+
{% extends 'generic/object_retrieve.html' %}
|
|
2
|
+
{% load buttons %}
|
|
3
|
+
{% load plugins %}
|
|
4
|
+
{% load helpers %}
|
|
5
|
+
|
|
6
|
+
{% block extra_nav_tabs %}
|
|
7
|
+
<li role="presentation"{% if active_tab == 'validation' %} class="active"{% endif %}>
|
|
8
|
+
<a href="{% url 'extras:configcontextschema_object_validation' pk=object.pk %}">Validation</a>
|
|
9
|
+
</li>
|
|
10
|
+
{% endblock extra_nav_tabs %}
|
|
11
|
+
|
|
12
|
+
{% block content_left_page %}
|
|
13
|
+
<div class="panel panel-default">
|
|
14
|
+
<div class="panel-heading">
|
|
15
|
+
<strong>Config Context Schema</strong>
|
|
16
|
+
</div>
|
|
17
|
+
<table class="table table-hover panel-body attr-table">
|
|
18
|
+
<tr>
|
|
19
|
+
<td>Name</td>
|
|
20
|
+
<td>
|
|
21
|
+
{{ object.name }}
|
|
22
|
+
</td>
|
|
23
|
+
</tr>
|
|
24
|
+
{% if object.owner %}
|
|
25
|
+
<tr>
|
|
26
|
+
<td>Owner</td>
|
|
27
|
+
<td>{{ object.owner|hyperlinked_object }}</td>
|
|
28
|
+
</tr>
|
|
29
|
+
{% endif %}
|
|
30
|
+
<tr>
|
|
31
|
+
<td>Description</td>
|
|
32
|
+
<td>{{ object.description|placeholder }}</td>
|
|
33
|
+
</tr>
|
|
34
|
+
</table>
|
|
35
|
+
</div>
|
|
36
|
+
{% endblock content_left_page %}
|
|
37
|
+
|
|
38
|
+
{% block content_right_page %}
|
|
39
|
+
<div class="panel panel-default">
|
|
40
|
+
<div class="panel-heading">
|
|
41
|
+
<strong>Data Schema</strong>
|
|
42
|
+
{% include 'extras/inc/configcontext_format.html' %}
|
|
43
|
+
</div>
|
|
44
|
+
<div class="panel-body">
|
|
45
|
+
{% include 'extras/inc/json_data.html' with data=object.data_schema format=data_format %}
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
48
|
{% endblock content_right_page %}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
{% extends 'generic/object_create.html' %}
|
|
2
|
-
{% load form_helpers %}
|
|
3
|
-
|
|
4
|
-
{% block form %}
|
|
5
|
-
<div class="panel panel-default">
|
|
6
|
-
<div class="panel-heading"><strong>Config Context Schema</strong></div>
|
|
7
|
-
<div class="panel-body">
|
|
8
|
-
{% render_field form.name %}
|
|
9
|
-
{% render_field form.description %}
|
|
10
|
-
</div>
|
|
11
|
-
</div>
|
|
12
|
-
<div class="panel panel-default">
|
|
13
|
-
<div class="panel-heading"><strong>Data Schema</strong></div>
|
|
14
|
-
<div class="panel-body">
|
|
15
|
-
{% render_field form.data_schema %}
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
18
|
-
{% include 'inc/extras_features_edit_form_fields.html' %}
|
|
1
|
+
{% extends 'generic/object_create.html' %}
|
|
2
|
+
{% load form_helpers %}
|
|
3
|
+
|
|
4
|
+
{% block form %}
|
|
5
|
+
<div class="panel panel-default">
|
|
6
|
+
<div class="panel-heading"><strong>Config Context Schema</strong></div>
|
|
7
|
+
<div class="panel-body">
|
|
8
|
+
{% render_field form.name %}
|
|
9
|
+
{% render_field form.description %}
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="panel panel-default">
|
|
13
|
+
<div class="panel-heading"><strong>Data Schema</strong></div>
|
|
14
|
+
<div class="panel-body">
|
|
15
|
+
{% render_field form.data_schema %}
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
{% include 'inc/extras_features_edit_form_fields.html' %}
|
|
19
19
|
{% endblock %}
|
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
<a href="{% url 'extras:object_contact_team_assign' %}{% querystring request %}">Assign Contact/Team</a>
|
|
7
7
|
</li>
|
|
8
8
|
<li role="presentation"{% if active_tab == 'contact' %} class="active"{% endif %}>
|
|
9
|
-
<a href="{% url 'extras:object_contact_add' %}{%
|
|
9
|
+
<a href="{% url 'extras:object_contact_add' %}{% legacy_querystring request %}">New Contact</a>
|
|
10
10
|
</li>
|
|
11
11
|
<li role="presentation"{% if active_tab == 'team' %} class="active"{% endif %}>
|
|
12
|
-
<a href="{% url 'extras:object_team_add' %}{%
|
|
12
|
+
<a href="{% url 'extras:object_team_add' %}{% legacy_querystring request %}">New Team</a>
|
|
13
13
|
</li>
|
|
14
14
|
</ul>
|
|
15
15
|
{% endblock %}
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
{% extends 'generic/object_retrieve.html' %}
|
|
2
|
-
{% load buttons %}
|
|
3
|
-
{% load plugins %}
|
|
4
|
-
{% load perms %}
|
|
5
|
-
{% load helpers %}
|
|
6
|
-
|
|
7
|
-
{% block breadcrumbs %}
|
|
8
|
-
<li><a href="{% url 'extras:note_list' %}">Notes</a></li>
|
|
9
|
-
{% if object.assigned_object.get_absolute_url %}
|
|
10
|
-
<li><a href="{{ object.assigned_object.get_absolute_url }}notes/">{{ object.assigned_object }}</a></li>
|
|
11
|
-
{% endif %}
|
|
12
|
-
<li>{{ object }}</li>
|
|
13
|
-
{% endblock breadcrumbs %}
|
|
14
|
-
|
|
15
|
-
{% block content %}
|
|
16
|
-
<div class="row">
|
|
17
|
-
<div class="col-md-5">
|
|
18
|
-
<div class="panel panel-default">
|
|
19
|
-
<div class="panel-heading">
|
|
20
|
-
<strong>Note</strong>
|
|
21
|
-
</div>
|
|
22
|
-
<table class="table table-hover panel-body attr-table">
|
|
23
|
-
<tr>
|
|
24
|
-
<td>User</td>
|
|
25
|
-
<td>
|
|
26
|
-
{{ object.user|default:object.user_name }}
|
|
27
|
-
</td>
|
|
28
|
-
</tr>
|
|
29
|
-
<tr>
|
|
30
|
-
<td>Object Type</td>
|
|
31
|
-
<td>
|
|
32
|
-
{{ object.assigned_object_type }}
|
|
33
|
-
</td>
|
|
34
|
-
</tr>
|
|
35
|
-
<tr>
|
|
36
|
-
<td>Object</td>
|
|
37
|
-
<td>
|
|
38
|
-
{{ object.assigned_object | hyperlinked_object }}
|
|
39
|
-
</td>
|
|
40
|
-
</tr>
|
|
41
|
-
</table>
|
|
42
|
-
</div>
|
|
43
|
-
<div class="panel panel-default">
|
|
44
|
-
<div class="panel-heading">
|
|
45
|
-
<strong>Text</strong>
|
|
46
|
-
</div>
|
|
47
|
-
<div class="panel-body rendered-markdown">
|
|
48
|
-
{{ object.note|render_markdown }}
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
51
|
-
</div>
|
|
52
|
-
</div>
|
|
53
|
-
{% endblock %}
|
|
1
|
+
{% extends 'generic/object_retrieve.html' %}
|
|
2
|
+
{% load buttons %}
|
|
3
|
+
{% load plugins %}
|
|
4
|
+
{% load perms %}
|
|
5
|
+
{% load helpers %}
|
|
6
|
+
|
|
7
|
+
{% block breadcrumbs %}
|
|
8
|
+
<li><a href="{% url 'extras:note_list' %}">Notes</a></li>
|
|
9
|
+
{% if object.assigned_object.get_absolute_url %}
|
|
10
|
+
<li><a href="{{ object.assigned_object.get_absolute_url }}notes/">{{ object.assigned_object }}</a></li>
|
|
11
|
+
{% endif %}
|
|
12
|
+
<li>{{ object }}</li>
|
|
13
|
+
{% endblock breadcrumbs %}
|
|
14
|
+
|
|
15
|
+
{% block content %}
|
|
16
|
+
<div class="row">
|
|
17
|
+
<div class="col-md-5">
|
|
18
|
+
<div class="panel panel-default">
|
|
19
|
+
<div class="panel-heading">
|
|
20
|
+
<strong>Note</strong>
|
|
21
|
+
</div>
|
|
22
|
+
<table class="table table-hover panel-body attr-table">
|
|
23
|
+
<tr>
|
|
24
|
+
<td>User</td>
|
|
25
|
+
<td>
|
|
26
|
+
{{ object.user|default:object.user_name }}
|
|
27
|
+
</td>
|
|
28
|
+
</tr>
|
|
29
|
+
<tr>
|
|
30
|
+
<td>Object Type</td>
|
|
31
|
+
<td>
|
|
32
|
+
{{ object.assigned_object_type }}
|
|
33
|
+
</td>
|
|
34
|
+
</tr>
|
|
35
|
+
<tr>
|
|
36
|
+
<td>Object</td>
|
|
37
|
+
<td>
|
|
38
|
+
{{ object.assigned_object | hyperlinked_object }}
|
|
39
|
+
</td>
|
|
40
|
+
</tr>
|
|
41
|
+
</table>
|
|
42
|
+
</div>
|
|
43
|
+
<div class="panel panel-default">
|
|
44
|
+
<div class="panel-heading">
|
|
45
|
+
<strong>Text</strong>
|
|
46
|
+
</div>
|
|
47
|
+
<div class="panel-body rendered-markdown">
|
|
48
|
+
{{ object.note|render_markdown }}
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
{% endblock %}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
{% extends 'generic/object_retrieve.html' %}
|
|
1
|
+
{% extends 'generic/object_retrieve.html' %}
|
|
2
2
|
{% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
{% extends 'generic/object_create.html' %}
|
|
2
|
-
{% load form_helpers %}
|
|
3
|
-
|
|
4
|
-
{% block form %}
|
|
5
|
-
<div class="panel panel-default">
|
|
6
|
-
<div class="panel-heading"><strong>Tag</strong></div>
|
|
7
|
-
<div class="panel-body">
|
|
8
|
-
{% render_field form.name %}
|
|
9
|
-
{% render_field form.color %}
|
|
10
|
-
{% render_field form.description %}
|
|
11
|
-
{% render_field form.content_types %}
|
|
12
|
-
</div>
|
|
13
|
-
</div>
|
|
14
|
-
{% include 'inc/extras_features_edit_form_fields.html' %}
|
|
1
|
+
{% extends 'generic/object_create.html' %}
|
|
2
|
+
{% load form_helpers %}
|
|
3
|
+
|
|
4
|
+
{% block form %}
|
|
5
|
+
<div class="panel panel-default">
|
|
6
|
+
<div class="panel-heading"><strong>Tag</strong></div>
|
|
7
|
+
<div class="panel-body">
|
|
8
|
+
{% render_field form.name %}
|
|
9
|
+
{% render_field form.color %}
|
|
10
|
+
{% render_field form.description %}
|
|
11
|
+
{% render_field form.content_types %}
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
{% include 'inc/extras_features_edit_form_fields.html' %}
|
|
15
15
|
{% endblock %}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
{% extends 'generic/object_retrieve.html' %}
|
|
1
|
+
{% extends 'generic/object_retrieve.html' %}
|
|
2
2
|
{% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|