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
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
from constance.test import override_config
|
|
4
4
|
from django.conf import settings
|
|
5
5
|
from django.contrib.auth import get_user_model
|
|
6
|
-
from django.test import
|
|
6
|
+
from django.test import override_settings, RequestFactory
|
|
7
7
|
from django.urls import reverse
|
|
8
8
|
|
|
9
9
|
from nautobot.circuits import models as circuits_models
|
|
10
|
-
from nautobot.dcim import models as dcim_models
|
|
11
10
|
from nautobot.core import testing
|
|
12
11
|
from nautobot.core.views import paginator
|
|
12
|
+
from nautobot.dcim import models as dcim_models
|
|
13
13
|
from nautobot.extras import models as extras_models
|
|
14
14
|
|
|
15
15
|
|
|
@@ -2,11 +2,11 @@ from io import BytesIO
|
|
|
2
2
|
from logging import ERROR
|
|
3
3
|
from unittest.mock import Mock, patch
|
|
4
4
|
|
|
5
|
-
import requests
|
|
6
5
|
from django.conf import settings
|
|
7
6
|
from django.core.cache import cache
|
|
8
|
-
from django.test import
|
|
7
|
+
from django.test import override_settings, SimpleTestCase
|
|
9
8
|
from packaging import version
|
|
9
|
+
import requests
|
|
10
10
|
from requests import Response
|
|
11
11
|
|
|
12
12
|
from nautobot.core.tasks import get_releases
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from django.test import TestCase
|
|
2
2
|
|
|
3
|
-
from nautobot.dcim.tables import
|
|
3
|
+
from nautobot.dcim.tables import DeviceTypeTable, LocationTable, LocationTypeTable, ManufacturerTable, RackGroupTable
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class TableTestCase(TestCase):
|
|
@@ -3,13 +3,14 @@ from unittest import skipIf
|
|
|
3
3
|
from constance.test import override_config
|
|
4
4
|
from django.conf import settings
|
|
5
5
|
from django.templatetags.static import static
|
|
6
|
-
from django.test import
|
|
7
|
-
from example_plugin.models import AnotherExampleModel, ExampleModel
|
|
6
|
+
from django.test import override_settings, TestCase
|
|
8
7
|
|
|
9
8
|
from nautobot.core.templatetags import helpers
|
|
10
9
|
from nautobot.dcim import models
|
|
11
10
|
from nautobot.ipam.models import VLAN
|
|
12
11
|
|
|
12
|
+
from example_plugin.models import AnotherExampleModel, ExampleModel
|
|
13
|
+
|
|
13
14
|
|
|
14
15
|
@skipIf(
|
|
15
16
|
"example_plugin" not in settings.PLUGINS,
|
|
@@ -3,7 +3,6 @@ import inspect
|
|
|
3
3
|
from django.template import Context, Engine
|
|
4
4
|
from django.template.exceptions import TemplateSyntaxError
|
|
5
5
|
from django.test import TestCase
|
|
6
|
-
|
|
7
6
|
from netutils.utils import jinja2_convenience_function
|
|
8
7
|
|
|
9
8
|
|
|
@@ -47,6 +46,6 @@ class NautobotTemplateTagsNetutilsTest(TestCase):
|
|
|
47
46
|
except ConnectionError:
|
|
48
47
|
# Yes, some netutils functions such as tcp_ping actually make network calls when invoked. Eeek.
|
|
49
48
|
pass
|
|
50
|
-
except Exception:
|
|
49
|
+
except Exception: # noqa: S110 # try-except-pass -- an antipattern in general, but OK here
|
|
51
50
|
# Catch-all - at least it wasn't a TemplateSyntaxError, so good enough for now.
|
|
52
51
|
pass
|
|
@@ -8,24 +8,20 @@ from django.db.models import Q
|
|
|
8
8
|
from django.http import QueryDict
|
|
9
9
|
from django.test import TestCase
|
|
10
10
|
|
|
11
|
-
from example_plugin.models import ExampleModel
|
|
12
|
-
|
|
13
11
|
from nautobot.circuits import models as circuits_models
|
|
14
12
|
from nautobot.core import exceptions, forms, settings_funcs
|
|
15
13
|
from nautobot.core.api import utils as api_utils
|
|
16
14
|
from nautobot.core.models import fields as core_fields, utils as models_utils
|
|
17
15
|
from nautobot.core.utils import data as data_utils, filtering, lookup, requests
|
|
18
16
|
from nautobot.core.utils.migrations import update_object_change_ct_for_replaced_models
|
|
19
|
-
from nautobot.dcim import filters as dcim_filters
|
|
20
|
-
from nautobot.
|
|
21
|
-
from nautobot.dcim import models as dcim_models
|
|
22
|
-
from nautobot.dcim import tables
|
|
23
|
-
from nautobot.extras import models as extras_models
|
|
24
|
-
from nautobot.extras import utils as extras_utils
|
|
17
|
+
from nautobot.dcim import filters as dcim_filters, forms as dcim_forms, models as dcim_models, tables
|
|
18
|
+
from nautobot.extras import models as extras_models, utils as extras_utils
|
|
25
19
|
from nautobot.extras.choices import ObjectChangeActionChoices, RelationshipTypeChoices
|
|
26
20
|
from nautobot.extras.models import ObjectChange
|
|
27
21
|
from nautobot.extras.registry import registry
|
|
28
22
|
|
|
23
|
+
from example_plugin.models import ExampleModel
|
|
24
|
+
|
|
29
25
|
|
|
30
26
|
class DictToFilterParamsTest(TestCase):
|
|
31
27
|
"""
|
|
@@ -4,7 +4,7 @@ import urllib.parse
|
|
|
4
4
|
|
|
5
5
|
from django.contrib.contenttypes.models import ContentType
|
|
6
6
|
from django.core.files.uploadedfile import SimpleUploadedFile
|
|
7
|
-
from django.test import
|
|
7
|
+
from django.test import override_settings, RequestFactory
|
|
8
8
|
from django.test.utils import override_script_prefix
|
|
9
9
|
from django.urls import get_script_prefix, reverse
|
|
10
10
|
from prometheus_client.parser import text_string_to_metric_families
|
|
@@ -41,7 +41,10 @@ class GetReturnURLMixinTestCase(TestCase):
|
|
|
41
41
|
self.assertEqual(self.mixin.get_return_url(request=request, obj=None), reverse("home"))
|
|
42
42
|
|
|
43
43
|
def test_get_return_url_explicit_punycode(self):
|
|
44
|
-
|
|
44
|
+
"""
|
|
45
|
+
Replace the 'i' in '/dcim/' with a unicode dotless 'ı' and make sure we're not fooled by it.
|
|
46
|
+
""" # noqa: RUF002 # ambiguous-unicode-character-docstring -- fully intentional here!
|
|
47
|
+
request = self.factory.get("/", {"return_url": "/dcım/devices/"}) # noqa: RUF001 # ambiguous-unicode-character-string -- fully intentional here!
|
|
45
48
|
self.assertEqual(self.mixin.get_return_url(request=request, obj=None), "/dc%C4%B1m/devices/")
|
|
46
49
|
|
|
47
50
|
def test_get_return_url_default_with_obj(self):
|
|
@@ -3,7 +3,6 @@ from django.test import TestCase
|
|
|
3
3
|
|
|
4
4
|
from nautobot.core.models.querysets import count_related
|
|
5
5
|
from nautobot.core.views.utils import check_filter_for_display
|
|
6
|
-
|
|
7
6
|
from nautobot.dcim.filters import DeviceFilterSet
|
|
8
7
|
from nautobot.dcim.models import Device, DeviceRedundancyGroup, DeviceType, InventoryItem, Location, Manufacturer
|
|
9
8
|
from nautobot.extras.models import Role, Status
|
nautobot/core/urls.py
CHANGED
|
@@ -6,20 +6,20 @@ from django.views.static import serve
|
|
|
6
6
|
|
|
7
7
|
from nautobot.core.views import (
|
|
8
8
|
CustomGraphQLView,
|
|
9
|
+
get_file_with_authorization,
|
|
9
10
|
HomeView,
|
|
10
|
-
|
|
11
|
+
nautobot_metrics_view,
|
|
11
12
|
SearchView,
|
|
13
|
+
StaticMediaFailureView,
|
|
12
14
|
ThemePreviewView,
|
|
13
|
-
nautobot_metrics_view,
|
|
14
|
-
get_file_with_authorization,
|
|
15
15
|
)
|
|
16
16
|
from nautobot.extras.plugins.urls import (
|
|
17
17
|
plugin_admin_patterns,
|
|
18
18
|
plugin_patterns,
|
|
19
19
|
)
|
|
20
20
|
from nautobot.users.views import LoginView, LogoutView
|
|
21
|
-
from .admin import admin_site
|
|
22
21
|
|
|
22
|
+
from .admin import admin_site
|
|
23
23
|
|
|
24
24
|
urlpatterns = [
|
|
25
25
|
# Base views
|
nautobot/core/utils/color.py
CHANGED
|
@@ -5,7 +5,7 @@ def hex_to_rgb(hex_str):
|
|
|
5
5
|
"""
|
|
6
6
|
Map a hex string like "00ff00" to individual r, g, b integer values.
|
|
7
7
|
"""
|
|
8
|
-
return [int(hex_str[c : c + 2], 16) for c in (0, 2, 4)]
|
|
8
|
+
return [int(hex_str[c : c + 2], 16) for c in (0, 2, 4)]
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
def rgb_to_hex(r, g, b):
|
nautobot/core/utils/data.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from collections import
|
|
1
|
+
from collections import namedtuple, OrderedDict
|
|
2
2
|
from decimal import Decimal
|
|
3
3
|
import uuid
|
|
4
4
|
|
|
@@ -7,7 +7,6 @@ from django.template import engines
|
|
|
7
7
|
|
|
8
8
|
from nautobot.dcim import choices # TODO move dcim.choices.CableLengthUnitChoices into core
|
|
9
9
|
|
|
10
|
-
|
|
11
10
|
# Setup UtilizationData named tuple for use by multiple methods
|
|
12
11
|
UtilizationData = namedtuple("UtilizationData", ["numerator", "denominator"])
|
|
13
12
|
|
nautobot/core/utils/filtering.py
CHANGED
|
@@ -13,7 +13,6 @@ from django_filters.utils import verbose_lookup_expr
|
|
|
13
13
|
from nautobot.core import exceptions
|
|
14
14
|
from nautobot.core.utils.lookup import get_filterset_for_model
|
|
15
15
|
|
|
16
|
-
|
|
17
16
|
# Check if field name contains a lookup expr
|
|
18
17
|
# e.g `name__ic` has lookup expr `ic (icontains)` while `name` has no lookup expr
|
|
19
18
|
CONTAINS_LOOKUP_EXPR_RE = re.compile(r"(?<=__)\w+")
|
|
@@ -88,10 +87,6 @@ def get_filterset_parameter_form_field(model, parameter, filterset=None):
|
|
|
88
87
|
Return the relevant form field instance for a filterset parameter e.g DynamicModelMultipleChoiceField, forms.IntegerField e.t.c
|
|
89
88
|
"""
|
|
90
89
|
# Avoid circular import
|
|
91
|
-
from nautobot.dcim.models import Device
|
|
92
|
-
from nautobot.extras.filters import ContentTypeMultipleChoiceFilter, CustomFieldFilterMixin, StatusFilter
|
|
93
|
-
from nautobot.extras.models import ConfigContext, Role, Status, Tag
|
|
94
|
-
from nautobot.extras.utils import ChangeLoggedModelsQuery, RoleModelsQuery, TaggableClassesQuery
|
|
95
90
|
from nautobot.core.filters import MultiValueDecimalFilter, MultiValueFloatFilter
|
|
96
91
|
from nautobot.core.forms import (
|
|
97
92
|
BOOLEAN_CHOICES,
|
|
@@ -100,6 +95,10 @@ def get_filterset_parameter_form_field(model, parameter, filterset=None):
|
|
|
100
95
|
StaticSelect2,
|
|
101
96
|
StaticSelect2Multiple,
|
|
102
97
|
)
|
|
98
|
+
from nautobot.dcim.models import Device
|
|
99
|
+
from nautobot.extras.filters import ContentTypeMultipleChoiceFilter, CustomFieldFilterMixin, StatusFilter
|
|
100
|
+
from nautobot.extras.models import ConfigContext, Role, Status, Tag
|
|
101
|
+
from nautobot.extras.utils import ChangeLoggedModelsQuery, RoleModelsQuery, TaggableClassesQuery
|
|
103
102
|
from nautobot.virtualization.models import VirtualMachine
|
|
104
103
|
|
|
105
104
|
if filterset is None or filterset.Meta.model != model:
|
nautobot/core/utils/git.py
CHANGED
|
@@ -5,6 +5,7 @@ import logging
|
|
|
5
5
|
import os
|
|
6
6
|
|
|
7
7
|
from git import Repo
|
|
8
|
+
|
|
8
9
|
from nautobot.core.utils.logging import sanitize
|
|
9
10
|
|
|
10
11
|
logger = logging.getLogger(__name__)
|
|
@@ -121,7 +122,7 @@ class GitRepo:
|
|
|
121
122
|
branch_head.set_tracking_branch(self.repo.remotes.origin.refs[branch])
|
|
122
123
|
except IndexError as git_error:
|
|
123
124
|
logger.error(
|
|
124
|
-
"Branch %s does not exist at %s. %s", branch,
|
|
125
|
+
"Branch %s does not exist at %s. %s", branch, next(iter(self.repo.remotes.origin.urls)), git_error
|
|
125
126
|
)
|
|
126
127
|
raise BranchDoesNotExist(
|
|
127
128
|
f"Please create branch '{branch}' in upstream and try again."
|
|
@@ -146,7 +147,7 @@ class GitRepo:
|
|
|
146
147
|
self.repo.remotes.origin.refs[branch]
|
|
147
148
|
except IndexError as git_error:
|
|
148
149
|
logger.error(
|
|
149
|
-
"Branch %s does not exist at %s. %s", branch,
|
|
150
|
+
"Branch %s does not exist at %s. %s", branch, next(iter(self.repo.remotes.origin.urls)), git_error
|
|
150
151
|
)
|
|
151
152
|
raise BranchDoesNotExist(
|
|
152
153
|
f"Please create branch '{branch}' in upstream and try again."
|
nautobot/core/utils/logging.py
CHANGED
|
@@ -17,7 +17,8 @@ def sanitize(string, replacement="(redacted)"):
|
|
|
17
17
|
Uses settings.SANITIZER_PATTERNS as the list of (regexp, repl) tuples to apply.
|
|
18
18
|
"""
|
|
19
19
|
# Don't allow regex match groups to be referenced in the replacement string!
|
|
20
|
-
|
|
20
|
+
if re.search(r"\\\d|\\g<\d+>", replacement):
|
|
21
|
+
raise RuntimeError("Invalid replacement string! Must not contain regex match group references.")
|
|
21
22
|
|
|
22
23
|
for sanitizer, repl in settings.SANITIZER_PATTERNS:
|
|
23
24
|
try:
|
|
@@ -58,12 +58,10 @@ def permission_is_exempt(name):
|
|
|
58
58
|
if action == "view":
|
|
59
59
|
if (
|
|
60
60
|
# All models (excluding those in EXEMPT_EXCLUDE_MODELS) are exempt from view permission enforcement
|
|
61
|
-
"*" in settings.EXEMPT_VIEW_PERMISSIONS
|
|
62
|
-
and (app_label, model_name) not in settings.EXEMPT_EXCLUDE_MODELS
|
|
61
|
+
"*" in settings.EXEMPT_VIEW_PERMISSIONS and (app_label, model_name) not in settings.EXEMPT_EXCLUDE_MODELS
|
|
63
62
|
) or (
|
|
64
63
|
# This specific model is exempt from view permission enforcement
|
|
65
|
-
f"{app_label}.{model_name}"
|
|
66
|
-
in settings.EXEMPT_VIEW_PERMISSIONS
|
|
64
|
+
f"{app_label}.{model_name}" in settings.EXEMPT_VIEW_PERMISSIONS
|
|
67
65
|
):
|
|
68
66
|
return True
|
|
69
67
|
|
nautobot/core/views/__init__.py
CHANGED
|
@@ -5,22 +5,22 @@ import time
|
|
|
5
5
|
|
|
6
6
|
from db_file_storage.views import get_file
|
|
7
7
|
from django.apps import apps
|
|
8
|
-
import prometheus_client
|
|
9
8
|
from django.conf import settings
|
|
10
9
|
from django.contrib.auth.decorators import permission_required
|
|
11
10
|
from django.contrib.auth.mixins import AccessMixin, LoginRequiredMixin
|
|
12
11
|
from django.contrib.contenttypes.models import ContentType
|
|
13
|
-
from django.http import
|
|
12
|
+
from django.http import HttpResponse, HttpResponseForbidden, HttpResponseServerError, JsonResponse
|
|
14
13
|
from django.shortcuts import get_object_or_404, redirect, render
|
|
15
14
|
from django.template import loader, RequestContext, Template
|
|
16
15
|
from django.template.exceptions import TemplateDoesNotExist
|
|
17
16
|
from django.urls import resolve, reverse
|
|
17
|
+
from django.views.csrf import csrf_failure as _csrf_failure
|
|
18
18
|
from django.views.decorators.csrf import requires_csrf_token
|
|
19
19
|
from django.views.defaults import ERROR_500_TEMPLATE_NAME, page_not_found
|
|
20
|
-
from django.views.csrf import csrf_failure as _csrf_failure
|
|
21
20
|
from django.views.generic import TemplateView, View
|
|
22
|
-
from packaging import version
|
|
23
21
|
from graphene_django.views import GraphQLView
|
|
22
|
+
from packaging import version
|
|
23
|
+
import prometheus_client
|
|
24
24
|
from prometheus_client import multiprocess
|
|
25
25
|
from prometheus_client.metrics_core import GaugeMetricFamily
|
|
26
26
|
from prometheus_client.registry import Collector
|
|
@@ -30,9 +30,9 @@ from nautobot.core.forms import SearchForm
|
|
|
30
30
|
from nautobot.core.releases import get_latest_release
|
|
31
31
|
from nautobot.core.utils.lookup import get_route_for_model
|
|
32
32
|
from nautobot.core.utils.permissions import get_permission_for_model
|
|
33
|
+
from nautobot.extras.forms import GraphQLQueryForm
|
|
33
34
|
from nautobot.extras.models import FileProxy, GraphQLQuery, Status
|
|
34
35
|
from nautobot.extras.registry import registry
|
|
35
|
-
from nautobot.extras.forms import GraphQLQueryForm
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
class HomeView(AccessMixin, TemplateView):
|
nautobot/core/views/generic.py
CHANGED
|
@@ -11,7 +11,7 @@ from django.core.exceptions import (
|
|
|
11
11
|
ObjectDoesNotExist,
|
|
12
12
|
ValidationError,
|
|
13
13
|
)
|
|
14
|
-
from django.db import
|
|
14
|
+
from django.db import IntegrityError, transaction
|
|
15
15
|
from django.db.models import ManyToManyField, ProtectedError
|
|
16
16
|
from django.forms import Form, ModelMultipleChoiceField, MultipleHiddenInput
|
|
17
17
|
from django.http import HttpResponse, JsonResponse
|
|
@@ -25,7 +25,6 @@ from rest_framework.exceptions import ParseError
|
|
|
25
25
|
|
|
26
26
|
from nautobot.core.api.parsers import NautobotCSVParser
|
|
27
27
|
from nautobot.core.api.utils import get_serializer_for_model
|
|
28
|
-
from nautobot.core.forms import SearchForm
|
|
29
28
|
from nautobot.core.exceptions import AbortTransaction
|
|
30
29
|
from nautobot.core.forms import (
|
|
31
30
|
BootstrapMixin,
|
|
@@ -34,8 +33,9 @@ from nautobot.core.forms import (
|
|
|
34
33
|
CSVDataField,
|
|
35
34
|
CSVFileField,
|
|
36
35
|
ImportForm,
|
|
37
|
-
TableConfigForm,
|
|
38
36
|
restrict_form_fields,
|
|
37
|
+
SearchForm,
|
|
38
|
+
TableConfigForm,
|
|
39
39
|
)
|
|
40
40
|
from nautobot.core.forms.forms import DynamicFilterFormSet
|
|
41
41
|
from nautobot.core.templatetags.helpers import bettertitle, validated_viewname
|
|
@@ -47,8 +47,8 @@ from nautobot.core.utils.requests import (
|
|
|
47
47
|
get_filterable_params_from_filter_params,
|
|
48
48
|
normalize_querydict,
|
|
49
49
|
)
|
|
50
|
-
from nautobot.core.views.paginator import EnhancedPaginator, get_paginate_count
|
|
51
50
|
from nautobot.core.views.mixins import GetReturnURLMixin, ObjectPermissionRequiredMixin
|
|
51
|
+
from nautobot.core.views.paginator import EnhancedPaginator, get_paginate_count
|
|
52
52
|
from nautobot.core.views.utils import (
|
|
53
53
|
check_filter_for_display,
|
|
54
54
|
get_csv_form_fields_from_serializer_class,
|
nautobot/core/views/mixins.py
CHANGED
|
@@ -2,8 +2,8 @@ from io import BytesIO
|
|
|
2
2
|
import logging
|
|
3
3
|
|
|
4
4
|
from django.contrib import messages
|
|
5
|
-
from django.contrib.contenttypes.models import ContentType
|
|
6
5
|
from django.contrib.auth.mixins import AccessMixin
|
|
6
|
+
from django.contrib.contenttypes.models import ContentType
|
|
7
7
|
from django.core.exceptions import (
|
|
8
8
|
FieldDoesNotExist,
|
|
9
9
|
ImproperlyConfigured,
|
|
@@ -19,18 +19,16 @@ from django.template.loader import select_template, TemplateDoesNotExist
|
|
|
19
19
|
from django.urls import reverse
|
|
20
20
|
from django.urls.exceptions import NoReverseMatch
|
|
21
21
|
from django.utils.encoding import iri_to_uri
|
|
22
|
-
from django.utils.http import url_has_allowed_host_and_scheme
|
|
23
22
|
from django.utils.html import format_html
|
|
23
|
+
from django.utils.http import url_has_allowed_host_and_scheme
|
|
24
24
|
from django.views.generic.edit import FormView
|
|
25
|
-
|
|
26
|
-
from rest_framework import
|
|
25
|
+
from drf_spectacular.utils import extend_schema
|
|
26
|
+
from rest_framework import exceptions, mixins
|
|
27
27
|
from rest_framework.decorators import action as drf_action
|
|
28
28
|
from rest_framework.parsers import FormParser, MultiPartParser
|
|
29
29
|
from rest_framework.response import Response
|
|
30
30
|
from rest_framework.viewsets import GenericViewSet
|
|
31
31
|
|
|
32
|
-
from drf_spectacular.utils import extend_schema
|
|
33
|
-
|
|
34
32
|
from nautobot.core.api.parsers import NautobotCSVParser
|
|
35
33
|
from nautobot.core.api.views import BulkDestroyModelMixin, BulkUpdateModelMixin
|
|
36
34
|
from nautobot.core.forms import (
|
|
@@ -41,16 +39,16 @@ from nautobot.core.forms import (
|
|
|
41
39
|
restrict_form_fields,
|
|
42
40
|
)
|
|
43
41
|
from nautobot.core.utils import lookup, permissions
|
|
44
|
-
from nautobot.core.views.renderers import NautobotHTMLRenderer
|
|
45
42
|
from nautobot.core.utils.requests import get_filterable_params_from_filter_params
|
|
43
|
+
from nautobot.core.views.renderers import NautobotHTMLRenderer
|
|
46
44
|
from nautobot.core.views.utils import (
|
|
47
45
|
get_csv_form_fields_from_serializer_class,
|
|
48
46
|
handle_protectederror,
|
|
49
47
|
prepare_cloned_fields,
|
|
50
48
|
)
|
|
51
|
-
from nautobot.extras.models import ExportTemplate
|
|
52
49
|
from nautobot.extras.forms import NoteForm
|
|
53
|
-
from nautobot.extras.
|
|
50
|
+
from nautobot.extras.models import ExportTemplate
|
|
51
|
+
from nautobot.extras.tables import NoteTable, ObjectChangeTable
|
|
54
52
|
from nautobot.extras.utils import remove_prefix_from_cf_key
|
|
55
53
|
|
|
56
54
|
PERMISSIONS_ACTION_MAP = {
|
|
@@ -305,9 +303,10 @@ class NautobotViewSetMixin(GenericViewSet, AccessMixin, GetReturnURLMixin, FormV
|
|
|
305
303
|
elif self.action == "changelog":
|
|
306
304
|
return ObjectChangeTable
|
|
307
305
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
306
|
+
if self.table_class is None:
|
|
307
|
+
raise NotImplementedError(
|
|
308
|
+
f"'{self.__class__.__name__}' should include a `table_class` attribute for bulk operations"
|
|
309
|
+
)
|
|
311
310
|
|
|
312
311
|
return self.table_class
|
|
313
312
|
|
nautobot/core/views/renderers.py
CHANGED
|
@@ -7,9 +7,9 @@ from django_tables2 import RequestConfig
|
|
|
7
7
|
from rest_framework import renderers
|
|
8
8
|
|
|
9
9
|
from nautobot.core.forms import (
|
|
10
|
+
restrict_form_fields,
|
|
10
11
|
SearchForm,
|
|
11
12
|
TableConfigForm,
|
|
12
|
-
restrict_form_fields,
|
|
13
13
|
)
|
|
14
14
|
from nautobot.core.forms.forms import DynamicFilterFormSet
|
|
15
15
|
from nautobot.core.templatetags.helpers import bettertitle, validated_viewname
|
nautobot/core/views/utils.py
CHANGED
|
@@ -5,7 +5,6 @@ from django.core.exceptions import FieldError
|
|
|
5
5
|
from django.db.models import ForeignKey
|
|
6
6
|
from django.utils.html import format_html, format_html_join
|
|
7
7
|
from django.utils.safestring import mark_safe
|
|
8
|
-
|
|
9
8
|
from rest_framework import serializers
|
|
10
9
|
|
|
11
10
|
from nautobot.core.api.fields import ChoiceField, ContentTypeField, TimeZoneSerializerField
|
|
@@ -97,6 +96,8 @@ def get_csv_form_fields_from_serializer_class(serializer_class):
|
|
|
97
96
|
"""From the given serializer class, build a list of field dicts suitable for rendering in the CSV import form."""
|
|
98
97
|
serializer = serializer_class(context={"request": None, "depth": 0})
|
|
99
98
|
fields = []
|
|
99
|
+
# Note lots of "noqa: S308" in this function. That's `suspicious-mark-safe-usage`, but in all of the below cases
|
|
100
|
+
# we control the input string and it's known to be safe, so mark_safe() is being used correctly here.
|
|
100
101
|
for field_name, field in serializer.fields.items():
|
|
101
102
|
if field.read_only:
|
|
102
103
|
continue
|
nautobot/dcim/api/urls.py
CHANGED
nautobot/dcim/api/views.py
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import socket
|
|
2
1
|
from collections import OrderedDict
|
|
2
|
+
import socket
|
|
3
3
|
|
|
4
4
|
from django.conf import settings
|
|
5
5
|
from django.core.exceptions import ObjectDoesNotExist
|
|
6
6
|
from django.db.models import F
|
|
7
|
-
from django.http import
|
|
7
|
+
from django.http import HttpResponse, HttpResponseForbidden
|
|
8
8
|
from django.shortcuts import get_object_or_404
|
|
9
9
|
from django.views.decorators.clickjacking import xframe_options_sameorigin
|
|
10
10
|
from drf_spectacular.types import OpenApiTypes
|
|
@@ -39,10 +39,10 @@ from nautobot.dcim.models import (
|
|
|
39
39
|
InterfaceRedundancyGroup,
|
|
40
40
|
InterfaceRedundancyGroupAssociation,
|
|
41
41
|
InterfaceTemplate,
|
|
42
|
+
InventoryItem,
|
|
42
43
|
Location,
|
|
43
44
|
LocationType,
|
|
44
45
|
Manufacturer,
|
|
45
|
-
InventoryItem,
|
|
46
46
|
Platform,
|
|
47
47
|
PowerFeed,
|
|
48
48
|
PowerOutlet,
|
|
@@ -65,6 +65,7 @@ from nautobot.extras.choices import SecretsGroupAccessTypeChoices, SecretsGroupS
|
|
|
65
65
|
from nautobot.extras.secrets.exceptions import SecretError
|
|
66
66
|
from nautobot.ipam.models import Prefix, VLAN
|
|
67
67
|
from nautobot.virtualization.models import VirtualMachine
|
|
68
|
+
|
|
68
69
|
from . import serializers
|
|
69
70
|
from .exceptions import MissingFilterException
|
|
70
71
|
|
|
@@ -468,9 +469,9 @@ class DeviceViewSet(ConfigContextQuerySetMixin, NautobotModelViewSet):
|
|
|
468
469
|
# Get NAPALM enable-secret from the device if present
|
|
469
470
|
if device.secrets_group:
|
|
470
471
|
# Work around inconsistent enable password arg in NAPALM drivers
|
|
471
|
-
enable_password_arg = "secret"
|
|
472
|
+
enable_password_arg = "secret" # noqa: S105 # hardcoded-password-string -- false positive
|
|
472
473
|
if device.platform.napalm_driver.lower() == "eos":
|
|
473
|
-
enable_password_arg = "enable_password"
|
|
474
|
+
enable_password_arg = "enable_password" # noqa: S105 # hardcoded-password-string -- false positive
|
|
474
475
|
try:
|
|
475
476
|
optional_args[enable_password_arg] = device.secrets_group.get_secret_value(
|
|
476
477
|
SecretsGroupAccessTypeChoices.TYPE_GENERIC,
|
nautobot/dcim/apps.py
CHANGED
nautobot/dcim/choices.py
CHANGED
nautobot/dcim/constants.py
CHANGED
nautobot/dcim/elevations.py
CHANGED
nautobot/dcim/factory.py
CHANGED
|
@@ -1,22 +1,20 @@
|
|
|
1
|
-
import factory
|
|
2
1
|
import logging
|
|
3
|
-
import pytz
|
|
4
|
-
import random
|
|
5
|
-
|
|
6
|
-
from faker import Faker
|
|
7
2
|
|
|
8
3
|
from django.contrib.auth import get_user_model
|
|
9
4
|
from django.contrib.contenttypes.models import ContentType
|
|
10
5
|
from django.db.models import Q
|
|
6
|
+
import factory
|
|
7
|
+
from faker import Faker
|
|
8
|
+
import pytz
|
|
11
9
|
|
|
10
|
+
from nautobot.circuits.models import CircuitTermination
|
|
12
11
|
from nautobot.core.factory import (
|
|
13
12
|
NautobotBoolIterator,
|
|
14
13
|
OrganizationalModelFactory,
|
|
15
14
|
PrimaryModelFactory,
|
|
16
|
-
UniqueFaker,
|
|
17
15
|
random_instance,
|
|
16
|
+
UniqueFaker,
|
|
18
17
|
)
|
|
19
|
-
from nautobot.circuits.models import CircuitTermination
|
|
20
18
|
from nautobot.dcim.choices import (
|
|
21
19
|
DeviceRedundancyGroupFailoverStrategyChoices,
|
|
22
20
|
RackDimensionUnitChoices,
|
|
@@ -28,14 +26,14 @@ from nautobot.dcim.models import (
|
|
|
28
26
|
Device,
|
|
29
27
|
DeviceRedundancyGroup,
|
|
30
28
|
DeviceType,
|
|
31
|
-
Manufacturer,
|
|
32
|
-
Platform,
|
|
33
29
|
Location,
|
|
34
30
|
LocationType,
|
|
31
|
+
Manufacturer,
|
|
32
|
+
Platform,
|
|
33
|
+
PowerPanel,
|
|
35
34
|
Rack,
|
|
36
35
|
RackGroup,
|
|
37
36
|
RackReservation,
|
|
38
|
-
PowerPanel,
|
|
39
37
|
)
|
|
40
38
|
from nautobot.extras.models import Role, Status
|
|
41
39
|
from nautobot.extras.utils import FeatureQuery
|
|
@@ -43,7 +41,6 @@ from nautobot.ipam.models import Prefix, VLAN, VLANGroup
|
|
|
43
41
|
from nautobot.tenancy.models import Tenant
|
|
44
42
|
from nautobot.virtualization.models import Cluster
|
|
45
43
|
|
|
46
|
-
|
|
47
44
|
logger = logging.getLogger(__name__)
|
|
48
45
|
|
|
49
46
|
User = get_user_model()
|
|
@@ -298,7 +295,7 @@ class PlatformFactory(OrganizationalModelFactory):
|
|
|
298
295
|
# If it has a manufacturer, it *might* have a napalm_driver.
|
|
299
296
|
napalm_driver = factory.Maybe(
|
|
300
297
|
"has_manufacturer",
|
|
301
|
-
factory.LazyAttribute(lambda o: random.choice(NAPALM_DRIVERS.get(o.manufacturer.name, [""]))),
|
|
298
|
+
factory.LazyAttribute(lambda o: factory.random.randgen.choice(NAPALM_DRIVERS.get(o.manufacturer.name, [""]))),
|
|
302
299
|
"",
|
|
303
300
|
)
|
|
304
301
|
|
|
@@ -310,7 +307,7 @@ class PlatformFactory(OrganizationalModelFactory):
|
|
|
310
307
|
has_description = NautobotBoolIterator()
|
|
311
308
|
network_driver = factory.Maybe(
|
|
312
309
|
"has_manufacturer",
|
|
313
|
-
factory.LazyAttribute(lambda o: random.choice(NETWORK_DRIVERS.get(o.manufacturer.name, [""]))),
|
|
310
|
+
factory.LazyAttribute(lambda o: factory.random.randgen.choice(NETWORK_DRIVERS.get(o.manufacturer.name, [""]))),
|
|
314
311
|
"",
|
|
315
312
|
)
|
|
316
313
|
|