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
|
@@ -16,7 +16,7 @@ def render_with_template_if_exist(context, template, fallback): # pylint: disab
|
|
|
16
16
|
text = fallback
|
|
17
17
|
try:
|
|
18
18
|
text = render_to_string(template, context)
|
|
19
|
-
except Exception:
|
|
19
|
+
except Exception: # noqa: S110 # try-except-pass -- generally an antipattern, but it's intentional here
|
|
20
20
|
pass
|
|
21
21
|
return text
|
|
22
22
|
|
|
@@ -36,7 +36,7 @@ def language_selector(context):
|
|
|
36
36
|
context["i18n_is_set"] = True
|
|
37
37
|
try:
|
|
38
38
|
output = render_to_string(template_, context)
|
|
39
|
-
except Exception:
|
|
39
|
+
except Exception: # noqa: S110 # try-except-pass -- generally an antipattern, but it's intentional here
|
|
40
40
|
pass
|
|
41
41
|
return output
|
|
42
42
|
|
|
@@ -96,7 +96,10 @@ def render_app_label(context, app, fallback=""):
|
|
|
96
96
|
|
|
97
97
|
@register.simple_tag(takes_context=True)
|
|
98
98
|
def render_app_description(
|
|
99
|
-
context,
|
|
99
|
+
context,
|
|
100
|
+
app,
|
|
101
|
+
fallback="",
|
|
102
|
+
template="/admin_app_description.html", # pylint: disable=redefined-outer-name
|
|
100
103
|
):
|
|
101
104
|
"""Render the application description using the default template name. If it cannot find a
|
|
102
105
|
template matching the given path, fallback to the fallback argument.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
from django import template
|
|
2
2
|
from django.urls import NoReverseMatch, reverse
|
|
3
3
|
|
|
4
|
-
from nautobot.core.views import utils as views_utils
|
|
5
4
|
from nautobot.core.utils import lookup
|
|
5
|
+
from nautobot.core.views import utils as views_utils
|
|
6
6
|
from nautobot.extras import models
|
|
7
7
|
|
|
8
8
|
register = template.Library()
|
|
@@ -6,11 +6,11 @@ import re
|
|
|
6
6
|
from django import template
|
|
7
7
|
from django.conf import settings
|
|
8
8
|
from django.contrib.staticfiles.finders import find
|
|
9
|
-
from django.templatetags.static import
|
|
9
|
+
from django.templatetags.static import static, StaticNode
|
|
10
10
|
from django.urls import NoReverseMatch, reverse
|
|
11
11
|
from django.utils.html import format_html, strip_tags
|
|
12
|
-
from django.utils.text import slugify as django_slugify
|
|
13
12
|
from django.utils.safestring import mark_safe
|
|
13
|
+
from django.utils.text import slugify as django_slugify
|
|
14
14
|
from django_jinja import library
|
|
15
15
|
from markdown import markdown
|
|
16
16
|
import yaml
|
|
@@ -18,9 +18,9 @@ import yaml
|
|
|
18
18
|
from nautobot.apps.config import get_app_settings_or_config
|
|
19
19
|
from nautobot.core import forms
|
|
20
20
|
from nautobot.core.utils import color, config, data, lookup
|
|
21
|
-
from nautobot.core.utils.navigation import is_route_new_ui_ready
|
|
22
21
|
from nautobot.core.utils.requests import add_nautobot_version_query_param_to_url
|
|
23
22
|
|
|
23
|
+
# S308 is suspicious-mark-safe-usage, but these are all using static strings that we know to be safe
|
|
24
24
|
HTML_TRUE = mark_safe('<span class="text-success"><i class="mdi mdi-check-bold" title="Yes"></i></span>') # noqa: S308
|
|
25
25
|
HTML_FALSE = mark_safe('<span class="text-danger"><i class="mdi mdi-close-thick" title="No"></i></span>') # noqa: S308
|
|
26
26
|
HTML_NONE = mark_safe('<span class="text-muted">—</span>') # noqa: S308
|
|
@@ -124,7 +124,7 @@ def add_html_id(element_str, id_str):
|
|
|
124
124
|
match = re.match(r"^(.*?<\w+) ?(.*)$", element_str, flags=re.DOTALL)
|
|
125
125
|
if not match:
|
|
126
126
|
return element_str
|
|
127
|
-
return mark_safe(match.group(1) + format_html(' id="{}" ', id_str) + match.group(2)) # noqa: S308
|
|
127
|
+
return mark_safe(match.group(1) + format_html(' id="{}" ', id_str) + match.group(2)) # noqa: S308 # suspicious-mark-safe-usage
|
|
128
128
|
|
|
129
129
|
|
|
130
130
|
@library.filter()
|
|
@@ -181,7 +181,7 @@ def render_markdown(value):
|
|
|
181
181
|
# Render Markdown
|
|
182
182
|
html = markdown(value, extensions=["fenced_code", "tables"])
|
|
183
183
|
|
|
184
|
-
return mark_safe(html) # noqa: S308
|
|
184
|
+
return mark_safe(html) # noqa: S308 # suspicious-mark-safe-usage, OK here since we sanitized the string earlier
|
|
185
185
|
|
|
186
186
|
|
|
187
187
|
@library.filter()
|
|
@@ -779,14 +779,3 @@ def queryset_to_pks(obj):
|
|
|
779
779
|
result = list(obj.values_list("pk", flat=True)) if obj else []
|
|
780
780
|
result = [str(entry) for entry in result]
|
|
781
781
|
return ",".join(result)
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
#
|
|
785
|
-
# Navigation
|
|
786
|
-
#
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
@register.filter()
|
|
790
|
-
def is_new_ui_ready(url_path):
|
|
791
|
-
"""Return True if url_path is NewUI Ready else False"""
|
|
792
|
-
return is_route_new_ui_ready(url_path)
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import collections
|
|
2
2
|
|
|
3
3
|
from django.contrib.auth import get_user_model
|
|
4
|
-
from django.test import TransactionTestCase as _TransactionTestCase
|
|
5
|
-
from django.test import tag
|
|
4
|
+
from django.test import tag, TransactionTestCase as _TransactionTestCase
|
|
6
5
|
|
|
7
6
|
from nautobot.core.testing.api import APITestCase, APIViewTestCases
|
|
8
7
|
from nautobot.core.testing.filters import FilterTestCases
|
nautobot/core/testing/api.py
CHANGED
|
@@ -10,8 +10,8 @@ from django.test import override_settings, tag
|
|
|
10
10
|
from django.urls import reverse
|
|
11
11
|
from django.utils.text import slugify
|
|
12
12
|
from rest_framework import status
|
|
13
|
-
from rest_framework.test import APITransactionTestCase as _APITransactionTestCase
|
|
14
13
|
from rest_framework.relations import ManyRelatedField
|
|
14
|
+
from rest_framework.test import APITransactionTestCase as _APITransactionTestCase
|
|
15
15
|
|
|
16
16
|
from nautobot.core import testing
|
|
17
17
|
from nautobot.core.api.utils import get_serializer_for_model
|
|
@@ -21,9 +21,7 @@ from nautobot.core.templatetags.helpers import bettertitle
|
|
|
21
21
|
from nautobot.core.testing import mixins, views
|
|
22
22
|
from nautobot.core.utils import lookup
|
|
23
23
|
from nautobot.core.utils.data import is_uuid
|
|
24
|
-
from nautobot.extras import choices as extras_choices
|
|
25
|
-
from nautobot.extras import models as extras_models
|
|
26
|
-
from nautobot.extras import registry
|
|
24
|
+
from nautobot.extras import choices as extras_choices, models as extras_models, registry
|
|
27
25
|
from nautobot.users import models as users_models
|
|
28
26
|
|
|
29
27
|
__all__ = (
|
nautobot/core/testing/filters.py
CHANGED
|
@@ -39,7 +39,7 @@ class FilterTestCases:
|
|
|
39
39
|
values_with_count = queryset.values(field_name).annotate(count=Count(field_name)).order_by("count")
|
|
40
40
|
for value in values_with_count:
|
|
41
41
|
# randomly break out of loop after 2 values have been selected
|
|
42
|
-
if len(test_values) > 1 and random.choice([True, False]):
|
|
42
|
+
if len(test_values) > 1 and random.choice([True, False]): # noqa: S311 # suspicious-non-cryptographic-random-usage
|
|
43
43
|
break
|
|
44
44
|
if value[field_name] and value["count"] < qs_count:
|
|
45
45
|
qs_count -= value["count"]
|
|
@@ -67,7 +67,7 @@ class SeleniumTestCase(StaticLiveServerTestCase, testing.NautobotTestCaseMixin):
|
|
|
67
67
|
so there is no need to run `collectstatic` prior to running tests.
|
|
68
68
|
"""
|
|
69
69
|
|
|
70
|
-
host = "0.0.0.0" #
|
|
70
|
+
host = "0.0.0.0" # noqa: S104 # hardcoded-bind-all-interfaces -- false positive
|
|
71
71
|
selenium_host = SELENIUM_HOST # Docker: `nautobot`; else `host.docker.internal`
|
|
72
72
|
|
|
73
73
|
@classmethod
|
|
@@ -86,7 +86,7 @@ class SeleniumTestCase(StaticLiveServerTestCase, testing.NautobotTestCaseMixin):
|
|
|
86
86
|
def setUp(self):
|
|
87
87
|
super().setUpNautobot(populate_status=True)
|
|
88
88
|
|
|
89
|
-
self.password = "testpassword"
|
|
89
|
+
self.password = "testpassword" # noqa: S105 # hardcoded-password-string
|
|
90
90
|
self.user.set_password(self.password)
|
|
91
91
|
self.user.save()
|
|
92
92
|
|
nautobot/core/testing/mixins.py
CHANGED
|
@@ -13,8 +13,7 @@ from rest_framework.test import APIClient, APIRequestFactory
|
|
|
13
13
|
from nautobot.core import testing
|
|
14
14
|
from nautobot.core.models import fields as core_fields
|
|
15
15
|
from nautobot.core.utils import permissions
|
|
16
|
-
from nautobot.extras import management
|
|
17
|
-
from nautobot.extras import models as extras_models
|
|
16
|
+
from nautobot.extras import management, models as extras_models
|
|
18
17
|
from nautobot.users import models as users_models
|
|
19
18
|
|
|
20
19
|
# Use the proper swappable User model
|
nautobot/core/testing/schema.py
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
from io import StringIO
|
|
2
|
-
import yaml
|
|
3
2
|
|
|
4
3
|
from django.conf import settings
|
|
5
4
|
from django.core.management import call_command
|
|
6
5
|
from django.test import tag
|
|
7
6
|
from rest_framework.settings import api_settings
|
|
7
|
+
import yaml
|
|
8
8
|
|
|
9
9
|
from nautobot.core.testing import views
|
|
10
10
|
|
nautobot/core/testing/utils.py
CHANGED
|
@@ -99,7 +99,7 @@ def disable_warnings(logger_name):
|
|
|
99
99
|
|
|
100
100
|
def get_deletable_objects(model, queryset):
|
|
101
101
|
"""
|
|
102
|
-
Returns a
|
|
102
|
+
Returns a subset of objects in the given queryset that have no protected relationships that would prevent deletion.
|
|
103
103
|
"""
|
|
104
104
|
q = Q()
|
|
105
105
|
for field in model._meta.get_fields(include_parents=True):
|
|
@@ -113,7 +113,7 @@ def get_deletable_objects(model, queryset):
|
|
|
113
113
|
|
|
114
114
|
def generate_random_device_asset_tag_of_specified_size(size):
|
|
115
115
|
"""
|
|
116
|
-
|
|
116
|
+
For testing purposes only; it returns a random string of size 100 consisting of letters and numbers.
|
|
117
117
|
"""
|
|
118
|
-
asset_tag = "".join(random.choices(string.ascii_letters + string.digits, k=size))
|
|
118
|
+
asset_tag = "".join(random.choices(string.ascii_letters + string.digits, k=size)) # noqa: S311 # suspicious-non-cryptographic-random-usage
|
|
119
119
|
return asset_tag
|
nautobot/core/testing/views.py
CHANGED
|
@@ -9,11 +9,10 @@ from django.contrib.contenttypes.models import ContentType
|
|
|
9
9
|
from django.core.exceptions import ObjectDoesNotExist, ValidationError
|
|
10
10
|
from django.core.files.uploadedfile import SimpleUploadedFile
|
|
11
11
|
from django.core.validators import URLValidator
|
|
12
|
-
from django.test import TestCase as _TestCase
|
|
13
|
-
from django.test import override_settings, tag
|
|
12
|
+
from django.test import override_settings, tag, TestCase as _TestCase
|
|
14
13
|
from django.urls import NoReverseMatch, reverse
|
|
15
|
-
from django.utils.http import urlencode
|
|
16
14
|
from django.utils.html import escape
|
|
15
|
+
from django.utils.http import urlencode
|
|
17
16
|
from django.utils.text import slugify
|
|
18
17
|
from tree_queries.models import TreeNode
|
|
19
18
|
|
|
@@ -21,9 +20,7 @@ from nautobot.core import testing
|
|
|
21
20
|
from nautobot.core.templatetags import helpers
|
|
22
21
|
from nautobot.core.testing import mixins
|
|
23
22
|
from nautobot.core.utils import lookup
|
|
24
|
-
from nautobot.extras import choices as extras_choices
|
|
25
|
-
from nautobot.extras import models as extras_models
|
|
26
|
-
from nautobot.extras import querysets as extras_querysets
|
|
23
|
+
from nautobot.extras import choices as extras_choices, models as extras_models, querysets as extras_querysets
|
|
27
24
|
from nautobot.users import models as users_models
|
|
28
25
|
|
|
29
26
|
__all__ = (
|
|
@@ -1155,7 +1152,7 @@ class ViewTestCases:
|
|
|
1155
1152
|
def test_bulk_edit_objects_with_constrained_permission(self):
|
|
1156
1153
|
# Select some objects that are *not* already set to match the first value in self.bulk_edit_data or null.
|
|
1157
1154
|
# We have to exclude null cases because Django filter()/exclude() doesn't like `__in=[None]` as a case.
|
|
1158
|
-
attr_name =
|
|
1155
|
+
attr_name = next(iter(self.bulk_edit_data.keys()))
|
|
1159
1156
|
objects = (
|
|
1160
1157
|
self._get_queryset()
|
|
1161
1158
|
.exclude(**{attr_name: self.bulk_edit_data[attr_name]})
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
from django.conf import settings
|
|
2
1
|
from unittest import skipIf
|
|
3
2
|
|
|
3
|
+
from django.conf import settings
|
|
4
|
+
|
|
4
5
|
from nautobot.circuits.models import Circuit, Provider
|
|
5
6
|
from nautobot.core.testing.integration import SeleniumTestCase
|
|
6
7
|
from nautobot.dcim.models import Location, PowerFeed, PowerPanel
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
from unittest import skipIf
|
|
2
2
|
|
|
3
3
|
from django.conf import settings
|
|
4
|
-
from nautobot.core.choices import ButtonActionColorChoices, ButtonActionIconChoices
|
|
5
4
|
|
|
5
|
+
from nautobot.core.choices import ButtonActionColorChoices, ButtonActionIconChoices
|
|
6
6
|
from nautobot.core.testing.integration import SeleniumTestCase
|
|
7
7
|
|
|
8
8
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import os
|
|
7
7
|
|
|
8
|
-
from nautobot.core.settings import * # noqa:
|
|
8
|
+
from nautobot.core.settings import * # noqa: F403 # undefined-local-with-import-star
|
|
9
9
|
from nautobot.core.settings_funcs import parse_redis_connection
|
|
10
10
|
|
|
11
11
|
ALLOWED_HOSTS = ["nautobot.example.com"]
|
|
@@ -22,12 +22,12 @@ PLUGINS = [
|
|
|
22
22
|
]
|
|
23
23
|
|
|
24
24
|
# Hard-code the SECRET_KEY for simplicity
|
|
25
|
-
SECRET_KEY = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
|
25
|
+
SECRET_KEY = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" # noqa: S105 # hardcoded-password-string
|
|
26
26
|
|
|
27
27
|
# Redis variables
|
|
28
28
|
|
|
29
29
|
# Use *different* redis_databases than the ones (0 and 1) used during non-automated-testing operations.
|
|
30
|
-
CACHES["default"]["LOCATION"] = parse_redis_connection(redis_database=2) # noqa: F405
|
|
30
|
+
CACHES["default"]["LOCATION"] = parse_redis_connection(redis_database=2) # noqa: F405 # undefined-local-with-import-star-usage
|
|
31
31
|
|
|
32
32
|
# Testing storages within cli.py
|
|
33
33
|
STORAGE_CONFIG = {
|
nautobot/core/tests/runner.py
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import yaml
|
|
2
|
-
|
|
3
|
-
from django.core.management import call_command
|
|
4
1
|
from django.conf import settings
|
|
2
|
+
from django.core.management import call_command
|
|
5
3
|
from django.test.runner import DiscoverRunner
|
|
4
|
+
import yaml
|
|
6
5
|
|
|
7
6
|
from nautobot.core.celery import app, setup_nautobot_job_logging
|
|
8
7
|
|
|
@@ -67,7 +66,7 @@ class NautobotTestRunner(DiscoverRunner):
|
|
|
67
66
|
for connection in result:
|
|
68
67
|
db_name = connection[0].alias
|
|
69
68
|
print(f'Pre-populating test database "{db_name}" with factory data...')
|
|
70
|
-
db_command = command
|
|
69
|
+
db_command = [*command, "--database", db_name]
|
|
71
70
|
call_command(*db_command)
|
|
72
71
|
|
|
73
72
|
return result
|
nautobot/core/tests/test_api.py
CHANGED
|
@@ -3,14 +3,13 @@ from io import BytesIO, StringIO
|
|
|
3
3
|
import json
|
|
4
4
|
from unittest import skip
|
|
5
5
|
|
|
6
|
-
from
|
|
6
|
+
from constance import config
|
|
7
|
+
from constance.test import override_config
|
|
7
8
|
from django.conf import settings
|
|
8
9
|
from django.contrib.auth import get_user_model
|
|
9
|
-
from django.
|
|
10
|
+
from django.contrib.contenttypes.models import ContentType
|
|
11
|
+
from django.test import override_settings, RequestFactory, TestCase
|
|
10
12
|
from django.urls import reverse
|
|
11
|
-
|
|
12
|
-
from constance import config
|
|
13
|
-
from constance.test import override_config
|
|
14
13
|
from rest_framework import status
|
|
15
14
|
from rest_framework.exceptions import ParseError
|
|
16
15
|
from rest_framework.settings import api_settings
|
|
@@ -23,12 +22,10 @@ from nautobot.core.api.versioning import NautobotAPIVersioning
|
|
|
23
22
|
from nautobot.core.constants import COMPOSITE_KEY_SEPARATOR
|
|
24
23
|
from nautobot.dcim import models as dcim_models
|
|
25
24
|
from nautobot.dcim.api import serializers as dcim_serializers
|
|
26
|
-
from nautobot.extras import choices
|
|
27
|
-
from nautobot.extras import models as extras_models
|
|
25
|
+
from nautobot.extras import choices, models as extras_models
|
|
28
26
|
from nautobot.ipam import models as ipam_models
|
|
29
27
|
from nautobot.ipam.api import serializers as ipam_serializers
|
|
30
28
|
|
|
31
|
-
|
|
32
29
|
User = get_user_model()
|
|
33
30
|
|
|
34
31
|
|
|
@@ -495,7 +492,7 @@ class NautobotCSVRendererTest(TestCase):
|
|
|
495
492
|
|
|
496
493
|
# Make sure a) it's well-constructed parsable CSV and b) it contains what we expect it to, within reason
|
|
497
494
|
reader = csv.DictReader(StringIO(csv_text))
|
|
498
|
-
read_data =
|
|
495
|
+
read_data = next(iter(reader))
|
|
499
496
|
self.assertIn("id", read_data)
|
|
500
497
|
self.assertEqual(read_data["id"], str(location_type.id))
|
|
501
498
|
self.assertIn("display", read_data)
|
|
@@ -925,45 +922,3 @@ class NewUIGetMenuAPIViewTestCase(testing.APITestCase):
|
|
|
925
922
|
|
|
926
923
|
self.assertEqual(response.status_code, 200)
|
|
927
924
|
self.assertEqual(response.data, expected_response)
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
class GetSettingsAPIViewTestCase(testing.APITestCase):
|
|
931
|
-
def test_get_settings(self):
|
|
932
|
-
"""Assert get settings value"""
|
|
933
|
-
url = reverse("ui-api:settings")
|
|
934
|
-
|
|
935
|
-
with self.subTest("Test get allowed settings"):
|
|
936
|
-
url_with_filters = f"{url}?name=FEEDBACK_BUTTON_ENABLED"
|
|
937
|
-
response = self.client.get(url_with_filters, **self.header)
|
|
938
|
-
self.assertEqual(response.status_code, 200)
|
|
939
|
-
expected_response = {"FEEDBACK_BUTTON_ENABLED": True}
|
|
940
|
-
self.assertEqual(response.data, expected_response)
|
|
941
|
-
with self.subTest("Test get not-allowed settings"):
|
|
942
|
-
url_with_filters = f"{url}?name=NAPALM_PASSWORD"
|
|
943
|
-
response = self.client.get(url_with_filters, **self.header)
|
|
944
|
-
self.assertEqual(response.status_code, 400)
|
|
945
|
-
expected_response = {"error": "Invalid settings names specified: NAPALM_PASSWORD."}
|
|
946
|
-
self.assertEqual(response.data, expected_response)
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
class NewUIReadyRoutesAPIViewTestCase(testing.APITestCase):
|
|
950
|
-
def test_new_ui_ready_routes(self):
|
|
951
|
-
"""Assert get settings value"""
|
|
952
|
-
url = reverse("ui-api:new-ui-ready-routes")
|
|
953
|
-
response = self.client.get(url, **self.header)
|
|
954
|
-
self.assertEqual(response.status_code, 200)
|
|
955
|
-
expected_response = [
|
|
956
|
-
"^$",
|
|
957
|
-
"^login\\/$",
|
|
958
|
-
"^dcim\\/device\\-types\\/$",
|
|
959
|
-
"^dcim\\/device\\-types\\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\/$",
|
|
960
|
-
"^dcim\\/devices\\/$",
|
|
961
|
-
"^dcim\\/devices\\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\/$",
|
|
962
|
-
"^dcim\\/locations\\/$",
|
|
963
|
-
"^dcim\\/locations\\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\/$",
|
|
964
|
-
"^ipam\\/ip\\-addresses\\/$",
|
|
965
|
-
"^ipam\\/ip\\-addresses\\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\/$",
|
|
966
|
-
"^ipam\\/prefixes\\/$",
|
|
967
|
-
"^ipam\\/prefixes\\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\/$",
|
|
968
|
-
]
|
|
969
|
-
self.assertEqual(sorted(response.data), sorted(expected_response))
|
|
@@ -12,10 +12,9 @@ from nautobot.core.settings_funcs import sso_auth_enabled
|
|
|
12
12
|
from nautobot.core.testing import NautobotTestClient, TestCase
|
|
13
13
|
from nautobot.dcim.models import Location, LocationType
|
|
14
14
|
from nautobot.extras.models import Status
|
|
15
|
-
from nautobot.ipam.models import
|
|
15
|
+
from nautobot.ipam.models import Namespace, Prefix
|
|
16
16
|
from nautobot.users.models import ObjectPermission, Token
|
|
17
17
|
|
|
18
|
-
|
|
19
18
|
# Use the proper swappable User model
|
|
20
19
|
User = get_user_model()
|
|
21
20
|
|
|
@@ -51,7 +50,7 @@ class ExternalAuthenticationTestCase(TestCase):
|
|
|
51
50
|
self.assertEqual(settings.REMOTE_AUTH_HEADER, "HTTP_REMOTE_USER")
|
|
52
51
|
|
|
53
52
|
# Client should not be authenticated
|
|
54
|
-
self.client.get(reverse("home"), follow=True, **headers)
|
|
53
|
+
self.client.get(reverse("home"), follow=True, **headers)
|
|
55
54
|
self.assertNotIn("_auth_user_id", self.client.session)
|
|
56
55
|
|
|
57
56
|
@override_settings(AUTHENTICATION_BACKENDS=TEST_AUTHENTICATION_BACKENDS)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""Test cases for nautobot.core.config module."""
|
|
2
2
|
|
|
3
3
|
from constance.test import override_config
|
|
4
|
-
from django.test import
|
|
4
|
+
from django.test import override_settings, TestCase
|
|
5
5
|
|
|
6
6
|
from nautobot.apps import config as app_config
|
|
7
7
|
from nautobot.core.utils import config
|
nautobot/core/tests/test_csv.py
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
from django.test import RequestFactory, TestCase, override_settings
|
|
2
|
-
from django.urls import reverse
|
|
3
|
-
from nautobot.core.constants import CSV_NULL_TYPE, CSV_NO_OBJECT, VARBINARY_IP_FIELD_REPR_OF_CSV_NO_OBJECT
|
|
4
1
|
from django.contrib.contenttypes.models import ContentType
|
|
2
|
+
from django.test import override_settings, RequestFactory, TestCase
|
|
3
|
+
from django.urls import reverse
|
|
5
4
|
|
|
5
|
+
from nautobot.core.constants import CSV_NO_OBJECT, CSV_NULL_TYPE, VARBINARY_IP_FIELD_REPR_OF_CSV_NO_OBJECT
|
|
6
6
|
from nautobot.dcim.api.serializers import DeviceSerializer
|
|
7
7
|
from nautobot.dcim.models.devices import Device, DeviceType
|
|
8
8
|
from nautobot.dcim.models.locations import Location
|
|
@@ -2,9 +2,7 @@ import itertools
|
|
|
2
2
|
|
|
3
3
|
import factory as factoryboy
|
|
4
4
|
|
|
5
|
-
from nautobot.core import constants
|
|
6
|
-
from nautobot.core import factory
|
|
7
|
-
from nautobot.core import testing
|
|
5
|
+
from nautobot.core import constants, factory, testing
|
|
8
6
|
|
|
9
7
|
|
|
10
8
|
class FactoryTestCase(testing.TestCase):
|
|
@@ -7,7 +7,6 @@ from django.db import models as django_models
|
|
|
7
7
|
from django.shortcuts import reverse
|
|
8
8
|
from django.test import TestCase
|
|
9
9
|
from django.test.utils import isolate_apps
|
|
10
|
-
|
|
11
10
|
import django_filters
|
|
12
11
|
from tree_queries.models import TreeNodeForeignKey
|
|
13
12
|
|
|
@@ -16,14 +15,11 @@ from nautobot.circuits.models import Circuit, CircuitType, Provider
|
|
|
16
15
|
from nautobot.core import filters, testing
|
|
17
16
|
from nautobot.core.models import fields as core_fields
|
|
18
17
|
from nautobot.core.utils import lookup
|
|
19
|
-
from nautobot.dcim import choices as dcim_choices
|
|
20
|
-
from nautobot.dcim import filters as dcim_filters
|
|
21
|
-
from nautobot.dcim import models as dcim_models
|
|
18
|
+
from nautobot.dcim import choices as dcim_choices, filters as dcim_filters, models as dcim_models
|
|
22
19
|
from nautobot.dcim.models import Device
|
|
23
20
|
from nautobot.extras import models as extras_models
|
|
24
21
|
from nautobot.extras.utils import FeatureQuery
|
|
25
|
-
from nautobot.ipam import factory as ipam_factory
|
|
26
|
-
from nautobot.ipam import models as ipam_models
|
|
22
|
+
from nautobot.ipam import factory as ipam_factory, models as ipam_models
|
|
27
23
|
|
|
28
24
|
|
|
29
25
|
class TreeNodeMultipleChoiceFilterTest(TestCase):
|
|
@@ -416,7 +412,7 @@ class BaseFilterSetTest(TestCase):
|
|
|
416
412
|
class TestFilterSet(filters.BaseFilterSet):
|
|
417
413
|
"""Filterset for testing various fields."""
|
|
418
414
|
|
|
419
|
-
class TestModel(django_models.Model):
|
|
415
|
+
class TestModel(django_models.Model): # noqa: DJ008 # django-model-without-dunder-str -- fine since this isn't a "real" model
|
|
420
416
|
"""
|
|
421
417
|
Test model used by BaseFilterSetTest for filter validation. Should never appear in a schema migration.
|
|
422
418
|
"""
|
|
@@ -9,13 +9,10 @@ from netaddr import IPNetwork
|
|
|
9
9
|
|
|
10
10
|
from nautobot.core import filters, forms, testing
|
|
11
11
|
from nautobot.core.utils import requests
|
|
12
|
-
from nautobot.dcim import filters as dcim_filters, forms as dcim_forms
|
|
13
|
-
from nautobot.dcim import models as dcim_models
|
|
12
|
+
from nautobot.dcim import filters as dcim_filters, forms as dcim_forms, models as dcim_models
|
|
14
13
|
from nautobot.dcim.tests import test_views
|
|
15
|
-
from nautobot.extras import filters as extras_filters
|
|
16
|
-
from nautobot.
|
|
17
|
-
from nautobot.ipam import forms as ipam_forms
|
|
18
|
-
from nautobot.ipam import models as ipam_models
|
|
14
|
+
from nautobot.extras import filters as extras_filters, models as extras_models
|
|
15
|
+
from nautobot.ipam import forms as ipam_forms, models as ipam_models
|
|
19
16
|
|
|
20
17
|
|
|
21
18
|
class SearchFormTestCase(TestCase):
|
|
@@ -8,18 +8,17 @@ from django.contrib.auth import get_user_model
|
|
|
8
8
|
from django.contrib.auth.models import Group
|
|
9
9
|
from django.contrib.contenttypes.models import ContentType
|
|
10
10
|
from django.db.models import Q
|
|
11
|
-
from django.test import
|
|
11
|
+
from django.test import override_settings, TestCase
|
|
12
12
|
from django.test.client import RequestFactory
|
|
13
13
|
from django.urls import reverse
|
|
14
|
-
from graphql import GraphQLError
|
|
15
14
|
import graphene.types
|
|
16
|
-
from graphene_django.settings import graphene_settings
|
|
17
15
|
from graphene_django.registry import get_global_registry
|
|
16
|
+
from graphene_django.settings import graphene_settings
|
|
17
|
+
from graphql import get_default_backend, GraphQLError
|
|
18
18
|
from graphql.error.located_error import GraphQLLocatedError
|
|
19
|
-
from graphql import get_default_backend
|
|
20
19
|
from rest_framework import status
|
|
21
20
|
|
|
22
|
-
from nautobot.circuits.models import
|
|
21
|
+
from nautobot.circuits.models import CircuitTermination, Provider
|
|
23
22
|
from nautobot.core.graphql import execute_query, execute_saved_query
|
|
24
23
|
from nautobot.core.graphql.generators import (
|
|
25
24
|
generate_list_search_parameters,
|
|
@@ -27,16 +26,16 @@ from nautobot.core.graphql.generators import (
|
|
|
27
26
|
)
|
|
28
27
|
from nautobot.core.graphql.schema import (
|
|
29
28
|
extend_schema_type,
|
|
30
|
-
extend_schema_type_custom_field,
|
|
31
|
-
extend_schema_type_tags,
|
|
32
29
|
extend_schema_type_config_context,
|
|
33
|
-
|
|
30
|
+
extend_schema_type_custom_field,
|
|
34
31
|
extend_schema_type_null_field_choice,
|
|
32
|
+
extend_schema_type_relationships,
|
|
33
|
+
extend_schema_type_tags,
|
|
35
34
|
)
|
|
36
35
|
from nautobot.core.graphql.types import OptimizedNautobotObjectType
|
|
37
36
|
from nautobot.core.graphql.utils import str_to_var_name
|
|
38
|
-
from nautobot.core.testing import
|
|
39
|
-
from nautobot.dcim.choices import
|
|
37
|
+
from nautobot.core.testing import create_test_user, NautobotTestClient
|
|
38
|
+
from nautobot.dcim.choices import ConsolePortTypeChoices, InterfaceModeChoices, InterfaceTypeChoices, PortTypeChoices
|
|
40
39
|
from nautobot.dcim.filters import DeviceFilterSet, LocationFilterSet
|
|
41
40
|
from nautobot.dcim.graphql.types import DeviceType as DeviceTypeGraphQL
|
|
42
41
|
from nautobot.dcim.models import (
|
|
@@ -52,17 +51,17 @@ from nautobot.dcim.models import (
|
|
|
52
51
|
Location,
|
|
53
52
|
LocationType,
|
|
54
53
|
PowerFeed,
|
|
55
|
-
PowerPort,
|
|
56
54
|
PowerOutlet,
|
|
57
55
|
PowerPanel,
|
|
56
|
+
PowerPort,
|
|
58
57
|
Rack,
|
|
59
58
|
RearPort,
|
|
60
59
|
)
|
|
61
60
|
from nautobot.extras.choices import CustomFieldTypeChoices
|
|
62
61
|
from nautobot.extras.models import (
|
|
63
62
|
ChangeLoggedModel,
|
|
64
|
-
CustomField,
|
|
65
63
|
ConfigContext,
|
|
64
|
+
CustomField,
|
|
66
65
|
GraphQLQuery,
|
|
67
66
|
Relationship,
|
|
68
67
|
RelationshipAssociation,
|
|
@@ -82,8 +81,8 @@ from nautobot.ipam.models import (
|
|
|
82
81
|
VRFDeviceAssignment,
|
|
83
82
|
VRFPrefixAssignment,
|
|
84
83
|
)
|
|
85
|
-
from nautobot.users.models import ObjectPermission, Token
|
|
86
84
|
from nautobot.tenancy.models import Tenant
|
|
85
|
+
from nautobot.users.models import ObjectPermission, Token
|
|
87
86
|
from nautobot.virtualization.factory import ClusterTypeFactory
|
|
88
87
|
from nautobot.virtualization.models import Cluster, VirtualMachine, VMInterface
|
|
89
88
|
|
|
@@ -708,7 +707,7 @@ class GraphQLQueryTest(TestCase):
|
|
|
708
707
|
roles = Role.objects.get_for_model(Device)
|
|
709
708
|
cls.device_role1 = roles[0]
|
|
710
709
|
cls.device_role2 = roles[1]
|
|
711
|
-
cls.device_role3 = random.choice(roles)
|
|
710
|
+
cls.device_role3 = random.choice(roles) # noqa: S311 # suspicious-non-cryptographic-random-usage
|
|
712
711
|
cls.location_statuses = list(Status.objects.get_for_model(Location))[:2]
|
|
713
712
|
cls.location_type = LocationType.objects.get(name="Campus")
|
|
714
713
|
cls.location1 = Location.objects.filter(location_type=cls.location_type).first()
|
|
@@ -47,17 +47,17 @@ class NautobotJinjaFilterTest(TestCase):
|
|
|
47
47
|
"slugify",
|
|
48
48
|
]
|
|
49
49
|
|
|
50
|
-
# For each helper, try to render
|
|
50
|
+
# For each helper, try to render jinja template with render_jinja2 and fail if TemplateAssertionError is raised
|
|
51
51
|
for helper in helpers_to_validate:
|
|
52
52
|
try:
|
|
53
53
|
data.render_jinja2("{{ data | " + helper + " }}", {"data": None})
|
|
54
54
|
except TemplateAssertionError:
|
|
55
55
|
raise
|
|
56
|
-
except Exception:
|
|
56
|
+
except Exception: # noqa: S110 # try-except-pass -- an antipattern in general, but OK here
|
|
57
57
|
pass
|
|
58
58
|
|
|
59
59
|
def test_netutils_filters_in_jinja(self):
|
|
60
|
-
"""Import
|
|
60
|
+
"""Import all Jinja filters from Netutils and validate that all have been properly loaded in Django Jinja."""
|
|
61
61
|
filters = jinja2_convenience_function()
|
|
62
62
|
|
|
63
63
|
for filter_ in filters.keys():
|
|
@@ -65,7 +65,7 @@ class NautobotJinjaFilterTest(TestCase):
|
|
|
65
65
|
data.render_jinja2("{{ data | " + filter_ + " }}", {"data": None})
|
|
66
66
|
except TemplateAssertionError:
|
|
67
67
|
raise
|
|
68
|
-
except Exception:
|
|
68
|
+
except Exception: # noqa: S110 # try-except-pass -- an antipattern in general, but OK here
|
|
69
69
|
pass
|
|
70
70
|
|
|
71
71
|
def test_sandboxed_render(self):
|
nautobot/core/tests/test_jobs.py
CHANGED
|
@@ -3,7 +3,7 @@ from pathlib import Path
|
|
|
3
3
|
from django.contrib.contenttypes.models import ContentType
|
|
4
4
|
import yaml
|
|
5
5
|
|
|
6
|
-
from nautobot.core.testing import
|
|
6
|
+
from nautobot.core.testing import create_job_result_and_run_job, TransactionTestCase
|
|
7
7
|
from nautobot.dcim.models import DeviceType, Manufacturer
|
|
8
8
|
from nautobot.extras.choices import JobResultStatusChoices, LogLevelChoices
|
|
9
9
|
from nautobot.extras.models import ExportTemplate, JobLogEntry, Status
|