nautobot 2.1.0__py3-none-any.whl → 2.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nautobot/__init__.py +1 -3
- nautobot/apps/__init__.py +1 -2
- nautobot/apps/admin.py +0 -1
- nautobot/apps/api.py +0 -1
- nautobot/apps/change_logging.py +0 -1
- nautobot/apps/choices.py +0 -1
- nautobot/apps/datasources.py +0 -1
- nautobot/apps/exceptions.py +0 -1
- nautobot/apps/factory.py +0 -1
- nautobot/apps/filters.py +6 -9
- nautobot/apps/forms.py +1 -2
- nautobot/apps/graphql.py +0 -1
- nautobot/apps/jobs.py +0 -1
- nautobot/apps/models.py +1 -2
- nautobot/apps/querysets.py +0 -1
- nautobot/apps/secrets.py +0 -1
- nautobot/apps/tables.py +0 -1
- nautobot/apps/testing.py +0 -1
- nautobot/apps/ui.py +1 -3
- nautobot/apps/urls.py +0 -1
- nautobot/apps/utils.py +0 -1
- nautobot/apps/views.py +0 -1
- nautobot/circuits/api/serializers.py +1 -1
- nautobot/circuits/api/urls.py +1 -1
- nautobot/circuits/api/views.py +2 -1
- nautobot/circuits/apps.py +1 -1
- nautobot/circuits/choices.py +0 -1
- nautobot/circuits/factory.py +1 -1
- nautobot/circuits/filters.py +2 -1
- nautobot/circuits/forms.py +2 -2
- nautobot/circuits/homepage.py +0 -1
- nautobot/circuits/migrations/0001_initial_part_1.py +3 -1
- nautobot/circuits/migrations/0002_initial_part_2.py +2 -1
- nautobot/circuits/migrations/0003_auto_slug.py +1 -0
- nautobot/circuits/migrations/0005_providernetwork.py +4 -2
- nautobot/circuits/migrations/0013_alter_circuittermination__path.py +1 -0
- nautobot/circuits/migrations/0014_related_name_changes.py +1 -0
- nautobot/circuits/migrations/0016_tagsfield.py +1 -0
- nautobot/circuits/migrations/0018_status_nonnullable.py +1 -0
- nautobot/circuits/models.py +2 -2
- nautobot/circuits/navigation.py +0 -1
- nautobot/circuits/signals.py +3 -2
- nautobot/circuits/tables.py +1 -0
- nautobot/circuits/tests/integration/test_relationships.py +1 -1
- nautobot/circuits/tests/test_api.py +1 -1
- nautobot/circuits/tests/test_urls.py +1 -1
- nautobot/circuits/tests/test_views.py +1 -0
- nautobot/circuits/urls.py +1 -1
- nautobot/circuits/views.py +0 -2
- nautobot/core/__init__.py +0 -1
- nautobot/core/admin.py +3 -5
- nautobot/core/api/__init__.py +0 -1
- nautobot/core/api/metadata.py +4 -6
- nautobot/core/api/pagination.py +2 -2
- nautobot/core/api/parsers.py +1 -3
- nautobot/core/api/renderers.py +0 -1
- nautobot/core/api/schema.py +2 -3
- nautobot/core/api/serializers.py +9 -7
- nautobot/core/api/urls.py +1 -5
- nautobot/core/api/utils.py +4 -6
- nautobot/core/api/versioning.py +1 -1
- nautobot/core/api/views.py +22 -91
- nautobot/core/apps/__init__.py +5 -7
- nautobot/core/authentication.py +1 -1
- nautobot/core/celery/__init__.py +1 -2
- nautobot/core/celery/control.py +0 -2
- nautobot/core/celery/encoders.py +0 -1
- nautobot/core/celery/schedulers.py +1 -2
- nautobot/core/celery/task.py +1 -1
- nautobot/core/checks.py +1 -2
- nautobot/core/choices.py +2 -2
- nautobot/core/cli/__init__.py +2 -3
- nautobot/core/context_processors.py +1 -5
- nautobot/core/factory.py +2 -2
- nautobot/core/filters.py +1 -1
- nautobot/core/forms/fields.py +2 -4
- nautobot/core/forms/forms.py +1 -1
- nautobot/core/forms/search.py +1 -1
- nautobot/core/forms/utils.py +1 -1
- nautobot/core/graphql/__init__.py +2 -3
- nautobot/core/graphql/generators.py +1 -1
- nautobot/core/graphql/schema.py +6 -7
- nautobot/core/graphql/schema_init.py +0 -1
- nautobot/core/graphql/utils.py +1 -2
- nautobot/core/management/commands/generate_test_data.py +4 -6
- nautobot/core/management/commands/makemigrations.py +1 -1
- nautobot/core/management/commands/migrate.py +1 -1
- nautobot/core/management/commands/post_upgrade.py +0 -15
- nautobot/core/management/commands/refresh_content_type_cache.py +1 -2
- nautobot/core/management/commands/send_installation_metrics.py +2 -3
- nautobot/core/management/commands/validate_models.py +1 -1
- nautobot/core/middleware.py +2 -2
- nautobot/core/models/__init__.py +12 -12
- nautobot/core/models/fields.py +1 -1
- nautobot/core/models/generics.py +2 -3
- nautobot/core/models/managers.py +0 -1
- nautobot/core/models/name_color_content_types.py +2 -2
- nautobot/core/models/tree_queries.py +2 -4
- nautobot/core/models/validators.py +1 -1
- nautobot/core/releases.py +1 -1
- nautobot/core/runner/importer.py +2 -25
- nautobot/core/runner/runner.py +2 -2
- nautobot/core/runner/settings.py +1 -1
- nautobot/core/settings.py +9 -22
- nautobot/core/settings_funcs.py +1 -2
- nautobot/core/signals.py +0 -1
- nautobot/core/tables.py +1 -1
- nautobot/core/templates/graphene/graphiql.html +7 -1
- nautobot/core/templates/inc/footer.html +0 -7
- nautobot/core/templates/nautobot_config.py.j2 +0 -4
- nautobot/core/templatetags/bootstrapped_goodies_tags.py +6 -3
- nautobot/core/templatetags/buttons.py +1 -1
- nautobot/core/templatetags/helpers.py +5 -16
- nautobot/core/testing/__init__.py +1 -2
- nautobot/core/testing/api.py +2 -4
- nautobot/core/testing/filters.py +1 -1
- nautobot/core/testing/integration.py +2 -2
- nautobot/core/testing/migrations.py +1 -0
- nautobot/core/testing/mixins.py +1 -2
- nautobot/core/testing/schema.py +1 -1
- nautobot/core/testing/utils.py +3 -3
- nautobot/core/testing/views.py +4 -7
- nautobot/core/tests/integration/test_plugin_home.py +2 -1
- nautobot/core/tests/integration/test_plugin_navbar.py +1 -1
- nautobot/core/tests/nautobot_config.py +3 -3
- nautobot/core/tests/runner.py +3 -4
- nautobot/core/tests/test_api.py +6 -51
- nautobot/core/tests/test_authentication.py +2 -3
- nautobot/core/tests/test_checks.py +1 -2
- nautobot/core/tests/test_config.py +1 -1
- nautobot/core/tests/test_csv.py +3 -3
- nautobot/core/tests/test_factory.py +1 -3
- nautobot/core/tests/test_filters.py +3 -7
- nautobot/core/tests/test_forms.py +3 -6
- nautobot/core/tests/test_graphql.py +13 -14
- nautobot/core/tests/test_jinja_filters.py +4 -4
- nautobot/core/tests/test_jobs.py +1 -1
- nautobot/core/tests/test_models.py +1 -2
- nautobot/core/tests/test_navigations.py +2 -1
- nautobot/core/tests/test_openapi.py +0 -1
- nautobot/core/tests/test_paginator.py +2 -2
- nautobot/core/tests/test_releases.py +2 -2
- nautobot/core/tests/test_tables.py +1 -1
- nautobot/core/tests/test_templatetags_helpers.py +3 -2
- nautobot/core/tests/test_templatetags_netutils.py +1 -2
- nautobot/core/tests/test_utils.py +4 -8
- nautobot/core/tests/test_views.py +5 -2
- nautobot/core/tests/test_views_utils.py +0 -1
- nautobot/core/urls.py +4 -4
- nautobot/core/utils/color.py +1 -1
- nautobot/core/utils/data.py +1 -2
- nautobot/core/utils/filtering.py +4 -5
- nautobot/core/utils/git.py +3 -2
- nautobot/core/utils/logging.py +2 -1
- nautobot/core/utils/migrations.py +1 -0
- nautobot/core/utils/permissions.py +2 -4
- nautobot/core/views/__init__.py +5 -5
- nautobot/core/views/generic.py +4 -4
- nautobot/core/views/mixins.py +11 -12
- nautobot/core/views/renderers.py +1 -1
- nautobot/core/views/utils.py +2 -1
- nautobot/dcim/api/urls.py +1 -1
- nautobot/dcim/api/views.py +6 -5
- nautobot/dcim/apps.py +1 -1
- nautobot/dcim/choices.py +0 -1
- nautobot/dcim/constants.py +0 -1
- nautobot/dcim/elevations.py +1 -2
- nautobot/dcim/factory.py +10 -13
- nautobot/dcim/fields.py +1 -0
- nautobot/dcim/filters/__init__.py +2 -3
- nautobot/dcim/filters/mixins.py +1 -1
- nautobot/dcim/forms.py +10 -12
- nautobot/dcim/graphql/types.py +16 -17
- nautobot/dcim/migrations/0001_initial_part_1.py +4 -2
- nautobot/dcim/migrations/0002_initial_part_2.py +2 -1
- nautobot/dcim/migrations/0003_initial_part_3.py +2 -1
- nautobot/dcim/migrations/0004_initial_part_4.py +2 -1
- nautobot/dcim/migrations/0006_auto_slug.py +1 -0
- nautobot/dcim/migrations/0009_add_natural_indexing.py +1 -0
- nautobot/dcim/migrations/0010_interface_status.py +1 -0
- nautobot/dcim/migrations/0011_interface_status_data_migration.py +1 -0
- nautobot/dcim/migrations/0013_location_location_type.py +4 -2
- nautobot/dcim/migrations/0014_location_status_data_migration.py +1 -0
- nautobot/dcim/migrations/0016_device_components__timestamp_data_migration.py +0 -1
- nautobot/dcim/migrations/0018_device_redundancy_group.py +4 -2
- nautobot/dcim/migrations/0019_device_redundancy_group_data_migration.py +1 -0
- nautobot/dcim/migrations/0022_interface_redundancy_group.py +3 -1
- nautobot/dcim/migrations/0023_interface_redundancy_group_data_migration.py +1 -0
- nautobot/dcim/migrations/0024_move_site_fields_to_location_model.py +2 -1
- nautobot/dcim/migrations/0027_alter_interface_mac_address.py +1 -0
- nautobot/dcim/migrations/0028_alter_device_and_rack_role_add_new_role.py +1 -0
- nautobot/dcim/migrations/0029_device_and_rack_roles_data_migrations.py +1 -0
- nautobot/dcim/migrations/0033_add_tree_managers_and_foreign_keys_pre_data_migration.py +1 -0
- nautobot/dcim/migrations/0034_migrate_region_and_site_data_to_locations.py +1 -2
- nautobot/dcim/migrations/0038_fixup_fks_and_related_names.py +1 -0
- nautobot/dcim/migrations/0039_related_name_changes.py +1 -0
- nautobot/dcim/migrations/0042_alter_location_managers.py +1 -0
- nautobot/dcim/migrations/0044_tagsfield.py +1 -0
- nautobot/dcim/migrations/0047_status_nonnullable.py +1 -0
- nautobot/dcim/migrations/0051_interface_redundancy_group_nullable_status.py +1 -0
- nautobot/dcim/models/cables.py +3 -3
- nautobot/dcim/models/device_component_templates.py +6 -6
- nautobot/dcim/models/devices.py +9 -4
- nautobot/dcim/models/locations.py +6 -1
- nautobot/dcim/models/power.py +1 -1
- nautobot/dcim/models/racks.py +5 -4
- nautobot/dcim/navigation.py +0 -1
- nautobot/dcim/signals.py +3 -2
- nautobot/dcim/tables/__init__.py +5 -4
- nautobot/dcim/tables/cables.py +1 -0
- nautobot/dcim/tables/devices.py +1 -0
- nautobot/dcim/tables/power.py +1 -0
- nautobot/dcim/tables/racks.py +2 -1
- nautobot/dcim/tests/test_api.py +5 -7
- nautobot/dcim/tests/test_cablepaths.py +0 -1
- nautobot/dcim/tests/test_filters.py +14 -12
- nautobot/dcim/tests/test_forms.py +2 -3
- nautobot/dcim/tests/test_migrations.py +2 -2
- nautobot/dcim/tests/test_models.py +2 -2
- nautobot/dcim/tests/test_views.py +7 -8
- nautobot/dcim/urls.py +3 -2
- nautobot/dcim/utils.py +1 -1
- nautobot/dcim/views.py +4 -3
- nautobot/extras/admin.py +2 -1
- nautobot/extras/api/customfields.py +0 -2
- nautobot/extras/api/mixins.py +0 -1
- nautobot/extras/api/serializers.py +4 -4
- nautobot/extras/api/urls.py +1 -1
- nautobot/extras/api/views.py +1 -1
- nautobot/extras/apps.py +3 -4
- nautobot/extras/choices.py +3 -4
- nautobot/extras/context_managers.py +1 -1
- nautobot/extras/datasources/__init__.py +1 -1
- nautobot/extras/datasources/git.py +6 -6
- nautobot/extras/datasources/utils.py +0 -1
- nautobot/extras/factory.py +1 -1
- nautobot/extras/filters/__init__.py +2 -3
- nautobot/extras/filters/customfields.py +0 -1
- nautobot/extras/filters/mixins.py +1 -1
- nautobot/extras/forms/__init__.py +3 -4
- nautobot/extras/forms/base.py +1 -1
- nautobot/extras/forms/forms.py +3 -3
- nautobot/extras/forms/mixins.py +1 -1
- nautobot/extras/graphql/types.py +2 -2
- nautobot/extras/health_checks.py +1 -1
- nautobot/extras/jobs.py +1 -2
- nautobot/extras/management/__init__.py +0 -1
- nautobot/extras/management/commands/refresh_dynamic_group_member_caches.py +1 -1
- nautobot/extras/management/commands/runjob.py +3 -3
- nautobot/extras/management/commands/webhook_receiver.py +1 -2
- nautobot/extras/migrations/0001_initial_part_1.py +2 -1
- nautobot/extras/migrations/0002_initial_part_2.py +2 -1
- nautobot/extras/migrations/0003_initial_part_3.py +1 -0
- nautobot/extras/migrations/0006_graphqlquery.py +2 -1
- nautobot/extras/migrations/0007_configcontextschema.py +3 -1
- nautobot/extras/migrations/0009_computedfield.py +3 -1
- nautobot/extras/migrations/0011_fileattachment_fileproxy.py +3 -1
- nautobot/extras/migrations/0012_healthchecktestmodel.py +2 -1
- nautobot/extras/migrations/0014_auto_slug.py +1 -0
- nautobot/extras/migrations/0015_scheduled_job.py +3 -1
- nautobot/extras/migrations/0016_secret.py +4 -2
- nautobot/extras/migrations/0017_joblogentry.py +2 -1
- nautobot/extras/migrations/0018_joblog_data_migration.py +2 -1
- nautobot/extras/migrations/0021_customfield_changelog_data.py +3 -2
- nautobot/extras/migrations/0022_objectchange_object_datav2.py +1 -0
- nautobot/extras/migrations/0023_job_model.py +4 -2
- nautobot/extras/migrations/0026_job_add_gitrepository_fk.py +1 -0
- nautobot/extras/migrations/0029_dynamicgroup.py +3 -1
- nautobot/extras/migrations/0031_tag_content_types.py +1 -0
- nautobot/extras/migrations/0032_tag_content_types_data_migration.py +1 -0
- nautobot/extras/migrations/0040_dynamicgroup__dynamicgroupmembership.py +2 -1
- nautobot/extras/migrations/0041_jobresult_job_kwargs.py +1 -0
- nautobot/extras/migrations/0043_note.py +3 -1
- nautobot/extras/migrations/0044_add_job_hook.py +3 -1
- nautobot/extras/migrations/0046_populate_custom_field_slug_label.py +1 -0
- nautobot/extras/migrations/0047_enforce_custom_field_slug.py +1 -0
- nautobot/extras/migrations/0051_add_job_task_queues.py +1 -0
- nautobot/extras/migrations/0055_configcontext_dynamic_groups.py +1 -0
- nautobot/extras/migrations/0057_jobbutton.py +3 -1
- nautobot/extras/migrations/0065_configcontext_data_migrations.py +1 -0
- nautobot/extras/migrations/0067_migrate_job_result_status.py +0 -1
- nautobot/extras/migrations/0068_jobresult__add_celery_fields.py +1 -0
- nautobot/extras/migrations/0071_replace_related_names.py +1 -0
- nautobot/extras/migrations/0077_migrate_custom_field_data.py +1 -0
- nautobot/extras/migrations/0078_remove_name_field_and_make_label_field_non_nullable.py +1 -0
- nautobot/extras/migrations/0080_tagsfield.py +1 -0
- nautobot/extras/migrations/0082_rename_relationship_name_to_label.py +1 -0
- nautobot/extras/migrations/0083_ensure_relationship_keys_are_unique.py +1 -0
- nautobot/extras/migrations/0090_joblogentry__log_level_data_migration.py +0 -1
- nautobot/extras/migrations/0095_ensure_note_timestamps_are_unique.py +4 -5
- nautobot/extras/migrations/0097_alter_job_result_remove_result.py +1 -0
- nautobot/extras/migrations/0100_fileproxy_job_result.py +1 -0
- nautobot/extras/migrations/0101_externalintegration.py +3 -1
- nautobot/extras/models/__init__.py +2 -3
- nautobot/extras/models/change_logging.py +0 -1
- nautobot/extras/models/customfields.py +4 -4
- nautobot/extras/models/datasources.py +2 -2
- nautobot/extras/models/groups.py +3 -4
- nautobot/extras/models/jobs.py +12 -6
- nautobot/extras/models/models.py +2 -2
- nautobot/extras/models/relationships.py +3 -4
- nautobot/extras/models/roles.py +1 -1
- nautobot/extras/models/secrets.py +1 -3
- nautobot/extras/models/tags.py +0 -1
- nautobot/extras/navigation.py +0 -1
- nautobot/extras/plugins/__init__.py +6 -7
- nautobot/extras/plugins/tables.py +0 -1
- nautobot/extras/plugins/utils.py +1 -1
- nautobot/extras/plugins/views.py +1 -2
- nautobot/extras/querysets.py +3 -3
- nautobot/extras/signals.py +6 -7
- nautobot/extras/tables.py +4 -4
- nautobot/extras/tasks.py +1 -2
- nautobot/extras/templates/extras/configcontext_edit.html +1 -1
- nautobot/extras/templates/extras/graphqlquery.html +4 -2
- nautobot/extras/templates/extras/secretsgroup_edit.html +40 -45
- nautobot/extras/templatetags/custom_links.py +2 -3
- nautobot/extras/templatetags/job_buttons.py +2 -3
- nautobot/extras/templatetags/log_levels.py +0 -1
- nautobot/extras/templatetags/plugins.py +1 -1
- nautobot/extras/test_jobs/api_test_job.py +1 -2
- nautobot/extras/test_jobs/atomic_transaction.py +1 -2
- nautobot/extras/test_jobs/dry_run.py +1 -2
- nautobot/extras/test_jobs/fail.py +1 -2
- nautobot/extras/test_jobs/field_order.py +1 -1
- nautobot/extras/test_jobs/file_upload_fail.py +1 -2
- nautobot/extras/test_jobs/file_upload_pass.py +1 -2
- nautobot/extras/test_jobs/has_sensitive_variables.py +1 -2
- nautobot/extras/test_jobs/ipaddress_vars.py +1 -4
- nautobot/extras/test_jobs/job_button_receiver.py +1 -2
- nautobot/extras/test_jobs/job_hook_receiver.py +1 -2
- nautobot/extras/test_jobs/job_variables.py +1 -2
- nautobot/extras/test_jobs/location_with_custom_field.py +1 -2
- nautobot/extras/test_jobs/log_redaction.py +1 -2
- nautobot/extras/test_jobs/log_skip_db_logging.py +1 -2
- nautobot/extras/test_jobs/modify_db.py +1 -2
- nautobot/extras/test_jobs/object_var_optional.py +1 -2
- nautobot/extras/test_jobs/object_var_required.py +1 -2
- nautobot/extras/test_jobs/object_vars.py +1 -2
- nautobot/extras/test_jobs/pass.py +1 -2
- nautobot/extras/test_jobs/profiling.py +1 -2
- nautobot/extras/tests/integration/__init__.py +1 -1
- nautobot/extras/tests/integration/test_plugins.py +5 -4
- nautobot/extras/tests/integration/test_tagfilter.py +1 -1
- nautobot/extras/tests/test_api.py +7 -9
- nautobot/extras/tests/test_changelog.py +3 -2
- nautobot/extras/tests/test_context_managers.py +6 -3
- nautobot/extras/tests/test_customfields.py +2 -2
- nautobot/extras/tests/test_datasources.py +1 -1
- nautobot/extras/tests/test_dynamicgroups.py +2 -3
- nautobot/extras/tests/test_filters.py +2 -2
- nautobot/extras/tests/test_forms.py +5 -6
- nautobot/extras/tests/test_git.py +1 -1
- nautobot/extras/tests/test_job_variables.py +0 -1
- nautobot/extras/tests/test_jobs.py +5 -5
- nautobot/extras/tests/test_models.py +2 -2
- nautobot/extras/tests/test_notes.py +0 -1
- nautobot/extras/tests/test_plugins.py +8 -9
- nautobot/extras/tests/test_relationships.py +3 -3
- nautobot/extras/tests/test_tags.py +1 -1
- nautobot/extras/tests/test_views.py +8 -9
- nautobot/extras/tests/test_webhooks.py +4 -5
- nautobot/extras/utils.py +11 -9
- nautobot/extras/views.py +3 -3
- nautobot/generate_secret_key.py +1 -1
- nautobot/ipam/api/serializers.py +1 -2
- nautobot/ipam/api/urls.py +1 -1
- nautobot/ipam/api/views.py +1 -0
- nautobot/ipam/apps.py +2 -1
- nautobot/ipam/factory.py +6 -9
- nautobot/ipam/fields.py +1 -1
- nautobot/ipam/filters.py +4 -3
- nautobot/ipam/formfields.py +1 -2
- nautobot/ipam/forms.py +4 -3
- nautobot/ipam/graphql/types.py +1 -1
- nautobot/ipam/homepage.py +0 -1
- nautobot/ipam/lookups.py +2 -3
- nautobot/ipam/migrations/0002_initial_part_2.py +2 -1
- nautobot/ipam/migrations/0003_remove_max_length.py +1 -0
- nautobot/ipam/migrations/0004_fixup_p2p_broadcast.py +0 -1
- nautobot/ipam/migrations/0005_auto_slug.py +1 -0
- nautobot/ipam/migrations/0010_alter_ipam_role_add_new_role.py +1 -0
- nautobot/ipam/migrations/0011_migrate_ipam_role_data.py +1 -0
- nautobot/ipam/migrations/0020_related_name_changes.py +1 -0
- nautobot/ipam/migrations/0022_aggregate_to_prefix_data_migration.py +1 -2
- nautobot/ipam/migrations/0024_interface_to_ipaddress_m2m.py +2 -1
- nautobot/ipam/migrations/0025_interface_ipaddress_m2m_data_migration.py +1 -0
- nautobot/ipam/migrations/0028_tagsfield.py +1 -0
- nautobot/ipam/migrations/0030_ipam__namespaces.py +3 -1
- nautobot/ipam/migrations/0034_status_nonnullable.py +1 -0
- nautobot/ipam/migrations/0037_data_migration_vlan_group_name_uniqueness.py +0 -1
- nautobot/ipam/models.py +7 -7
- nautobot/ipam/navigation.py +0 -1
- nautobot/ipam/querysets.py +2 -2
- nautobot/ipam/tables.py +4 -3
- nautobot/ipam/tests/test_api.py +2 -2
- nautobot/ipam/tests/test_filters.py +7 -7
- nautobot/ipam/tests/test_migrations.py +1 -2
- nautobot/ipam/tests/test_models.py +2 -2
- nautobot/ipam/tests/test_ordering.py +1 -1
- nautobot/ipam/tests/test_querysets.py +2 -2
- nautobot/ipam/tests/test_views.py +6 -6
- nautobot/ipam/urls.py +1 -0
- nautobot/ipam/utils/migrations.py +0 -1
- nautobot/ipam/views.py +6 -6
- nautobot/project-static/docs/404.html +1 -43
- nautobot/project-static/docs/apps/index.html +1 -43
- nautobot/project-static/docs/apps/nautobot-apps.html +1 -43
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +389 -431
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +12 -54
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +2452 -2486
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +1 -43
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +90 -132
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +1 -43
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +1 -43
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +1 -43
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +1 -43
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +26 -68
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +993 -1035
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +170 -212
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +1789 -1831
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +961 -1003
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +1 -43
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +1 -43
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +2 -44
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +6904 -6946
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +974 -1016
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +1 -43
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +1159 -1197
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +1796 -1832
- nautobot/project-static/docs/development/apps/api/configuration-view.html +1 -43
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +1 -43
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +1 -43
- nautobot/project-static/docs/development/apps/api/models/global-search.html +1 -43
- nautobot/project-static/docs/development/apps/api/models/graphql.html +1 -43
- nautobot/project-static/docs/development/apps/api/models/index.html +1 -43
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +1 -43
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +1 -43
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +1 -43
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +1 -43
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +3 -45
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +1 -43
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +1 -43
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +5 -43
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +1 -43
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +1 -43
- nautobot/project-static/docs/development/apps/api/prometheus.html +1 -43
- nautobot/project-static/docs/development/apps/api/setup.html +1 -43
- nautobot/project-static/docs/development/apps/api/testing.html +1 -43
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +1 -43
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +1 -43
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +1 -43
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +1 -43
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-detail-views.html +1 -43
- nautobot/project-static/docs/development/apps/api/views/base-template.html +1 -43
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +6 -48
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +1 -43
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +1 -43
- nautobot/project-static/docs/development/apps/api/views/index.html +1 -43
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +1 -43
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +1 -43
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +1 -43
- nautobot/project-static/docs/development/apps/api/views/notes.html +3 -45
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +1 -43
- nautobot/project-static/docs/development/apps/api/views/urls.html +1 -43
- nautobot/project-static/docs/development/apps/api/views/view-overrides.html +13 -5357
- nautobot/project-static/docs/development/apps/index.html +1 -43
- nautobot/project-static/docs/development/apps/migration/code-updates.html +1 -43
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +1 -43
- nautobot/project-static/docs/development/apps/migration/from-v1.html +1 -44
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +1 -43
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +1 -43
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +1 -43
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +1 -43
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +1 -43
- nautobot/project-static/docs/development/core/application-registry.html +1 -43
- nautobot/project-static/docs/development/core/best-practices.html +1 -43
- nautobot/project-static/docs/development/core/bootstrap-ui.html +1 -43
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +1 -43
- nautobot/project-static/docs/development/core/extending-models.html +1 -43
- nautobot/project-static/docs/development/core/generic-views.html +1 -43
- nautobot/project-static/docs/development/core/getting-started.html +108 -257
- nautobot/project-static/docs/development/core/homepage.html +1 -43
- nautobot/project-static/docs/development/core/index.html +1 -43
- nautobot/project-static/docs/development/core/model-features.html +1 -43
- nautobot/project-static/docs/development/core/natural-keys.html +1 -43
- nautobot/project-static/docs/development/core/navigation-menu.html +1 -43
- nautobot/project-static/docs/development/core/react-ui.html +13 -5640
- nautobot/project-static/docs/development/core/release-checklist.html +4 -52
- nautobot/project-static/docs/development/core/role-internals.html +4 -46
- nautobot/project-static/docs/development/core/style-guide.html +61 -102
- nautobot/project-static/docs/development/core/templates.html +4 -46
- nautobot/project-static/docs/development/core/testing.html +1 -43
- nautobot/project-static/docs/development/core/user-preferences.html +1 -43
- nautobot/project-static/docs/development/index.html +1 -43
- nautobot/project-static/docs/development/jobs/index.html +1 -43
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +1 -43
- nautobot/project-static/docs/development/react-ui.html +3 -3
- nautobot/project-static/docs/index.html +2 -47
- nautobot/project-static/docs/release-notes/index.html +1 -43
- nautobot/project-static/docs/release-notes/version-1.0.html +1 -43
- nautobot/project-static/docs/release-notes/version-1.1.html +1 -43
- nautobot/project-static/docs/release-notes/version-1.2.html +1 -43
- nautobot/project-static/docs/release-notes/version-1.3.html +1 -43
- nautobot/project-static/docs/release-notes/version-1.4.html +1 -43
- nautobot/project-static/docs/release-notes/version-1.5.html +1 -43
- nautobot/project-static/docs/release-notes/version-1.6.html +1 -43
- nautobot/project-static/docs/release-notes/version-2.0.html +1 -43
- nautobot/project-static/docs/release-notes/version-2.1.html +189 -77
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +236 -251
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +1 -43
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +4 -46
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +1 -43
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +1 -43
- nautobot/project-static/docs/user-guide/administration/configuration/node-configuration.html +13 -5389
- nautobot/project-static/docs/user-guide/administration/configuration/optional-settings.html +1 -65
- nautobot/project-static/docs/user-guide/administration/configuration/required-settings.html +1 -43
- nautobot/project-static/docs/user-guide/administration/guides/caching.html +1 -43
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +1 -43
- nautobot/project-static/docs/user-guide/administration/guides/healthcheck.html +1 -43
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +1 -43
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +1 -43
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +1 -43
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +1 -43
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +1 -43
- nautobot/project-static/docs/user-guide/administration/installation/docker.html +1 -43
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +1 -43
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +1 -43
- nautobot/project-static/docs/user-guide/administration/installation/index.html +1 -64
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +2 -57
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +5 -94
- nautobot/project-static/docs/user-guide/administration/installation/selinux-troubleshooting.html +1 -43
- nautobot/project-static/docs/user-guide/administration/installation/services.html +1 -43
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +1 -43
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +1 -43
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +76 -137
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +1 -43
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +1 -43
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +1 -43
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +1 -43
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +1 -43
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +1 -43
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +1 -43
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +1 -43
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +1 -43
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +2 -44
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +1 -43
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +1 -43
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +1 -43
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +1 -43
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +1 -43
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +1 -43
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +1 -43
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +1 -43
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +1 -43
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +1 -43
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +1 -43
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +1 -43
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +1 -43
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +23 -79
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +1 -43
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +1 -43
- nautobot/project-static/docs/user-guide/index.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +5 -43
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +1 -43
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +1 -43
- nautobot/project-static/js/theme.js +0 -5
- nautobot/tenancy/api/urls.py +1 -1
- nautobot/tenancy/api/views.py +1 -0
- nautobot/tenancy/factory.py +2 -2
- nautobot/tenancy/filters/__init__.py +1 -2
- nautobot/tenancy/forms.py +2 -2
- nautobot/tenancy/homepage.py +0 -1
- nautobot/tenancy/migrations/0001_initial.py +2 -1
- nautobot/tenancy/migrations/0002_auto_slug.py +1 -0
- nautobot/tenancy/migrations/0004_change_tree_manager_on_tree_models.py +1 -0
- nautobot/tenancy/migrations/0008_tagsfield.py +1 -0
- nautobot/tenancy/models.py +0 -1
- nautobot/tenancy/navigation.py +0 -1
- nautobot/tenancy/tables.py +1 -0
- nautobot/tenancy/tests/test_filters.py +5 -5
- nautobot/tenancy/urls.py +1 -0
- nautobot/tenancy/views.py +2 -2
- nautobot/users/admin.py +1 -2
- nautobot/users/api/urls.py +1 -1
- nautobot/users/api/views.py +6 -4
- nautobot/users/factory.py +1 -3
- nautobot/users/filters.py +4 -4
- nautobot/users/forms.py +1 -0
- nautobot/users/migrations/0004_alter_user_managers.py +1 -0
- nautobot/users/migrations/0008_make_object_permission_a_changelogged_model.py +22 -0
- nautobot/users/models.py +2 -2
- nautobot/users/tests/test_api.py +7 -6
- nautobot/users/tests/test_filters.py +0 -1
- nautobot/users/tests/test_models.py +0 -1
- nautobot/users/tests/test_password_ui.py +1 -1
- nautobot/users/views.py +2 -2
- nautobot/virtualization/api/urls.py +1 -1
- nautobot/virtualization/api/views.py +2 -1
- nautobot/virtualization/apps.py +1 -1
- nautobot/virtualization/choices.py +0 -1
- nautobot/virtualization/factory.py +1 -1
- nautobot/virtualization/filters.py +1 -1
- nautobot/virtualization/forms.py +6 -6
- nautobot/virtualization/homepage.py +0 -1
- nautobot/virtualization/migrations/0003_vminterface_verbose_name.py +1 -0
- nautobot/virtualization/migrations/0004_auto_slug.py +1 -0
- nautobot/virtualization/migrations/0005_add_natural_indexing.py +1 -0
- nautobot/virtualization/migrations/0006_vminterface_status.py +1 -0
- nautobot/virtualization/migrations/0007_vminterface_status_data_migration.py +1 -0
- nautobot/virtualization/migrations/0011_alter_vminterface_mac_address.py +1 -0
- nautobot/virtualization/migrations/0012_alter_virtualmachine_role_add_new_role.py +1 -0
- nautobot/virtualization/migrations/0013_migrate_virtualmachine_role_data.py +1 -0
- nautobot/virtualization/migrations/0018_related_name_changes.py +1 -0
- nautobot/virtualization/migrations/0021_tagsfield_and_vminterface_to_primarymodel.py +1 -0
- nautobot/virtualization/migrations/0025_status_nonnullable.py +1 -0
- nautobot/virtualization/models.py +1 -2
- nautobot/virtualization/navigation.py +0 -1
- nautobot/virtualization/signals.py +0 -1
- nautobot/virtualization/tables.py +1 -0
- nautobot/virtualization/tests/test_filters.py +3 -3
- nautobot/virtualization/tests/test_models.py +1 -1
- nautobot/virtualization/tests/test_views.py +2 -2
- nautobot/virtualization/urls.py +1 -0
- nautobot/virtualization/views.py +1 -1
- {nautobot-2.1.0.dist-info → nautobot-2.1.1.dist-info}/METADATA +1 -1
- {nautobot-2.1.0.dist-info → nautobot-2.1.1.dist-info}/RECORD +713 -814
- nautobot/core/management/commands/build_ui.py +0 -281
- nautobot/core/templates/base_react.html +0 -55
- nautobot/core/tests/test_cli.py +0 -25
- nautobot/ui/.eslintignore +0 -3
- nautobot/ui/.gitignore +0 -7
- nautobot/ui/.prettierignore +0 -6
- nautobot/ui/.prettierrc +0 -4
- nautobot/ui/README.md +0 -27
- nautobot/ui/config/env.js +0 -102
- nautobot/ui/config/getHttpsConfig.js +0 -68
- nautobot/ui/config/jest/babelTransform.js +0 -14
- nautobot/ui/config/jest/cssTransform.js +0 -12
- nautobot/ui/config/jest/fileTransform.js +0 -38
- nautobot/ui/config/modules.js +0 -151
- nautobot/ui/config/paths.js +0 -67
- nautobot/ui/config/webpack/persistentCache/createEnvironmentHash.js +0 -8
- nautobot/ui/config/webpack.config.js +0 -674
- nautobot/ui/config/webpackDevServer.config.js +0 -127
- nautobot/ui/jest.config.js +0 -35
- nautobot/ui/jsconfig.json +0 -4
- nautobot/ui/package-lock.json +0 -22947
- nautobot/ui/package.json +0 -119
- nautobot/ui/public/index.html +0 -47
- nautobot/ui/public/logo192.png +0 -0
- nautobot/ui/public/logo512.png +0 -0
- nautobot/ui/public/manifest.json +0 -25
- nautobot/ui/public/nautobot_logo.svg +0 -131
- nautobot/ui/public/robots.txt +0 -3
- nautobot/ui/scripts/build.js +0 -224
- nautobot/ui/scripts/start.js +0 -140
- nautobot/ui/scripts/test.js +0 -40
- nautobot/ui/src/App.js +0 -79
- nautobot/ui/src/components/AppFullWidthComponents.js +0 -8
- nautobot/ui/src/components/AppTab.js +0 -40
- nautobot/ui/src/components/Apps.js +0 -60
- nautobot/ui/src/components/FeedbackModal.js +0 -123
- nautobot/ui/src/components/FiltersPanel.js +0 -693
- nautobot/ui/src/components/HomeChangelogPanel.js +0 -98
- nautobot/ui/src/components/HomePanel.js +0 -58
- nautobot/ui/src/components/JobHistoryTable.js +0 -78
- nautobot/ui/src/components/Layout.js +0 -76
- nautobot/ui/src/components/LoadingWidget.js +0 -14
- nautobot/ui/src/components/Navbar.js +0 -204
- nautobot/ui/src/components/NotificationPopover.js +0 -27
- nautobot/ui/src/components/ObjectTable/ObjectListTable.js +0 -300
- nautobot/ui/src/components/ObjectTable/ObjectTable.js +0 -96
- nautobot/ui/src/components/ObjectTable/ObjectTableItem.js +0 -70
- nautobot/ui/src/components/ObjectTable/index.js +0 -3
- nautobot/ui/src/components/Pagination/PageNumberForm.js +0 -228
- nautobot/ui/src/components/Pagination/PageSizeForm.js +0 -65
- nautobot/ui/src/components/Pagination/Pagination.js +0 -67
- nautobot/ui/src/components/Pagination/index.js +0 -3
- nautobot/ui/src/components/ReferenceDataTag.js +0 -35
- nautobot/ui/src/components/Retrieve/RenderChangeLogsTab.js +0 -58
- nautobot/ui/src/components/Retrieve/RenderColumn.js +0 -30
- nautobot/ui/src/components/Retrieve/RenderGroup.js +0 -24
- nautobot/ui/src/components/Retrieve/RenderHeader.js +0 -125
- nautobot/ui/src/components/Retrieve/RenderNotesTab.js +0 -60
- nautobot/ui/src/components/Retrieve/RenderTable.js +0 -33
- nautobot/ui/src/components/Retrieve/RenderTabs.js +0 -56
- nautobot/ui/src/components/Retrieve/index.js +0 -7
- nautobot/ui/src/components/RouterButton.js +0 -10
- nautobot/ui/src/components/RouterLink.js +0 -10
- nautobot/ui/src/components/SidebarNav.js +0 -156
- nautobot/ui/src/components/__tests__/AppFullWidthComponents.test.js +0 -16
- nautobot/ui/src/components/__tests__/AppTab.test.js +0 -21
- nautobot/ui/src/components/__tests__/Apps.test.js +0 -14
- nautobot/ui/src/components/__tests__/Layout.test.js +0 -33
- nautobot/ui/src/components/__tests__/PageSizeForm.test.js +0 -13
- nautobot/ui/src/components/__tests__/Pagination.test.js +0 -43
- nautobot/ui/src/components/__tests__/Table.test.js +0 -39
- nautobot/ui/src/components/__tests__/TableItem.test.js +0 -39
- nautobot/ui/src/components/index.js +0 -4
- nautobot/ui/src/constants/apiPath.js +0 -13
- nautobot/ui/src/constants/icons.js +0 -15
- nautobot/ui/src/constants/size.js +0 -15
- nautobot/ui/src/file_templates/app_imports.js.j2 +0 -7
- nautobot/ui/src/file_templates/jsconfig-base.json +0 -12
- nautobot/ui/src/index.js +0 -65
- nautobot/ui/src/reportWebVitals.js +0 -15
- nautobot/ui/src/router.js +0 -77
- nautobot/ui/src/utils/api.js +0 -160
- nautobot/ui/src/utils/app-import.js +0 -15
- nautobot/ui/src/utils/color.js +0 -15
- nautobot/ui/src/utils/date.js +0 -14
- nautobot/ui/src/utils/index.js +0 -15
- nautobot/ui/src/utils/navigation.js +0 -48
- nautobot/ui/src/utils/session.js +0 -64
- nautobot/ui/src/utils/store.js +0 -242
- nautobot/ui/src/utils/string.js +0 -6
- nautobot/ui/src/utils/url.js +0 -4
- nautobot/ui/src/views/Home.js +0 -142
- nautobot/ui/src/views/InstalledApps.js +0 -80
- nautobot/ui/src/views/Login.js +0 -48
- nautobot/ui/src/views/Logout.js +0 -20
- nautobot/ui/src/views/__tests__/BSCreateViewTemplate.test.js +0 -11
- nautobot/ui/src/views/__tests__/BSListViewTemplate.test.js +0 -107
- nautobot/ui/src/views/__tests__/Login.test.js +0 -15
- nautobot/ui/src/views/generic/GenericView.js +0 -191
- nautobot/ui/src/views/generic/ObjectCreate.js +0 -96
- nautobot/ui/src/views/generic/ObjectList.js +0 -137
- nautobot/ui/src/views/generic/ObjectRetrieve.js +0 -87
- {nautobot-2.1.0.dist-info → nautobot-2.1.1.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.1.0.dist-info → nautobot-2.1.1.dist-info}/WHEEL +0 -0
- {nautobot-2.1.0.dist-info → nautobot-2.1.1.dist-info}/entry_points.txt +0 -0
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
# Generated by Django 3.2.22 on 2023-11-01 21:29
|
|
2
2
|
|
|
3
|
+
import uuid
|
|
4
|
+
|
|
3
5
|
import django.core.serializers.json
|
|
4
6
|
import django.core.validators
|
|
5
7
|
from django.db import migrations, models
|
|
6
8
|
import django.db.models.deletion
|
|
9
|
+
|
|
7
10
|
import nautobot.core.models.fields
|
|
8
11
|
import nautobot.core.models.validators
|
|
9
12
|
import nautobot.extras.models.mixins
|
|
10
|
-
import uuid
|
|
11
13
|
|
|
12
14
|
|
|
13
15
|
class Migration(migrations.Migration):
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
from .change_logging import ChangeLoggedModel, ObjectChange
|
|
2
|
-
from .roles import Role, RoleField
|
|
3
|
-
from .statuses import Status, StatusField, StatusModel
|
|
4
2
|
from .customfields import ComputedField, CustomField, CustomFieldChoice, CustomFieldModel
|
|
5
3
|
from .datasources import GitRepository
|
|
6
4
|
from .groups import DynamicGroup, DynamicGroupMembership
|
|
@@ -29,10 +27,11 @@ from .models import (
|
|
|
29
27
|
Webhook,
|
|
30
28
|
)
|
|
31
29
|
from .relationships import Relationship, RelationshipAssociation, RelationshipModel
|
|
30
|
+
from .roles import Role, RoleField
|
|
32
31
|
from .secrets import Secret, SecretsGroup, SecretsGroupAssociation
|
|
32
|
+
from .statuses import Status, StatusField, StatusModel
|
|
33
33
|
from .tags import Tag, TaggedItem
|
|
34
34
|
|
|
35
|
-
|
|
36
35
|
__all__ = (
|
|
37
36
|
"ChangeLoggedModel",
|
|
38
37
|
"ComputedField",
|
|
@@ -14,7 +14,6 @@ from nautobot.extras.choices import ObjectChangeActionChoices, ObjectChangeEvent
|
|
|
14
14
|
from nautobot.extras.constants import CHANGELOG_MAX_CHANGE_CONTEXT_DETAIL, CHANGELOG_MAX_OBJECT_REPR
|
|
15
15
|
from nautobot.extras.utils import extras_features
|
|
16
16
|
|
|
17
|
-
|
|
18
17
|
#
|
|
19
18
|
# Change logging
|
|
20
19
|
#
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
+
from collections import OrderedDict
|
|
2
|
+
from datetime import date, datetime
|
|
1
3
|
import logging
|
|
2
4
|
import re
|
|
3
|
-
from collections import OrderedDict
|
|
4
|
-
from datetime import datetime, date
|
|
5
5
|
|
|
6
6
|
from django import forms
|
|
7
|
-
from django.db import models, transaction
|
|
8
7
|
from django.contrib.contenttypes.models import ContentType
|
|
9
8
|
from django.core.exceptions import ObjectDoesNotExist
|
|
10
9
|
from django.core.serializers.json import DjangoJSONEncoder
|
|
11
10
|
from django.core.validators import RegexValidator, ValidationError
|
|
11
|
+
from django.db import models, transaction
|
|
12
12
|
from django.forms.widgets import TextInput
|
|
13
13
|
from django.utils.html import format_html
|
|
14
14
|
|
|
@@ -37,7 +37,7 @@ from nautobot.extras.choices import CustomFieldFilterLogicChoices, CustomFieldTy
|
|
|
37
37
|
from nautobot.extras.models import ChangeLoggedModel
|
|
38
38
|
from nautobot.extras.models.mixins import NotesMixin
|
|
39
39
|
from nautobot.extras.tasks import delete_custom_field_data, update_custom_field_choice_data
|
|
40
|
-
from nautobot.extras.utils import check_if_key_is_graphql_safe,
|
|
40
|
+
from nautobot.extras.utils import check_if_key_is_graphql_safe, extras_features, FeatureQuery
|
|
41
41
|
|
|
42
42
|
logger = logging.getLogger(__name__)
|
|
43
43
|
|
|
@@ -10,7 +10,7 @@ from django.db import models
|
|
|
10
10
|
|
|
11
11
|
from nautobot.core.models.fields import AutoSlugField, slugify_dashes_to_underscores
|
|
12
12
|
from nautobot.core.models.generics import PrimaryModel
|
|
13
|
-
from nautobot.extras.utils import
|
|
13
|
+
from nautobot.extras.utils import check_if_key_is_graphql_safe, extras_features
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
@extras_features(
|
|
@@ -152,8 +152,8 @@ class GitRepository(PrimaryModel):
|
|
|
152
152
|
JobResult
|
|
153
153
|
"""
|
|
154
154
|
from nautobot.extras.datasources import (
|
|
155
|
-
enqueue_pull_git_repository_and_refresh_data,
|
|
156
155
|
enqueue_git_repository_diff_origin_and_local,
|
|
156
|
+
enqueue_pull_git_repository_and_refresh_data,
|
|
157
157
|
)
|
|
158
158
|
|
|
159
159
|
if dry_run:
|
nautobot/extras/models/groups.py
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
import logging
|
|
4
4
|
import pickle
|
|
5
5
|
|
|
6
|
-
import django_filters
|
|
7
6
|
from django import forms
|
|
8
7
|
from django.contrib.contenttypes.models import ContentType
|
|
9
8
|
from django.core.cache import cache
|
|
@@ -11,6 +10,7 @@ from django.core.exceptions import ValidationError
|
|
|
11
10
|
from django.core.serializers.json import DjangoJSONEncoder
|
|
12
11
|
from django.db import models
|
|
13
12
|
from django.utils.functional import cached_property
|
|
13
|
+
import django_filters
|
|
14
14
|
|
|
15
15
|
from nautobot.core.forms.constants import BOOLEAN_WITH_BLANK_CHOICES
|
|
16
16
|
from nautobot.core.forms.fields import DynamicModelChoiceField
|
|
@@ -20,10 +20,9 @@ from nautobot.core.models.generics import OrganizationalModel
|
|
|
20
20
|
from nautobot.core.utils.config import get_settings_or_config
|
|
21
21
|
from nautobot.core.utils.lookup import get_filterset_for_model, get_form_for_model
|
|
22
22
|
from nautobot.extras.choices import DynamicGroupOperatorChoices
|
|
23
|
-
from nautobot.extras.querysets import
|
|
23
|
+
from nautobot.extras.querysets import DynamicGroupMembershipQuerySet, DynamicGroupQuerySet
|
|
24
24
|
from nautobot.extras.utils import extras_features
|
|
25
25
|
|
|
26
|
-
|
|
27
26
|
logger = logging.getLogger(__name__)
|
|
28
27
|
|
|
29
28
|
|
|
@@ -336,7 +335,7 @@ class DynamicGroup(OrganizationalModel):
|
|
|
336
335
|
try:
|
|
337
336
|
cached_query = cache.get(self.members_cache_key)
|
|
338
337
|
if cached_query is not None:
|
|
339
|
-
unpickled_query = pickle.loads(cached_query)
|
|
338
|
+
unpickled_query = pickle.loads(cached_query) # noqa: S301 # suspicious-pickle-usage -- we know, but we control what's in the DB
|
|
340
339
|
except pickle.UnpicklingError:
|
|
341
340
|
logger.warning("Failed to unpickle cached members for %s", self)
|
|
342
341
|
finally:
|
nautobot/extras/models/jobs.py
CHANGED
|
@@ -41,9 +41,9 @@ from nautobot.extras.constants import (
|
|
|
41
41
|
JOB_MAX_NAME_LENGTH,
|
|
42
42
|
JOB_OVERRIDABLE_FIELDS,
|
|
43
43
|
)
|
|
44
|
+
from nautobot.extras.managers import JobResultManager, ScheduledJobsManager
|
|
44
45
|
from nautobot.extras.models import ChangeLoggedModel, GitRepository
|
|
45
46
|
from nautobot.extras.models.mixins import NotesMixin
|
|
46
|
-
from nautobot.extras.managers import JobResultManager, ScheduledJobsManager
|
|
47
47
|
from nautobot.extras.querysets import JobQuerySet, ScheduledJobExtendedQuerySet
|
|
48
48
|
from nautobot.extras.utils import (
|
|
49
49
|
ChangeLoggedModelsQuery,
|
|
@@ -52,7 +52,6 @@ from nautobot.extras.utils import (
|
|
|
52
52
|
|
|
53
53
|
from .customfields import CustomFieldModel
|
|
54
54
|
|
|
55
|
-
|
|
56
55
|
logger = logging.getLogger(__name__)
|
|
57
56
|
|
|
58
57
|
|
|
@@ -453,9 +452,9 @@ class JobResult(BaseModel, CustomFieldModel):
|
|
|
453
452
|
to="extras.Job", null=True, blank=True, on_delete=models.SET_NULL, related_name="job_results"
|
|
454
453
|
)
|
|
455
454
|
name = models.CharField(max_length=255, db_index=True)
|
|
456
|
-
task_name = models.CharField(
|
|
455
|
+
task_name = models.CharField( # noqa: DJ001 # django-nullable-model-string-field
|
|
457
456
|
max_length=255,
|
|
458
|
-
null=True,
|
|
457
|
+
null=True, # TODO: should this be blank=True instead?
|
|
459
458
|
db_index=True,
|
|
460
459
|
help_text="Registered name of the Celery task for this job. Internal use only.",
|
|
461
460
|
)
|
|
@@ -479,11 +478,15 @@ class JobResult(BaseModel, CustomFieldModel):
|
|
|
479
478
|
verbose_name="Result Data",
|
|
480
479
|
help_text="The data returned by the task",
|
|
481
480
|
)
|
|
482
|
-
worker = models.CharField(
|
|
481
|
+
worker = models.CharField( # noqa: DJ001 # django-nullable-model-string-field
|
|
482
|
+
max_length=100,
|
|
483
|
+
default=None,
|
|
484
|
+
null=True, # TODO: should this be default="", blank=True instead?
|
|
485
|
+
)
|
|
483
486
|
task_args = models.JSONField(blank=True, default=list, encoder=NautobotKombuJSONEncoder)
|
|
484
487
|
task_kwargs = models.JSONField(blank=True, default=dict, encoder=NautobotKombuJSONEncoder)
|
|
485
488
|
celery_kwargs = models.JSONField(blank=True, default=dict, encoder=NautobotKombuJSONEncoder)
|
|
486
|
-
traceback = models.TextField(blank=True, null=True)
|
|
489
|
+
traceback = models.TextField(blank=True, null=True) # noqa: DJ001 # django-nullable-model-string-field -- TODO: can we remove null=True?
|
|
487
490
|
meta = models.JSONField(null=True, default=None, editable=False)
|
|
488
491
|
scheduled_job = models.ForeignKey(to="extras.ScheduledJob", on_delete=models.SET_NULL, null=True, blank=True)
|
|
489
492
|
|
|
@@ -797,6 +800,9 @@ class ScheduledJobs(models.Model):
|
|
|
797
800
|
|
|
798
801
|
objects = ScheduledJobsManager()
|
|
799
802
|
|
|
803
|
+
def __str__(self):
|
|
804
|
+
return str(self.ident)
|
|
805
|
+
|
|
800
806
|
@classmethod
|
|
801
807
|
def changed(cls, instance, raw=False, **kwargs):
|
|
802
808
|
"""This function acts as a signal handler to track changes to the scheduled job that is triggered before a change"""
|
nautobot/extras/models/models.py
CHANGED
|
@@ -6,8 +6,8 @@ from db_file_storage.storage import DatabaseFileStorage
|
|
|
6
6
|
from django.conf import settings
|
|
7
7
|
from django.contrib.contenttypes.fields import GenericForeignKey
|
|
8
8
|
from django.contrib.contenttypes.models import ContentType
|
|
9
|
-
from django.core.files.storage import get_storage_class
|
|
10
9
|
from django.core.exceptions import ValidationError
|
|
10
|
+
from django.core.files.storage import get_storage_class
|
|
11
11
|
from django.core.serializers.json import DjangoJSONEncoder
|
|
12
12
|
from django.core.validators import MinValueValidator
|
|
13
13
|
from django.db import models
|
|
@@ -37,7 +37,7 @@ from nautobot.extras.querysets import ConfigContextQuerySet, NotesQuerySet
|
|
|
37
37
|
from nautobot.extras.utils import extras_features, FeatureQuery, image_upload
|
|
38
38
|
|
|
39
39
|
# Avoid breaking backward compatibility on anything that might expect these to still be defined here:
|
|
40
|
-
from .jobs import
|
|
40
|
+
from .jobs import Job, JOB_LOGS, JobLogEntry, JobResult, ScheduledJob, ScheduledJobs # noqa: F401 # unused-import
|
|
41
41
|
|
|
42
42
|
#
|
|
43
43
|
# Config contexts
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
|
|
3
3
|
from django import forms
|
|
4
|
-
from django.contrib.contenttypes.models import ContentType
|
|
5
4
|
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
|
|
5
|
+
from django.contrib.contenttypes.models import ContentType
|
|
6
6
|
from django.core.exceptions import ValidationError
|
|
7
7
|
from django.core.serializers.json import DjangoJSONEncoder
|
|
8
8
|
from django.db import models
|
|
@@ -21,11 +21,10 @@ from nautobot.core.models.fields import AutoSlugField, slugify_dashes_to_undersc
|
|
|
21
21
|
from nautobot.core.models.querysets import RestrictedQuerySet
|
|
22
22
|
from nautobot.core.templatetags.helpers import bettertitle
|
|
23
23
|
from nautobot.core.utils.lookup import get_filterset_for_model, get_route_for_model
|
|
24
|
-
from nautobot.extras.choices import
|
|
25
|
-
from nautobot.extras.utils import FeatureQuery, check_if_key_is_graphql_safe, extras_features
|
|
24
|
+
from nautobot.extras.choices import RelationshipRequiredSideChoices, RelationshipSideChoices, RelationshipTypeChoices
|
|
26
25
|
from nautobot.extras.models import ChangeLoggedModel
|
|
27
26
|
from nautobot.extras.models.mixins import NotesMixin
|
|
28
|
-
|
|
27
|
+
from nautobot.extras.utils import check_if_key_is_graphql_safe, extras_features, FeatureQuery
|
|
29
28
|
|
|
30
29
|
logger = logging.getLogger(__name__)
|
|
31
30
|
|
nautobot/extras/models/roles.py
CHANGED
|
@@ -3,7 +3,7 @@ from django.db import models
|
|
|
3
3
|
|
|
4
4
|
from nautobot.core.models.fields import ForeignKeyLimitedByContentTypes
|
|
5
5
|
from nautobot.core.models.name_color_content_types import NameColorContentTypesModel
|
|
6
|
-
from nautobot.extras.utils import
|
|
6
|
+
from nautobot.extras.utils import extras_features, RoleModelsQuery
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
@extras_features(
|
|
@@ -3,8 +3,7 @@ import logging
|
|
|
3
3
|
from django.core.exceptions import ValidationError
|
|
4
4
|
from django.core.serializers.json import DjangoJSONEncoder
|
|
5
5
|
from django.db import models
|
|
6
|
-
|
|
7
|
-
from jinja2.exceptions import UndefinedError, TemplateSyntaxError
|
|
6
|
+
from jinja2.exceptions import TemplateSyntaxError, UndefinedError
|
|
8
7
|
|
|
9
8
|
from nautobot.core.models import BaseModel
|
|
10
9
|
from nautobot.core.models.generics import OrganizationalModel, PrimaryModel
|
|
@@ -14,7 +13,6 @@ from nautobot.extras.registry import registry
|
|
|
14
13
|
from nautobot.extras.secrets.exceptions import SecretError, SecretParametersError, SecretProviderError
|
|
15
14
|
from nautobot.extras.utils import extras_features
|
|
16
15
|
|
|
17
|
-
|
|
18
16
|
logger = logging.getLogger(__name__)
|
|
19
17
|
|
|
20
18
|
|
nautobot/extras/models/tags.py
CHANGED
nautobot/extras/navigation.py
CHANGED
|
@@ -1,27 +1,26 @@
|
|
|
1
1
|
import collections
|
|
2
|
-
import inspect
|
|
3
2
|
from functools import partial
|
|
4
3
|
from importlib import import_module
|
|
4
|
+
import inspect
|
|
5
5
|
from logging import getLogger
|
|
6
6
|
|
|
7
|
-
from packaging import version
|
|
8
|
-
|
|
9
7
|
from django.core.exceptions import ValidationError
|
|
10
8
|
from django.template.loader import get_template
|
|
11
9
|
from django.urls import get_resolver, URLPattern
|
|
10
|
+
from packaging import version
|
|
12
11
|
|
|
13
12
|
from nautobot.core.apps import (
|
|
14
13
|
NautobotConfig,
|
|
15
14
|
NavMenuTab,
|
|
16
|
-
register_menu_items,
|
|
17
15
|
register_homepage_panels,
|
|
16
|
+
register_menu_items,
|
|
18
17
|
)
|
|
19
|
-
from nautobot.core.utils.deprecation import class_deprecated_in_favor_of
|
|
20
18
|
from nautobot.core.signals import nautobot_database_ready
|
|
19
|
+
from nautobot.core.utils.deprecation import class_deprecated_in_favor_of
|
|
21
20
|
from nautobot.extras.choices import BannerClassChoices
|
|
22
|
-
from nautobot.extras.registry import registry, register_datasource_contents
|
|
23
21
|
from nautobot.extras.plugins.exceptions import PluginImproperlyConfigured
|
|
24
22
|
from nautobot.extras.plugins.utils import import_object
|
|
23
|
+
from nautobot.extras.registry import register_datasource_contents, registry
|
|
25
24
|
from nautobot.extras.secrets import register_secrets_provider
|
|
26
25
|
|
|
27
26
|
logger = getLogger(__name__)
|
|
@@ -462,8 +461,8 @@ def register_filter_extensions(filter_extensions, plugin_name):
|
|
|
462
461
|
"""
|
|
463
462
|
Register a list of FilterExtension classes
|
|
464
463
|
"""
|
|
465
|
-
from nautobot.core.utils.lookup import get_filterset_for_model, get_form_for_model
|
|
466
464
|
from nautobot.core.forms.utils import add_field_to_filter_form_class
|
|
465
|
+
from nautobot.core.utils.lookup import get_filterset_for_model, get_form_for_model
|
|
467
466
|
|
|
468
467
|
for filter_extension in filter_extensions:
|
|
469
468
|
if not issubclass(filter_extension, FilterExtension):
|
nautobot/extras/plugins/utils.py
CHANGED
|
@@ -9,9 +9,9 @@ import sys
|
|
|
9
9
|
from django.core.exceptions import ImproperlyConfigured
|
|
10
10
|
from django.utils.module_loading import import_string
|
|
11
11
|
|
|
12
|
-
from .exceptions import PluginNotFound, PluginImproperlyConfigured
|
|
13
12
|
from nautobot.core.settings_funcs import ConstanceConfigItem
|
|
14
13
|
|
|
14
|
+
from .exceptions import PluginImproperlyConfigured, PluginNotFound
|
|
15
15
|
|
|
16
16
|
# Logging object
|
|
17
17
|
logger = logging.getLogger(__name__)
|
nautobot/extras/plugins/views.py
CHANGED
|
@@ -7,14 +7,13 @@ from django.http import Http404
|
|
|
7
7
|
from django.shortcuts import render
|
|
8
8
|
from django.urls.exceptions import NoReverseMatch
|
|
9
9
|
from django.views.generic import View
|
|
10
|
+
from django_tables2 import RequestConfig
|
|
10
11
|
from drf_spectacular.utils import extend_schema
|
|
11
12
|
from rest_framework import permissions
|
|
12
13
|
from rest_framework.response import Response
|
|
13
14
|
from rest_framework.reverse import reverse
|
|
14
15
|
from rest_framework.views import APIView
|
|
15
16
|
|
|
16
|
-
from django_tables2 import RequestConfig
|
|
17
|
-
|
|
18
17
|
from nautobot.core.api.views import NautobotAPIVersionMixin
|
|
19
18
|
from nautobot.core.forms import TableConfigForm
|
|
20
19
|
from nautobot.core.views.mixins import AdminRequiredMixin
|
nautobot/extras/querysets.py
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
from django.core.cache import cache
|
|
2
1
|
from django.conf import settings
|
|
3
2
|
from django.contrib.contenttypes.models import ContentType
|
|
4
|
-
from django.
|
|
3
|
+
from django.core.cache import cache
|
|
4
|
+
from django.db.models import F, Model, OuterRef, Q, Subquery
|
|
5
5
|
from django.db.models.functions import JSONObject
|
|
6
6
|
from django_celery_beat.managers import ExtendedQuerySet
|
|
7
7
|
|
|
8
|
-
from nautobot.core.models.querysets import RestrictedQuerySet
|
|
9
8
|
from nautobot.core.models.query_functions import EmptyGroupByJSONBAgg
|
|
9
|
+
from nautobot.core.models.querysets import RestrictedQuerySet
|
|
10
10
|
from nautobot.core.utils.config import get_settings_or_config
|
|
11
11
|
from nautobot.extras.models.tags import TaggedItem
|
|
12
12
|
|
nautobot/extras/signals.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import contextvars
|
|
2
|
+
from datetime import timedelta
|
|
3
|
+
import logging
|
|
2
4
|
import os
|
|
3
|
-
import
|
|
5
|
+
import secrets
|
|
4
6
|
import shutil
|
|
5
|
-
import logging
|
|
6
|
-
from datetime import timedelta
|
|
7
7
|
|
|
8
8
|
from db_file_storage.model_utils import delete_file
|
|
9
9
|
from db_file_storage.storage import DatabaseFileStorage
|
|
@@ -13,15 +13,15 @@ from django.core.cache import cache
|
|
|
13
13
|
from django.core.exceptions import ValidationError
|
|
14
14
|
from django.core.files.storage import get_storage_class
|
|
15
15
|
from django.db import transaction
|
|
16
|
-
from django.db.models.signals import m2m_changed,
|
|
16
|
+
from django.db.models.signals import m2m_changed, post_delete, post_save, pre_delete, pre_save
|
|
17
17
|
from django.dispatch import receiver
|
|
18
18
|
from django.utils import timezone
|
|
19
19
|
from django_prometheus.models import model_deletes, model_inserts, model_updates
|
|
20
20
|
|
|
21
21
|
from nautobot.core.celery import app, import_jobs_as_celery_tasks
|
|
22
22
|
from nautobot.core.utils.config import get_settings_or_config
|
|
23
|
-
from nautobot.extras.constants import CHANGELOG_MAX_CHANGE_CONTEXT_DETAIL
|
|
24
23
|
from nautobot.extras.choices import JobResultStatusChoices, ObjectChangeActionChoices
|
|
24
|
+
from nautobot.extras.constants import CHANGELOG_MAX_CHANGE_CONTEXT_DETAIL
|
|
25
25
|
from nautobot.extras.models import (
|
|
26
26
|
CustomField,
|
|
27
27
|
DynamicGroup,
|
|
@@ -34,7 +34,6 @@ from nautobot.extras.querysets import NotesQuerySet
|
|
|
34
34
|
from nautobot.extras.tasks import delete_custom_field_data, provision_field
|
|
35
35
|
from nautobot.extras.utils import refresh_job_model_from_job_class
|
|
36
36
|
|
|
37
|
-
|
|
38
37
|
# thread safe change context state variable
|
|
39
38
|
change_context_state = contextvars.ContextVar("change_context_state", default=None)
|
|
40
39
|
logger = logging.getLogger(__name__)
|
|
@@ -127,7 +126,7 @@ def _handle_changed_object(sender, instance, raw=False, **kwargs):
|
|
|
127
126
|
|
|
128
127
|
# Housekeeping: 0.1% chance of clearing out expired ObjectChanges
|
|
129
128
|
changelog_retention = get_settings_or_config("CHANGELOG_RETENTION")
|
|
130
|
-
if changelog_retention and
|
|
129
|
+
if changelog_retention and secrets.randbelow(1000) == 0:
|
|
131
130
|
cutoff = timezone.now() - timedelta(days=changelog_retention)
|
|
132
131
|
ObjectChange.objects.filter(time__lt=cutoff).delete()
|
|
133
132
|
|
nautobot/extras/tables.py
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import django_tables2 as tables
|
|
2
1
|
from django.conf import settings
|
|
3
2
|
from django.utils.html import format_html
|
|
3
|
+
import django_tables2 as tables
|
|
4
4
|
from django_tables2.utils import Accessor
|
|
5
5
|
from jsonschema.exceptions import ValidationError as JSONSchemaValidationError
|
|
6
6
|
|
|
7
|
-
from nautobot.core.templatetags.helpers import render_boolean, render_markdown
|
|
8
7
|
from nautobot.core.tables import (
|
|
9
8
|
BaseTable,
|
|
10
9
|
BooleanColumn,
|
|
@@ -16,6 +15,8 @@ from nautobot.core.tables import (
|
|
|
16
15
|
TagColumn,
|
|
17
16
|
ToggleColumn,
|
|
18
17
|
)
|
|
18
|
+
from nautobot.core.templatetags.helpers import render_boolean, render_markdown
|
|
19
|
+
|
|
19
20
|
from .choices import LogLevelChoices
|
|
20
21
|
from .models import (
|
|
21
22
|
ComputedField,
|
|
@@ -32,8 +33,8 @@ from .models import (
|
|
|
32
33
|
Job as JobModel,
|
|
33
34
|
JobButton,
|
|
34
35
|
JobHook,
|
|
35
|
-
JobResult,
|
|
36
36
|
JobLogEntry,
|
|
37
|
+
JobResult,
|
|
37
38
|
Note,
|
|
38
39
|
ObjectChange,
|
|
39
40
|
Relationship,
|
|
@@ -49,7 +50,6 @@ from .models import (
|
|
|
49
50
|
)
|
|
50
51
|
from .registry import registry
|
|
51
52
|
|
|
52
|
-
|
|
53
53
|
TAGGED_ITEM = """
|
|
54
54
|
{% if value.get_absolute_url %}
|
|
55
55
|
<a href="{{ value.get_absolute_url }}">{{ value }}</a>
|
nautobot/extras/tasks.py
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
from logging import getLogger
|
|
2
2
|
|
|
3
|
-
import requests
|
|
4
3
|
from django.conf import settings
|
|
5
4
|
from django.contrib.contenttypes.models import ContentType
|
|
6
5
|
from django.db import transaction
|
|
7
6
|
from jinja2.exceptions import TemplateError
|
|
7
|
+
import requests
|
|
8
8
|
|
|
9
9
|
from nautobot.core.celery import nautobot_task
|
|
10
10
|
from nautobot.extras.choices import CustomFieldTypeChoices, ObjectChangeActionChoices
|
|
11
11
|
from nautobot.extras.utils import generate_signature
|
|
12
12
|
|
|
13
|
-
|
|
14
13
|
logger = getLogger("nautobot.extras.tasks")
|
|
15
14
|
|
|
16
15
|
|
|
@@ -14,57 +14,52 @@
|
|
|
14
14
|
<div class="panel-heading"><strong>Secret Assignment</strong></div>
|
|
15
15
|
<div class="panel-body">
|
|
16
16
|
{% if secrets.errors %}
|
|
17
|
-
<div class="
|
|
18
|
-
|
|
19
|
-
<div class="panel-body">
|
|
20
|
-
Please correct the error(s) below:
|
|
17
|
+
<div class="text-danger">
|
|
18
|
+
Please correct the error(s) below:
|
|
21
19
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
</div>
|
|
20
|
+
{% for secret in secrets.forms %}
|
|
21
|
+
{% if secret.errors %}
|
|
22
|
+
{% for error in secret.errors.values %}{{ error }}{% endfor %}
|
|
23
|
+
{% endif %}
|
|
24
|
+
{% endfor %}
|
|
28
25
|
</div>
|
|
29
26
|
{% endif %}
|
|
30
27
|
{{ secrets.non_field_errors }}
|
|
31
|
-
<
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
{%
|
|
35
|
-
|
|
36
|
-
<
|
|
37
|
-
|
|
38
|
-
{
|
|
39
|
-
|
|
28
|
+
<table class="table" id="secrets">
|
|
29
|
+
{{ secrets.management_form }}
|
|
30
|
+
{% for secret_form in secrets.forms %}
|
|
31
|
+
{% if forloop.first %}
|
|
32
|
+
<thead>
|
|
33
|
+
<tr>
|
|
34
|
+
{% for field in secret_form.visible_fields %}
|
|
35
|
+
<th>{{ field.label|capfirst }}</th>
|
|
36
|
+
{% endfor %}
|
|
37
|
+
</tr>
|
|
38
|
+
</thead>
|
|
39
|
+
{% endif %}
|
|
40
|
+
<tr class="formset_row-{{ secrets.prefix }}">
|
|
41
|
+
{% for field in secret_form.visible_fields %}
|
|
42
|
+
<td>
|
|
43
|
+
{% if forloop.first %}
|
|
44
|
+
{% for hidden in secret_form.hidden_fields %}
|
|
45
|
+
{{ hidden }}
|
|
40
46
|
{% endfor %}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
{{ hidden }}
|
|
47
|
+
{% endif %}
|
|
48
|
+
{{ field }}
|
|
49
|
+
{% if field.errors %}
|
|
50
|
+
<ul>
|
|
51
|
+
{% for error in field.errors %}
|
|
52
|
+
{# Embed an HTML comment indicating the error for extraction by tests #}
|
|
53
|
+
<!-- FORM-ERROR {{ field.name }}: {{ error }} -->
|
|
54
|
+
<li clas="text-danger">{{ error }}</li>
|
|
50
55
|
{% endfor %}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
<li clas="text-danger">{{ error }}</li>
|
|
59
|
-
{% endfor %}
|
|
60
|
-
</ul>
|
|
61
|
-
{% endif %}
|
|
62
|
-
</td>
|
|
63
|
-
{% endfor %}
|
|
64
|
-
</tr>
|
|
65
|
-
{% endfor %}
|
|
66
|
-
</table>
|
|
67
|
-
</div>
|
|
56
|
+
</ul>
|
|
57
|
+
{% endif %}
|
|
58
|
+
</td>
|
|
59
|
+
{% endfor %}
|
|
60
|
+
</tr>
|
|
61
|
+
{% endfor %}
|
|
62
|
+
</table>
|
|
68
63
|
</div>
|
|
69
64
|
</div>
|
|
70
65
|
{% include "inc/extras_features_edit_form_fields.html" %}
|
|
@@ -8,7 +8,6 @@ from django.utils.safestring import mark_safe
|
|
|
8
8
|
from nautobot.core.utils.data import render_jinja2
|
|
9
9
|
from nautobot.extras.models import CustomLink
|
|
10
10
|
|
|
11
|
-
|
|
12
11
|
register = template.Library()
|
|
13
12
|
|
|
14
13
|
LINK_BUTTON = '<a href="{}"{} class="btn btn-sm btn-{}">{}</a>\n'
|
|
@@ -41,7 +40,7 @@ def custom_links(context, obj):
|
|
|
41
40
|
"user": context["user"], # django.contrib.auth.context_processors.auth
|
|
42
41
|
"perms": context["perms"], # django.contrib.auth.context_processors.auth
|
|
43
42
|
}
|
|
44
|
-
template_code = mark_safe("") # noqa: S308
|
|
43
|
+
template_code = mark_safe("") # noqa: S308 # suspicious-mark-safe-usage -- this one is safe
|
|
45
44
|
group_names = OrderedDict()
|
|
46
45
|
|
|
47
46
|
for cl in links:
|
|
@@ -71,7 +70,7 @@ def custom_links(context, obj):
|
|
|
71
70
|
|
|
72
71
|
# Add grouped links to template
|
|
73
72
|
for group, links in group_names.items():
|
|
74
|
-
links_rendered = mark_safe("") # noqa: S308
|
|
73
|
+
links_rendered = mark_safe("") # noqa: S308 # suspicious-mark-safe-usage -- this one is safe
|
|
75
74
|
|
|
76
75
|
for cl in links:
|
|
77
76
|
try:
|
|
@@ -6,9 +6,8 @@ from django.urls import reverse
|
|
|
6
6
|
from django.utils.html import format_html
|
|
7
7
|
from django.utils.safestring import mark_safe
|
|
8
8
|
|
|
9
|
-
from nautobot.extras.models import Job, JobButton
|
|
10
9
|
from nautobot.core.utils.data import render_jinja2
|
|
11
|
-
|
|
10
|
+
from nautobot.extras.models import Job, JobButton
|
|
12
11
|
|
|
13
12
|
register = template.Library()
|
|
14
13
|
|
|
@@ -70,7 +69,7 @@ CONFIRM_MODAL = """
|
|
|
70
69
|
</div>
|
|
71
70
|
"""
|
|
72
71
|
|
|
73
|
-
SAFE_EMPTY_STR = mark_safe("") # noqa: S308
|
|
72
|
+
SAFE_EMPTY_STR = mark_safe("") # noqa: S308 # suspicious-mark-safe-usage -- this one is safe
|
|
74
73
|
|
|
75
74
|
|
|
76
75
|
def _render_job_button_for_obj(job_button, obj, context, content_type):
|