nautobot 3.0.0a3__py3-none-any.whl → 3.0.0rc1__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/apps/choices.py +4 -0
- nautobot/apps/ui.py +4 -0
- nautobot/apps/utils.py +8 -0
- nautobot/circuits/tests/integration/test_circuits_bulk_operations.py +0 -3
- nautobot/circuits/views.py +6 -2
- nautobot/core/api/serializers.py +1 -1
- nautobot/core/api/urls.py +1 -0
- nautobot/core/api/views.py +4 -0
- nautobot/core/choices.py +1 -1
- nautobot/core/cli/bootstrap_v3_to_v5.py +36 -13
- nautobot/core/cli/migrate_deprecated_templates.py +36 -9
- nautobot/core/filters.py +4 -0
- nautobot/core/forms/__init__.py +2 -0
- nautobot/core/forms/widgets.py +21 -2
- nautobot/core/jobs/__init__.py +56 -0
- nautobot/core/management/commands/generate_test_data.py +3 -3
- nautobot/core/models/__init__.py +11 -0
- nautobot/core/models/utils.py +1 -1
- nautobot/core/settings.py +17 -7
- nautobot/core/settings.yaml +4 -26
- nautobot/core/templates/admin/base.html +1 -2
- nautobot/core/templates/admin/change_list.html +9 -12
- nautobot/core/templates/base_django.html +1 -2
- nautobot/core/templates/components/panel/header_extra_content_table.html +1 -1
- nautobot/core/templates/components/tab/content_wrapper.html +4 -4
- nautobot/core/templates/echarts/echarts.html +21 -8
- nautobot/core/templates/generic/object_bulk_create.html +2 -2
- nautobot/core/templates/generic/object_bulk_delete.html +1 -1
- nautobot/core/templates/generic/object_bulk_edit.html +1 -1
- nautobot/core/templates/generic/object_bulk_import.html +1 -1
- nautobot/core/templates/generic/object_delete.html +1 -1
- nautobot/core/templates/generic/object_detail.html +1 -1
- nautobot/core/templates/generic/object_edit.html +1 -1
- nautobot/core/templates/generic/object_retrieve.html +2 -2
- nautobot/core/templates/graphene/graphiql.html +0 -1
- nautobot/core/templates/inc/footer.html +3 -1
- nautobot/core/templates/inc/header.html +10 -0
- nautobot/core/templates/inc/media.html +14 -0
- nautobot/core/templates/inc/nav_menu.html +1 -8
- nautobot/core/templates/inc/object_details_advanced_panel.html +2 -2
- nautobot/core/templates/nautobot_config.py.j2 +0 -6
- nautobot/core/templates/rest_framework/api.html +103 -2
- nautobot/core/templates/utilities/templatetags/filter_form_drawer.html +33 -0
- nautobot/core/templates/utilities/theme_preview.html +3 -0
- nautobot/core/templates/widgets/number_input_with_choices.html +44 -0
- nautobot/core/templatetags/helpers.py +24 -12
- nautobot/core/testing/integration.py +24 -13
- nautobot/core/testing/utils.py +18 -4
- nautobot/core/testing/views.py +104 -17
- nautobot/core/tests/integration/test_filters.py +48 -11
- nautobot/core/tests/integration/test_theme.py +22 -21
- nautobot/core/tests/nautobot_config.py +3 -0
- nautobot/core/tests/runner.py +1 -2
- nautobot/core/tests/test_breadcrumbs.py +21 -21
- nautobot/core/tests/test_jobs.py +73 -6
- nautobot/core/tests/test_renderers.py +59 -0
- nautobot/core/tests/test_settings_schema.py +1 -0
- nautobot/core/tests/test_templatetags_helpers.py +9 -0
- nautobot/core/tests/test_titles.py +0 -16
- nautobot/core/tests/test_ui.py +122 -3
- nautobot/core/tests/test_utils.py +41 -1
- nautobot/core/ui/breadcrumbs.py +68 -17
- nautobot/core/ui/bulk_buttons.py +1 -1
- nautobot/core/ui/choices.py +49 -65
- nautobot/core/ui/echarts.py +15 -20
- nautobot/core/ui/object_detail.py +54 -46
- nautobot/core/ui/titles.py +3 -6
- nautobot/core/urls.py +8 -8
- nautobot/core/utils/filtering.py +11 -1
- nautobot/core/utils/lookup.py +46 -0
- nautobot/core/views/mixins.py +31 -20
- nautobot/core/views/renderers.py +2 -3
- nautobot/data_validation/migrations/0002_data_migration_from_app.py +3 -2
- nautobot/dcim/api/serializers.py +3 -0
- nautobot/dcim/choices.py +49 -0
- nautobot/dcim/constants.py +7 -0
- nautobot/dcim/factory.py +1 -1
- nautobot/dcim/filters.py +13 -1
- nautobot/dcim/forms.py +89 -3
- nautobot/dcim/migrations/0075_interface_duplex_interface_speed_and_more.py +32 -0
- nautobot/dcim/migrations/{0075_add_deviceclusterassignment.py → 0076_add_deviceclusterassignment.py} +1 -1
- nautobot/dcim/migrations/{0076_device_cluster_to_clusters_data_migration.py → 0077_device_cluster_to_clusters_data_migration.py} +1 -1
- nautobot/dcim/migrations/{0077_remove_device_cluster.py → 0078_remove_device_cluster.py} +1 -1
- nautobot/dcim/migrations/{0078_remove_device_location_tenant_name_uniqueness.py → 0079_remove_device_location_tenant_name_uniqueness.py} +1 -1
- nautobot/dcim/migrations/{0079_device_name_data_migration.py → 0080_device_name_data_migration.py} +1 -1
- nautobot/dcim/migrations/0081_alter_device_device_redundancy_group_priority_and_more.py +25 -0
- nautobot/dcim/models/device_component_templates.py +33 -1
- nautobot/dcim/models/device_components.py +22 -1
- nautobot/dcim/models/devices.py +17 -4
- nautobot/dcim/tables/devices.py +15 -0
- nautobot/dcim/tables/devicetypes.py +8 -1
- nautobot/dcim/tables/racks.py +0 -2
- nautobot/dcim/tables/template_code.py +1 -1
- nautobot/dcim/templates/dcim/cable_trace.html +0 -2
- nautobot/dcim/templates/dcim/consoleport.html +1 -1
- nautobot/dcim/templates/dcim/consoleserverport.html +1 -1
- nautobot/dcim/templates/dcim/devicebay.html +1 -1
- nautobot/dcim/templates/dcim/frontport.html +1 -1
- nautobot/dcim/templates/dcim/inc/devicetype_component_table.html +1 -1
- nautobot/dcim/templates/dcim/inc/moduletype_component_table.html +1 -1
- nautobot/dcim/templates/dcim/inc/rack_elevation.html +1 -1
- nautobot/dcim/templates/dcim/interface.html +9 -1
- nautobot/dcim/templates/dcim/interface_edit.html +2 -0
- nautobot/dcim/templates/dcim/inventoryitem.html +1 -1
- nautobot/dcim/templates/dcim/module_consoleports.html +1 -1
- nautobot/dcim/templates/dcim/module_consoleserverports.html +1 -1
- nautobot/dcim/templates/dcim/module_frontports.html +1 -1
- nautobot/dcim/templates/dcim/module_interfaces.html +1 -1
- nautobot/dcim/templates/dcim/module_modulebays.html +1 -1
- nautobot/dcim/templates/dcim/module_poweroutlets.html +1 -1
- nautobot/dcim/templates/dcim/module_powerports.html +1 -1
- nautobot/dcim/templates/dcim/module_rearports.html +1 -1
- nautobot/dcim/templates/dcim/moduletype_list.html +2 -2
- nautobot/dcim/templates/dcim/poweroutlet.html +1 -1
- nautobot/dcim/templates/dcim/powerport.html +1 -1
- nautobot/dcim/templates/dcim/rack_elevation_list.html +1 -1
- nautobot/dcim/templates/dcim/rack_retrieve.html +0 -11
- nautobot/dcim/templates/dcim/rearport.html +1 -1
- nautobot/dcim/templates/dcim/trace/cable.html +1 -1
- nautobot/dcim/templates/dcim/virtualchassis_update.html +1 -1
- nautobot/dcim/tests/integration/test_controller.py +3 -6
- nautobot/dcim/tests/integration/test_controller_managed_device_group.py +1 -5
- nautobot/dcim/tests/integration/test_create_device.py +0 -2
- nautobot/dcim/tests/integration/test_device_bulk_operations.py +1 -3
- nautobot/dcim/tests/integration/test_fileinputpicker.py +6 -10
- nautobot/dcim/tests/integration/test_location_bulk_operations.py +0 -2
- nautobot/dcim/tests/integration/test_module_bay_position.py +3 -4
- nautobot/dcim/tests/test_api.py +186 -6
- nautobot/dcim/tests/test_filters.py +43 -1
- nautobot/dcim/tests/test_forms.py +110 -8
- nautobot/dcim/tests/test_graphql.py +44 -1
- nautobot/dcim/tests/test_models.py +265 -0
- nautobot/dcim/tests/test_tables.py +160 -0
- nautobot/dcim/tests/test_views.py +69 -7
- nautobot/dcim/views.py +232 -126
- nautobot/extras/api/views.py +51 -44
- nautobot/extras/datasources/git.py +3 -1
- nautobot/extras/filters.py +19 -2
- nautobot/extras/forms/forms.py +9 -2
- nautobot/extras/jobs.py +2 -0
- nautobot/extras/jobs_ui.py +4 -3
- nautobot/extras/management/__init__.py +2 -0
- nautobot/extras/management/commands/refresh_dynamic_group_member_caches.py +4 -1
- nautobot/extras/migrations/0131_configcontext_device_families.py +18 -0
- nautobot/extras/models/approvals.py +11 -1
- nautobot/extras/models/change_logging.py +4 -0
- nautobot/extras/models/jobs.py +1 -3
- nautobot/extras/models/models.py +10 -2
- nautobot/extras/plugins/marketplace_manifest.yml +49 -1
- nautobot/extras/plugins/views.py +0 -5
- nautobot/extras/querysets.py +8 -0
- nautobot/extras/tables.py +12 -0
- nautobot/extras/templates/django_ajax_tables/ajax_wrapper.html +2 -0
- nautobot/extras/templates/extras/configcontext_update.html +1 -0
- nautobot/extras/templates/extras/dynamicgroup_update.html +1 -1
- nautobot/extras/templates/extras/objectchange_retrieve.html +0 -2
- nautobot/extras/templates/extras/plugin_detail.html +3 -3
- nautobot/extras/templates/extras/secret_create.html +1 -1
- nautobot/extras/tests/integration/test_computedfields.py +8 -9
- nautobot/extras/tests/integration/test_customfields.py +1 -3
- nautobot/extras/tests/integration/test_dynamicgroups.py +7 -8
- nautobot/extras/tests/integration/test_relationships.py +0 -2
- nautobot/extras/tests/test_api.py +63 -0
- nautobot/extras/tests/test_changelog.py +24 -2
- nautobot/extras/tests/test_filters.py +36 -3
- nautobot/extras/tests/test_models.py +38 -2
- nautobot/extras/tests/test_utils.py +3 -4
- nautobot/extras/tests/test_views.py +22 -83
- nautobot/extras/urls.py +0 -14
- nautobot/extras/views.py +83 -52
- nautobot/ipam/filters.py +26 -0
- nautobot/ipam/tables.py +6 -0
- nautobot/ipam/templates/ipam/namespace_ip_addresses.html +1 -1
- nautobot/ipam/templates/ipam/namespace_prefixes.html +1 -1
- nautobot/ipam/templates/ipam/namespace_vrfs.html +1 -1
- nautobot/ipam/tests/test_filters.py +26 -1
- nautobot/ipam/tests/test_models.py +1 -1
- nautobot/ipam/views.py +9 -7
- nautobot/load_balancers/__init__.py +0 -0
- nautobot/load_balancers/api/__init__.py +1 -0
- nautobot/load_balancers/api/serializers.py +75 -0
- nautobot/load_balancers/api/urls.py +23 -0
- nautobot/load_balancers/api/views.py +61 -0
- nautobot/load_balancers/apps.py +17 -0
- nautobot/load_balancers/choices.py +167 -0
- nautobot/load_balancers/filters.py +225 -0
- nautobot/load_balancers/forms.py +532 -0
- nautobot/load_balancers/management/commands/__init__.py +0 -0
- nautobot/load_balancers/management/commands/generate_load_balancer_models_test_data.py +38 -0
- nautobot/load_balancers/migrations/0001_initial.py +465 -0
- nautobot/load_balancers/migrations/0002_create_default_statuses_pool_members.py +31 -0
- nautobot/load_balancers/migrations/__init__.py +0 -0
- nautobot/load_balancers/models.py +423 -0
- nautobot/load_balancers/navigation.py +80 -0
- nautobot/load_balancers/tables.py +255 -0
- nautobot/load_balancers/tests/__init__.py +474 -0
- nautobot/load_balancers/tests/test_api.py +353 -0
- nautobot/load_balancers/tests/test_filters.py +134 -0
- nautobot/load_balancers/tests/test_forms.py +266 -0
- nautobot/load_balancers/tests/test_models.py +195 -0
- nautobot/load_balancers/tests/test_views.py +229 -0
- nautobot/load_balancers/urls.py +17 -0
- nautobot/load_balancers/views.py +248 -0
- nautobot/project-static/dist/css/github-dark.min.css +10 -0
- nautobot/project-static/dist/css/github.min.css +10 -0
- nautobot/project-static/dist/css/nautobot.css +1 -11
- nautobot/project-static/dist/css/nautobot.css.map +1 -1
- nautobot/project-static/dist/js/libraries.js +1 -1
- nautobot/project-static/dist/js/libraries.js.map +1 -1
- nautobot/project-static/dist/js/nautobot.js +1 -1
- nautobot/project-static/dist/js/nautobot.js.map +1 -1
- nautobot/project-static/js/forms.js +13 -0
- nautobot/project-static/nautobot-icons/bus-globe.svg +3 -0
- nautobot/project-static/nautobot-icons/bus-shield-check.svg +3 -0
- nautobot/project-static/nautobot-icons/bus-shield.svg +3 -0
- nautobot/ui/package-lock.json +87 -4
- nautobot/ui/package.json +2 -1
- nautobot/ui/src/js/nautobot.js +0 -1
- nautobot/ui/src/js/select2.js +53 -2
- nautobot/ui/src/scss/nautobot.scss +51 -2
- nautobot/ui/webpack.config.js +13 -0
- nautobot/users/templates/users/preferences.html +11 -2
- nautobot/virtualization/filters.py +6 -1
- nautobot/virtualization/tests/test_filters.py +10 -1
- nautobot/virtualization/tests/test_models.py +1 -0
- nautobot/virtualization/views.py +4 -1
- nautobot/vpn/factory.py +25 -15
- nautobot/vpn/filters.py +1 -0
- nautobot/vpn/forms.py +1 -0
- nautobot/vpn/migrations/0001_initial.py +1 -1
- nautobot/vpn/models.py +16 -8
- nautobot/vpn/tables.py +5 -2
- nautobot/vpn/tests/test_api.py +0 -5
- nautobot/vpn/tests/test_forms.py +1 -2
- nautobot/vpn/tests/test_models.py +57 -7
- nautobot/vpn/tests/test_views.py +22 -3
- nautobot/vpn/views.py +78 -20
- {nautobot-3.0.0a3.dist-info → nautobot-3.0.0rc1.dist-info}/METADATA +4 -4
- {nautobot-3.0.0a3.dist-info → nautobot-3.0.0rc1.dist-info}/RECORD +243 -352
- nautobot/circuits/templates/circuits/circuit.html +0 -2
- nautobot/circuits/templates/circuits/circuit_edit.html +0 -2
- nautobot/circuits/templates/circuits/circuit_retrieve.html +0 -2
- nautobot/circuits/templates/circuits/circuit_update.html +0 -1
- nautobot/circuits/templates/circuits/circuittermination.html +0 -2
- nautobot/circuits/templates/circuits/circuittermination_edit.html +0 -2
- nautobot/circuits/templates/circuits/circuittermination_retrieve.html +0 -2
- nautobot/circuits/templates/circuits/circuittermination_update.html +0 -1
- nautobot/circuits/templates/circuits/circuittype.html +0 -2
- nautobot/circuits/templates/circuits/circuittype_retrieve.html +0 -2
- nautobot/circuits/templates/circuits/inc/circuit_termination.html +0 -85
- nautobot/circuits/templates/circuits/provider.html +0 -2
- nautobot/circuits/templates/circuits/provider_edit.html +0 -2
- nautobot/circuits/templates/circuits/provider_retrieve.html +0 -1
- nautobot/circuits/templates/circuits/provider_update.html +0 -1
- nautobot/circuits/templates/circuits/providernetwork.html +0 -2
- nautobot/circuits/templates/circuits/providernetwork_retrieve.html +0 -2
- nautobot/cloud/templates/cloud/cloudaccount_retrieve.html +0 -2
- nautobot/cloud/templates/cloud/cloudnetwork_retrieve.html +0 -2
- nautobot/cloud/templates/cloud/cloudresourcetype_retrieve.html +0 -2
- nautobot/cloud/templates/cloud/cloudservice_retrieve.html +0 -2
- nautobot/core/templates/buttons/import.html +0 -9
- nautobot/data_validation/templates/data_validation/datacompliance_retrieve.html +0 -1
- nautobot/dcim/templates/dcim/cable.html +0 -2
- nautobot/dcim/templates/dcim/cable_edit.html +0 -2
- nautobot/dcim/templates/dcim/controller/base.html +0 -2
- nautobot/dcim/templates/dcim/controller_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/controller_wirelessnetworks.html +0 -2
- nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/device/base.html +0 -2
- nautobot/dcim/templates/dcim/device/consoleports.html +0 -2
- nautobot/dcim/templates/dcim/device/consoleserverports.html +0 -2
- nautobot/dcim/templates/dcim/device/devicebays.html +0 -2
- nautobot/dcim/templates/dcim/device/frontports.html +0 -2
- nautobot/dcim/templates/dcim/device/interfaces.html +0 -2
- nautobot/dcim/templates/dcim/device/inventory.html +0 -2
- nautobot/dcim/templates/dcim/device/modulebays.html +0 -2
- nautobot/dcim/templates/dcim/device/poweroutlets.html +0 -2
- nautobot/dcim/templates/dcim/device/powerports.html +0 -2
- nautobot/dcim/templates/dcim/device/rearports.html +0 -2
- nautobot/dcim/templates/dcim/device/wireless.html +0 -2
- nautobot/dcim/templates/dcim/device_component.html +0 -2
- nautobot/dcim/templates/dcim/device_edit.html +0 -2
- nautobot/dcim/templates/dcim/devicefamily_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/deviceredundancygroup_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/devicetype.html +0 -2
- nautobot/dcim/templates/dcim/devicetype_edit.html +0 -2
- nautobot/dcim/templates/dcim/devicetype_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/inc/device_napalm_tabs.html +0 -1
- nautobot/dcim/templates/dcim/interfaceredundancygroup_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/location.html +0 -2
- nautobot/dcim/templates/dcim/location_edit.html +0 -2
- nautobot/dcim/templates/dcim/location_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/locationtype.html +0 -2
- nautobot/dcim/templates/dcim/locationtype_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/manufacturer.html +0 -2
- nautobot/dcim/templates/dcim/modulebay_retrieve.html +0 -1
- nautobot/dcim/templates/dcim/platform.html +0 -2
- nautobot/dcim/templates/dcim/powerfeed.html +0 -2
- nautobot/dcim/templates/dcim/powerfeed_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/powerpanel.html +0 -2
- nautobot/dcim/templates/dcim/powerpanel_edit.html +0 -2
- nautobot/dcim/templates/dcim/powerpanel_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/rack.html +0 -2
- nautobot/dcim/templates/dcim/rack_edit.html +0 -2
- nautobot/dcim/templates/dcim/rackgroup.html +0 -2
- nautobot/dcim/templates/dcim/rackreservation.html +0 -2
- nautobot/dcim/templates/dcim/softwareimagefile_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/softwareversion_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/virtualchassis.html +0 -2
- nautobot/dcim/templates/dcim/virtualchassis_add.html +0 -2
- nautobot/dcim/templates/dcim/virtualchassis_edit.html +0 -2
- nautobot/dcim/templates/dcim/virtualchassis_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +0 -2
- nautobot/dcim/ui.py +0 -29
- nautobot/extras/templates/extras/computedfield.html +0 -2
- nautobot/extras/templates/extras/computedfield_retrieve.html +0 -2
- nautobot/extras/templates/extras/configcontext.html +0 -2
- nautobot/extras/templates/extras/configcontext_edit.html +0 -2
- nautobot/extras/templates/extras/configcontext_retrieve.html +0 -2
- nautobot/extras/templates/extras/configcontextschema.html +0 -2
- nautobot/extras/templates/extras/configcontextschema_edit.html +0 -2
- nautobot/extras/templates/extras/contact_retrieve.html +0 -2
- nautobot/extras/templates/extras/customfield.html +0 -2
- nautobot/extras/templates/extras/customfield_edit.html +0 -2
- nautobot/extras/templates/extras/customfield_retrieve.html +0 -2
- nautobot/extras/templates/extras/customlink.html +0 -2
- nautobot/extras/templates/extras/dynamicgroup.html +0 -2
- nautobot/extras/templates/extras/dynamicgroup_edit.html +0 -2
- nautobot/extras/templates/extras/exporttemplate.html +0 -2
- nautobot/extras/templates/extras/gitrepository.html +0 -2
- nautobot/extras/templates/extras/gitrepository_object_edit.html +0 -2
- nautobot/extras/templates/extras/graphqlquery.html +0 -2
- nautobot/extras/templates/extras/graphqlquery_list.html +0 -1
- nautobot/extras/templates/extras/graphqlquery_retrieve.html +0 -2
- nautobot/extras/templates/extras/job_detail.html +0 -2
- nautobot/extras/templates/extras/jobbutton_retrieve.html +0 -2
- nautobot/extras/templates/extras/jobhook.html +0 -2
- nautobot/extras/templates/extras/jobqueue_retrieve.html +0 -2
- nautobot/extras/templates/extras/jobresult.html +0 -2
- nautobot/extras/templates/extras/metadatatype_retrieve.html +0 -2
- nautobot/extras/templates/extras/note.html +0 -2
- nautobot/extras/templates/extras/note_retrieve.html +0 -1
- nautobot/extras/templates/extras/object_changelog.html +0 -2
- nautobot/extras/templates/extras/object_notes.html +0 -2
- nautobot/extras/templates/extras/objectchange.html +0 -2
- nautobot/extras/templates/extras/objectchange_list.html +0 -3
- nautobot/extras/templates/extras/relationship.html +0 -1
- nautobot/extras/templates/extras/secret.html +0 -1
- nautobot/extras/templates/extras/secret_edit.html +0 -1
- nautobot/extras/templates/extras/secretsgroup.html +0 -2
- nautobot/extras/templates/extras/secretsgroup_edit.html +0 -2
- nautobot/extras/templates/extras/secretsgroup_retrieve.html +0 -2
- nautobot/extras/templates/extras/status.html +0 -2
- nautobot/extras/templates/extras/tag.html +0 -2
- nautobot/extras/templates/extras/tag_edit.html +0 -2
- nautobot/extras/templates/extras/tag_retrieve.html +0 -2
- nautobot/extras/templates/extras/team_retrieve.html +0 -2
- nautobot/ipam/templates/ipam/namespace_retrieve.html +0 -1
- nautobot/ipam/templates/ipam/prefix.html +0 -2
- nautobot/ipam/templates/ipam/prefix_edit.html +0 -1
- nautobot/ipam/templates/ipam/prefix_retrieve.html +0 -2
- nautobot/ipam/templates/ipam/rir.html +0 -2
- nautobot/ipam/templates/ipam/routetarget.html +0 -1
- nautobot/ipam/templates/ipam/service.html +0 -2
- nautobot/ipam/templates/ipam/service_edit.html +0 -2
- nautobot/ipam/templates/ipam/service_retrieve.html +0 -2
- nautobot/ipam/templates/ipam/vlan.html +0 -2
- nautobot/ipam/templates/ipam/vlan_edit.html +0 -2
- nautobot/ipam/templates/ipam/vlan_retrieve.html +0 -2
- nautobot/ipam/templates/ipam/vlangroup.html +0 -2
- nautobot/ipam/templates/ipam/vrf.html +0 -1
- nautobot/tenancy/templates/tenancy/tenant.html +0 -2
- nautobot/tenancy/templates/tenancy/tenant_edit.html +0 -2
- nautobot/tenancy/templates/tenancy/tenantgroup.html +0 -2
- nautobot/tenancy/templates/tenancy/tenantgroup_retrieve.html +0 -1
- nautobot/virtualization/templates/virtualization/clustergroup.html +0 -2
- nautobot/virtualization/templates/virtualization/clustertype.html +0 -2
- nautobot/virtualization/templates/virtualization/virtualmachine.html +0 -2
- nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +0 -2
- nautobot/virtualization/templates/virtualization/virtualmachine_retrieve.html +0 -2
- nautobot/vpn/templates/vpn/vpnprofile.html +0 -2
- nautobot/wireless/templates/wireless/radioprofile_retrieve.html +0 -2
- nautobot/wireless/templates/wireless/supporteddatarate_retrieve.html +0 -2
- nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +0 -2
- {nautobot-3.0.0a3.dist-info → nautobot-3.0.0rc1.dist-info}/LICENSE.txt +0 -0
- {nautobot-3.0.0a3.dist-info → nautobot-3.0.0rc1.dist-info}/NOTICE +0 -0
- {nautobot-3.0.0a3.dist-info → nautobot-3.0.0rc1.dist-info}/WHEEL +0 -0
- {nautobot-3.0.0a3.dist-info → nautobot-3.0.0rc1.dist-info}/entry_points.txt +0 -0
|
@@ -102,7 +102,7 @@ TREE_LINK = """
|
|
|
102
102
|
|
|
103
103
|
POWERFEED_CABLE = """
|
|
104
104
|
<a href="{{ value.get_absolute_url }}">{{ value }}</a>
|
|
105
|
-
<a href="{% url 'dcim:powerfeed_trace' pk=record.pk %}" class="btn btn-primary btn-
|
|
105
|
+
<a href="{% url 'dcim:powerfeed_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace">
|
|
106
106
|
<i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i>
|
|
107
107
|
</a>
|
|
108
108
|
"""
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<div class="card-footer d-print-none">
|
|
11
11
|
{% if table.rows %}
|
|
12
12
|
<button type="submit" name="_edit" formaction="{% url table.Meta.model|viewname:"bulk_rename" %}?return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-warning">
|
|
13
|
-
<span class="mdi mdi-
|
|
13
|
+
<span class="mdi mdi-rename" aria-hidden="true"></span> Rename
|
|
14
14
|
</button>
|
|
15
15
|
<button type="submit" name="_edit" formaction="{% url table.Meta.model|viewname:"bulk_edit" %}?return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-warning">
|
|
16
16
|
<span class="mdi mdi-pencil" aria-hidden="true"></span> Edit
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<div class="card-footer d-print-none">
|
|
11
11
|
{% if table.rows %}
|
|
12
12
|
<button type="submit" name="_edit" formaction="{% url table.Meta.model|viewname:"bulk_rename" %}?return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-warning">
|
|
13
|
-
<span class="mdi mdi-
|
|
13
|
+
<span class="mdi mdi-rename" aria-hidden="true"></span> Rename
|
|
14
14
|
</button>
|
|
15
15
|
<button type="submit" name="_edit" formaction="{% url table.Meta.model|viewname:"bulk_edit" %}?return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-warning">
|
|
16
16
|
<span class="mdi mdi-pencil" aria-hidden="true"></span> Edit
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<div style="margin-left: -30px">
|
|
2
|
-
<object data="{% url 'dcim-api:rack-elevation' pk=object.pk %}?face={{face}}&render=svg" class="rack_elevation"></object>
|
|
2
|
+
<object data="{% url 'dcim-api:rack-elevation' pk=object.pk %}?face={{face}}&render=svg" class="rack_elevation invert-in-dark-mode"></object>
|
|
3
3
|
</div>
|
|
4
4
|
<div class="text-center text-small">
|
|
5
5
|
<a href="{% url 'dcim-api:rack-elevation' pk=object.pk %}?face={{face}}&render=svg" class="rack_elevation_save_svg_link" download="rack_{{ face }}_{{ object }}.svg">
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
{% extends '
|
|
1
|
+
{% extends 'generic/object_retrieve.html' %}
|
|
2
2
|
{% load helpers %}
|
|
3
3
|
|
|
4
4
|
{% block content_left_page %}
|
|
@@ -44,6 +44,14 @@
|
|
|
44
44
|
<td>Type</td>
|
|
45
45
|
<td>{{ object.get_type_display }}</td>
|
|
46
46
|
</tr>
|
|
47
|
+
<tr>
|
|
48
|
+
<td>Speed</td>
|
|
49
|
+
<td>{{ object.speed|humanize_speed|placeholder }}</td>
|
|
50
|
+
</tr>
|
|
51
|
+
<tr>
|
|
52
|
+
<td>Duplex</td>
|
|
53
|
+
<td>{{ object.get_duplex_display|placeholder }}</td>
|
|
54
|
+
</tr>
|
|
47
55
|
<tr>
|
|
48
56
|
<td>Enabled</td>
|
|
49
57
|
<td>{{ object.enabled | render_boolean }}</td>
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
{% render_field form.status %}
|
|
13
13
|
{% render_field form.role %}
|
|
14
14
|
{% render_field form.type %}
|
|
15
|
+
{% render_field form.speed %}
|
|
16
|
+
{% render_field form.duplex %}
|
|
15
17
|
{% render_field form.enabled %}
|
|
16
18
|
{% render_field form.parent_interface %}
|
|
17
19
|
{% render_field form.bridge %}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<div class="card-footer d-print-none">
|
|
18
18
|
{% if perms.dcim.change_consoleport %}
|
|
19
19
|
<button type="submit" name="_rename" formaction="{% url 'dcim:consoleport_bulk_rename' %}?return_url={% url 'dcim:module_consoleports' pk=object.pk %}" class="btn btn-warning btn-sm">
|
|
20
|
-
<span class="mdi mdi-
|
|
20
|
+
<span class="mdi mdi-rename" aria-hidden="true"></span> Rename
|
|
21
21
|
</button>
|
|
22
22
|
<button type="submit" name="_edit" formaction="{% url 'dcim:consoleport_bulk_edit' %}?module={{ object.pk }}&return_url={% url 'dcim:module_consoleports' pk=object.pk %}" class="btn btn-warning btn-sm">
|
|
23
23
|
<span class="mdi mdi-pencil" aria-hidden="true"></span> Edit
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<div class="card-footer d-print-none">
|
|
18
18
|
{% if perms.dcim.change_consoleserverport %}
|
|
19
19
|
<button type="submit" name="_rename" formaction="{% url 'dcim:consoleserverport_bulk_rename' %}?return_url={% url 'dcim:module_consoleserverports' pk=object.pk %}" class="btn btn-warning btn-sm">
|
|
20
|
-
<span class="mdi mdi-
|
|
20
|
+
<span class="mdi mdi-rename" aria-hidden="true"></span> Rename
|
|
21
21
|
</button>
|
|
22
22
|
<button type="submit" name="_edit" formaction="{% url 'dcim:consoleserverport_bulk_edit' %}?module={{ object.pk }}&return_url={% url 'dcim:module_consoleserverports' pk=object.pk %}" class="btn btn-warning btn-sm">
|
|
23
23
|
<span class="mdi mdi-pencil" aria-hidden="true"></span> Edit
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<div class="card-footer d-print-none">
|
|
18
18
|
{% if perms.dcim.change_frontport %}
|
|
19
19
|
<button type="submit" name="_rename" formaction="{% url 'dcim:frontport_bulk_rename' %}?return_url={% url 'dcim:module_frontports' pk=object.pk %}" class="btn btn-warning btn-sm">
|
|
20
|
-
<span class="mdi mdi-
|
|
20
|
+
<span class="mdi mdi-rename" aria-hidden="true"></span> Rename
|
|
21
21
|
</button>
|
|
22
22
|
<button type="submit" name="_edit" formaction="{% url 'dcim:frontport_bulk_edit' %}?module={{ object.pk }}&return_url={% url 'dcim:module_frontports' pk=object.pk %}" class="btn btn-warning btn-sm">
|
|
23
23
|
<span class="mdi mdi-pencil" aria-hidden="true"></span> Edit
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
<div class="card-footer d-print-none">
|
|
21
21
|
{% if perms.dcim.change_interface %}
|
|
22
22
|
<button type="submit" name="_rename" formaction="{% url 'dcim:interface_bulk_rename' %}?return_url={% url 'dcim:module_interfaces' pk=object.pk %}" class="btn btn-warning btn-sm">
|
|
23
|
-
<span class="mdi mdi-
|
|
23
|
+
<span class="mdi mdi-rename" aria-hidden="true"></span> Rename
|
|
24
24
|
</button>
|
|
25
25
|
<button type="submit" name="_edit" formaction="{% url 'dcim:interface_bulk_edit' %}?return_url={% url 'dcim:module_interfaces' pk=object.pk %}" class="btn btn-warning btn-sm">
|
|
26
26
|
<span class="mdi mdi-pencil" aria-hidden="true"></span> Edit
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<div class="card-footer d-print-none">
|
|
18
18
|
{% if perms.dcim.change_modulebay %}
|
|
19
19
|
<button type="submit" name="_rename" formaction="{% url 'dcim:modulebay_bulk_rename' %}?return_url={% url 'dcim:module_modulebays' pk=object.pk %}" class="btn btn-warning btn-sm">
|
|
20
|
-
<span class="mdi mdi-
|
|
20
|
+
<span class="mdi mdi-rename" aria-hidden="true"></span> Rename
|
|
21
21
|
</button>
|
|
22
22
|
<button type="submit" name="_edit" formaction="{% url 'dcim:modulebay_bulk_edit' %}?parent_module={{ object.pk }}&return_url={% url 'dcim:module_modulebays' pk=object.pk %}" class="btn btn-warning btn-sm">
|
|
23
23
|
<span class="mdi mdi-pencil" aria-hidden="true"></span> Edit
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<div class="card-footer d-print-none">
|
|
18
18
|
{% if perms.dcim.change_poweroutlet %}
|
|
19
19
|
<button type="submit" name="_rename" formaction="{% url 'dcim:poweroutlet_bulk_rename' %}?return_url={% url 'dcim:module_poweroutlets' pk=object.pk %}" class="btn btn-warning btn-sm">
|
|
20
|
-
<span class="mdi mdi-
|
|
20
|
+
<span class="mdi mdi-rename" aria-hidden="true"></span> Rename
|
|
21
21
|
</button>
|
|
22
22
|
<button type="submit" name="_edit" formaction="{% url 'dcim:poweroutlet_bulk_edit' %}?module={{ object.pk }}&return_url={% url 'dcim:module_poweroutlets' pk=object.pk %}" class="btn btn-warning btn-sm">
|
|
23
23
|
<span class="mdi mdi-pencil" aria-hidden="true"></span> Edit
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<div class="card-footer d-print-none">
|
|
18
18
|
{% if perms.dcim.change_powerport %}
|
|
19
19
|
<button type="submit" name="_rename" formaction="{% url 'dcim:powerport_bulk_rename' %}?return_url={% url 'dcim:module_powerports' pk=object.pk %}" class="btn btn-warning btn-sm">
|
|
20
|
-
<span class="mdi mdi-
|
|
20
|
+
<span class="mdi mdi-rename" aria-hidden="true"></span> Rename
|
|
21
21
|
</button>
|
|
22
22
|
<button type="submit" name="_edit" formaction="{% url 'dcim:powerport_bulk_edit' %}?module={{ object.pk }}&return_url={% url 'dcim:module_powerports' pk=object.pk %}" class="btn btn-warning btn-sm">
|
|
23
23
|
<span class="mdi mdi-pencil" aria-hidden="true"></span> Edit
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<div class="card-footer d-print-none">
|
|
18
18
|
{% if perms.dcim.change_rearport %}
|
|
19
19
|
<button type="submit" name="_rename" formaction="{% url 'dcim:rearport_bulk_rename' %}?return_url={% url 'dcim:module_rearports' pk=object.pk %}" class="btn btn-warning btn-sm">
|
|
20
|
-
<span class="mdi mdi-
|
|
20
|
+
<span class="mdi mdi-rename" aria-hidden="true"></span> Rename
|
|
21
21
|
</button>
|
|
22
22
|
<button type="submit" name="_edit" formaction="{% url 'dcim:rearport_bulk_edit' %}?module={{ object.pk }}&return_url={% url 'dcim:module_rearports' pk=object.pk %}" class="btn btn-warning btn-sm">
|
|
23
23
|
<span class="mdi mdi-pencil" aria-hidden="true"></span> Edit
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
{% load buttons %}
|
|
3
3
|
|
|
4
4
|
{% block import_list_element %}
|
|
5
|
-
<li><a href="{% url 'dcim:moduletype_import' %}">
|
|
5
|
+
<li><a class="dropdown-item" href="{% url 'dcim:moduletype_import' %}">
|
|
6
6
|
<span class="mdi mdi-database-import text-secondary" aria-hidden="true"></span> Import from JSON/YAML (single record)
|
|
7
7
|
</a></li>
|
|
8
|
-
<li><a href="{% job_import_url content_type %}">
|
|
8
|
+
<li><a class="dropdown-item" href="{% job_import_url content_type %}">
|
|
9
9
|
<span class="mdi mdi-database-import text-secondary" aria-hidden="true"></span> Import from CSV (multiple records)
|
|
10
10
|
</a></li>
|
|
11
11
|
{% endblock import_list_element %}
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
<div class="text-center">
|
|
41
41
|
<strong>{{ rack|hyperlinked_object }}</strong>
|
|
42
42
|
{% if rack.role %}
|
|
43
|
-
<br /><small class="
|
|
43
|
+
<br /><small class="badge" style="color: {{ rack.role.color|fgcolor }}; background-color: #{{ rack.role.color }}">{{ rack.role }}</small>
|
|
44
44
|
{% endif %}
|
|
45
45
|
{% if rack.facility_id %}
|
|
46
46
|
<br /><small class="text-secondary">{{ rack.facility_id }}</small>
|
|
@@ -2,15 +2,6 @@
|
|
|
2
2
|
{% load helpers %}
|
|
3
3
|
{% load static %}
|
|
4
4
|
|
|
5
|
-
{% block extra_styles %}
|
|
6
|
-
<!-- Invert the rack elevation in dark mode as a quick fix until we have a proper dark mode svg generation -->
|
|
7
|
-
<style>
|
|
8
|
-
[data-theme="dark"] .rack_elevation {
|
|
9
|
-
filter: invert(1) hue-rotate(180deg);
|
|
10
|
-
}
|
|
11
|
-
</style>
|
|
12
|
-
{% endblock %}
|
|
13
|
-
|
|
14
5
|
{% block extra_buttons %}
|
|
15
6
|
{% if prev_rack %}
|
|
16
7
|
<a href="{% url 'dcim:rack' pk=prev_rack.pk %}" class="btn btn-primary">
|
|
@@ -38,8 +29,6 @@
|
|
|
38
29
|
</button>
|
|
39
30
|
{% endblock extra_buttons %}
|
|
40
31
|
|
|
41
|
-
{% block title %}Rack {{ object }}{% endblock title %}
|
|
42
|
-
|
|
43
32
|
{% block content_left_page %}
|
|
44
33
|
<div class="card">
|
|
45
34
|
<div class="card-header">
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
{% if cable.length %}
|
|
9
9
|
({{ cable.length }} {{ cable.get_length_unit_display }})<br />
|
|
10
10
|
{% endif %}
|
|
11
|
-
<span class="
|
|
11
|
+
<span class="badge" style="color: {{cable.status.color|fgcolor}}; background-color: #{{cable.status.color}}">{{ cable.get_status_display }}</span><br />
|
|
12
12
|
{% for tag in cable.tags.all %}
|
|
13
13
|
{% tag tag 'dcim:cable_list' %}
|
|
14
14
|
{% endfor %}
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
{% include 'inc/extras_features_edit_form_fields.html' with form=vc_form %}
|
|
33
33
|
<div class="card">
|
|
34
34
|
<div class="card-header"><strong>Members</strong></div>
|
|
35
|
-
<table class="
|
|
35
|
+
<table class="table table-hover">
|
|
36
36
|
<thead>
|
|
37
37
|
<tr>
|
|
38
38
|
<th>Device</th>
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
from django.test import tag
|
|
2
1
|
from django.urls import reverse
|
|
3
2
|
|
|
4
3
|
from nautobot.core.testing.integration import SeleniumTestCase
|
|
@@ -10,7 +9,6 @@ class ControllerTestCase(SeleniumTestCase):
|
|
|
10
9
|
Perform set of Controller tests using Selenium.
|
|
11
10
|
"""
|
|
12
11
|
|
|
13
|
-
@tag("fix_in_v3")
|
|
14
12
|
def test_controller_bulk_edit(self):
|
|
15
13
|
"""
|
|
16
14
|
This test goes through the process of creating a Controller and performing bulk edit.
|
|
@@ -55,9 +53,8 @@ class ControllerTestCase(SeleniumTestCase):
|
|
|
55
53
|
self.browser.find_by_xpath(f"//button[@formaction='{bulk_edit_url}']").click()
|
|
56
54
|
|
|
57
55
|
# Submit bulk edit form without any changes
|
|
58
|
-
self.browser.
|
|
56
|
+
self.assertTrue(self.browser.is_element_present_by_xpath("//button[@name='_apply']", wait_time=5))
|
|
57
|
+
self.browser.find_by_xpath("//button[@name='_apply']").click()
|
|
59
58
|
|
|
60
59
|
job_result = JobResult.objects.filter(name="Bulk Edit Objects").first()
|
|
61
|
-
self.assertEqual(
|
|
62
|
-
self.browser.url, self.live_server_url + reverse("extras:jobresult", args=[job_result.pk]) + "?tab=main"
|
|
63
|
-
)
|
|
60
|
+
self.assertEqual(self.browser.url, self.live_server_url + reverse("extras:jobresult", args=[job_result.pk]))
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
from django.test import tag
|
|
2
1
|
from django.urls import reverse
|
|
3
2
|
|
|
4
3
|
from nautobot.core.testing.integration import SeleniumTestCase
|
|
@@ -10,7 +9,6 @@ class ControllerManagedDeviceGroupsTestCase(SeleniumTestCase):
|
|
|
10
9
|
Perform set of Controller Managed Device Group tests using Selenium.
|
|
11
10
|
"""
|
|
12
11
|
|
|
13
|
-
@tag("fix_in_v3")
|
|
14
12
|
def test_controller_managed_device_groups_bulk_edit(self):
|
|
15
13
|
"""
|
|
16
14
|
This test goes through the process of creating a Controller Managed Device Group and performing bulk edit.
|
|
@@ -66,6 +64,4 @@ class ControllerManagedDeviceGroupsTestCase(SeleniumTestCase):
|
|
|
66
64
|
self.browser.find_by_xpath("//button[@name='_apply']", wait_time=5).click()
|
|
67
65
|
|
|
68
66
|
job_result = JobResult.objects.filter(name="Bulk Edit Objects").first()
|
|
69
|
-
self.assertEqual(
|
|
70
|
-
self.browser.url, self.live_server_url + reverse("extras:jobresult", args=[job_result.pk]) + "?tab=main"
|
|
71
|
-
)
|
|
67
|
+
self.assertEqual(self.browser.url, self.live_server_url + reverse("extras:jobresult", args=[job_result.pk]))
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
from django.test import tag
|
|
2
1
|
from django.urls import reverse
|
|
3
2
|
|
|
4
3
|
from nautobot.core.testing.integration import SeleniumTestCase
|
|
@@ -9,7 +8,6 @@ class CreateDeviceTestCase(SeleniumTestCase):
|
|
|
9
8
|
Create a device and all pre-requisite objects through the UI.
|
|
10
9
|
"""
|
|
11
10
|
|
|
12
|
-
@tag("fix_in_v3")
|
|
13
11
|
def test_create_device(self):
|
|
14
12
|
"""
|
|
15
13
|
This test goes through the process of creating a device in the UI. All pre-requisite objects are created:
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import uuid
|
|
2
2
|
|
|
3
|
-
from django.test import tag
|
|
4
3
|
from django.urls import reverse
|
|
5
4
|
from selenium.webdriver.common.by import By
|
|
6
5
|
from selenium.webdriver.support import expected_conditions
|
|
@@ -14,7 +13,6 @@ from nautobot.dcim.models import Controller, Device
|
|
|
14
13
|
from nautobot.extras.tests.integration import create_test_device
|
|
15
14
|
|
|
16
15
|
|
|
17
|
-
@tag("fix_in_v3")
|
|
18
16
|
class DeviceBulkOperationsTestCase(BulkOperationsTestCases.BulkOperationsTestCase):
|
|
19
17
|
"""
|
|
20
18
|
Test devices bulk edit / delete operations.
|
|
@@ -92,6 +90,6 @@ class DeviceBulkUrlParamTestCase(SeleniumTestCase):
|
|
|
92
90
|
lambda d: d.find_element(By.ID, "select2-id_device_type-container")
|
|
93
91
|
.find_element(By.CLASS_NAME, "select2-selection__placeholder")
|
|
94
92
|
.text.strip()
|
|
95
|
-
== "
|
|
93
|
+
== "---------"
|
|
96
94
|
)
|
|
97
95
|
)
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
from django.test import tag
|
|
2
1
|
from django.urls import reverse
|
|
3
2
|
|
|
4
|
-
from nautobot.core.testing.integration import SeleniumTestCase
|
|
3
|
+
from nautobot.core.testing.integration import SeleniumTestCase
|
|
5
4
|
from nautobot.dcim.models import Location, LocationType
|
|
6
5
|
from nautobot.extras.models import Job, Status
|
|
7
6
|
|
|
@@ -16,14 +15,14 @@ class ClearableFileInputTestCase(SeleniumTestCase):
|
|
|
16
15
|
Ensure clearable input file type has working clear and info display.
|
|
17
16
|
"""
|
|
18
17
|
self.browser.visit(f"{self.live_server_url}{uri_to_visit}")
|
|
19
|
-
|
|
18
|
+
self.assertTrue(self.browser.is_text_present(page_loaded_confirmation, wait_time=10))
|
|
20
19
|
|
|
21
20
|
# Find the first file input button and scroll to it
|
|
22
21
|
front_image_button = self.browser.find_by_css("span.group-span-filestyle.input-group-btn").first
|
|
23
22
|
front_image_button.scroll_to()
|
|
24
23
|
|
|
25
24
|
# cancel button is NOT visible initially
|
|
26
|
-
self.
|
|
25
|
+
self.assertTrue(self.browser.find_by_css("button.clear-button").first.is_not_visible(wait_time=5))
|
|
27
26
|
|
|
28
27
|
# Test file text changes after selecting a file
|
|
29
28
|
file_selection_indicator_css = "div.bootstrap-filestyle input[type='text'].form-control"
|
|
@@ -34,14 +33,13 @@ class ClearableFileInputTestCase(SeleniumTestCase):
|
|
|
34
33
|
|
|
35
34
|
# clear button is now visible
|
|
36
35
|
clear_button = self.browser.find_by_css("button.clear-button").first
|
|
37
|
-
self.assertTrue(clear_button.
|
|
36
|
+
self.assertTrue(clear_button.is_visible(wait_time=5))
|
|
38
37
|
|
|
39
38
|
# clicking clearbutton should hide the button, and wipe the file input value
|
|
40
39
|
clear_button.click()
|
|
41
|
-
self.
|
|
40
|
+
self.assertTrue(clear_button.is_not_visible(wait_time=5))
|
|
42
41
|
self.assertEqual(front_image_file_input.value, "")
|
|
43
42
|
|
|
44
|
-
@tag("fix_in_v3")
|
|
45
43
|
def test_add_device_page(self):
|
|
46
44
|
"""
|
|
47
45
|
Confirm device type add page input is working correctly.
|
|
@@ -52,7 +50,6 @@ class ClearableFileInputTestCase(SeleniumTestCase):
|
|
|
52
50
|
file_input_selector_id="id_front_image",
|
|
53
51
|
)
|
|
54
52
|
|
|
55
|
-
@tag("fix_in_v3")
|
|
56
53
|
def test_job_runner_page(self):
|
|
57
54
|
"""
|
|
58
55
|
Confirm job run page file input is working correctly.
|
|
@@ -65,7 +62,6 @@ class ClearableFileInputTestCase(SeleniumTestCase):
|
|
|
65
62
|
file_input_selector_id="id_input_file",
|
|
66
63
|
)
|
|
67
64
|
|
|
68
|
-
@tag("fix_in_v3")
|
|
69
65
|
def test_location_image_attachment_view(self):
|
|
70
66
|
"""
|
|
71
67
|
Confirm location image attachment page is working correctly.
|
|
@@ -80,6 +76,6 @@ class ClearableFileInputTestCase(SeleniumTestCase):
|
|
|
80
76
|
)
|
|
81
77
|
self._assert_file_picker(
|
|
82
78
|
uri_to_visit=location_image_attach_uri,
|
|
83
|
-
page_loaded_confirmation="
|
|
79
|
+
page_loaded_confirmation="IMAGE ATTACHMENT",
|
|
84
80
|
file_input_selector_id="id_image",
|
|
85
81
|
)
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
from django.contrib.contenttypes.models import ContentType
|
|
2
|
-
from django.test import tag
|
|
3
2
|
|
|
4
3
|
from nautobot.core.testing.integration import (
|
|
5
4
|
BulkOperationsTestCases,
|
|
@@ -8,7 +7,6 @@ from nautobot.dcim.models import Device, Location, LocationType
|
|
|
8
7
|
from nautobot.extras.models import Status
|
|
9
8
|
|
|
10
9
|
|
|
11
|
-
@tag("fix_in_v3")
|
|
12
10
|
class LocationBulkOperationsTestCase(BulkOperationsTestCases.BulkOperationsTestCase):
|
|
13
11
|
"""
|
|
14
12
|
Test locations bulk edit / delete operations.
|
|
@@ -33,10 +33,9 @@ class ModuleBayPositionTestCase(SeleniumTestCase, ObjectsListMixin):
|
|
|
33
33
|
self.assertEqual(position_field.value, "new pattern", "Position field value has unexpectedly changed")
|
|
34
34
|
|
|
35
35
|
# Regenerate position
|
|
36
|
-
self.browser.
|
|
37
|
-
|
|
38
|
-
)
|
|
39
|
-
self.browser.find_by_css('button[title="Regenerate position"]').click()
|
|
36
|
+
regenerate_position_button = self.browser.find_by_css('button[title="Regenerate position"]')
|
|
37
|
+
self.scroll_element_into_view(element=regenerate_position_button)
|
|
38
|
+
regenerate_position_button.click()
|
|
40
39
|
self.assertEqual(position_field.value, f"{name_pattern_value}v2", "Position field value is not re-populated")
|
|
41
40
|
|
|
42
41
|
def test_create_device_type_module_bay(self):
|