nautobot 2.4.0__py3-none-any.whl → 2.4.0b1__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/__init__.py +1 -1
- nautobot/apps/api.py +8 -8
- nautobot/apps/change_logging.py +2 -2
- nautobot/apps/choices.py +4 -4
- nautobot/apps/events.py +3 -3
- nautobot/apps/factory.py +2 -2
- nautobot/apps/filters.py +1 -1
- nautobot/apps/forms.py +20 -20
- nautobot/apps/graphql.py +2 -2
- nautobot/apps/jobs.py +8 -8
- nautobot/apps/models.py +19 -19
- nautobot/apps/tables.py +1 -1
- nautobot/apps/testing.py +10 -10
- nautobot/apps/ui.py +2 -2
- nautobot/apps/utils.py +7 -7
- nautobot/apps/views.py +7 -7
- nautobot/circuits/api/serializers.py +0 -1
- nautobot/circuits/api/views.py +8 -4
- nautobot/circuits/tables.py +1 -2
- nautobot/circuits/templates/circuits/circuit_create.html +7 -1
- nautobot/circuits/views.py +3 -3
- nautobot/cloud/api/views.py +10 -6
- nautobot/cloud/models.py +1 -1
- nautobot/cloud/views.py +16 -0
- nautobot/core/api/fields.py +5 -5
- nautobot/core/api/filter_backends.py +9 -3
- nautobot/core/api/schema.py +2 -13
- nautobot/core/api/serializers.py +34 -40
- nautobot/core/api/views.py +4 -56
- nautobot/core/celery/log.py +4 -4
- nautobot/core/celery/schedulers.py +1 -1
- nautobot/core/choices.py +2 -2
- nautobot/core/events/__init__.py +3 -3
- nautobot/core/filters.py +16 -21
- nautobot/core/fixtures/user-data.json +59 -0
- nautobot/core/forms/__init__.py +19 -19
- nautobot/core/forms/fields.py +11 -14
- nautobot/core/forms/forms.py +2 -33
- nautobot/core/graphql/types.py +1 -1
- nautobot/core/jobs/__init__.py +7 -28
- nautobot/core/jobs/cleanup.py +12 -48
- nautobot/core/jobs/groups.py +1 -1
- nautobot/core/management/commands/validate_models.py +1 -1
- nautobot/core/models/__init__.py +1 -1
- nautobot/core/models/query_functions.py +2 -2
- nautobot/core/models/tree_queries.py +3 -6
- nautobot/core/settings.py +2 -29
- nautobot/core/settings.yaml +0 -21
- nautobot/core/tables.py +60 -74
- nautobot/core/templates/inc/media.html +0 -3
- nautobot/core/templates/inc/nav_menu.html +0 -1
- nautobot/core/templates/nautobot_config.py.j2 +0 -13
- nautobot/core/templates/search.html +0 -7
- nautobot/core/templates/utilities/render_jinja2.html +1 -1
- nautobot/core/templates/utilities/templatetags/tag.html +1 -1
- nautobot/core/templates/utilities/theme_preview.html +0 -7
- nautobot/core/templatetags/helpers.py +2 -11
- nautobot/core/testing/__init__.py +8 -8
- nautobot/core/testing/api.py +15 -170
- nautobot/core/testing/filters.py +2 -25
- nautobot/core/testing/forms.py +0 -2
- nautobot/core/testing/mixins.py +2 -7
- nautobot/core/testing/views.py +29 -44
- nautobot/core/tests/integration/test_app_home.py +1 -0
- nautobot/core/tests/integration/test_app_navbar.py +1 -0
- nautobot/core/tests/integration/test_filters.py +2 -0
- nautobot/core/tests/integration/test_home.py +1 -0
- nautobot/core/tests/integration/test_navbar.py +1 -0
- nautobot/core/tests/integration/test_view_authentication.py +0 -1
- nautobot/core/tests/runner.py +1 -1
- nautobot/core/tests/test_api.py +1 -98
- nautobot/core/tests/test_csv.py +3 -25
- nautobot/core/tests/test_forms.py +0 -1
- nautobot/core/tests/test_jobs.py +1 -303
- nautobot/core/tests/test_settings_schema.py +0 -7
- nautobot/core/tests/test_tables.py +0 -100
- nautobot/core/tests/test_utils.py +1 -63
- nautobot/core/tests/test_views.py +3 -30
- nautobot/core/ui/nav.py +0 -1
- nautobot/core/ui/object_detail.py +1 -15
- nautobot/core/urls.py +0 -11
- nautobot/core/utils/lookup.py +8 -11
- nautobot/core/utils/requests.py +9 -24
- nautobot/core/views/__init__.py +0 -42
- nautobot/core/views/generic.py +176 -78
- nautobot/core/views/mixins.py +34 -94
- nautobot/core/views/renderers.py +6 -6
- nautobot/dcim/api/serializers.py +62 -54
- nautobot/dcim/api/views.py +113 -47
- nautobot/dcim/filters/__init__.py +2 -31
- nautobot/dcim/forms.py +17 -36
- nautobot/dcim/graphql/types.py +2 -2
- nautobot/dcim/models/__init__.py +1 -1
- nautobot/dcim/models/device_component_templates.py +2 -2
- nautobot/dcim/models/device_components.py +20 -22
- nautobot/dcim/models/devices.py +1 -10
- nautobot/dcim/models/locations.py +3 -3
- nautobot/dcim/models/power.py +5 -6
- nautobot/dcim/models/racks.py +4 -4
- nautobot/dcim/tables/__init__.py +3 -3
- nautobot/dcim/tables/devices.py +5 -7
- nautobot/dcim/tables/devicetypes.py +2 -2
- nautobot/dcim/tables/racks.py +1 -1
- nautobot/dcim/templates/dcim/controller_create.html +7 -1
- nautobot/dcim/templates/dcim/controller_retrieve.html +9 -1
- nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +0 -2
- nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +0 -5
- nautobot/dcim/templates/dcim/device.html +9 -1
- nautobot/dcim/templates/dcim/device_edit.html +37 -36
- nautobot/dcim/templates/dcim/location.html +9 -1
- nautobot/dcim/templates/dcim/location_edit.html +7 -1
- nautobot/dcim/templates/dcim/rack.html +9 -1
- nautobot/dcim/templates/dcim/rack_edit.html +7 -1
- nautobot/dcim/templates/dcim/rackreservation.html +9 -1
- nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +9 -1
- nautobot/dcim/templates/dcim/virtualdevicecontext_update.html +7 -1
- nautobot/dcim/tests/test_api.py +3 -16
- nautobot/dcim/tests/test_filters.py +0 -33
- nautobot/dcim/tests/test_forms.py +2 -51
- nautobot/dcim/tests/test_graphql.py +0 -52
- nautobot/dcim/tests/test_models.py +5 -34
- nautobot/dcim/tests/test_views.py +83 -21
- nautobot/dcim/views.py +13 -1
- nautobot/extras/api/customfields.py +2 -2
- nautobot/extras/api/serializers.py +85 -90
- nautobot/extras/api/views.py +27 -22
- nautobot/extras/constants.py +0 -2
- nautobot/extras/filters/__init__.py +6 -8
- nautobot/extras/forms/base.py +2 -2
- nautobot/extras/forms/forms.py +31 -139
- nautobot/extras/forms/mixins.py +5 -13
- nautobot/extras/group_sync.py +3 -3
- nautobot/extras/health_checks.py +2 -1
- nautobot/extras/jobs.py +12 -70
- nautobot/extras/managers.py +1 -3
- nautobot/extras/migrations/0018_joblog_data_migration.py +9 -7
- nautobot/extras/models/__init__.py +1 -1
- nautobot/extras/models/contacts.py +1 -1
- nautobot/extras/models/customfields.py +11 -12
- nautobot/extras/models/groups.py +9 -11
- nautobot/extras/models/jobs.py +4 -23
- nautobot/extras/models/models.py +2 -2
- nautobot/extras/plugins/__init__.py +2 -13
- nautobot/extras/plugins/marketplace_manifest.yml +79 -84
- nautobot/extras/plugins/tables.py +14 -16
- nautobot/extras/plugins/views.py +69 -65
- nautobot/extras/registry.py +1 -1
- nautobot/extras/secrets/__init__.py +2 -2
- nautobot/extras/tables.py +5 -7
- nautobot/extras/templates/extras/dynamicgroup.html +9 -1
- nautobot/extras/templates/extras/job_detail.html +0 -16
- nautobot/extras/templates/extras/job_edit.html +0 -1
- nautobot/extras/templates/extras/jobqueue_retrieve.html +9 -1
- nautobot/extras/templates/extras/marketplace.html +11 -29
- nautobot/extras/templates/extras/plugin_detail.html +15 -32
- nautobot/extras/templates/extras/plugins_tiles.html +10 -21
- nautobot/extras/test_jobs/api_test_job.py +1 -1
- nautobot/extras/test_jobs/atomic_transaction.py +2 -2
- nautobot/extras/test_jobs/dry_run.py +1 -1
- nautobot/extras/test_jobs/fail.py +5 -5
- nautobot/extras/test_jobs/file_output.py +1 -1
- nautobot/extras/test_jobs/file_upload_fail.py +1 -1
- nautobot/extras/test_jobs/file_upload_pass.py +1 -1
- nautobot/extras/test_jobs/ipaddress_vars.py +1 -3
- nautobot/extras/test_jobs/jobs_module/jobs_submodule/jobs.py +1 -1
- nautobot/extras/test_jobs/location_with_custom_field.py +1 -1
- nautobot/extras/test_jobs/log_redaction.py +1 -1
- nautobot/extras/test_jobs/log_skip_db_logging.py +1 -1
- nautobot/extras/test_jobs/modify_db.py +1 -1
- nautobot/extras/test_jobs/object_var_optional.py +1 -1
- nautobot/extras/test_jobs/object_var_required.py +1 -1
- nautobot/extras/test_jobs/object_vars.py +1 -1
- nautobot/extras/test_jobs/pass.py +3 -3
- nautobot/extras/test_jobs/profiling.py +1 -1
- nautobot/extras/test_jobs/relative_import.py +3 -3
- nautobot/extras/test_jobs/soft_time_limit_greater_than_time_limit.py +1 -1
- nautobot/extras/test_jobs/task_queues.py +1 -1
- nautobot/extras/tests/integration/test_plugin_banner.py +2 -0
- nautobot/extras/tests/test_api.py +13 -13
- nautobot/extras/tests/test_customfields.py +1 -1
- nautobot/extras/tests/test_datasources.py +1 -2
- nautobot/extras/tests/test_dynamicgroups.py +1 -1
- nautobot/extras/tests/test_filters.py +6 -6
- nautobot/extras/tests/test_forms.py +1 -20
- nautobot/extras/tests/test_jobs.py +19 -160
- nautobot/extras/tests/test_models.py +10 -10
- nautobot/extras/tests/test_plugins.py +9 -62
- nautobot/extras/tests/test_relationships.py +9 -120
- nautobot/extras/tests/test_views.py +191 -52
- nautobot/extras/utils.py +2 -3
- nautobot/extras/views.py +98 -30
- nautobot/ipam/api/fields.py +3 -3
- nautobot/ipam/api/serializers.py +33 -41
- nautobot/ipam/api/views.py +117 -68
- nautobot/ipam/factory.py +1 -1
- nautobot/ipam/filters.py +2 -3
- nautobot/ipam/lookups.py +62 -101
- nautobot/ipam/models.py +16 -66
- nautobot/ipam/querysets.py +2 -2
- nautobot/ipam/tables.py +7 -23
- nautobot/ipam/templates/ipam/ipaddress.html +9 -1
- nautobot/ipam/templates/ipam/ipaddress_bulk_add.html +7 -1
- nautobot/ipam/templates/ipam/ipaddress_edit.html +7 -1
- nautobot/ipam/templates/ipam/prefix.html +9 -1
- nautobot/ipam/templates/ipam/prefix_edit.html +7 -1
- nautobot/ipam/templates/ipam/vlan.html +9 -1
- nautobot/ipam/templates/ipam/vlan_edit.html +7 -1
- nautobot/ipam/templates/ipam/vrf_edit.html +7 -1
- nautobot/ipam/tests/test_api.py +3 -416
- nautobot/ipam/tests/test_forms.py +47 -49
- nautobot/ipam/tests/test_migrations.py +30 -30
- nautobot/ipam/tests/test_models.py +34 -95
- nautobot/ipam/tests/test_querysets.py +1 -63
- nautobot/ipam/tests/test_views.py +0 -3
- nautobot/ipam/utils/__init__.py +6 -36
- nautobot/ipam/views.py +87 -61
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css.map +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css.map +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css +2 -40
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css.map +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css.map +1 -1
- nautobot/project-static/docs/404.html +4 -46
- nautobot/project-static/docs/apps/index.html +4 -46
- nautobot/project-static/docs/apps/nautobot-apps.html +6 -47
- nautobot/project-static/docs/assets/_mkdocstrings.css +1 -25
- nautobot/project-static/docs/assets/javascripts/{bundle.88dd0f4e.min.js → bundle.83f73b43.min.js} +2 -2
- nautobot/project-static/docs/assets/javascripts/{bundle.88dd0f4e.min.js.map → bundle.83f73b43.min.js.map} +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +10 -62
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +7 -59
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +122 -374
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +18 -90
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +21 -95
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +6 -53
- nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +5 -52
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +17 -79
- nautobot/project-static/docs/code-reference/nautobot/apps/events.html +28 -102
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +21 -108
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +38 -131
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +65 -239
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +165 -581
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +36 -109
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +167 -453
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +211 -493
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +8 -60
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +15 -71
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +55 -407
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +205 -585
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +412 -858
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +7 -59
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +186 -448
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +147 -365
- nautobot/project-static/docs/development/apps/api/configuration-view.html +4 -46
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +4 -46
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +4 -46
- nautobot/project-static/docs/development/apps/api/models/global-search.html +4 -46
- nautobot/project-static/docs/development/apps/api/models/graphql.html +4 -46
- nautobot/project-static/docs/development/apps/api/models/index.html +4 -46
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +7 -68
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +4 -46
- nautobot/project-static/docs/development/apps/api/prometheus.html +4 -46
- nautobot/project-static/docs/development/apps/api/setup.html +4 -46
- nautobot/project-static/docs/development/apps/api/testing.html +4 -46
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +4 -46
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +4 -46
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +4 -46
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +4 -46
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/base-template.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/index.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/notes.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +6 -52
- nautobot/project-static/docs/development/apps/api/views/urls.html +4 -46
- nautobot/project-static/docs/development/apps/index.html +4 -46
- nautobot/project-static/docs/development/apps/migration/code-updates.html +4 -46
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +4 -46
- nautobot/project-static/docs/development/apps/migration/from-v1.html +4 -46
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +4 -46
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +4 -46
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +4 -46
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +4 -46
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +8 -50
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +4 -46
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +14 -211
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +4 -46
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +4 -46
- nautobot/project-static/docs/development/core/application-registry.html +4 -46
- nautobot/project-static/docs/development/core/best-practices.html +4 -46
- nautobot/project-static/docs/development/core/bootstrap-ui.html +4 -46
- nautobot/project-static/docs/development/core/caching.html +4 -46
- nautobot/project-static/docs/development/core/controllers.html +4 -46
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +74 -73
- nautobot/project-static/docs/development/core/generic-views.html +4 -46
- nautobot/project-static/docs/development/core/getting-started.html +224 -249
- nautobot/project-static/docs/development/core/homepage.html +7 -49
- nautobot/project-static/docs/development/core/index.html +4 -46
- nautobot/project-static/docs/development/core/{minikube-dev-environment-for-k8s-jobs.html → local-k8s.html} +168 -469
- nautobot/project-static/docs/development/core/model-checklist.html +12 -56
- nautobot/project-static/docs/development/core/model-features.html +4 -46
- nautobot/project-static/docs/development/core/natural-keys.html +4 -46
- nautobot/project-static/docs/development/core/navigation-menu.html +4 -46
- nautobot/project-static/docs/development/core/release-checklist.html +7 -49
- nautobot/project-static/docs/development/core/role-internals.html +4 -46
- nautobot/project-static/docs/development/core/settings.html +4 -46
- nautobot/project-static/docs/development/core/style-guide.html +7 -49
- nautobot/project-static/docs/development/core/templates.html +4 -46
- nautobot/project-static/docs/development/core/testing.html +4 -46
- nautobot/project-static/docs/development/core/ui-component-framework.html +273 -369
- nautobot/project-static/docs/development/core/user-preferences.html +4 -46
- nautobot/project-static/docs/development/index.html +4 -46
- nautobot/project-static/docs/development/jobs/index.html +122 -216
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +4 -46
- nautobot/project-static/docs/index.html +23 -54
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/overview/application_stack.html +7 -47
- nautobot/project-static/docs/overview/design_philosophy.html +4 -46
- nautobot/project-static/docs/release-notes/index.html +12 -52
- nautobot/project-static/docs/release-notes/version-1.0.html +193 -234
- nautobot/project-static/docs/release-notes/version-1.1.html +190 -231
- nautobot/project-static/docs/release-notes/version-1.2.html +265 -306
- nautobot/project-static/docs/release-notes/version-1.3.html +291 -332
- nautobot/project-static/docs/release-notes/version-1.4.html +377 -417
- nautobot/project-static/docs/release-notes/version-1.5.html +566 -605
- nautobot/project-static/docs/release-notes/version-1.6.html +447 -904
- nautobot/project-static/docs/release-notes/version-2.0.html +489 -528
- nautobot/project-static/docs/release-notes/version-2.1.html +324 -363
- nautobot/project-static/docs/release-notes/version-2.2.html +317 -356
- nautobot/project-static/docs/release-notes/version-2.3.html +352 -997
- nautobot/project-static/docs/release-notes/version-2.4.html +101 -417
- nautobot/project-static/docs/requirements.txt +2 -2
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +287 -295
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +4 -46
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +4 -46
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +6 -48
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +4 -46
- nautobot/project-static/docs/user-guide/administration/configuration/redis.html +4 -46
- nautobot/project-static/docs/user-guide/administration/configuration/settings.html +8 -110
- nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +4 -46
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +4 -46
- nautobot/project-static/docs/user-guide/administration/guides/docker.html +4 -46
- nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +4 -46
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +4 -46
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +4 -46
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +4 -46
- nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +4 -46
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +6 -48
- nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +4 -46
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +4 -46
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +4 -46
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +8 -66
- nautobot/project-static/docs/user-guide/administration/installation/index.html +4 -46
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +5 -47
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +4 -46
- nautobot/project-static/docs/user-guide/administration/installation/services.html +4 -46
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +4 -46
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +4 -46
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +4 -46
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +4 -46
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +4 -46
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +4 -46
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +4 -46
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +4 -46
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +4 -46
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +8 -49
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +4 -46
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +4 -46
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +12 -50
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +7 -49
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +7 -51
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +7 -49
- nautobot/project-static/docs/user-guide/index.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +8 -50
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/events.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +7 -50
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +7 -49
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +5 -47
- nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +25 -94
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +5 -74
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +4 -46
- nautobot/project-static/js/forms.js +1 -1
- nautobot/tenancy/api/views.py +13 -9
- nautobot/tenancy/views.py +2 -4
- nautobot/users/admin.py +1 -1
- nautobot/users/api/serializers.py +4 -5
- nautobot/users/api/views.py +3 -3
- nautobot/virtualization/api/serializers.py +4 -4
- nautobot/virtualization/api/views.py +24 -5
- nautobot/virtualization/filters.py +3 -20
- nautobot/virtualization/models.py +1 -1
- nautobot/virtualization/tables.py +2 -2
- nautobot/virtualization/templates/virtualization/cluster_edit.html +7 -1
- nautobot/virtualization/templates/virtualization/virtualmachine.html +9 -1
- nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +8 -2
- nautobot/virtualization/tests/test_filters.py +0 -17
- nautobot/wireless/filters.py +2 -2
- nautobot/wireless/forms.py +1 -1
- nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +9 -1
- nautobot/wireless/tests/test_filters.py +1 -29
- nautobot/wireless/views.py +10 -0
- {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/METADATA +6 -6
- {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/RECORD +543 -591
- {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/WHEEL +1 -1
- nautobot/core/api/constants.py +0 -11
- nautobot/core/jobs/bulk_actions.py +0 -248
- nautobot/core/templates/about.html +0 -67
- nautobot/core/templates/inc/tenancy_form_panel.html +0 -9
- nautobot/core/templates/inc/tenant_table_row.html +0 -11
- nautobot/core/utils/querysets.py +0 -64
- nautobot/dcim/migrations/0067_controllermanageddevicegroup_tenant.py +0 -25
- nautobot/dcim/tests/integration/test_controller.py +0 -62
- nautobot/dcim/tests/integration/test_controller_managed_device_group.py +0 -71
- nautobot/dcim/tests/test_jobs.py +0 -118
- nautobot/extras/migrations/0120_job_is_singleton_job_is_singleton_override.py +0 -22
- nautobot/extras/migrations/0121_alter_team_contacts.py +0 -17
- nautobot/extras/test_jobs/singleton.py +0 -16
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit_button.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_nav.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_view.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_add.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_config.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_completed.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_nav.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_pending.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_run_form.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_nautobot_login.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_job.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_scheduled_job_form.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_scheduled_job_result.png +0 -0
- nautobot/project-static/docs/media/development/core/ui-component-framework/buttons-example.png +0 -0
- nautobot/project-static/docs/media/development/core/ui-component-framework/cluster-type-before-after-example.png +0 -0
- nautobot/project-static/docs/media/development/core/ui-component-framework/object-fields-panel-example_2.png +0 -0
- nautobot/project-static/docs/media/development/core/ui-component-framework/stats-panel-example-code.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/central-mode.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-add.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-1.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-2.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-add.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-create.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-add.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-create.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-add.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-1.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-2.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-add.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-create.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +0 -9444
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +0 -9722
- nautobot/wireless/tests/integration/__init__.py +0 -0
- nautobot/wireless/tests/integration/test_radio_profile.py +0 -42
- {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/NOTICE +0 -0
- {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/entry_points.txt +0 -0
nautobot/core/forms/__init__.py
CHANGED
|
@@ -76,21 +76,24 @@ from nautobot.core.forms.widgets import (
|
|
|
76
76
|
)
|
|
77
77
|
|
|
78
78
|
__all__ = (
|
|
79
|
+
"add_blank_choice",
|
|
80
|
+
"add_field_to_filter_form_class",
|
|
81
|
+
"AddressFieldMixin",
|
|
79
82
|
"ALPHANUMERIC_EXPANSION_PATTERN",
|
|
80
|
-
"BOOLEAN_CHOICES",
|
|
81
|
-
"BOOLEAN_WITH_BLANK_CHOICES",
|
|
82
|
-
"IP4_EXPANSION_PATTERN",
|
|
83
|
-
"IP6_EXPANSION_PATTERN",
|
|
84
|
-
"NUMERIC_EXPANSION_PATTERN",
|
|
85
83
|
"APISelect",
|
|
86
84
|
"APISelectMultiple",
|
|
87
|
-
"AddressFieldMixin",
|
|
88
85
|
"AutoPositionField",
|
|
89
86
|
"AutoPositionPatternField",
|
|
87
|
+
"BOOLEAN_CHOICES",
|
|
88
|
+
"BOOLEAN_WITH_BLANK_CHOICES",
|
|
90
89
|
"BootstrapMixin",
|
|
91
90
|
"BulkEditForm",
|
|
92
91
|
"BulkEditNullBooleanSelect",
|
|
93
92
|
"BulkRenameForm",
|
|
93
|
+
"ColorSelect",
|
|
94
|
+
"CommentField",
|
|
95
|
+
"ConfirmationForm",
|
|
96
|
+
"ContentTypeSelect",
|
|
94
97
|
"CSVChoiceField",
|
|
95
98
|
"CSVContentTypeField",
|
|
96
99
|
"CSVDataField",
|
|
@@ -99,29 +102,34 @@ __all__ = (
|
|
|
99
102
|
"CSVModelForm",
|
|
100
103
|
"CSVMultipleChoiceField",
|
|
101
104
|
"CSVMultipleContentTypeField",
|
|
102
|
-
"ColorSelect",
|
|
103
|
-
"CommentField",
|
|
104
|
-
"ConfirmationForm",
|
|
105
|
-
"ContentTypeSelect",
|
|
106
105
|
"DatePicker",
|
|
107
106
|
"DateTimePicker",
|
|
108
107
|
"DynamicFilterForm",
|
|
109
108
|
"DynamicModelChoiceField",
|
|
110
109
|
"DynamicModelMultipleChoiceField",
|
|
110
|
+
"expand_alphanumeric_pattern",
|
|
111
|
+
"expand_ipaddress_pattern",
|
|
111
112
|
"ExpandableIPAddressField",
|
|
112
113
|
"ExpandableNameField",
|
|
114
|
+
"form_from_model",
|
|
113
115
|
"ImportForm",
|
|
116
|
+
"IP4_EXPANSION_PATTERN",
|
|
117
|
+
"IP6_EXPANSION_PATTERN",
|
|
114
118
|
"JSONArrayFormField",
|
|
115
119
|
"JSONField",
|
|
116
120
|
"LaxURLField",
|
|
117
121
|
"MACAddressField",
|
|
118
122
|
"MultiMatchModelMultipleChoiceField",
|
|
123
|
+
"MultipleContentTypeField",
|
|
119
124
|
"MultiValueCharField",
|
|
120
125
|
"MultiValueCharInput",
|
|
121
|
-
"MultipleContentTypeField",
|
|
122
126
|
"NullableDateField",
|
|
127
|
+
"NUMERIC_EXPANSION_PATTERN",
|
|
123
128
|
"NumericArrayField",
|
|
129
|
+
"parse_alphanumeric_range",
|
|
130
|
+
"parse_numeric_range",
|
|
124
131
|
"PrefixFieldMixin",
|
|
132
|
+
"restrict_form_fields",
|
|
125
133
|
"ReturnURLForm",
|
|
126
134
|
"SearchForm",
|
|
127
135
|
"SelectWithDisabled",
|
|
@@ -134,12 +142,4 @@ __all__ = (
|
|
|
134
142
|
"TableConfigForm",
|
|
135
143
|
"TagFilterField",
|
|
136
144
|
"TimePicker",
|
|
137
|
-
"add_blank_choice",
|
|
138
|
-
"add_field_to_filter_form_class",
|
|
139
|
-
"expand_alphanumeric_pattern",
|
|
140
|
-
"expand_ipaddress_pattern",
|
|
141
|
-
"form_from_model",
|
|
142
|
-
"parse_alphanumeric_range",
|
|
143
|
-
"parse_numeric_range",
|
|
144
|
-
"restrict_form_fields",
|
|
145
145
|
)
|
nautobot/core/forms/fields.py
CHANGED
|
@@ -22,6 +22,7 @@ from nautobot.core.models import validators
|
|
|
22
22
|
from nautobot.core.utils import data as data_utils, lookup
|
|
23
23
|
|
|
24
24
|
__all__ = (
|
|
25
|
+
"CommentField",
|
|
25
26
|
"CSVChoiceField",
|
|
26
27
|
"CSVContentTypeField",
|
|
27
28
|
"CSVDataField",
|
|
@@ -29,17 +30,16 @@ __all__ = (
|
|
|
29
30
|
"CSVModelChoiceField",
|
|
30
31
|
"CSVMultipleChoiceField",
|
|
31
32
|
"CSVMultipleContentTypeField",
|
|
32
|
-
"CommentField",
|
|
33
33
|
"DynamicModelChoiceField",
|
|
34
34
|
"DynamicModelMultipleChoiceField",
|
|
35
35
|
"ExpandableIPAddressField",
|
|
36
36
|
"ExpandableNameField",
|
|
37
|
-
"JSONArrayFormField",
|
|
38
37
|
"JSONField",
|
|
38
|
+
"JSONArrayFormField",
|
|
39
39
|
"LaxURLField",
|
|
40
40
|
"MACAddressField",
|
|
41
|
-
"MultiMatchModelMultipleChoiceField",
|
|
42
41
|
"MultipleContentTypeField",
|
|
42
|
+
"MultiMatchModelMultipleChoiceField",
|
|
43
43
|
"NumericArrayField",
|
|
44
44
|
"SlugField",
|
|
45
45
|
"TagFilterField",
|
|
@@ -102,13 +102,13 @@ class CSVFileField(django_forms.FileField):
|
|
|
102
102
|
"in double quotes."
|
|
103
103
|
)
|
|
104
104
|
|
|
105
|
-
def to_python(self,
|
|
105
|
+
def to_python(self, file):
|
|
106
106
|
"""For parity with CSVDataField, this returns the CSV text rather than an UploadedFile object."""
|
|
107
|
-
if
|
|
107
|
+
if file is None:
|
|
108
108
|
return None
|
|
109
109
|
|
|
110
|
-
|
|
111
|
-
return
|
|
110
|
+
file = super().to_python(file)
|
|
111
|
+
return file.read().decode("utf-8-sig").strip()
|
|
112
112
|
|
|
113
113
|
|
|
114
114
|
class CSVChoiceField(django_forms.ChoiceField):
|
|
@@ -504,8 +504,6 @@ class DynamicModelChoiceMixin:
|
|
|
504
504
|
):
|
|
505
505
|
self.display_field = display_field
|
|
506
506
|
self.query_params = query_params or {}
|
|
507
|
-
# Default to "exclude_m2m=true" for improved performance, if not otherwise specified
|
|
508
|
-
self.query_params.setdefault("exclude_m2m", "true")
|
|
509
507
|
self.initial_params = initial_params or {}
|
|
510
508
|
self.null_option = null_option
|
|
511
509
|
self.disabled_indicator = disabled_indicator
|
|
@@ -538,10 +536,9 @@ class DynamicModelChoiceMixin:
|
|
|
538
536
|
# Toggle depth
|
|
539
537
|
attrs["data-depth"] = self.depth
|
|
540
538
|
|
|
541
|
-
# Attach any static query parameters
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
widget.add_query_param(key, value)
|
|
539
|
+
# Attach any static query parameters
|
|
540
|
+
for key, value in self.query_params.items():
|
|
541
|
+
widget.add_query_param(key, value)
|
|
545
542
|
|
|
546
543
|
return attrs
|
|
547
544
|
|
|
@@ -822,7 +819,7 @@ class MultiMatchModelMultipleChoiceField(DynamicModelChoiceMixin, django_filters
|
|
|
822
819
|
self.natural_key = kwargs.setdefault("to_field_name", "slug")
|
|
823
820
|
super().__init__(*args, **kwargs)
|
|
824
821
|
|
|
825
|
-
def _check_values(self, values):
|
|
822
|
+
def _check_values(self, values):
|
|
826
823
|
"""
|
|
827
824
|
This method overloads the grandparent method in `django.forms.models.ModelMultipleChoiceField`,
|
|
828
825
|
re-using some of that method's existing logic and adding support for coupling this field with
|
nautobot/core/forms/forms.py
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
import contextlib
|
|
2
1
|
import json
|
|
3
2
|
import logging
|
|
4
3
|
import re
|
|
5
4
|
|
|
6
5
|
from django import forms
|
|
7
|
-
from django.core.exceptions import FieldDoesNotExist
|
|
8
|
-
from django.db.models.fields.related import ManyToManyField
|
|
9
6
|
from django.forms import formset_factory
|
|
10
7
|
from django.urls import reverse
|
|
11
8
|
import yaml
|
|
@@ -18,8 +15,8 @@ __all__ = (
|
|
|
18
15
|
"BootstrapMixin",
|
|
19
16
|
"BulkEditForm",
|
|
20
17
|
"BulkRenameForm",
|
|
21
|
-
"CSVModelForm",
|
|
22
18
|
"ConfirmationForm",
|
|
19
|
+
"CSVModelForm",
|
|
23
20
|
"DynamicFilterForm",
|
|
24
21
|
"ImportForm",
|
|
25
22
|
"PrefixFieldMixin",
|
|
@@ -127,35 +124,7 @@ class BulkEditForm(forms.Form):
|
|
|
127
124
|
|
|
128
125
|
if edit_all:
|
|
129
126
|
self.fields["pk"].required = False
|
|
130
|
-
self.fields["_all"] = forms.BooleanField(widget=forms.HiddenInput(), required=
|
|
131
|
-
|
|
132
|
-
def _save_m2m_fields(self, obj):
|
|
133
|
-
"""Save M2M fields"""
|
|
134
|
-
from nautobot.core.models.fields import TagsField # Avoid circular dependency
|
|
135
|
-
|
|
136
|
-
m2m_field_names = []
|
|
137
|
-
# Handle M2M Save
|
|
138
|
-
for key in self.cleaned_data.keys():
|
|
139
|
-
if key.startswith(("add_", "remove_")):
|
|
140
|
-
field_name = key.lstrip("add_")
|
|
141
|
-
if field_name in m2m_field_names:
|
|
142
|
-
continue
|
|
143
|
-
with contextlib.suppress(FieldDoesNotExist):
|
|
144
|
-
field = obj._meta.get_field(field_name)
|
|
145
|
-
is_m2m_field = isinstance(field, (ManyToManyField, TagsField))
|
|
146
|
-
if is_m2m_field:
|
|
147
|
-
m2m_field_names.append(field_name)
|
|
148
|
-
|
|
149
|
-
for field_name in m2m_field_names:
|
|
150
|
-
m2m_field = getattr(obj, field_name)
|
|
151
|
-
if self.cleaned_data.get(f"add_{field_name}", None):
|
|
152
|
-
m2m_field.add(*self.cleaned_data[f"add_{field_name}"])
|
|
153
|
-
if self.cleaned_data.get(f"remove_{field_name}", None):
|
|
154
|
-
m2m_field.remove(*self.cleaned_data[f"remove_{field_name}"])
|
|
155
|
-
|
|
156
|
-
def post_save(self, obj):
|
|
157
|
-
"""Post save action"""
|
|
158
|
-
self._save_m2m_fields(obj)
|
|
127
|
+
self.fields["_all"] = forms.BooleanField(widget=forms.HiddenInput(), required=True, initial=True)
|
|
159
128
|
|
|
160
129
|
|
|
161
130
|
class BulkRenameForm(forms.Form):
|
nautobot/core/graphql/types.py
CHANGED
|
@@ -10,7 +10,7 @@ class OptimizedNautobotObjectType(gql_optimizer.OptimizedDjangoObjectType):
|
|
|
10
10
|
url = graphene.String()
|
|
11
11
|
|
|
12
12
|
def resolve_url(self, info):
|
|
13
|
-
return self.get_absolute_url(api=True)
|
|
13
|
+
return self.get_absolute_url(api=True)
|
|
14
14
|
|
|
15
15
|
class Meta:
|
|
16
16
|
abstract = True
|
nautobot/core/jobs/__init__.py
CHANGED
|
@@ -4,9 +4,7 @@ from io import BytesIO
|
|
|
4
4
|
|
|
5
5
|
from django.conf import settings
|
|
6
6
|
from django.contrib.contenttypes.models import ContentType
|
|
7
|
-
from django.core.exceptions import
|
|
8
|
-
PermissionDenied,
|
|
9
|
-
)
|
|
7
|
+
from django.core.exceptions import PermissionDenied
|
|
10
8
|
from django.db import transaction
|
|
11
9
|
from django.http import QueryDict
|
|
12
10
|
from rest_framework import exceptions as drf_exceptions
|
|
@@ -17,7 +15,6 @@ from nautobot.core.api.renderers import NautobotCSVRenderer
|
|
|
17
15
|
from nautobot.core.api.utils import get_serializer_for_model
|
|
18
16
|
from nautobot.core.celery import app, register_jobs
|
|
19
17
|
from nautobot.core.exceptions import AbortTransaction
|
|
20
|
-
from nautobot.core.jobs.bulk_actions import BulkDeleteObjects, BulkEditObjects
|
|
21
18
|
from nautobot.core.jobs.cleanup import LogsCleanup
|
|
22
19
|
from nautobot.core.jobs.groups import RefreshDynamicGroupCaches
|
|
23
20
|
from nautobot.core.utils.lookup import get_filterset_for_model
|
|
@@ -28,16 +25,7 @@ from nautobot.extras.datasources import (
|
|
|
28
25
|
refresh_datasource_content,
|
|
29
26
|
refresh_job_code_from_repository,
|
|
30
27
|
)
|
|
31
|
-
from nautobot.extras.jobs import
|
|
32
|
-
BooleanVar,
|
|
33
|
-
ChoiceVar,
|
|
34
|
-
FileVar,
|
|
35
|
-
Job,
|
|
36
|
-
ObjectVar,
|
|
37
|
-
RunJobTaskFailed,
|
|
38
|
-
StringVar,
|
|
39
|
-
TextVar,
|
|
40
|
-
)
|
|
28
|
+
from nautobot.extras.jobs import BooleanVar, ChoiceVar, FileVar, Job, ObjectVar, RunJobTaskFailed, StringVar, TextVar
|
|
41
29
|
from nautobot.extras.models import ExportTemplate, GitRepository
|
|
42
30
|
|
|
43
31
|
name = "System Jobs"
|
|
@@ -59,7 +47,7 @@ class GitRepositorySync(Job):
|
|
|
59
47
|
description = "Clone and/or pull a Git repository, then refresh data sourced from this repository."
|
|
60
48
|
has_sensitive_variables = False
|
|
61
49
|
|
|
62
|
-
def run(self, repository):
|
|
50
|
+
def run(self, repository):
|
|
63
51
|
job_result = self.job_result
|
|
64
52
|
user = job_result.user
|
|
65
53
|
|
|
@@ -100,7 +88,7 @@ class GitRepositoryDryRun(Job):
|
|
|
100
88
|
description = "Dry run of Git repository sync - will not update data sourced from this repository."
|
|
101
89
|
has_sensitive_variables = False
|
|
102
90
|
|
|
103
|
-
def run(self, repository):
|
|
91
|
+
def run(self, repository):
|
|
104
92
|
job_result = self.job_result
|
|
105
93
|
self.logger.info(f'Performing a Dry Run on Git repository "{repository.name}"...')
|
|
106
94
|
|
|
@@ -150,7 +138,7 @@ class ExportObjectList(Job):
|
|
|
150
138
|
soft_time_limit = 1800
|
|
151
139
|
time_limit = 2000
|
|
152
140
|
|
|
153
|
-
def run(self, *, content_type, query_string="", export_format="csv", export_template=None):
|
|
141
|
+
def run(self, *, content_type, query_string="", export_format="csv", export_template=None):
|
|
154
142
|
if not self.user.has_perm(f"{content_type.app_label}.view_{content_type.model}"):
|
|
155
143
|
self.logger.error('User "%s" does not have permission to view %s objects', self.user, content_type.model)
|
|
156
144
|
raise PermissionDenied("User does not have view permissions on the requested content-type")
|
|
@@ -298,7 +286,7 @@ class ImportObjects(Job):
|
|
|
298
286
|
self.logger.error("Row %d: `%s`: `%s`", row, field, err[0])
|
|
299
287
|
return new_objs, validation_failed
|
|
300
288
|
|
|
301
|
-
def run(self, *, content_type, csv_data=None, csv_file=None, roll_back_if_error=False):
|
|
289
|
+
def run(self, *, content_type, csv_data=None, csv_file=None, roll_back_if_error=False):
|
|
302
290
|
if not self.user.has_perm(f"{content_type.app_label}.add_{content_type.model}"):
|
|
303
291
|
self.logger.error('User "%s" does not have permission to create %s objects', self.user, content_type.model)
|
|
304
292
|
raise PermissionDenied("User does not have create permissions on the requested content-type")
|
|
@@ -359,14 +347,5 @@ class ImportObjects(Job):
|
|
|
359
347
|
raise RunJobTaskFailed("CSV import not fully successful, see logs")
|
|
360
348
|
|
|
361
349
|
|
|
362
|
-
jobs = [
|
|
363
|
-
BulkDeleteObjects,
|
|
364
|
-
BulkEditObjects,
|
|
365
|
-
ExportObjectList,
|
|
366
|
-
GitRepositorySync,
|
|
367
|
-
GitRepositoryDryRun,
|
|
368
|
-
ImportObjects,
|
|
369
|
-
LogsCleanup,
|
|
370
|
-
RefreshDynamicGroupCaches,
|
|
371
|
-
]
|
|
350
|
+
jobs = [ExportObjectList, GitRepositorySync, GitRepositoryDryRun, ImportObjects, LogsCleanup, RefreshDynamicGroupCaches]
|
|
372
351
|
register_jobs(*jobs)
|
nautobot/core/jobs/cleanup.py
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from datetime import timedelta
|
|
2
2
|
|
|
3
3
|
from django.core.exceptions import PermissionDenied
|
|
4
|
-
from django.db.models import CASCADE
|
|
5
4
|
from django.db.models.signals import pre_delete
|
|
6
5
|
from django.utils import timezone
|
|
7
6
|
|
|
@@ -49,28 +48,7 @@ class LogsCleanup(Job):
|
|
|
49
48
|
description = "Delete ObjectChange and/or JobResult/JobLogEntry records older than a specified cutoff."
|
|
50
49
|
has_sensitive_variables = False
|
|
51
50
|
|
|
52
|
-
def
|
|
53
|
-
"""
|
|
54
|
-
Recursively deletes all related objects with CASCADE for a given queryset.
|
|
55
|
-
|
|
56
|
-
Args:
|
|
57
|
-
queryset (QuerySet): The queryset of objects to delete.
|
|
58
|
-
deletion_summary (dict): A dictionary to store the count of deleted objects for each model.
|
|
59
|
-
"""
|
|
60
|
-
related_objects = queryset.model._meta.related_objects
|
|
61
|
-
queryset = queryset.only("id")
|
|
62
|
-
|
|
63
|
-
for related_object in related_objects:
|
|
64
|
-
if related_object.on_delete is CASCADE:
|
|
65
|
-
related_model = related_object.related_model
|
|
66
|
-
related_field_name = related_object.field.name
|
|
67
|
-
cascade_queryset = related_model.objects.filter(**{f"{related_field_name}__id__in": queryset})
|
|
68
|
-
self.recursive_delete_with_cascade(cascade_queryset, deletion_summary)
|
|
69
|
-
_, deleted_dict = queryset.delete()
|
|
70
|
-
deletion_summary.update(deleted_dict)
|
|
71
|
-
return deletion_summary
|
|
72
|
-
|
|
73
|
-
def run(self, *, cleanup_types, max_age=None): # pylint: disable=arguments-differ
|
|
51
|
+
def run(self, *, cleanup_types, max_age=None):
|
|
74
52
|
if max_age in (None, ""):
|
|
75
53
|
max_age = get_settings_or_config("CHANGELOG_RETENTION", fallback=90)
|
|
76
54
|
if max_age == 0:
|
|
@@ -99,36 +77,22 @@ class LogsCleanup(Job):
|
|
|
99
77
|
|
|
100
78
|
if CleanupTypes.JOB_RESULT in cleanup_types:
|
|
101
79
|
self.logger.info("Deleting JobResult records prior to %s", cutoff)
|
|
102
|
-
|
|
103
|
-
deletion_summary = {}
|
|
104
|
-
self.recursive_delete_with_cascade(queryset, deletion_summary)
|
|
80
|
+
_, deleted_dict = JobResult.objects.restrict(self.user, "delete").filter(date_done__lt=cutoff).delete()
|
|
105
81
|
result.setdefault("extras.JobResult", 0)
|
|
106
82
|
result.setdefault("extras.JobLogEntry", 0)
|
|
107
|
-
result.update(
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
count,
|
|
114
|
-
modelname,
|
|
115
|
-
)
|
|
83
|
+
result.update(**deleted_dict)
|
|
84
|
+
self.logger.info(
|
|
85
|
+
"Deleted %d JobResult records and their associated %d JobLogEntry records",
|
|
86
|
+
result["extras.JobResult"],
|
|
87
|
+
result["extras.JobLogEntry"],
|
|
88
|
+
)
|
|
116
89
|
|
|
117
90
|
if CleanupTypes.OBJECT_CHANGE in cleanup_types:
|
|
118
91
|
self.logger.info("Deleting ObjectChange records prior to %s", cutoff)
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
result.update(deletion_summary)
|
|
124
|
-
|
|
125
|
-
for modelname, count in deletion_summary.items():
|
|
126
|
-
self.logger.info(
|
|
127
|
-
"As part of deleting %d ObjectChange records, also deleted %d related %s records",
|
|
128
|
-
result["extras.ObjectChange"],
|
|
129
|
-
count,
|
|
130
|
-
modelname,
|
|
131
|
-
)
|
|
92
|
+
deleted_count, _ = ObjectChange.objects.restrict(self.user, "delete").filter(time__lt=cutoff).delete()
|
|
93
|
+
self.logger.info("Deleted %d ObjectChange records", deleted_count)
|
|
94
|
+
result["extras.ObjectChange"] = deleted_count
|
|
95
|
+
|
|
132
96
|
return result
|
|
133
97
|
finally:
|
|
134
98
|
# Be sure to clean up after ourselves!
|
nautobot/core/jobs/groups.py
CHANGED
|
@@ -24,7 +24,7 @@ class RefreshDynamicGroupCaches(Job):
|
|
|
24
24
|
description = "Re-calculate and re-cache the membership lists of Dynamic Groups."
|
|
25
25
|
has_sensitive_variables = False
|
|
26
26
|
|
|
27
|
-
def run(self, single_group=None):
|
|
27
|
+
def run(self, single_group=None):
|
|
28
28
|
groups = DynamicGroup.objects.restrict(self.user, "view").exclude(
|
|
29
29
|
group_type=DynamicGroupTypeChoices.TYPE_STATIC
|
|
30
30
|
)
|
|
@@ -63,7 +63,7 @@ class Command(BaseCommand):
|
|
|
63
63
|
for model in models:
|
|
64
64
|
model_name = f"{model._meta.app_label}.{model.__name__}"
|
|
65
65
|
# Most swap out for user_model
|
|
66
|
-
if model_name == "auth.User":
|
|
66
|
+
if model_name == "auth.User":
|
|
67
67
|
model = get_user_model()
|
|
68
68
|
# Skip models that aren't actually in the database
|
|
69
69
|
if not model._meta.managed:
|
nautobot/core/models/__init__.py
CHANGED
|
@@ -270,7 +270,7 @@ class BaseModel(models.Model):
|
|
|
270
270
|
|
|
271
271
|
if not natural_key_field_names:
|
|
272
272
|
raise AttributeError(
|
|
273
|
-
f"Unable to identify an intrinsic natural-key definition for {cls.__name__}. "
|
|
273
|
+
f"Unable to identify an intrinsic natural-key definition for {cls.__name__}. "
|
|
274
274
|
"If there isn't at least one UniqueConstraint, unique_together, or field with unique=True, "
|
|
275
275
|
"you probably need to explicitly declare the 'natural_key_field_names' for this model, "
|
|
276
276
|
"or potentially override the default 'natural_key_field_lookups' implementation for this model."
|
|
@@ -69,7 +69,7 @@ class JSONSet(Func):
|
|
|
69
69
|
}
|
|
70
70
|
return c
|
|
71
71
|
|
|
72
|
-
def as_sql(self, compiler, connection, function=None, **extra_context):
|
|
72
|
+
def as_sql(self, compiler, connection, function=None, **extra_context):
|
|
73
73
|
"""
|
|
74
74
|
MySQL implementation based on https://github.com/django/django/pull/18489/files.
|
|
75
75
|
|
|
@@ -138,7 +138,7 @@ class JSONRemove(Func):
|
|
|
138
138
|
self.path = path
|
|
139
139
|
super().__init__(expression)
|
|
140
140
|
|
|
141
|
-
def as_sql(self, compiler, connection, function=None, **extra_context):
|
|
141
|
+
def as_sql(self, compiler, connection, function=None, **extra_context):
|
|
142
142
|
"""
|
|
143
143
|
MySQL implementation based on https://github.com/django/django/pull/18489/files.
|
|
144
144
|
|
|
@@ -111,15 +111,12 @@ class TreeModel(TreeNode):
|
|
|
111
111
|
if display_str:
|
|
112
112
|
return display_str
|
|
113
113
|
try:
|
|
114
|
-
if self.
|
|
115
|
-
|
|
116
|
-
if not parent_display_str:
|
|
117
|
-
parent_display_str = self.parent.display # pylint: disable=no-member
|
|
118
|
-
display_str = parent_display_str + " → "
|
|
114
|
+
if self.parent is not None:
|
|
115
|
+
display_str = self.parent.display + " → "
|
|
119
116
|
except self.DoesNotExist:
|
|
120
117
|
# Expected to occur at times during bulk-delete operations
|
|
121
118
|
pass
|
|
122
|
-
display_str += self.name
|
|
119
|
+
display_str += self.name
|
|
123
120
|
cache.set(cache_key, display_str, 5)
|
|
124
121
|
return display_str
|
|
125
122
|
|
nautobot/core/settings.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import datetime
|
|
2
1
|
import os
|
|
3
2
|
import os.path
|
|
4
3
|
import platform
|
|
@@ -164,16 +163,6 @@ NAPALM_PASSWORD = os.getenv("NAUTOBOT_NAPALM_PASSWORD", "")
|
|
|
164
163
|
NAPALM_TIMEOUT = int(os.getenv("NAUTOBOT_NAPALM_TIMEOUT", "30"))
|
|
165
164
|
NAPALM_USERNAME = os.getenv("NAUTOBOT_NAPALM_USERNAME", "")
|
|
166
165
|
|
|
167
|
-
# Expiration date (YYYY-MM-DD) for an active Nautobot support contract with Network to Code.
|
|
168
|
-
# Displayed in the About page.
|
|
169
|
-
if (
|
|
170
|
-
"NAUTOBOT_NTC_SUPPORT_CONTRACT_EXPIRATION_DATE" in os.environ
|
|
171
|
-
and os.environ["NAUTOBOT_NTC_SUPPORT_CONTRACT_EXPIRATION_DATE"] != ""
|
|
172
|
-
):
|
|
173
|
-
NTC_SUPPORT_CONTRACT_EXPIRATION_DATE = datetime.date.fromisoformat(
|
|
174
|
-
os.environ["NAUTOBOT_NTC_SUPPORT_CONTRACT_EXPIRATION_DATE"]
|
|
175
|
-
)
|
|
176
|
-
|
|
177
166
|
# Default number of objects to display per page of the UI and REST API. Default is 50
|
|
178
167
|
if "NAUTOBOT_PAGINATE_COUNT" in os.environ and os.environ["NAUTOBOT_PAGINATE_COUNT"] != "":
|
|
179
168
|
PAGINATE_COUNT = int(os.environ["NAUTOBOT_PAGINATE_COUNT"])
|
|
@@ -191,9 +180,6 @@ PLUGINS_CONFIG = {}
|
|
|
191
180
|
if "NAUTOBOT_PREFER_IPV4" in os.environ and os.environ["NAUTOBOT_PREFER_IPV4"] != "":
|
|
192
181
|
PREFER_IPV4 = is_truthy(os.environ["NAUTOBOT_PREFER_IPV4"])
|
|
193
182
|
|
|
194
|
-
# Publish a simple "no-index" robots.txt for Nautobot?
|
|
195
|
-
PUBLISH_ROBOTS_TXT = is_truthy(os.getenv("NAUTOBOT_PUBLISH_ROBOTS_TXT", "True"))
|
|
196
|
-
|
|
197
183
|
# Default height and width in pixels of a single rack unit in rendered rack elevations. Defaults are 22 and 220
|
|
198
184
|
if (
|
|
199
185
|
"NAUTOBOT_RACK_ELEVATION_DEFAULT_UNIT_HEIGHT" in os.environ
|
|
@@ -246,7 +232,7 @@ if SSO_ENABLE_GROUP_SYNC:
|
|
|
246
232
|
"social_core.pipeline.social_auth.associate_user",
|
|
247
233
|
"social_core.pipeline.social_auth.load_extra_data",
|
|
248
234
|
"social_core.pipeline.user.user_details",
|
|
249
|
-
"nautobot.extras.group_sync
|
|
235
|
+
"nautobot.extras.group_sync",
|
|
250
236
|
)
|
|
251
237
|
# OAuth2/OIDC claim where the list of groups the authenticating user is a part of
|
|
252
238
|
SSO_CLAIMS_GROUP = os.getenv("NAUTOBOT_SSO_CLAIMS_GROUP", "groups")
|
|
@@ -732,13 +718,6 @@ CONSTANCE_ADDITIONAL_FIELDS = {
|
|
|
732
718
|
"required": False,
|
|
733
719
|
},
|
|
734
720
|
],
|
|
735
|
-
"optional_date_field": [
|
|
736
|
-
"django.forms.DateField",
|
|
737
|
-
{
|
|
738
|
-
"widget": "nautobot.core.forms.widgets.DatePicker",
|
|
739
|
-
"required": False,
|
|
740
|
-
},
|
|
741
|
-
],
|
|
742
721
|
}
|
|
743
722
|
|
|
744
723
|
CONSTANCE_CONFIG = {
|
|
@@ -824,12 +803,6 @@ CONSTANCE_CONFIG = {
|
|
|
824
803
|
# Use custom field type defined above
|
|
825
804
|
field_type="optional_json_field",
|
|
826
805
|
),
|
|
827
|
-
"NTC_SUPPORT_CONTRACT_EXPIRATION_DATE": ConstanceConfigItem(
|
|
828
|
-
default="",
|
|
829
|
-
help_text="Expiration date for an active Nautobot support contract with Network to Code. "
|
|
830
|
-
"This value is displayed in the About page to provide additional support information.",
|
|
831
|
-
field_type="optional_date_field",
|
|
832
|
-
),
|
|
833
806
|
"PREFER_IPV4": ConstanceConfigItem(
|
|
834
807
|
default=False,
|
|
835
808
|
help_text="Whether to prefer IPv4 primary addresses over IPv6 primary addresses for devices.",
|
|
@@ -883,7 +856,7 @@ CONSTANCE_CONFIG_FIELDSETS = {
|
|
|
883
856
|
"RACK_ELEVATION_UNIT_TWO_DIGIT_FORMAT",
|
|
884
857
|
],
|
|
885
858
|
"Release Checking": ["RELEASE_CHECK_URL", "RELEASE_CHECK_TIMEOUT"],
|
|
886
|
-
"User Interface": ["SUPPORT_MESSAGE"
|
|
859
|
+
"User Interface": ["SUPPORT_MESSAGE"],
|
|
887
860
|
"Debugging": ["ALLOW_REQUEST_PROFILING"],
|
|
888
861
|
}
|
|
889
862
|
|
nautobot/core/settings.yaml
CHANGED
|
@@ -6,8 +6,6 @@ definitions:
|
|
|
6
6
|
type: "string"
|
|
7
7
|
callable:
|
|
8
8
|
type: "string"
|
|
9
|
-
date:
|
|
10
|
-
type: "string"
|
|
11
9
|
regex:
|
|
12
10
|
type: "string"
|
|
13
11
|
relative_path:
|
|
@@ -1493,17 +1491,6 @@ properties:
|
|
|
1493
1491
|
is_constance_config: true
|
|
1494
1492
|
type: "object"
|
|
1495
1493
|
version_added: "1.6.0"
|
|
1496
|
-
NTC_SUPPORT_CONTRACT_EXPIRATION_DATE:
|
|
1497
|
-
"$ref": "#/definitions/date"
|
|
1498
|
-
default: ""
|
|
1499
|
-
description: >-
|
|
1500
|
-
Expiration date for an active Nautobot support contract with Network to Code.
|
|
1501
|
-
This value is displayed in the "About" page to provide additional support information.
|
|
1502
|
-
details: >-
|
|
1503
|
-
If specified as an environment variable, use ISO 8601 (`YYYY-MM-DD`) format.
|
|
1504
|
-
environment_variable: "NAUTOBOT_NTC_SUPPORT_CONTRACT_EXPIRATION_DATE"
|
|
1505
|
-
is_constance_config: true
|
|
1506
|
-
version_added: "2.4.0"
|
|
1507
1494
|
PAGINATE_COUNT:
|
|
1508
1495
|
default: 50
|
|
1509
1496
|
description: >-
|
|
@@ -1572,14 +1559,6 @@ properties:
|
|
|
1572
1559
|
environment_variable: "NAUTOBOT_PREFER_IPV4"
|
|
1573
1560
|
is_constance_config: true
|
|
1574
1561
|
type: "boolean"
|
|
1575
|
-
PUBLISH_ROBOTS_TXT:
|
|
1576
|
-
default: true
|
|
1577
|
-
description: >-
|
|
1578
|
-
Setting this to true causes Nautobot to publish a `robots.txt` that discourages indexing by web crawlers.
|
|
1579
|
-
Irrelevant if deployed behind a firewall.
|
|
1580
|
-
environment_variable: "NAUTOBOT_PUBLISH_ROBOTS_TXT"
|
|
1581
|
-
type: "boolean"
|
|
1582
|
-
version_added: "2.3.15"
|
|
1583
1562
|
RACK_ELEVATION_DEFAULT_UNIT_HEIGHT:
|
|
1584
1563
|
default: 22
|
|
1585
1564
|
description: >-
|