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
nautobot/core/graphql/schema.py
CHANGED
|
@@ -6,27 +6,26 @@ from django.conf import settings
|
|
|
6
6
|
from django.contrib.contenttypes.models import ContentType
|
|
7
7
|
from django.core.validators import ValidationError
|
|
8
8
|
from django.db.models.fields.reverse_related import ManyToOneRel, OneToOneRel
|
|
9
|
-
|
|
10
9
|
import graphene
|
|
11
10
|
from graphene.types import generic
|
|
12
11
|
|
|
13
12
|
from nautobot.circuits.graphql.types import CircuitTerminationType
|
|
14
|
-
from nautobot.core.graphql.utils import str_to_var_name
|
|
15
13
|
from nautobot.core.graphql.generators import (
|
|
16
14
|
generate_attrs_for_schema_type,
|
|
17
15
|
generate_computed_field_resolver,
|
|
18
16
|
generate_custom_field_resolver,
|
|
19
17
|
generate_filter_resolver,
|
|
20
18
|
generate_list_search_parameters,
|
|
19
|
+
generate_null_choices_resolver,
|
|
21
20
|
generate_relationship_resolver,
|
|
22
21
|
generate_restricted_queryset,
|
|
23
22
|
generate_schema_type,
|
|
24
|
-
generate_null_choices_resolver,
|
|
25
23
|
)
|
|
26
24
|
from nautobot.core.graphql.types import ContentTypeType, JSON
|
|
25
|
+
from nautobot.core.graphql.utils import str_to_var_name
|
|
27
26
|
from nautobot.dcim.graphql.types import (
|
|
28
|
-
CableType,
|
|
29
27
|
CablePathType,
|
|
28
|
+
CableType,
|
|
30
29
|
ConsolePortType,
|
|
31
30
|
ConsoleServerPortType,
|
|
32
31
|
DeviceType,
|
|
@@ -40,10 +39,10 @@ from nautobot.dcim.graphql.types import (
|
|
|
40
39
|
RackType,
|
|
41
40
|
RearPortType,
|
|
42
41
|
)
|
|
43
|
-
from nautobot.extras.registry import registry
|
|
44
|
-
from nautobot.extras.models import ComputedField, CustomField, Relationship
|
|
45
42
|
from nautobot.extras.choices import CustomFieldTypeChoices, RelationshipSideChoices
|
|
46
|
-
from nautobot.extras.graphql.types import
|
|
43
|
+
from nautobot.extras.graphql.types import DynamicGroupType, TagType
|
|
44
|
+
from nautobot.extras.models import ComputedField, CustomField, Relationship
|
|
45
|
+
from nautobot.extras.registry import registry
|
|
47
46
|
from nautobot.extras.utils import check_if_key_is_graphql_safe
|
|
48
47
|
from nautobot.ipam.graphql.types import IPAddressType, PrefixType
|
|
49
48
|
from nautobot.virtualization.graphql.types import VirtualMachineType, VMInterfaceType
|
nautobot/core/graphql/utils.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
|
|
3
|
-
from django_filters.filters import BooleanFilter,
|
|
3
|
+
from django_filters.filters import BooleanFilter, MultipleChoiceFilter, NumberFilter
|
|
4
4
|
import graphene
|
|
5
5
|
|
|
6
6
|
from nautobot.core.filters import (
|
|
@@ -12,7 +12,6 @@ from nautobot.core.filters import (
|
|
|
12
12
|
from nautobot.core.graphql import BigInteger
|
|
13
13
|
from nautobot.core.models.fields import slugify_dashes_to_underscores
|
|
14
14
|
|
|
15
|
-
|
|
16
15
|
logger = logging.getLogger(__name__)
|
|
17
16
|
|
|
18
17
|
|
|
@@ -5,7 +5,7 @@ import os
|
|
|
5
5
|
from django.core.management import call_command
|
|
6
6
|
from django.core.management.base import BaseCommand, CommandError
|
|
7
7
|
from django.core.serializers.json import DjangoJSONEncoder
|
|
8
|
-
from django.db import
|
|
8
|
+
from django.db import connections, DEFAULT_DB_ALIAS
|
|
9
9
|
from django.utils.crypto import get_random_string
|
|
10
10
|
|
|
11
11
|
from nautobot.core.settings_funcs import is_truthy
|
|
@@ -61,15 +61,13 @@ class Command(BaseCommand):
|
|
|
61
61
|
DeviceFactory,
|
|
62
62
|
DeviceRedundancyGroupFactory,
|
|
63
63
|
DeviceTypeFactory,
|
|
64
|
+
LocationFactory,
|
|
65
|
+
LocationTypeFactory,
|
|
64
66
|
ManufacturerFactory,
|
|
65
67
|
PlatformFactory,
|
|
66
68
|
)
|
|
67
69
|
from nautobot.extras.factory import ExternalIntegrationFactory, RoleFactory, StatusFactory, TagFactory
|
|
68
70
|
from nautobot.extras.management import populate_status_choices
|
|
69
|
-
from nautobot.dcim.factory import (
|
|
70
|
-
LocationTypeFactory,
|
|
71
|
-
LocationFactory,
|
|
72
|
-
)
|
|
73
71
|
from nautobot.extras.utils import TaggableClassesQuery
|
|
74
72
|
from nautobot.ipam.choices import PrefixTypeChoices
|
|
75
73
|
from nautobot.ipam.factory import (
|
|
@@ -78,8 +76,8 @@ class Command(BaseCommand):
|
|
|
78
76
|
PrefixFactory,
|
|
79
77
|
RIRFactory,
|
|
80
78
|
RouteTargetFactory,
|
|
81
|
-
VLANGroupFactory,
|
|
82
79
|
VLANFactory,
|
|
80
|
+
VLANGroupFactory,
|
|
83
81
|
VRFFactory,
|
|
84
82
|
)
|
|
85
83
|
from nautobot.tenancy.factory import TenantFactory, TenantGroupFactory
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# noinspection PyUnresolvedReferences
|
|
2
|
-
from django.core.management.commands.makemigrations import Command # noqa: F401
|
|
2
|
+
from django.core.management.commands.makemigrations import Command # noqa: F401 # unused-import
|
|
3
3
|
from django.db import models
|
|
4
4
|
|
|
5
5
|
from nautobot.core.management import commands
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# noinspection PyUnresolvedReferences
|
|
2
|
-
from django.core.management.commands.migrate import Command # noqa: F401
|
|
2
|
+
from django.core.management.commands.migrate import Command # noqa: F401 # unused-import
|
|
3
3
|
from django.db import models
|
|
4
4
|
|
|
5
5
|
from nautobot.core.management import commands
|
|
@@ -3,7 +3,6 @@ import argparse
|
|
|
3
3
|
from django.core.management import call_command
|
|
4
4
|
from django.core.management.base import BaseCommand
|
|
5
5
|
|
|
6
|
-
|
|
7
6
|
HELP_TEXT = """
|
|
8
7
|
Performs Nautobot common server upgrade operations using a single entrypoint.
|
|
9
8
|
|
|
@@ -11,7 +10,6 @@ This will run the following management commands with default settings, in order:
|
|
|
11
10
|
|
|
12
11
|
- migrate
|
|
13
12
|
- trace_paths
|
|
14
|
-
- build_ui --npm-install
|
|
15
13
|
- collectstatic
|
|
16
14
|
- remove_stale_contenttypes
|
|
17
15
|
- clearsessions
|
|
@@ -29,13 +27,6 @@ class Command(BaseCommand):
|
|
|
29
27
|
return parser
|
|
30
28
|
|
|
31
29
|
def add_arguments(self, parser):
|
|
32
|
-
parser.add_argument(
|
|
33
|
-
"--build-ui",
|
|
34
|
-
action="store_true",
|
|
35
|
-
dest="build_ui",
|
|
36
|
-
default=False,
|
|
37
|
-
help="Build the user interface.",
|
|
38
|
-
)
|
|
39
30
|
parser.add_argument(
|
|
40
31
|
"--no-clearsessions",
|
|
41
32
|
action="store_false",
|
|
@@ -112,12 +103,6 @@ class Command(BaseCommand):
|
|
|
112
103
|
call_command("trace_paths", no_input=True)
|
|
113
104
|
self.stdout.write()
|
|
114
105
|
|
|
115
|
-
# Run build
|
|
116
|
-
if options.get("build_ui"):
|
|
117
|
-
self.stdout.write("Building user interface...")
|
|
118
|
-
call_command("build_ui", npm_install=True)
|
|
119
|
-
self.stdout.write()
|
|
120
|
-
|
|
121
106
|
# Run collectstatic
|
|
122
107
|
if options.get("collectstatic"):
|
|
123
108
|
self.stdout.write("Collecting static files...")
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
from django.conf import settings
|
|
2
|
+
from django.contrib.contenttypes.models import ContentType
|
|
2
3
|
from django.core.cache import cache
|
|
3
4
|
from django.core.management.base import BaseCommand
|
|
4
5
|
|
|
5
|
-
from django.contrib.contenttypes.models import ContentType
|
|
6
|
-
|
|
7
6
|
|
|
8
7
|
class Command(BaseCommand):
|
|
9
8
|
help = "Update the cached content type for all model classes."
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import hashlib
|
|
2
2
|
import json
|
|
3
3
|
import platform
|
|
4
|
-
import requests
|
|
5
|
-
import requests.exceptions
|
|
6
4
|
import uuid
|
|
7
5
|
|
|
8
6
|
from constance import config
|
|
9
7
|
from django.apps import apps
|
|
10
8
|
from django.conf import settings
|
|
11
9
|
from django.core.management.base import BaseCommand
|
|
10
|
+
import requests
|
|
11
|
+
import requests.exceptions
|
|
12
12
|
|
|
13
13
|
from nautobot.core.utils.config import get_settings_or_config
|
|
14
14
|
|
|
15
|
-
|
|
16
15
|
METRICS_ENDPOINT = "https://nautobot.cloud/api/nautobot/installation-metric/"
|
|
17
16
|
|
|
18
17
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from django.apps import apps
|
|
2
2
|
from django.contrib.auth import get_user_model
|
|
3
|
-
from django.core.management.base import BaseCommand, CommandError
|
|
4
3
|
from django.core.exceptions import ValidationError
|
|
4
|
+
from django.core.management.base import BaseCommand, CommandError
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
class Command(BaseCommand):
|
nautobot/core/middleware.py
CHANGED
|
@@ -12,9 +12,9 @@ from nautobot.core.authentication import (
|
|
|
12
12
|
assign_permissions_to_user,
|
|
13
13
|
)
|
|
14
14
|
from nautobot.core.settings_funcs import (
|
|
15
|
-
sso_auth_enabled,
|
|
16
|
-
remote_auth_enabled,
|
|
17
15
|
ldap_auth_enabled,
|
|
16
|
+
remote_auth_enabled,
|
|
17
|
+
sso_auth_enabled,
|
|
18
18
|
)
|
|
19
19
|
from nautobot.core.views import server_error
|
|
20
20
|
from nautobot.extras.choices import ObjectChangeEventContextChoices
|
nautobot/core/models/__init__.py
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import uuid
|
|
2
2
|
|
|
3
|
+
from django.conf import settings
|
|
4
|
+
from django.contrib.contenttypes.models import ContentType
|
|
5
|
+
from django.core.cache import cache
|
|
3
6
|
from django.core.exceptions import FieldDoesNotExist
|
|
4
7
|
from django.db import models
|
|
5
8
|
from django.urls import NoReverseMatch, reverse
|
|
6
9
|
from django.utils.encoding import is_protected_type
|
|
7
|
-
from django.conf import settings
|
|
8
|
-
from django.contrib.contenttypes.models import ContentType
|
|
9
|
-
from django.core.cache import cache
|
|
10
10
|
from django.utils.functional import classproperty
|
|
11
11
|
|
|
12
12
|
from nautobot.core.models.managers import BaseManager
|
|
@@ -47,12 +47,8 @@ class BaseModel(models.Model):
|
|
|
47
47
|
|
|
48
48
|
objects = BaseManager.from_queryset(RestrictedQuerySet)()
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
"""
|
|
53
|
-
True if the record exists in the database, False if it does not.
|
|
54
|
-
"""
|
|
55
|
-
return not self._state.adding
|
|
50
|
+
class Meta:
|
|
51
|
+
abstract = True
|
|
56
52
|
|
|
57
53
|
def get_absolute_url(self, api=False):
|
|
58
54
|
"""
|
|
@@ -77,6 +73,13 @@ class BaseModel(models.Model):
|
|
|
77
73
|
|
|
78
74
|
raise AttributeError(f"Cannot find a URL for {self} ({self._meta.app_label}.{self._meta.model_name})")
|
|
79
75
|
|
|
76
|
+
@property
|
|
77
|
+
def present_in_database(self):
|
|
78
|
+
"""
|
|
79
|
+
True if the record exists in the database, False if it does not.
|
|
80
|
+
"""
|
|
81
|
+
return not self._state.adding
|
|
82
|
+
|
|
80
83
|
@classproperty # https://github.com/PyCQA/pylint-django/issues/240
|
|
81
84
|
def _content_type(cls): # pylint: disable=no-self-argument
|
|
82
85
|
"""
|
|
@@ -101,9 +104,6 @@ class BaseModel(models.Model):
|
|
|
101
104
|
|
|
102
105
|
return cache.get_or_set(cls._content_type_cache_key, cls._content_type, settings.CONTENT_TYPE_CACHE_TIMEOUT)
|
|
103
106
|
|
|
104
|
-
class Meta:
|
|
105
|
-
abstract = True
|
|
106
|
-
|
|
107
107
|
def validated_save(self, *args, **kwargs):
|
|
108
108
|
"""
|
|
109
109
|
Perform model validation during instance save.
|
nautobot/core/models/fields.py
CHANGED
|
@@ -2,7 +2,7 @@ import json
|
|
|
2
2
|
import re
|
|
3
3
|
|
|
4
4
|
from django.core import exceptions
|
|
5
|
-
from django.core.validators import
|
|
5
|
+
from django.core.validators import MaxLengthValidator, RegexValidator
|
|
6
6
|
from django.db import models
|
|
7
7
|
from django.utils.text import slugify
|
|
8
8
|
from django_extensions.db.fields import AutoSlugField as _AutoSlugField
|
nautobot/core/models/generics.py
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
|
|
3
|
+
from nautobot.core.models import BaseModel
|
|
4
|
+
from nautobot.core.models.fields import TagsField
|
|
3
5
|
from nautobot.extras.models.change_logging import ChangeLoggedModel
|
|
4
6
|
from nautobot.extras.models.customfields import CustomFieldModel
|
|
5
7
|
from nautobot.extras.models.mixins import DynamicGroupMixin, NotesMixin
|
|
6
8
|
from nautobot.extras.models.relationships import RelationshipModel
|
|
7
|
-
from nautobot.core.models import BaseModel
|
|
8
|
-
from nautobot.core.models.fields import TagsField
|
|
9
|
-
|
|
10
9
|
|
|
11
10
|
logger = logging.getLogger(__name__)
|
|
12
11
|
|
nautobot/core/models/managers.py
CHANGED
|
@@ -6,13 +6,13 @@ from nautobot.core.choices import ColorChoices
|
|
|
6
6
|
from nautobot.core.models import BaseManager, BaseModel
|
|
7
7
|
from nautobot.core.models.fields import ColorField
|
|
8
8
|
from nautobot.core.models.querysets import RestrictedQuerySet
|
|
9
|
+
from nautobot.extras.models.change_logging import ChangeLoggedModel
|
|
9
10
|
|
|
10
11
|
# Importing CustomFieldModel, ChangeLoggedModel, RelationshipModel from nautobot.extras.models
|
|
11
12
|
# caused circular import error
|
|
12
13
|
from nautobot.extras.models.customfields import CustomFieldModel
|
|
13
|
-
from nautobot.extras.models.change_logging import ChangeLoggedModel
|
|
14
|
-
from nautobot.extras.models.relationships import RelationshipModel
|
|
15
14
|
from nautobot.extras.models.mixins import DynamicGroupMixin, NotesMixin
|
|
15
|
+
from nautobot.extras.models.relationships import RelationshipModel
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class ContentTypeRelatedQuerySet(RestrictedQuerySet):
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
from django.core.cache import cache
|
|
2
|
-
|
|
3
2
|
from tree_queries.models import TreeNode
|
|
4
|
-
from tree_queries.query import TreeManager as TreeManager_
|
|
5
|
-
from tree_queries.query import TreeQuerySet as TreeQuerySet_
|
|
3
|
+
from tree_queries.query import TreeManager as TreeManager_, TreeQuerySet as TreeQuerySet_
|
|
6
4
|
|
|
7
|
-
from nautobot.core.models import
|
|
5
|
+
from nautobot.core.models import BaseManager, querysets
|
|
8
6
|
|
|
9
7
|
|
|
10
8
|
class TreeQuerySet(TreeQuerySet_, querysets.RestrictedQuerySet):
|
|
@@ -2,7 +2,7 @@ import re
|
|
|
2
2
|
|
|
3
3
|
from django.conf import settings
|
|
4
4
|
from django.core.exceptions import ValidationError
|
|
5
|
-
from django.core.validators import BaseValidator, RegexValidator, URLValidator
|
|
5
|
+
from django.core.validators import _lazy_re_compile, BaseValidator, RegexValidator, URLValidator
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class EnhancedURLValidator(URLValidator):
|
nautobot/core/releases.py
CHANGED
|
@@ -2,8 +2,8 @@ import logging
|
|
|
2
2
|
|
|
3
3
|
from django.core.cache import cache
|
|
4
4
|
|
|
5
|
-
from nautobot.core.utils.config import get_settings_or_config
|
|
6
5
|
from nautobot.core.tasks import get_releases
|
|
6
|
+
from nautobot.core.utils.config import get_settings_or_config
|
|
7
7
|
|
|
8
8
|
logger = logging.getLogger(__name__)
|
|
9
9
|
|
nautobot/core/runner/importer.py
CHANGED
|
@@ -6,16 +6,10 @@ logan.importer
|
|
|
6
6
|
:license: Apache License 2.0, see LICENSE for more details.
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
-
import sys
|
|
10
|
-
|
|
11
9
|
from importlib import import_module
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
def execfile(afile, globalz=None, localz=None):
|
|
16
|
-
with open(afile, "r") as fh:
|
|
17
|
-
exec(fh.read(), globalz, localz)
|
|
10
|
+
import sys
|
|
18
11
|
|
|
12
|
+
from .settings import create_module, load_settings
|
|
19
13
|
|
|
20
14
|
installed = False
|
|
21
15
|
|
|
@@ -60,20 +54,10 @@ class LoganImporter:
|
|
|
60
54
|
self.default_settings = default_settings
|
|
61
55
|
self.allow_extras = allow_extras
|
|
62
56
|
self.callback = callback
|
|
63
|
-
self.validate()
|
|
64
57
|
|
|
65
58
|
def __repr__(self):
|
|
66
59
|
return f"<{type(self)} for '{self.name}' ({self.config_path})>"
|
|
67
60
|
|
|
68
|
-
def validate(self):
|
|
69
|
-
# TODO(dcramer): is there a better way to handle validation so it
|
|
70
|
-
# is lazy and actually happens in LoganLoader?
|
|
71
|
-
try:
|
|
72
|
-
execfile(self.config_path, {"__file__": self.config_path})
|
|
73
|
-
except Exception as e:
|
|
74
|
-
exc_info = sys.exc_info()
|
|
75
|
-
raise ConfigurationError(str(e), exc_info[2])
|
|
76
|
-
|
|
77
61
|
def find_module(self, fullname, path=None):
|
|
78
62
|
"""Meta path finder API function implementation.
|
|
79
63
|
|
|
@@ -109,13 +93,6 @@ class LoganLoader:
|
|
|
109
93
|
|
|
110
94
|
FIXME(jathan): load_module() API is deprecated, convert this to create_module()/exec_module() instead.
|
|
111
95
|
"""
|
|
112
|
-
try:
|
|
113
|
-
return self._load_module(fullname)
|
|
114
|
-
except Exception as e:
|
|
115
|
-
exc_info = sys.exc_info()
|
|
116
|
-
raise ConfigurationError(str(e), exc_info[2])
|
|
117
|
-
|
|
118
|
-
def _load_module(self, fullname):
|
|
119
96
|
# FIXME(jathan): is this needed?
|
|
120
97
|
if fullname in sys.modules:
|
|
121
98
|
return sys.modules[fullname] # pragma: no cover
|
nautobot/core/runner/runner.py
CHANGED
|
@@ -15,10 +15,10 @@ from django.core import management
|
|
|
15
15
|
|
|
16
16
|
from nautobot import __version__
|
|
17
17
|
from nautobot.core.settings_funcs import is_truthy
|
|
18
|
+
|
|
18
19
|
from . import importer
|
|
19
20
|
from .settings import create_default_settings
|
|
20
21
|
|
|
21
|
-
|
|
22
22
|
__configured = False
|
|
23
23
|
|
|
24
24
|
|
|
@@ -294,7 +294,7 @@ def run_app(**kwargs):
|
|
|
294
294
|
parser.exit(status=2, message=str(err) + "\n")
|
|
295
295
|
|
|
296
296
|
# Call Django management command
|
|
297
|
-
management.execute_from_command_line([runner_name, command
|
|
297
|
+
management.execute_from_command_line([runner_name, command, *command_args])
|
|
298
298
|
|
|
299
299
|
# Exit cleanly
|
|
300
300
|
sys.exit(0)
|
nautobot/core/runner/settings.py
CHANGED
nautobot/core/settings.py
CHANGED
|
@@ -8,7 +8,7 @@ import django.forms
|
|
|
8
8
|
from django.utils.safestring import mark_safe
|
|
9
9
|
|
|
10
10
|
from nautobot import __version__
|
|
11
|
-
from nautobot.core.settings_funcs import is_truthy, parse_redis_connection
|
|
11
|
+
from nautobot.core.settings_funcs import ConstanceConfigItem, is_truthy, parse_redis_connection
|
|
12
12
|
|
|
13
13
|
#
|
|
14
14
|
# Environment setup
|
|
@@ -29,7 +29,7 @@ AUTH_USER_MODEL = "users.User"
|
|
|
29
29
|
|
|
30
30
|
# Set the default AutoField for 3rd party apps
|
|
31
31
|
# N.B. Ideally this would be a `UUIDField`, but due to Django restrictions
|
|
32
|
-
# we can
|
|
32
|
+
# we can't do that yet
|
|
33
33
|
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
|
|
34
34
|
|
|
35
35
|
|
|
@@ -60,9 +60,6 @@ ALLOWED_URL_SCHEMES = (
|
|
|
60
60
|
# Base directory wherein all created files (jobs, git repositories, file uploads, static files) will be stored)
|
|
61
61
|
NAUTOBOT_ROOT = os.getenv("NAUTOBOT_ROOT", os.path.expanduser("~/.nautobot"))
|
|
62
62
|
|
|
63
|
-
# The directory where the Nautobot UI packaging is stored.
|
|
64
|
-
NAUTOBOT_UI_DIR = os.path.join(NAUTOBOT_ROOT, "ui")
|
|
65
|
-
|
|
66
63
|
# Disable linking of Config Context objects via Dynamic Groups by default. This could cause performance impacts
|
|
67
64
|
# when a large number of dynamic groups are present
|
|
68
65
|
CONFIG_CONTEXT_DYNAMIC_GROUPS_ENABLED = is_truthy(os.getenv("NAUTOBOT_CONFIG_CONTEXT_DYNAMIC_GROUPS_ENABLED", "False"))
|
|
@@ -181,7 +178,8 @@ REST_FRAMEWORK_VERSION = VERSION.rsplit(".", 1)[0] # Use major.minor as API ver
|
|
|
181
178
|
VERSION_MAJOR, VERSION_MINOR = [int(v) for v in REST_FRAMEWORK_VERSION.split(".")]
|
|
182
179
|
# We support all major.minor API versions from 2.0 to the present latest version.
|
|
183
180
|
# Similar logic exists in tasks.py, please keep them in sync!
|
|
184
|
-
|
|
181
|
+
if VERSION_MAJOR != 2:
|
|
182
|
+
raise RuntimeError(f"REST_FRAMEWORK_ALLOWED_VERSIONS needs to be updated to handle version {VERSION_MAJOR}")
|
|
185
183
|
REST_FRAMEWORK_ALLOWED_VERSIONS = [f"{VERSION_MAJOR}.{minor}" for minor in range(0, VERSION_MINOR + 1)]
|
|
186
184
|
|
|
187
185
|
REST_FRAMEWORK = {
|
|
@@ -510,10 +508,7 @@ X_FRAME_OPTIONS = "DENY"
|
|
|
510
508
|
# Static files (CSS, JavaScript, Images)
|
|
511
509
|
STATIC_ROOT = os.path.join(NAUTOBOT_ROOT, "static")
|
|
512
510
|
STATIC_URL = "static/"
|
|
513
|
-
STATICFILES_DIRS = (
|
|
514
|
-
os.path.join(BASE_DIR, "project-static"),
|
|
515
|
-
os.path.join(NAUTOBOT_UI_DIR, "build", "static"),
|
|
516
|
-
)
|
|
511
|
+
STATICFILES_DIRS = (os.path.join(BASE_DIR, "project-static"),)
|
|
517
512
|
|
|
518
513
|
# Media
|
|
519
514
|
MEDIA_URL = "media/"
|
|
@@ -609,14 +604,9 @@ CONSTANCE_CONFIG = {
|
|
|
609
604
|
"member list. This cache is invalidated when a Dynamic Group is saved. Set to 0 to disable caching.",
|
|
610
605
|
field_type=int,
|
|
611
606
|
),
|
|
612
|
-
"FEEDBACK_BUTTON_ENABLED": ConstanceConfigItem(
|
|
613
|
-
default=True,
|
|
614
|
-
help_text="Whether to show the Feedback button in the new UI sidebar.",
|
|
615
|
-
field_type=bool,
|
|
616
|
-
),
|
|
617
607
|
"JOB_CREATE_FILE_MAX_SIZE": ConstanceConfigItem(
|
|
618
608
|
default=10 << 20,
|
|
619
|
-
help_text=mark_safe( # noqa: S308
|
|
609
|
+
help_text=mark_safe( # noqa: S308 # suspicious-mark-safe-usage, but this is a static string so it's safe
|
|
620
610
|
"Maximum size (in bytes) of any single file generated by a <code>Job.create_file()</code> call."
|
|
621
611
|
),
|
|
622
612
|
field_type=int,
|
|
@@ -649,7 +639,7 @@ CONSTANCE_CONFIG = {
|
|
|
649
639
|
),
|
|
650
640
|
"NETWORK_DRIVERS": ConstanceConfigItem(
|
|
651
641
|
default={},
|
|
652
|
-
help_text=mark_safe( # noqa: S308
|
|
642
|
+
help_text=mark_safe( # noqa: S308 # suspicious-mark-safe-usage, but this is a static string so it's safe
|
|
653
643
|
"Extend or override default Platform.network_driver translations provided by "
|
|
654
644
|
'<a href="https://netutils.readthedocs.io/en/latest/user/lib_use_cases_lib_mapper/">netutils</a>. '
|
|
655
645
|
"Enter a dictionary in JSON format, for example:\n"
|
|
@@ -704,7 +694,7 @@ CONSTANCE_CONFIG_FIELDSETS = {
|
|
|
704
694
|
"Performance": ["DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUT", "JOB_CREATE_FILE_MAX_SIZE"],
|
|
705
695
|
"Rack Elevation Rendering": ["RACK_ELEVATION_DEFAULT_UNIT_HEIGHT", "RACK_ELEVATION_DEFAULT_UNIT_WIDTH"],
|
|
706
696
|
"Release Checking": ["RELEASE_CHECK_URL", "RELEASE_CHECK_TIMEOUT"],
|
|
707
|
-
"User Interface": ["
|
|
697
|
+
"User Interface": ["SUPPORT_MESSAGE"],
|
|
708
698
|
}
|
|
709
699
|
|
|
710
700
|
#
|
|
@@ -779,7 +769,7 @@ CELERY_RESULT_EXPIRES = None
|
|
|
779
769
|
# Instruct celery to report the started status of a job, instead of just `pending`, `finished`, or `failed`
|
|
780
770
|
CELERY_TASK_TRACK_STARTED = True
|
|
781
771
|
|
|
782
|
-
# If enabled, a `task-sent` event will be sent for every task so tasks can be tracked before they
|
|
772
|
+
# If enabled, a `task-sent` event will be sent for every task so tasks can be tracked before they're consumed by a worker.
|
|
783
773
|
CELERY_TASK_SEND_SENT_EVENT = True
|
|
784
774
|
|
|
785
775
|
# If enabled stdout and stderr of running jobs will be redirected to the task logger.
|
|
@@ -920,6 +910,3 @@ DRF_REACT_TEMPLATE_TYPE_MAP = {
|
|
|
920
910
|
"TimeZoneSerializerField": {"type": "string"},
|
|
921
911
|
"UUIDField": {"type": "string", "format": "uuid"},
|
|
922
912
|
}
|
|
923
|
-
|
|
924
|
-
# Turn on or off new ui feature
|
|
925
|
-
ENABLE_ALPHA_UI = is_truthy(os.getenv("NAUTOBOT_ENABLE_ALPHA_UI", "False"))
|
nautobot/core/settings_funcs.py
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
"""Helper functions to detect settings after app initialization (AKA 'dynamic settings')."""
|
|
2
2
|
|
|
3
3
|
from collections import namedtuple
|
|
4
|
-
|
|
5
|
-
from django.conf import settings
|
|
6
4
|
from functools import lru_cache
|
|
7
5
|
import os
|
|
8
6
|
|
|
7
|
+
from django.conf import settings
|
|
9
8
|
|
|
10
9
|
ConstanceConfigItem = namedtuple("ConstanceConfigItem", ["default", "help_text", "field_type"], defaults=[str])
|
|
11
10
|
|
nautobot/core/signals.py
CHANGED
nautobot/core/tables.py
CHANGED
|
@@ -162,7 +162,7 @@ class ToggleColumn(django_tables2.CheckBoxColumn):
|
|
|
162
162
|
|
|
163
163
|
@property
|
|
164
164
|
def header(self):
|
|
165
|
-
return mark_safe('<input type="checkbox" class="toggle" title="Toggle all" />') # noqa: S308
|
|
165
|
+
return mark_safe('<input type="checkbox" class="toggle" title="Toggle all" />') # noqa: S308 # suspicious-mark-safe-usage, but this is a static string so it's safe
|
|
166
166
|
|
|
167
167
|
|
|
168
168
|
class BooleanColumn(django_tables2.Column):
|
|
@@ -53,6 +53,10 @@ add "&raw" to the end of the URL within a browser.
|
|
|
53
53
|
margin: 0;
|
|
54
54
|
width: 100%;
|
|
55
55
|
}
|
|
56
|
+
.toolbar .dropdown-menu > li > a {
|
|
57
|
+
clear: left;
|
|
58
|
+
margin-right: 120px; /* leave room for the "Save Changes" button if present */
|
|
59
|
+
}
|
|
56
60
|
</style>
|
|
57
61
|
<!-- As Nautobot may be run without internet access, we source these files locally rather than from an online CDN -->
|
|
58
62
|
<link rel="stylesheet"
|
|
@@ -163,7 +167,6 @@ add "&raw" to the end of the URL within a browser.
|
|
|
163
167
|
}
|
|
164
168
|
|
|
165
169
|
function save() {
|
|
166
|
-
graphql_data = getHashParams();
|
|
167
170
|
var url = new URL(window.location.href);
|
|
168
171
|
var id = url.searchParams.get("id");
|
|
169
172
|
var result_window = $(".result-window").find(".CodeMirror-code");
|
|
@@ -179,10 +182,13 @@ add "&raw" to the end of the URL within a browser.
|
|
|
179
182
|
return
|
|
180
183
|
};
|
|
181
184
|
|
|
185
|
+
var graphql_data = JSON.stringify({"query": getHashParams().query});
|
|
186
|
+
|
|
182
187
|
$.ajax({
|
|
183
188
|
url: `{% url 'extras-api:graphqlquery-list' %}${id}/`,
|
|
184
189
|
method: "PATCH",
|
|
185
190
|
headers: {"X-CSRFTOKEN": "{{ csrf_token }}"},
|
|
191
|
+
contentType: "application/json",
|
|
186
192
|
dataType: "json",
|
|
187
193
|
data: graphql_data,
|
|
188
194
|
success: function(data) {
|
|
@@ -19,13 +19,6 @@
|
|
|
19
19
|
<div class="col-xs-4 text-right noprint">
|
|
20
20
|
{% if request.user.is_authenticated %}
|
|
21
21
|
<p class="text-muted">
|
|
22
|
-
{% if "ENABLE_ALPHA_UI"|settings_or_config %}
|
|
23
|
-
{% if request.path|is_new_ui_ready %}
|
|
24
|
-
<i class="mdi mdi-new-box text-primary"></i> <a href="#" onclick="viewNewUI();">View in New UI</a> ·
|
|
25
|
-
{% else %}
|
|
26
|
-
<i class="mdi mdi-new-box"></i> <span style="cursor:not-allowed">View in New UI</span> ·
|
|
27
|
-
{% endif %}
|
|
28
|
-
{% endif %}
|
|
29
22
|
<a href="#theme_modal" data-toggle="modal" data-target="#theme_modal" id="btn-theme-modal"><i class="mdi mdi-theme-light-dark text-primary"></i>Theme</a> ·
|
|
30
23
|
<i class="mdi mdi-book-open-page-variant text-primary"></i>
|
|
31
24
|
{% if settings.BRANDING_URLS.docs %}
|
|
@@ -328,10 +328,6 @@ SECRET_KEY = os.getenv("NAUTOBOT_SECRET_KEY", "{{ secret_key }}")
|
|
|
328
328
|
# EXTERNAL_AUTH_DEFAULT_GROUPS = []
|
|
329
329
|
# EXTERNAL_AUTH_DEFAULT_PERMISSIONS = {}
|
|
330
330
|
|
|
331
|
-
# Show feedback button on NewUI sidebar menu (defualt: True)
|
|
332
|
-
#
|
|
333
|
-
# FEEDBACK_BUTTON_ENABLED = True
|
|
334
|
-
|
|
335
331
|
# Directory where cloned Git repositories will be stored.
|
|
336
332
|
#
|
|
337
333
|
# GIT_ROOT = os.getenv("NAUTOBOT_GIT_ROOT", os.path.join(NAUTOBOT_ROOT, "git").rstrip("/"))
|