nautobot 2.4.0b1__py3-none-any.whl → 2.4.2__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.
Potentially problematic release.
This version of nautobot might be problematic. Click here for more details.
- nautobot/apps/__init__.py +1 -1
- nautobot/apps/api.py +8 -8
- nautobot/apps/change_logging.py +2 -2
- nautobot/apps/choices.py +4 -4
- nautobot/apps/events.py +3 -3
- nautobot/apps/factory.py +2 -2
- nautobot/apps/filters.py +1 -1
- nautobot/apps/forms.py +20 -20
- nautobot/apps/graphql.py +2 -2
- nautobot/apps/jobs.py +8 -8
- nautobot/apps/models.py +19 -19
- nautobot/apps/tables.py +1 -1
- nautobot/apps/testing.py +10 -10
- nautobot/apps/ui.py +2 -2
- nautobot/apps/utils.py +7 -7
- nautobot/apps/views.py +7 -7
- nautobot/circuits/api/serializers.py +1 -0
- nautobot/circuits/api/views.py +4 -8
- nautobot/circuits/tables.py +2 -1
- nautobot/circuits/templates/circuits/circuit_create.html +1 -7
- nautobot/circuits/tests/integration/test_circuits_bulk_operations.py +43 -0
- nautobot/circuits/tests/integration/test_relationships.py +1 -1
- nautobot/circuits/views.py +3 -3
- nautobot/cloud/api/views.py +6 -10
- nautobot/cloud/models.py +1 -1
- nautobot/cloud/views.py +0 -16
- nautobot/core/api/constants.py +11 -0
- nautobot/core/api/fields.py +5 -5
- nautobot/core/api/filter_backends.py +3 -9
- nautobot/core/api/schema.py +13 -2
- nautobot/core/api/serializers.py +40 -34
- nautobot/core/api/views.py +56 -4
- nautobot/core/apps/__init__.py +0 -5
- nautobot/core/celery/log.py +4 -4
- nautobot/core/celery/schedulers.py +2 -2
- nautobot/core/choices.py +2 -2
- nautobot/core/events/__init__.py +3 -3
- nautobot/core/filters.py +67 -35
- nautobot/core/forms/__init__.py +19 -19
- nautobot/core/forms/fields.py +14 -11
- nautobot/core/forms/forms.py +33 -2
- nautobot/core/graphql/types.py +1 -1
- nautobot/core/jobs/__init__.py +28 -7
- nautobot/core/jobs/bulk_actions.py +285 -0
- nautobot/core/jobs/cleanup.py +48 -12
- nautobot/core/jobs/groups.py +1 -1
- nautobot/core/management/commands/validate_models.py +1 -1
- nautobot/core/models/__init__.py +3 -1
- nautobot/core/models/query_functions.py +2 -2
- nautobot/core/models/tree_queries.py +6 -3
- nautobot/core/settings.py +29 -2
- nautobot/core/settings.yaml +21 -0
- nautobot/core/tables.py +79 -61
- nautobot/core/templates/about.html +67 -0
- nautobot/core/templates/generic/object_bulk_destroy.html +1 -1
- nautobot/core/templates/inc/media.html +3 -0
- nautobot/core/templates/inc/nav_menu.html +1 -0
- nautobot/core/templates/inc/tenancy_form_panel.html +9 -0
- nautobot/core/templates/inc/tenant_table_row.html +11 -0
- nautobot/core/templates/nautobot_config.py.j2 +13 -0
- nautobot/core/templates/search.html +7 -0
- nautobot/core/templates/utilities/render_jinja2.html +1 -1
- nautobot/core/templates/utilities/templatetags/tag.html +1 -1
- nautobot/core/templates/utilities/theme_preview.html +7 -0
- nautobot/core/templatetags/helpers.py +11 -2
- nautobot/core/testing/__init__.py +8 -8
- nautobot/core/testing/api.py +170 -15
- nautobot/core/testing/filters.py +45 -10
- nautobot/core/testing/forms.py +2 -0
- nautobot/core/testing/integration.py +514 -5
- nautobot/core/testing/mixins.py +7 -2
- nautobot/core/testing/views.py +44 -29
- nautobot/core/tests/integration/test_app_home.py +0 -1
- nautobot/core/tests/integration/test_app_navbar.py +0 -1
- nautobot/core/tests/integration/test_filters.py +0 -2
- nautobot/core/tests/integration/test_home.py +0 -1
- nautobot/core/tests/integration/test_navbar.py +0 -1
- nautobot/core/tests/integration/test_view_authentication.py +1 -0
- nautobot/core/tests/runner.py +1 -1
- nautobot/core/tests/test_api.py +98 -1
- nautobot/core/tests/test_csv.py +25 -3
- nautobot/core/tests/test_filters.py +209 -246
- nautobot/core/tests/test_forms.py +1 -0
- nautobot/core/tests/test_jobs.py +492 -1
- nautobot/core/tests/test_models.py +9 -0
- nautobot/core/tests/test_settings_schema.py +7 -0
- nautobot/core/tests/test_tables.py +100 -0
- nautobot/core/tests/test_utils.py +63 -1
- nautobot/core/tests/test_views.py +30 -3
- nautobot/core/ui/nav.py +1 -0
- nautobot/core/ui/object_detail.py +15 -1
- nautobot/core/urls.py +11 -0
- nautobot/core/utils/git.py +7 -2
- nautobot/core/utils/lookup.py +11 -8
- nautobot/core/utils/querysets.py +64 -0
- nautobot/core/utils/requests.py +24 -9
- nautobot/core/views/__init__.py +42 -0
- nautobot/core/views/generic.py +131 -197
- nautobot/core/views/mixins.py +136 -41
- nautobot/core/views/renderers.py +6 -6
- nautobot/core/views/utils.py +2 -2
- nautobot/dcim/api/serializers.py +56 -64
- nautobot/dcim/api/views.py +47 -113
- nautobot/dcim/constants.py +6 -13
- nautobot/dcim/factory.py +6 -1
- nautobot/dcim/filters/__init__.py +31 -2
- nautobot/dcim/forms.py +48 -17
- nautobot/dcim/graphql/types.py +2 -2
- nautobot/dcim/migrations/0067_controllermanageddevicegroup_tenant.py +25 -0
- nautobot/dcim/models/__init__.py +1 -1
- nautobot/dcim/models/device_component_templates.py +2 -2
- nautobot/dcim/models/device_components.py +22 -20
- nautobot/dcim/models/devices.py +10 -1
- nautobot/dcim/models/locations.py +3 -3
- nautobot/dcim/models/power.py +6 -5
- nautobot/dcim/models/racks.py +4 -4
- nautobot/dcim/tables/__init__.py +3 -3
- nautobot/dcim/tables/devices.py +9 -6
- nautobot/dcim/tables/devicetypes.py +2 -2
- nautobot/dcim/tables/racks.py +1 -1
- nautobot/dcim/templates/dcim/cable.html +1 -1
- nautobot/dcim/templates/dcim/controller_create.html +1 -7
- nautobot/dcim/templates/dcim/controller_retrieve.html +1 -9
- nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +2 -0
- nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +5 -0
- nautobot/dcim/templates/dcim/device/base.html +1 -1
- nautobot/dcim/templates/dcim/device.html +3 -11
- nautobot/dcim/templates/dcim/device_component.html +1 -1
- nautobot/dcim/templates/dcim/device_edit.html +36 -37
- nautobot/dcim/templates/dcim/devicetype.html +1 -1
- nautobot/dcim/templates/dcim/location.html +2 -10
- nautobot/dcim/templates/dcim/location_edit.html +1 -7
- nautobot/dcim/templates/dcim/locationtype.html +1 -1
- nautobot/dcim/templates/dcim/locationtype_retrieve.html +1 -1
- nautobot/dcim/templates/dcim/manufacturer.html +1 -1
- nautobot/dcim/templates/dcim/platform.html +1 -1
- nautobot/dcim/templates/dcim/powerfeed.html +1 -1
- nautobot/dcim/templates/dcim/powerpanel.html +1 -1
- nautobot/dcim/templates/dcim/rack.html +2 -10
- nautobot/dcim/templates/dcim/rack_edit.html +1 -7
- nautobot/dcim/templates/dcim/rackgroup.html +1 -1
- nautobot/dcim/templates/dcim/rackreservation.html +3 -11
- nautobot/dcim/templates/dcim/virtualchassis.html +1 -1
- nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +1 -9
- nautobot/dcim/templates/dcim/virtualdevicecontext_update.html +1 -7
- nautobot/dcim/tests/integration/test_controller.py +62 -0
- nautobot/dcim/tests/integration/test_controller_managed_device_group.py +71 -0
- nautobot/dcim/tests/integration/test_device_bulk_operations.py +30 -0
- nautobot/dcim/tests/integration/test_location_bulk_operations.py +43 -0
- nautobot/dcim/tests/test_api.py +16 -5
- nautobot/dcim/tests/test_filters.py +33 -0
- nautobot/dcim/tests/test_forms.py +51 -2
- nautobot/dcim/tests/test_graphql.py +52 -0
- nautobot/dcim/tests/test_jobs.py +118 -0
- nautobot/dcim/tests/test_models.py +52 -9
- nautobot/dcim/tests/test_views.py +30 -84
- nautobot/dcim/views.py +13 -28
- nautobot/extras/api/customfields.py +2 -2
- nautobot/extras/api/serializers.py +123 -85
- nautobot/extras/api/views.py +33 -30
- nautobot/extras/constants.py +3 -0
- nautobot/extras/datasources/git.py +125 -0
- nautobot/extras/filters/__init__.py +8 -6
- nautobot/extras/forms/base.py +2 -2
- nautobot/extras/forms/forms.py +139 -31
- nautobot/extras/forms/mixins.py +14 -6
- nautobot/extras/group_sync.py +3 -3
- nautobot/extras/health_checks.py +1 -2
- nautobot/extras/jobs.py +85 -18
- nautobot/extras/managers.py +3 -1
- nautobot/extras/migrations/0018_joblog_data_migration.py +7 -9
- nautobot/extras/migrations/0120_job_is_singleton_job_is_singleton_override.py +22 -0
- nautobot/extras/migrations/0121_alter_team_contacts.py +17 -0
- nautobot/extras/migrations/0122_add_graphqlquery_owner_content_type.py +34 -0
- nautobot/extras/models/__init__.py +1 -1
- nautobot/extras/models/contacts.py +1 -1
- nautobot/extras/models/customfields.py +41 -23
- nautobot/extras/models/datasources.py +85 -0
- nautobot/extras/models/groups.py +11 -9
- nautobot/extras/models/jobs.py +23 -4
- nautobot/extras/models/models.py +17 -2
- nautobot/extras/models/relationships.py +17 -5
- nautobot/extras/plugins/__init__.py +13 -2
- nautobot/extras/plugins/marketplace_manifest.yml +84 -79
- nautobot/extras/plugins/tables.py +16 -14
- nautobot/extras/plugins/views.py +65 -69
- nautobot/extras/registry.py +1 -1
- nautobot/extras/secrets/__init__.py +2 -2
- nautobot/extras/signals.py +15 -1
- nautobot/extras/tables.py +7 -5
- nautobot/extras/templates/extras/computedfield.html +1 -1
- nautobot/extras/templates/extras/configcontext.html +1 -1
- nautobot/extras/templates/extras/configcontextschema.html +1 -1
- nautobot/extras/templates/extras/customfield.html +1 -1
- nautobot/extras/templates/extras/customlink.html +1 -1
- nautobot/extras/templates/extras/dynamicgroup.html +2 -10
- nautobot/extras/templates/extras/exporttemplate.html +1 -1
- nautobot/extras/templates/extras/gitrepository.html +1 -1
- nautobot/extras/templates/extras/graphqlquery.html +1 -1
- nautobot/extras/templates/extras/job_detail.html +17 -1
- nautobot/extras/templates/extras/job_edit.html +1 -0
- nautobot/extras/templates/extras/jobbutton_retrieve.html +1 -1
- nautobot/extras/templates/extras/jobhook.html +1 -1
- nautobot/extras/templates/extras/jobqueue_retrieve.html +1 -9
- nautobot/extras/templates/extras/jobresult.html +1 -1
- nautobot/extras/templates/extras/marketplace.html +29 -11
- nautobot/extras/templates/extras/objectchange.html +1 -1
- nautobot/extras/templates/extras/plugin_detail.html +33 -16
- nautobot/extras/templates/extras/plugins_tiles.html +21 -10
- nautobot/extras/templates/extras/relationship.html +1 -63
- nautobot/extras/templates/extras/role_retrieve.html +1 -1
- nautobot/extras/templates/extras/scheduledjob.html +1 -1
- nautobot/extras/templates/extras/secret.html +1 -1
- nautobot/extras/templates/extras/secretsgroup.html +1 -1
- nautobot/extras/templates/extras/status.html +1 -1
- nautobot/extras/templates/extras/tag.html +1 -1
- nautobot/extras/templates/extras/webhook.html +1 -1
- nautobot/extras/templatetags/job_buttons.py +4 -4
- nautobot/extras/test_jobs/api_test_job.py +1 -1
- nautobot/extras/test_jobs/atomic_transaction.py +2 -2
- nautobot/extras/test_jobs/dry_run.py +1 -1
- nautobot/extras/test_jobs/fail.py +5 -5
- nautobot/extras/test_jobs/file_output.py +1 -1
- nautobot/extras/test_jobs/file_upload_fail.py +1 -1
- nautobot/extras/test_jobs/file_upload_pass.py +1 -1
- nautobot/extras/test_jobs/ipaddress_vars.py +3 -1
- nautobot/extras/test_jobs/jobs_module/jobs_submodule/jobs.py +1 -1
- nautobot/extras/test_jobs/location_with_custom_field.py +1 -1
- nautobot/extras/test_jobs/log_redaction.py +1 -1
- nautobot/extras/test_jobs/log_skip_db_logging.py +1 -1
- nautobot/extras/test_jobs/modify_db.py +1 -1
- nautobot/extras/test_jobs/object_var_optional.py +1 -1
- nautobot/extras/test_jobs/object_var_required.py +1 -1
- nautobot/extras/test_jobs/object_vars.py +1 -1
- nautobot/extras/test_jobs/pass.py +3 -3
- nautobot/extras/test_jobs/profiling.py +1 -1
- nautobot/extras/test_jobs/relative_import.py +3 -3
- nautobot/extras/test_jobs/singleton.py +16 -0
- nautobot/extras/test_jobs/soft_time_limit_greater_than_time_limit.py +1 -1
- nautobot/extras/test_jobs/task_queues.py +1 -1
- nautobot/extras/tests/git_data/01-valid-files/graphql_queries/device_interfaces.gql +8 -0
- nautobot/extras/tests/git_data/01-valid-files/graphql_queries/device_names.gql +5 -0
- nautobot/extras/tests/git_data/02-invalid-files/graphql_queries/bad_device_names.gql +5 -0
- nautobot/extras/tests/git_helper.py +9 -1
- nautobot/extras/tests/integration/__init__.py +29 -16
- nautobot/extras/tests/integration/test_plugin_banner.py +0 -2
- nautobot/extras/tests/test_api.py +19 -13
- nautobot/extras/tests/test_customfields.py +50 -52
- nautobot/extras/tests/test_datasources.py +29 -1
- nautobot/extras/tests/test_dynamicgroups.py +1 -1
- nautobot/extras/tests/test_filters.py +6 -6
- nautobot/extras/tests/test_forms.py +33 -1
- nautobot/extras/tests/test_jobs.py +178 -32
- nautobot/extras/tests/test_models.py +299 -10
- nautobot/extras/tests/test_plugins.py +62 -9
- nautobot/extras/tests/test_relationships.py +120 -9
- nautobot/extras/tests/test_utils.py +22 -1
- nautobot/extras/tests/test_views.py +56 -194
- nautobot/extras/utils.py +20 -10
- nautobot/extras/views.py +85 -110
- nautobot/ipam/api/fields.py +3 -3
- nautobot/ipam/api/serializers.py +41 -33
- nautobot/ipam/api/views.py +68 -117
- nautobot/ipam/factory.py +1 -1
- nautobot/ipam/filters.py +3 -2
- nautobot/ipam/lookups.py +101 -62
- nautobot/ipam/models.py +74 -18
- nautobot/ipam/querysets.py +2 -2
- nautobot/ipam/tables.py +25 -9
- nautobot/ipam/templates/ipam/ipaddress.html +2 -10
- nautobot/ipam/templates/ipam/ipaddress_bulk_add.html +1 -7
- nautobot/ipam/templates/ipam/ipaddress_edit.html +1 -7
- nautobot/ipam/templates/ipam/prefix.html +2 -10
- nautobot/ipam/templates/ipam/prefix_edit.html +1 -7
- nautobot/ipam/templates/ipam/rir.html +1 -1
- nautobot/ipam/templates/ipam/routetarget.html +1 -1
- nautobot/ipam/templates/ipam/service.html +1 -1
- nautobot/ipam/templates/ipam/vlan.html +2 -10
- nautobot/ipam/templates/ipam/vlan_edit.html +1 -7
- nautobot/ipam/templates/ipam/vlangroup.html +1 -1
- nautobot/ipam/templates/ipam/vrf.html +1 -1
- nautobot/ipam/templates/ipam/vrf_edit.html +1 -7
- nautobot/ipam/tests/test_api.py +436 -3
- nautobot/ipam/tests/test_forms.py +49 -47
- nautobot/ipam/tests/test_migrations.py +30 -30
- nautobot/ipam/tests/test_models.py +119 -34
- nautobot/ipam/tests/test_querysets.py +63 -1
- nautobot/ipam/tests/test_utils.py +41 -2
- nautobot/ipam/tests/test_views.py +3 -0
- nautobot/ipam/utils/__init__.py +54 -17
- nautobot/ipam/views.py +61 -87
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css.map +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css.map +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css +40 -2
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css.map +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css.map +1 -1
- nautobot/project-static/docs/404.html +131 -14
- nautobot/project-static/docs/apps/index.html +131 -14
- nautobot/project-static/docs/apps/nautobot-apps.html +132 -16
- nautobot/project-static/docs/assets/_mkdocstrings.css +25 -1
- nautobot/project-static/docs/assets/javascripts/{bundle.83f73b43.min.js → bundle.60a45f97.min.js} +2 -2
- nautobot/project-static/docs/assets/javascripts/{bundle.83f73b43.min.js.map → bundle.60a45f97.min.js.map} +2 -2
- nautobot/project-static/docs/assets/javascripts/workers/{search.6ce7567c.min.js → search.f8cc74c7.min.js} +1 -1
- nautobot/project-static/docs/assets/javascripts/workers/{search.6ce7567c.min.js.map → search.f8cc74c7.min.js.map} +1 -1
- nautobot/project-static/docs/assets/stylesheets/{main.6f8fc17f.min.css → main.a40c8224.min.css} +1 -1
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +147 -20
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +144 -17
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +459 -132
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +175 -28
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +180 -31
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +138 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +137 -15
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +164 -27
- nautobot/project-static/docs/code-reference/nautobot/apps/events.html +187 -38
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +193 -31
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +216 -48
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +324 -75
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +666 -175
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +194 -46
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +538 -177
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +578 -221
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +145 -18
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +156 -25
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +492 -65
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +705 -215
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +943 -422
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +144 -17
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +619 -200
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +474 -159
- nautobot/project-static/docs/development/apps/api/configuration-view.html +131 -14
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +131 -14
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +131 -14
- nautobot/project-static/docs/development/apps/api/models/global-search.html +131 -14
- nautobot/project-static/docs/development/apps/api/models/graphql.html +131 -14
- nautobot/project-static/docs/development/apps/api/models/index.html +131 -14
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +131 -14
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +131 -14
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +131 -14
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +131 -14
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +131 -14
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +131 -14
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +131 -14
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +131 -14
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +131 -14
- nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +153 -17
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +131 -14
- nautobot/project-static/docs/development/apps/api/prometheus.html +131 -14
- nautobot/project-static/docs/development/apps/api/setup.html +131 -14
- nautobot/project-static/docs/development/apps/api/testing.html +131 -14
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +131 -14
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +131 -14
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +131 -14
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +131 -14
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +131 -14
- nautobot/project-static/docs/development/apps/api/views/base-template.html +131 -14
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +131 -14
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +131 -14
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +131 -14
- nautobot/project-static/docs/development/apps/api/views/index.html +131 -14
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +131 -14
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +131 -14
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +131 -14
- nautobot/project-static/docs/development/apps/api/views/notes.html +131 -14
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +137 -16
- nautobot/project-static/docs/development/apps/api/views/urls.html +131 -14
- nautobot/project-static/docs/development/apps/index.html +131 -14
- nautobot/project-static/docs/development/apps/migration/code-updates.html +131 -14
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +131 -14
- nautobot/project-static/docs/development/apps/migration/from-v1.html +131 -14
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +131 -14
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +131 -14
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +131 -14
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +131 -14
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +135 -18
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +131 -14
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +297 -25
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +131 -14
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +131 -14
- nautobot/project-static/docs/development/core/application-registry.html +131 -14
- nautobot/project-static/docs/development/core/best-practices.html +131 -14
- nautobot/project-static/docs/development/core/bootstrap-ui.html +131 -14
- nautobot/project-static/docs/development/core/caching.html +131 -14
- nautobot/project-static/docs/development/core/controllers.html +131 -14
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +158 -84
- nautobot/project-static/docs/development/core/generic-views.html +131 -14
- nautobot/project-static/docs/development/core/getting-started.html +334 -234
- nautobot/project-static/docs/development/core/homepage.html +134 -17
- nautobot/project-static/docs/development/core/index.html +131 -14
- nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +9829 -0
- nautobot/project-static/docs/development/core/model-checklist.html +141 -22
- nautobot/project-static/docs/development/core/model-features.html +131 -14
- nautobot/project-static/docs/development/core/natural-keys.html +131 -14
- nautobot/project-static/docs/development/core/navigation-menu.html +131 -14
- nautobot/project-static/docs/development/core/release-checklist.html +134 -17
- nautobot/project-static/docs/development/core/role-internals.html +131 -14
- nautobot/project-static/docs/development/core/settings.html +131 -14
- nautobot/project-static/docs/development/core/style-guide.html +134 -17
- nautobot/project-static/docs/development/core/templates.html +132 -15
- nautobot/project-static/docs/development/core/testing.html +131 -14
- nautobot/project-static/docs/development/core/ui-component-framework.html +454 -283
- nautobot/project-static/docs/development/core/user-preferences.html +131 -14
- nautobot/project-static/docs/development/index.html +131 -14
- nautobot/project-static/docs/development/jobs/index.html +301 -132
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +131 -14
- nautobot/project-static/docs/index.html +139 -33
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit_button.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_nav.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_view.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_add.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_config.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_completed.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_nav.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_pending.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_run_form.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_nautobot_login.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_job.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_scheduled_job_form.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_scheduled_job_result.png +0 -0
- nautobot/project-static/docs/media/development/core/ui-component-framework/buttons-example.png +0 -0
- nautobot/project-static/docs/media/development/core/ui-component-framework/cluster-type-before-after-example.png +0 -0
- nautobot/project-static/docs/media/development/core/ui-component-framework/object-fields-panel-example_2.png +0 -0
- nautobot/project-static/docs/media/development/core/ui-component-framework/stats-panel-example-code.png +0 -0
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/overview/application_stack.html +132 -17
- nautobot/project-static/docs/overview/design_philosophy.html +131 -14
- nautobot/project-static/docs/release-notes/index.html +137 -22
- nautobot/project-static/docs/release-notes/version-1.0.html +319 -203
- nautobot/project-static/docs/release-notes/version-1.1.html +316 -200
- nautobot/project-static/docs/release-notes/version-1.2.html +391 -275
- nautobot/project-static/docs/release-notes/version-1.3.html +417 -301
- nautobot/project-static/docs/release-notes/version-1.4.html +502 -387
- nautobot/project-static/docs/release-notes/version-1.5.html +690 -576
- nautobot/project-static/docs/release-notes/version-1.6.html +989 -457
- nautobot/project-static/docs/release-notes/version-2.0.html +613 -499
- nautobot/project-static/docs/release-notes/version-2.1.html +448 -334
- nautobot/project-static/docs/release-notes/version-2.2.html +441 -327
- nautobot/project-static/docs/release-notes/version-2.3.html +1171 -451
- nautobot/project-static/docs/release-notes/version-2.4.html +800 -111
- nautobot/project-static/docs/requirements.txt +2 -2
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +303 -287
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +131 -14
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +131 -14
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +133 -16
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +131 -14
- nautobot/project-static/docs/user-guide/administration/configuration/redis.html +131 -14
- nautobot/project-static/docs/user-guide/administration/configuration/settings.html +195 -18
- nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +131 -14
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +134 -17
- nautobot/project-static/docs/user-guide/administration/guides/docker.html +131 -14
- nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +131 -14
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +131 -14
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +131 -14
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +131 -14
- nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +131 -14
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +133 -16
- nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +131 -14
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +131 -14
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +131 -14
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +151 -18
- nautobot/project-static/docs/user-guide/administration/installation/index.html +131 -14
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +132 -15
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +131 -14
- nautobot/project-static/docs/user-guide/administration/installation/services.html +131 -14
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +131 -14
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +131 -14
- nautobot/project-static/docs/user-guide/administration/security/index.html +9420 -0
- nautobot/project-static/docs/user-guide/administration/security/notices.html +9843 -0
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +131 -14
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +131 -14
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +131 -14
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +131 -14
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +131 -14
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +131 -14
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +131 -14
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +134 -18
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +131 -14
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +131 -14
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +135 -22
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +134 -17
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +131 -14
- nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +131 -14
- nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +131 -14
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +131 -14
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +131 -14
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +131 -14
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +134 -17
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +131 -14
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +131 -14
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +131 -14
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +131 -14
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +131 -14
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +131 -14
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +236 -34
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +131 -14
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/central-mode.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-add.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-1.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-2.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-add.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-create.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-add.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-create.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-add.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-1.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-2.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-add.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-create.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +131 -14
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +131 -14
- nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +134 -17
- nautobot/project-static/docs/{development/core/local-k8s.html → user-guide/feature-guides/wireless-networks-and-controllers.html} +632 -566
- nautobot/project-static/docs/user-guide/index.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +135 -18
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/events.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +451 -16
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +135 -17
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +134 -17
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +9797 -0
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +132 -15
- nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +179 -35
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +159 -15
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +131 -14
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +131 -14
- nautobot/project-static/js/forms.js +1 -1
- nautobot/tenancy/api/views.py +9 -13
- nautobot/tenancy/templates/tenancy/tenant.html +1 -2
- nautobot/tenancy/templates/tenancy/tenantgroup.html +1 -1
- nautobot/tenancy/views.py +4 -2
- nautobot/users/admin.py +1 -1
- nautobot/users/api/serializers.py +5 -4
- nautobot/users/api/views.py +3 -3
- nautobot/virtualization/api/serializers.py +4 -4
- nautobot/virtualization/api/views.py +5 -24
- nautobot/virtualization/filters.py +20 -3
- nautobot/virtualization/models.py +1 -1
- nautobot/virtualization/tables.py +2 -2
- nautobot/virtualization/templates/virtualization/cluster.html +1 -1
- nautobot/virtualization/templates/virtualization/cluster_edit.html +1 -7
- nautobot/virtualization/templates/virtualization/clustergroup.html +1 -1
- nautobot/virtualization/templates/virtualization/clustertype.html +1 -1
- nautobot/virtualization/templates/virtualization/virtualmachine.html +2 -10
- nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +2 -8
- nautobot/virtualization/templates/virtualization/vminterface.html +1 -1
- nautobot/virtualization/tests/test_filters.py +17 -0
- nautobot/wireless/filters.py +2 -2
- nautobot/wireless/forms.py +1 -1
- nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +1 -9
- nautobot/wireless/tests/integration/__init__.py +0 -0
- nautobot/wireless/tests/integration/test_radio_profile.py +42 -0
- nautobot/wireless/tests/test_filters.py +29 -1
- nautobot/wireless/tests/test_views.py +22 -1
- nautobot/wireless/views.py +0 -10
- {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.dist-info}/METADATA +9 -9
- {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.dist-info}/RECORD +667 -610
- {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.dist-info}/WHEEL +1 -1
- nautobot/core/fixtures/user-data.json +0 -59
- /nautobot/project-static/docs/assets/stylesheets/{main.6f8fc17f.min.css.map → main.a40c8224.min.css.map} +0 -0
- {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.dist-info}/NOTICE +0 -0
- {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.dist-info}/entry_points.txt +0 -0
nautobot/dcim/api/serializers.py
CHANGED
|
@@ -247,15 +247,15 @@ class LocationSerializer(
|
|
|
247
247
|
# https://www.django-rest-framework.org/api-guide/validators/#optional-fields
|
|
248
248
|
validators = []
|
|
249
249
|
|
|
250
|
-
def validate(self,
|
|
250
|
+
def validate(self, attrs):
|
|
251
251
|
# Validate uniqueness of (parent, name) since we omitted the automatically created validator from Meta.
|
|
252
|
-
if
|
|
252
|
+
if attrs.get("parent") and attrs.get("name"):
|
|
253
253
|
validator = UniqueTogetherValidator(queryset=Location.objects.all(), fields=("parent", "name"))
|
|
254
|
-
validator(
|
|
254
|
+
validator(attrs, self)
|
|
255
255
|
|
|
256
|
-
super().validate(
|
|
256
|
+
super().validate(attrs)
|
|
257
257
|
|
|
258
|
-
return
|
|
258
|
+
return attrs
|
|
259
259
|
|
|
260
260
|
|
|
261
261
|
#
|
|
@@ -285,20 +285,20 @@ class RackSerializer(TaggedModelSerializerMixin, NautobotModelSerializer):
|
|
|
285
285
|
# This prevents facility_id and rack_group from being interpreted as required fields.
|
|
286
286
|
validators = []
|
|
287
287
|
|
|
288
|
-
def validate(self,
|
|
288
|
+
def validate(self, attrs):
|
|
289
289
|
# Validate uniqueness of (rack_group, name) since we omitted the automatically-created validator above.
|
|
290
|
-
if
|
|
290
|
+
if attrs.get("rack_group", None):
|
|
291
291
|
validator = UniqueTogetherValidator(queryset=Rack.objects.all(), fields=("rack_group", "name"))
|
|
292
|
-
validator(
|
|
292
|
+
validator(attrs, self)
|
|
293
293
|
# Validate uniqueness of (rack_group, facility_id) since we omitted the automatically-created validator above.
|
|
294
|
-
if
|
|
294
|
+
if attrs.get("facility_id", None) and attrs.get("rack_group", None):
|
|
295
295
|
validator = UniqueTogetherValidator(queryset=Rack.objects.all(), fields=("rack_group", "facility_id"))
|
|
296
|
-
validator(
|
|
296
|
+
validator(attrs, self)
|
|
297
297
|
|
|
298
298
|
# Enforce model validation
|
|
299
|
-
super().validate(
|
|
299
|
+
super().validate(attrs)
|
|
300
300
|
|
|
301
|
-
return
|
|
301
|
+
return attrs
|
|
302
302
|
|
|
303
303
|
|
|
304
304
|
class RackUnitSerializer(serializers.Serializer):
|
|
@@ -369,7 +369,7 @@ class ManufacturerSerializer(NautobotModelSerializer):
|
|
|
369
369
|
fields = "__all__"
|
|
370
370
|
|
|
371
371
|
|
|
372
|
-
class DeviceFamilySerializer(NautobotModelSerializer):
|
|
372
|
+
class DeviceFamilySerializer(TaggedModelSerializerMixin, NautobotModelSerializer):
|
|
373
373
|
device_type_count = serializers.IntegerField(read_only=True)
|
|
374
374
|
|
|
375
375
|
class Meta:
|
|
@@ -534,14 +534,6 @@ class DeviceSerializer(TaggedModelSerializerMixin, NautobotModelSerializer):
|
|
|
534
534
|
"vc_priority": {"label": "Virtual chassis priority"},
|
|
535
535
|
}
|
|
536
536
|
|
|
537
|
-
def get_additional_detail_view_tabs(self):
|
|
538
|
-
"""Add "Virtual Chassis" as a separate detail tab."""
|
|
539
|
-
tabs = super().get_additional_detail_view_tabs()
|
|
540
|
-
tabs["Virtual Chassis"] = [
|
|
541
|
-
{"Virtual Chassis": {"fields": ["virtual_chassis", "vc_position", "vc_priority"]}},
|
|
542
|
-
]
|
|
543
|
-
return tabs
|
|
544
|
-
|
|
545
537
|
def get_field_names(self, declared_fields, info):
|
|
546
538
|
"""
|
|
547
539
|
Add a couple of special fields to the serializer.
|
|
@@ -558,20 +550,20 @@ class DeviceSerializer(TaggedModelSerializerMixin, NautobotModelSerializer):
|
|
|
558
550
|
def get_config_context(self, obj):
|
|
559
551
|
return obj.get_config_context()
|
|
560
552
|
|
|
561
|
-
def validate(self,
|
|
553
|
+
def validate(self, attrs):
|
|
562
554
|
# Validate uniqueness of (rack, position, face) since we omitted the automatically-created validator from Meta.
|
|
563
|
-
if
|
|
555
|
+
if attrs.get("rack") and attrs.get("position") and attrs.get("face"):
|
|
564
556
|
validator = UniqueTogetherValidator(
|
|
565
557
|
queryset=Device.objects.all(),
|
|
566
558
|
fields=("rack", "position", "face"),
|
|
567
559
|
message=f"The position and face is already occupied on this rack. {UniqueTogetherValidator.message}",
|
|
568
560
|
)
|
|
569
|
-
validator(
|
|
561
|
+
validator(attrs, self)
|
|
570
562
|
|
|
571
563
|
# Enforce model validation
|
|
572
|
-
super().validate(
|
|
564
|
+
super().validate(attrs)
|
|
573
565
|
|
|
574
|
-
return
|
|
566
|
+
return attrs
|
|
575
567
|
|
|
576
568
|
|
|
577
569
|
class DeviceNAPALMSerializer(serializers.Serializer):
|
|
@@ -644,22 +636,22 @@ class PowerPortSerializer(
|
|
|
644
636
|
|
|
645
637
|
|
|
646
638
|
class InterfaceCommonSerializer(TaggedModelSerializerMixin, NautobotModelSerializer):
|
|
647
|
-
def validate(self,
|
|
639
|
+
def validate(self, attrs):
|
|
648
640
|
# Validate many-to-many VLAN assignments
|
|
649
|
-
mode =
|
|
641
|
+
mode = attrs.get("mode", getattr(self.instance, "mode", None))
|
|
650
642
|
|
|
651
643
|
if mode != InterfaceModeChoices.MODE_TAGGED:
|
|
652
|
-
if
|
|
644
|
+
if attrs.get("tagged_vlans"):
|
|
653
645
|
raise serializers.ValidationError(
|
|
654
646
|
{
|
|
655
647
|
"tagged_vlans": f"Mode must be set to {InterfaceModeChoices.MODE_TAGGED} when specifying tagged_vlans"
|
|
656
648
|
}
|
|
657
649
|
)
|
|
658
650
|
|
|
659
|
-
if
|
|
651
|
+
if attrs.get("tagged_vlans") != [] and self.instance and self.instance.tagged_vlans.exists():
|
|
660
652
|
raise serializers.ValidationError({"tagged_vlans": f"Clear tagged_vlans to set mode to {mode}"})
|
|
661
653
|
|
|
662
|
-
return super().validate(
|
|
654
|
+
return super().validate(attrs)
|
|
663
655
|
|
|
664
656
|
|
|
665
657
|
class InterfaceSerializer(
|
|
@@ -671,7 +663,7 @@ class InterfaceSerializer(
|
|
|
671
663
|
type = ChoiceField(choices=InterfaceTypeChoices)
|
|
672
664
|
mode = ChoiceField(choices=InterfaceModeChoices, allow_blank=True, required=False)
|
|
673
665
|
mac_address = serializers.CharField(allow_blank=True, allow_null=True, required=False)
|
|
674
|
-
ip_address_count = serializers.IntegerField(read_only=True)
|
|
666
|
+
ip_address_count = serializers.IntegerField(read_only=True, source="_ip_address_count")
|
|
675
667
|
|
|
676
668
|
class Meta:
|
|
677
669
|
model = Interface
|
|
@@ -760,18 +752,18 @@ class InventoryItemSerializer(TaggedModelSerializerMixin, TreeModelSerializerMix
|
|
|
760
752
|
# https://www.django-rest-framework.org/api-guide/validators/#optional-fields
|
|
761
753
|
validators = []
|
|
762
754
|
|
|
763
|
-
def validate(self,
|
|
755
|
+
def validate(self, attrs):
|
|
764
756
|
# Validate uniqueness of (device, parent, name) since we omitted the automatically created validator from Meta.
|
|
765
|
-
if
|
|
757
|
+
if attrs.get("device") and attrs.get("parent") and attrs.get("name"):
|
|
766
758
|
validator = UniqueTogetherValidator(
|
|
767
759
|
queryset=InventoryItem.objects.all(),
|
|
768
760
|
fields=("device", "parent", "name"),
|
|
769
761
|
)
|
|
770
|
-
validator(
|
|
762
|
+
validator(attrs, self)
|
|
771
763
|
|
|
772
|
-
super().validate(
|
|
764
|
+
super().validate(attrs)
|
|
773
765
|
|
|
774
|
-
return
|
|
766
|
+
return attrs
|
|
775
767
|
|
|
776
768
|
|
|
777
769
|
#
|
|
@@ -989,7 +981,7 @@ class DeviceTypeToSoftwareImageFileSerializer(ValidatedModelSerializer):
|
|
|
989
981
|
|
|
990
982
|
class ControllerSerializer(TaggedModelSerializerMixin, NautobotModelSerializer):
|
|
991
983
|
capabilities = serializers.ListField(
|
|
992
|
-
child=ChoiceField(choices=ControllerCapabilitiesChoices, required=False), allow_empty=True
|
|
984
|
+
child=ChoiceField(choices=ControllerCapabilitiesChoices, required=False), allow_empty=True, required=False
|
|
993
985
|
)
|
|
994
986
|
|
|
995
987
|
class Meta:
|
|
@@ -999,7 +991,7 @@ class ControllerSerializer(TaggedModelSerializerMixin, NautobotModelSerializer):
|
|
|
999
991
|
|
|
1000
992
|
class ControllerManagedDeviceGroupSerializer(TaggedModelSerializerMixin, NautobotModelSerializer):
|
|
1001
993
|
capabilities = serializers.ListField(
|
|
1002
|
-
child=ChoiceField(choices=ControllerCapabilitiesChoices, required=False), allow_empty=True
|
|
994
|
+
child=ChoiceField(choices=ControllerCapabilitiesChoices, required=False), allow_empty=True, required=False
|
|
1003
995
|
)
|
|
1004
996
|
|
|
1005
997
|
class Meta:
|
|
@@ -1018,21 +1010,21 @@ class ModuleBaySerializer(TaggedModelSerializerMixin, NautobotModelSerializer):
|
|
|
1018
1010
|
fields = "__all__"
|
|
1019
1011
|
validators = []
|
|
1020
1012
|
|
|
1021
|
-
def validate(self,
|
|
1013
|
+
def validate(self, attrs):
|
|
1022
1014
|
"""Validate device and module field constraints for module bay."""
|
|
1023
|
-
if
|
|
1015
|
+
if attrs.get("parent_device") and attrs.get("parent_module"):
|
|
1024
1016
|
raise serializers.ValidationError("Only one of parent_device or parent_module must be set")
|
|
1025
|
-
if
|
|
1017
|
+
if attrs.get("parent_device"):
|
|
1026
1018
|
validator = UniqueTogetherValidator(
|
|
1027
1019
|
queryset=self.Meta.model.objects.all(), fields=("parent_device", "name")
|
|
1028
1020
|
)
|
|
1029
|
-
validator(
|
|
1030
|
-
if
|
|
1021
|
+
validator(attrs, self)
|
|
1022
|
+
if attrs.get("parent_module"):
|
|
1031
1023
|
validator = UniqueTogetherValidator(
|
|
1032
1024
|
queryset=self.Meta.model.objects.all(), fields=("parent_module", "name")
|
|
1033
1025
|
)
|
|
1034
|
-
validator(
|
|
1035
|
-
return super().validate(
|
|
1026
|
+
validator(attrs, self)
|
|
1027
|
+
return super().validate(attrs)
|
|
1036
1028
|
|
|
1037
1029
|
|
|
1038
1030
|
class ModuleBayTemplateSerializer(NautobotModelSerializer):
|
|
@@ -1041,17 +1033,17 @@ class ModuleBayTemplateSerializer(NautobotModelSerializer):
|
|
|
1041
1033
|
fields = "__all__"
|
|
1042
1034
|
validators = []
|
|
1043
1035
|
|
|
1044
|
-
def validate(self,
|
|
1036
|
+
def validate(self, attrs):
|
|
1045
1037
|
"""Validate device_type and module_type field constraints for module bay template."""
|
|
1046
|
-
if
|
|
1038
|
+
if attrs.get("device_type") and attrs.get("module_type"):
|
|
1047
1039
|
raise serializers.ValidationError("Only one of device_type or module_type must be set")
|
|
1048
|
-
if
|
|
1040
|
+
if attrs.get("device_type"):
|
|
1049
1041
|
validator = UniqueTogetherValidator(queryset=self.Meta.model.objects.all(), fields=("device_type", "name"))
|
|
1050
|
-
validator(
|
|
1051
|
-
if
|
|
1042
|
+
validator(attrs, self)
|
|
1043
|
+
if attrs.get("module_type"):
|
|
1052
1044
|
validator = UniqueTogetherValidator(queryset=self.Meta.model.objects.all(), fields=("module_type", "name"))
|
|
1053
|
-
validator(
|
|
1054
|
-
return super().validate(
|
|
1045
|
+
validator(attrs, self)
|
|
1046
|
+
return super().validate(attrs)
|
|
1055
1047
|
|
|
1056
1048
|
|
|
1057
1049
|
class ModuleSerializer(TaggedModelSerializerMixin, NautobotModelSerializer):
|
|
@@ -1061,17 +1053,17 @@ class ModuleSerializer(TaggedModelSerializerMixin, NautobotModelSerializer):
|
|
|
1061
1053
|
|
|
1062
1054
|
validators = []
|
|
1063
1055
|
|
|
1064
|
-
def validate(self,
|
|
1056
|
+
def validate(self, attrs):
|
|
1065
1057
|
"""Validate asset_Tag, serial, parent_module_bay and location field constraints for module."""
|
|
1066
|
-
if
|
|
1058
|
+
if attrs.get("parent_module_bay") and attrs.get("location"):
|
|
1067
1059
|
raise serializers.ValidationError("Only one of parent_module_bay or location must be set")
|
|
1068
|
-
if
|
|
1060
|
+
if attrs.get("serial"):
|
|
1069
1061
|
validator = UniqueTogetherValidator(queryset=Module.objects.all(), fields=("module_type", "serial"))
|
|
1070
|
-
validator(
|
|
1071
|
-
if
|
|
1062
|
+
validator(attrs, self)
|
|
1063
|
+
if attrs.get("asset_tag"):
|
|
1072
1064
|
validator = UniqueValidator(queryset=Module.objects.all())
|
|
1073
|
-
validator(
|
|
1074
|
-
return super().validate(
|
|
1065
|
+
validator(attrs["asset_tag"], self.fields["asset_tag"])
|
|
1066
|
+
return super().validate(attrs)
|
|
1075
1067
|
|
|
1076
1068
|
|
|
1077
1069
|
class ModuleTypeSerializer(TaggedModelSerializerMixin, NautobotModelSerializer):
|
|
@@ -1080,16 +1072,16 @@ class ModuleTypeSerializer(TaggedModelSerializerMixin, NautobotModelSerializer):
|
|
|
1080
1072
|
fields = "__all__"
|
|
1081
1073
|
|
|
1082
1074
|
|
|
1083
|
-
class VirtualDeviceContextSerializer(NautobotModelSerializer):
|
|
1075
|
+
class VirtualDeviceContextSerializer(TaggedModelSerializerMixin, NautobotModelSerializer):
|
|
1084
1076
|
class Meta:
|
|
1085
1077
|
model = VirtualDeviceContext
|
|
1086
1078
|
fields = "__all__"
|
|
1087
1079
|
|
|
1088
|
-
def validate(self,
|
|
1080
|
+
def validate(self, attrs):
|
|
1089
1081
|
"""Validate device cannot be changed for VirtualDeviceContext."""
|
|
1090
|
-
if
|
|
1082
|
+
if attrs.get("device") and self.instance and self.instance.device != attrs.get("device"):
|
|
1091
1083
|
raise serializers.ValidationError("Changing the device of a VirtualDeviceContext is not allowed.")
|
|
1092
|
-
return super().validate(
|
|
1084
|
+
return super().validate(attrs)
|
|
1093
1085
|
|
|
1094
1086
|
|
|
1095
1087
|
class InterfaceVDCAssignmentSerializer(ValidatedModelSerializer):
|
nautobot/dcim/api/views.py
CHANGED
|
@@ -11,6 +11,7 @@ from drf_spectacular.types import OpenApiTypes
|
|
|
11
11
|
from drf_spectacular.utils import extend_schema, OpenApiParameter
|
|
12
12
|
from rest_framework.decorators import action
|
|
13
13
|
from rest_framework.mixins import ListModelMixin
|
|
14
|
+
from rest_framework.parsers import JSONParser, MultiPartParser
|
|
14
15
|
from rest_framework.permissions import IsAuthenticated
|
|
15
16
|
from rest_framework.response import Response
|
|
16
17
|
from rest_framework.viewsets import GenericViewSet, ViewSet
|
|
@@ -18,6 +19,7 @@ from rest_framework.viewsets import GenericViewSet, ViewSet
|
|
|
18
19
|
from nautobot.circuits.models import Circuit
|
|
19
20
|
from nautobot.cloud.models import CloudAccount
|
|
20
21
|
from nautobot.core.api.exceptions import ServiceUnavailable
|
|
22
|
+
from nautobot.core.api.parsers import NautobotCSVParser
|
|
21
23
|
from nautobot.core.api.utils import get_serializer_for_model
|
|
22
24
|
from nautobot.core.api.views import ModelViewSet
|
|
23
25
|
from nautobot.core.models.querysets import count_related
|
|
@@ -76,7 +78,7 @@ from nautobot.extras.api.views import (
|
|
|
76
78
|
)
|
|
77
79
|
from nautobot.extras.choices import SecretsGroupAccessTypeChoices, SecretsGroupSecretTypeChoices
|
|
78
80
|
from nautobot.extras.secrets.exceptions import SecretError
|
|
79
|
-
from nautobot.ipam.models import Prefix, VLAN
|
|
81
|
+
from nautobot.ipam.models import IPAddress, Prefix, VLAN
|
|
80
82
|
from nautobot.virtualization.models import VirtualMachine
|
|
81
83
|
|
|
82
84
|
from . import serializers
|
|
@@ -140,7 +142,7 @@ class PassThroughPortMixin:
|
|
|
140
142
|
|
|
141
143
|
|
|
142
144
|
class LocationTypeViewSet(NautobotModelViewSet):
|
|
143
|
-
queryset = LocationType.objects.
|
|
145
|
+
queryset = LocationType.objects.all()
|
|
144
146
|
serializer_class = serializers.LocationTypeSerializer
|
|
145
147
|
filterset_class = filters.LocationTypeFilterSet
|
|
146
148
|
|
|
@@ -151,17 +153,13 @@ class LocationTypeViewSet(NautobotModelViewSet):
|
|
|
151
153
|
|
|
152
154
|
|
|
153
155
|
class LocationViewSet(NautobotModelViewSet):
|
|
154
|
-
queryset = (
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
vlan_count=count_related(VLAN, "locations"),
|
|
162
|
-
circuit_count=count_related(Circuit, "circuit_terminations__location"),
|
|
163
|
-
virtual_machine_count=count_related(VirtualMachine, "cluster__location"),
|
|
164
|
-
)
|
|
156
|
+
queryset = Location.objects.annotate(
|
|
157
|
+
device_count=count_related(Device, "location"),
|
|
158
|
+
rack_count=count_related(Rack, "location"),
|
|
159
|
+
prefix_count=count_related(Prefix, "locations"),
|
|
160
|
+
vlan_count=count_related(VLAN, "locations"),
|
|
161
|
+
circuit_count=count_related(Circuit, "circuit_terminations__location"),
|
|
162
|
+
virtual_machine_count=count_related(VirtualMachine, "cluster__location"),
|
|
165
163
|
)
|
|
166
164
|
serializer_class = serializers.LocationSerializer
|
|
167
165
|
filterset_class = filters.LocationFilterSet
|
|
@@ -173,7 +171,7 @@ class LocationViewSet(NautobotModelViewSet):
|
|
|
173
171
|
|
|
174
172
|
|
|
175
173
|
class RackGroupViewSet(NautobotModelViewSet):
|
|
176
|
-
queryset = RackGroup.objects.annotate(rack_count=count_related(Rack, "rack_group"))
|
|
174
|
+
queryset = RackGroup.objects.annotate(rack_count=count_related(Rack, "rack_group"))
|
|
177
175
|
serializer_class = serializers.RackGroupSerializer
|
|
178
176
|
filterset_class = filters.RackGroupFilterSet
|
|
179
177
|
|
|
@@ -184,13 +182,9 @@ class RackGroupViewSet(NautobotModelViewSet):
|
|
|
184
182
|
|
|
185
183
|
|
|
186
184
|
class RackViewSet(NautobotModelViewSet):
|
|
187
|
-
queryset = (
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
.annotate(
|
|
191
|
-
device_count=count_related(Device, "rack"),
|
|
192
|
-
power_feed_count=count_related(PowerFeed, "rack"),
|
|
193
|
-
)
|
|
185
|
+
queryset = Rack.objects.select_related("rack_group__location").annotate(
|
|
186
|
+
device_count=count_related(Device, "rack"),
|
|
187
|
+
power_feed_count=count_related(PowerFeed, "rack"),
|
|
194
188
|
)
|
|
195
189
|
serializer_class = serializers.RackSerializer
|
|
196
190
|
filterset_class = filters.RackFilterSet
|
|
@@ -255,7 +249,7 @@ class RackViewSet(NautobotModelViewSet):
|
|
|
255
249
|
|
|
256
250
|
|
|
257
251
|
class RackReservationViewSet(NautobotModelViewSet):
|
|
258
|
-
queryset = RackReservation.objects.
|
|
252
|
+
queryset = RackReservation.objects.all()
|
|
259
253
|
serializer_class = serializers.RackReservationSerializer
|
|
260
254
|
filterset_class = filters.RackReservationFilterSet
|
|
261
255
|
|
|
@@ -295,13 +289,10 @@ class DeviceFamilyViewSet(NautobotModelViewSet):
|
|
|
295
289
|
|
|
296
290
|
|
|
297
291
|
class DeviceTypeViewSet(NautobotModelViewSet):
|
|
298
|
-
queryset = (
|
|
299
|
-
DeviceType.objects.select_related("manufacturer")
|
|
300
|
-
.prefetch_related("software_image_files", "tags")
|
|
301
|
-
.annotate(device_count=count_related(Device, "device_type"))
|
|
302
|
-
)
|
|
292
|
+
queryset = DeviceType.objects.annotate(device_count=count_related(Device, "device_type"))
|
|
303
293
|
serializer_class = serializers.DeviceTypeSerializer
|
|
304
294
|
filterset_class = filters.DeviceTypeFilterSet
|
|
295
|
+
parser_classes = [JSONParser, NautobotCSVParser, MultiPartParser]
|
|
305
296
|
|
|
306
297
|
|
|
307
298
|
#
|
|
@@ -387,21 +378,8 @@ class PlatformViewSet(NautobotModelViewSet):
|
|
|
387
378
|
class DeviceViewSet(ConfigContextQuerySetMixin, NautobotModelViewSet):
|
|
388
379
|
queryset = Device.objects.select_related(
|
|
389
380
|
"device_type__manufacturer",
|
|
390
|
-
"role",
|
|
391
|
-
"tenant",
|
|
392
|
-
"platform",
|
|
393
|
-
"rack",
|
|
394
|
-
"location",
|
|
395
|
-
"parent_bay",
|
|
396
|
-
"primary_ip4",
|
|
397
|
-
"primary_ip6",
|
|
398
|
-
"software_version",
|
|
399
381
|
"virtual_chassis__master",
|
|
400
|
-
|
|
401
|
-
"controller_managed_device_group",
|
|
402
|
-
"secrets_group",
|
|
403
|
-
"status",
|
|
404
|
-
).prefetch_related("tags", "primary_ip4__nat_outside_list", "primary_ip6__nat_outside_list", "software_image_files")
|
|
382
|
+
).prefetch_related("primary_ip4__nat_outside_list", "primary_ip6__nat_outside_list")
|
|
405
383
|
serializer_class = serializers.DeviceSerializer
|
|
406
384
|
filterset_class = filters.DeviceFilterSet
|
|
407
385
|
|
|
@@ -564,85 +542,65 @@ class DeviceViewSet(ConfigContextQuerySetMixin, NautobotModelViewSet):
|
|
|
564
542
|
|
|
565
543
|
|
|
566
544
|
class ConsolePortViewSet(PathEndpointMixin, NautobotModelViewSet):
|
|
567
|
-
queryset = ConsolePort.objects.
|
|
568
|
-
"_path__destination", "_cable_peer", "tags"
|
|
569
|
-
)
|
|
545
|
+
queryset = ConsolePort.objects.prefetch_related("_path__destination", "_cable_peer")
|
|
570
546
|
serializer_class = serializers.ConsolePortSerializer
|
|
571
547
|
filterset_class = filters.ConsolePortFilterSet
|
|
572
548
|
|
|
573
549
|
|
|
574
550
|
class ConsoleServerPortViewSet(PathEndpointMixin, NautobotModelViewSet):
|
|
575
|
-
queryset = ConsoleServerPort.objects.
|
|
576
|
-
"_path__destination", "_cable_peer", "tags"
|
|
577
|
-
)
|
|
551
|
+
queryset = ConsoleServerPort.objects.prefetch_related("_path__destination", "_cable_peer")
|
|
578
552
|
serializer_class = serializers.ConsoleServerPortSerializer
|
|
579
553
|
filterset_class = filters.ConsoleServerPortFilterSet
|
|
580
554
|
|
|
581
555
|
|
|
582
556
|
class PowerPortViewSet(PathEndpointMixin, NautobotModelViewSet):
|
|
583
|
-
queryset = PowerPort.objects.
|
|
584
|
-
"_path__destination", "_cable_peer", "tags"
|
|
585
|
-
)
|
|
557
|
+
queryset = PowerPort.objects.prefetch_related("_path__destination", "_cable_peer")
|
|
586
558
|
serializer_class = serializers.PowerPortSerializer
|
|
587
559
|
filterset_class = filters.PowerPortFilterSet
|
|
588
560
|
|
|
589
561
|
|
|
590
562
|
class PowerOutletViewSet(PathEndpointMixin, NautobotModelViewSet):
|
|
591
|
-
queryset = PowerOutlet.objects.
|
|
592
|
-
"_path__destination", "_cable_peer", "tags"
|
|
593
|
-
)
|
|
563
|
+
queryset = PowerOutlet.objects.prefetch_related("_path__destination", "_cable_peer")
|
|
594
564
|
serializer_class = serializers.PowerOutletSerializer
|
|
595
565
|
filterset_class = filters.PowerOutletFilterSet
|
|
596
566
|
|
|
597
567
|
|
|
598
568
|
class InterfaceViewSet(PathEndpointMixin, NautobotModelViewSet):
|
|
599
|
-
queryset = Interface.objects.
|
|
600
|
-
"
|
|
601
|
-
"parent_interface",
|
|
602
|
-
"bridge",
|
|
603
|
-
"lag",
|
|
604
|
-
"status",
|
|
605
|
-
"cable",
|
|
606
|
-
"untagged_vlan",
|
|
607
|
-
).prefetch_related(
|
|
608
|
-
"tags", "_path__destination", "_cable_peer", "ip_addresses", "tagged_vlans", "virtual_device_contexts"
|
|
569
|
+
queryset = Interface.objects.prefetch_related("_path__destination", "_cable_peer").annotate(
|
|
570
|
+
_ip_address_count=count_related(IPAddress, "interfaces") # avoid conflict with Interface.ip_address_count()
|
|
609
571
|
)
|
|
610
572
|
serializer_class = serializers.InterfaceSerializer
|
|
611
573
|
filterset_class = filters.InterfaceFilterSet
|
|
612
574
|
|
|
613
575
|
|
|
614
576
|
class FrontPortViewSet(PassThroughPortMixin, NautobotModelViewSet):
|
|
615
|
-
queryset = FrontPort.objects.select_related(
|
|
616
|
-
"device__device_type__manufacturer", "rear_port", "cable"
|
|
617
|
-
).prefetch_related("tags")
|
|
577
|
+
queryset = FrontPort.objects.select_related("device__device_type__manufacturer")
|
|
618
578
|
serializer_class = serializers.FrontPortSerializer
|
|
619
579
|
filterset_class = filters.FrontPortFilterSet
|
|
620
580
|
|
|
621
581
|
|
|
622
582
|
class RearPortViewSet(PassThroughPortMixin, NautobotModelViewSet):
|
|
623
|
-
queryset = RearPort.objects.select_related("device__device_type__manufacturer"
|
|
583
|
+
queryset = RearPort.objects.select_related("device__device_type__manufacturer")
|
|
624
584
|
serializer_class = serializers.RearPortSerializer
|
|
625
585
|
filterset_class = filters.RearPortFilterSet
|
|
626
586
|
|
|
627
587
|
|
|
628
588
|
class DeviceBayViewSet(NautobotModelViewSet):
|
|
629
|
-
queryset = DeviceBay.objects.
|
|
589
|
+
queryset = DeviceBay.objects.all()
|
|
630
590
|
serializer_class = serializers.DeviceBaySerializer
|
|
631
591
|
filterset_class = filters.DeviceBayFilterSet
|
|
632
592
|
|
|
633
593
|
|
|
634
594
|
class InventoryItemViewSet(NautobotModelViewSet):
|
|
635
|
-
queryset = InventoryItem.objects.
|
|
636
|
-
"tags"
|
|
637
|
-
)
|
|
595
|
+
queryset = InventoryItem.objects.all()
|
|
638
596
|
serializer_class = serializers.InventoryItemSerializer
|
|
639
597
|
filterset_class = filters.InventoryItemFilterSet
|
|
640
598
|
|
|
641
599
|
|
|
642
600
|
class ModuleBayViewSet(NautobotModelViewSet):
|
|
643
|
-
queryset = ModuleBay.objects.select_related(
|
|
644
|
-
"
|
|
645
|
-
)
|
|
601
|
+
queryset = ModuleBay.objects.select_related("parent_device__tenant", "parent_device__location").prefetch_related(
|
|
602
|
+
"installed_module"
|
|
603
|
+
)
|
|
646
604
|
serializer_class = serializers.ModuleBaySerializer
|
|
647
605
|
filterset_class = filters.ModuleBayFilterSet
|
|
648
606
|
|
|
@@ -681,7 +639,7 @@ class InterfaceConnectionViewSet(ListModelMixin, GenericViewSet):
|
|
|
681
639
|
|
|
682
640
|
|
|
683
641
|
class CableViewSet(NautobotModelViewSet):
|
|
684
|
-
queryset = Cable.objects.
|
|
642
|
+
queryset = Cable.objects.prefetch_related("termination_a", "termination_b")
|
|
685
643
|
serializer_class = serializers.CableSerializer
|
|
686
644
|
filterset_class = filters.CableFilterSet
|
|
687
645
|
|
|
@@ -692,9 +650,7 @@ class CableViewSet(NautobotModelViewSet):
|
|
|
692
650
|
|
|
693
651
|
|
|
694
652
|
class VirtualChassisViewSet(NautobotModelViewSet):
|
|
695
|
-
queryset = VirtualChassis.objects.
|
|
696
|
-
member_count=count_related(Device, "virtual_chassis")
|
|
697
|
-
)
|
|
653
|
+
queryset = VirtualChassis.objects.annotate(member_count=count_related(Device, "virtual_chassis"))
|
|
698
654
|
serializer_class = serializers.VirtualChassisSerializer
|
|
699
655
|
filterset_class = filters.VirtualChassisFilterSet
|
|
700
656
|
|
|
@@ -705,9 +661,7 @@ class VirtualChassisViewSet(NautobotModelViewSet):
|
|
|
705
661
|
|
|
706
662
|
|
|
707
663
|
class PowerPanelViewSet(NautobotModelViewSet):
|
|
708
|
-
queryset = PowerPanel.objects.
|
|
709
|
-
power_feed_count=count_related(PowerFeed, "power_panel")
|
|
710
|
-
)
|
|
664
|
+
queryset = PowerPanel.objects.annotate(power_feed_count=count_related(PowerFeed, "power_panel"))
|
|
711
665
|
serializer_class = serializers.PowerPanelSerializer
|
|
712
666
|
filterset_class = filters.PowerPanelFilterSet
|
|
713
667
|
|
|
@@ -718,12 +672,7 @@ class PowerPanelViewSet(NautobotModelViewSet):
|
|
|
718
672
|
|
|
719
673
|
|
|
720
674
|
class PowerFeedViewSet(PathEndpointMixin, NautobotModelViewSet):
|
|
721
|
-
queryset = PowerFeed.objects.
|
|
722
|
-
"power_panel",
|
|
723
|
-
"rack",
|
|
724
|
-
"cable",
|
|
725
|
-
"status",
|
|
726
|
-
).prefetch_related("tags", "_cable_peer", "_path__destination")
|
|
675
|
+
queryset = PowerFeed.objects.prefetch_related("_cable_peer", "_path__destination")
|
|
727
676
|
serializer_class = serializers.PowerFeedSerializer
|
|
728
677
|
filterset_class = filters.PowerFeedFilterSet
|
|
729
678
|
|
|
@@ -734,7 +683,7 @@ class PowerFeedViewSet(PathEndpointMixin, NautobotModelViewSet):
|
|
|
734
683
|
|
|
735
684
|
|
|
736
685
|
class DeviceRedundancyGroupViewSet(NautobotModelViewSet):
|
|
737
|
-
queryset = DeviceRedundancyGroup.objects.
|
|
686
|
+
queryset = DeviceRedundancyGroup.objects.all()
|
|
738
687
|
serializer_class = serializers.DeviceRedundancyGroupSerializer
|
|
739
688
|
filterset_class = filters.DeviceRedundancyGroupFilterSet
|
|
740
689
|
|
|
@@ -745,7 +694,7 @@ class DeviceRedundancyGroupViewSet(NautobotModelViewSet):
|
|
|
745
694
|
|
|
746
695
|
|
|
747
696
|
class InterfaceRedundancyGroupViewSet(NautobotModelViewSet):
|
|
748
|
-
queryset = InterfaceRedundancyGroup.objects.
|
|
697
|
+
queryset = InterfaceRedundancyGroup.objects.all()
|
|
749
698
|
serializer_class = serializers.InterfaceRedundancyGroupSerializer
|
|
750
699
|
filterset_class = filters.InterfaceRedundancyGroupFilterSet
|
|
751
700
|
|
|
@@ -821,21 +770,19 @@ class ConnectedDeviceViewSet(ViewSet):
|
|
|
821
770
|
|
|
822
771
|
|
|
823
772
|
class SoftwareImageFileViewSet(NautobotModelViewSet):
|
|
824
|
-
queryset = SoftwareImageFile.objects.
|
|
773
|
+
queryset = SoftwareImageFile.objects.all()
|
|
825
774
|
serializer_class = serializers.SoftwareImageFileSerializer
|
|
826
775
|
filterset_class = filters.SoftwareImageFileFilterSet
|
|
827
776
|
|
|
828
777
|
|
|
829
778
|
class SoftwareVersionViewSet(NautobotModelViewSet):
|
|
830
|
-
queryset = SoftwareVersion.objects.
|
|
831
|
-
"devices", "software_image_files", "inventory_items", "virtual_machines"
|
|
832
|
-
)
|
|
779
|
+
queryset = SoftwareVersion.objects.all()
|
|
833
780
|
serializer_class = serializers.SoftwareVersionSerializer
|
|
834
781
|
filterset_class = filters.SoftwareVersionFilterSet
|
|
835
782
|
|
|
836
783
|
|
|
837
784
|
class DeviceTypeToSoftwareImageFileViewSet(ModelViewSet):
|
|
838
|
-
queryset = DeviceTypeToSoftwareImageFile.objects.
|
|
785
|
+
queryset = DeviceTypeToSoftwareImageFile.objects.all()
|
|
839
786
|
serializer_class = serializers.DeviceTypeToSoftwareImageFileSerializer
|
|
840
787
|
filterset_class = filters.DeviceTypeToSoftwareImageFileFilterSet
|
|
841
788
|
|
|
@@ -846,23 +793,13 @@ class DeviceTypeToSoftwareImageFileViewSet(ModelViewSet):
|
|
|
846
793
|
|
|
847
794
|
|
|
848
795
|
class ControllerViewSet(NautobotModelViewSet):
|
|
849
|
-
queryset = Controller.objects.
|
|
850
|
-
"location",
|
|
851
|
-
"platform",
|
|
852
|
-
"role",
|
|
853
|
-
"tenant",
|
|
854
|
-
"status",
|
|
855
|
-
).prefetch_related("tags")
|
|
796
|
+
queryset = Controller.objects.all()
|
|
856
797
|
serializer_class = serializers.ControllerSerializer
|
|
857
798
|
filterset_class = filters.ControllerFilterSet
|
|
858
799
|
|
|
859
800
|
|
|
860
801
|
class ControllerManagedDeviceGroupViewSet(NautobotModelViewSet):
|
|
861
|
-
queryset = ControllerManagedDeviceGroup.objects.
|
|
862
|
-
"controller",
|
|
863
|
-
"parent",
|
|
864
|
-
).prefetch_related("tags")
|
|
865
|
-
|
|
802
|
+
queryset = ControllerManagedDeviceGroup.objects.all()
|
|
866
803
|
serializer_class = serializers.ControllerManagedDeviceGroupSerializer
|
|
867
804
|
filterset_class = filters.ControllerManagedDeviceGroupFilterSet
|
|
868
805
|
|
|
@@ -877,27 +814,24 @@ class ModuleViewSet(NautobotModelViewSet):
|
|
|
877
814
|
"parent_module_bay__parent_device__location",
|
|
878
815
|
"parent_module_bay__parent_device__tenant",
|
|
879
816
|
"module_type__manufacturer",
|
|
880
|
-
|
|
881
|
-
"role",
|
|
882
|
-
"location",
|
|
883
|
-
).prefetch_related("module_bays", "tags")
|
|
817
|
+
)
|
|
884
818
|
serializer_class = serializers.ModuleSerializer
|
|
885
819
|
filterset_class = filters.ModuleFilterSet
|
|
886
820
|
|
|
887
821
|
|
|
888
822
|
class ModuleTypeViewSet(NautobotModelViewSet):
|
|
889
|
-
queryset = ModuleType.objects.
|
|
823
|
+
queryset = ModuleType.objects.all()
|
|
890
824
|
serializer_class = serializers.ModuleTypeSerializer
|
|
891
825
|
filterset_class = filters.ModuleTypeFilterSet
|
|
892
826
|
|
|
893
827
|
|
|
894
828
|
class VirtualDeviceContextViewSet(NautobotModelViewSet):
|
|
895
|
-
queryset = VirtualDeviceContext.objects.
|
|
829
|
+
queryset = VirtualDeviceContext.objects.all()
|
|
896
830
|
serializer_class = serializers.VirtualDeviceContextSerializer
|
|
897
831
|
filterset_class = filters.VirtualDeviceContextFilterSet
|
|
898
832
|
|
|
899
833
|
|
|
900
834
|
class InterfaceVDCAssignmentViewSet(NautobotModelViewSet):
|
|
901
|
-
queryset = InterfaceVDCAssignment.objects.
|
|
835
|
+
queryset = InterfaceVDCAssignment.objects.all()
|
|
902
836
|
serializer_class = serializers.InterfaceVDCAssignmentSerializer
|
|
903
837
|
filterset_class = filters.InterfaceVDCAssignmentFilterSet
|