nautobot 2.4.0__py3-none-any.whl → 2.4.0b1__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 +0 -1
- nautobot/circuits/api/views.py +8 -4
- nautobot/circuits/tables.py +1 -2
- nautobot/circuits/templates/circuits/circuit_create.html +7 -1
- nautobot/circuits/views.py +3 -3
- nautobot/cloud/api/views.py +10 -6
- nautobot/cloud/models.py +1 -1
- nautobot/cloud/views.py +16 -0
- nautobot/core/api/fields.py +5 -5
- nautobot/core/api/filter_backends.py +9 -3
- nautobot/core/api/schema.py +2 -13
- nautobot/core/api/serializers.py +34 -40
- nautobot/core/api/views.py +4 -56
- nautobot/core/celery/log.py +4 -4
- nautobot/core/celery/schedulers.py +1 -1
- nautobot/core/choices.py +2 -2
- nautobot/core/events/__init__.py +3 -3
- nautobot/core/filters.py +16 -21
- nautobot/core/fixtures/user-data.json +59 -0
- nautobot/core/forms/__init__.py +19 -19
- nautobot/core/forms/fields.py +11 -14
- nautobot/core/forms/forms.py +2 -33
- nautobot/core/graphql/types.py +1 -1
- nautobot/core/jobs/__init__.py +7 -28
- nautobot/core/jobs/cleanup.py +12 -48
- nautobot/core/jobs/groups.py +1 -1
- nautobot/core/management/commands/validate_models.py +1 -1
- nautobot/core/models/__init__.py +1 -1
- nautobot/core/models/query_functions.py +2 -2
- nautobot/core/models/tree_queries.py +3 -6
- nautobot/core/settings.py +2 -29
- nautobot/core/settings.yaml +0 -21
- nautobot/core/tables.py +60 -74
- nautobot/core/templates/inc/media.html +0 -3
- nautobot/core/templates/inc/nav_menu.html +0 -1
- nautobot/core/templates/nautobot_config.py.j2 +0 -13
- nautobot/core/templates/search.html +0 -7
- 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 +0 -7
- nautobot/core/templatetags/helpers.py +2 -11
- nautobot/core/testing/__init__.py +8 -8
- nautobot/core/testing/api.py +15 -170
- nautobot/core/testing/filters.py +2 -25
- nautobot/core/testing/forms.py +0 -2
- nautobot/core/testing/mixins.py +2 -7
- nautobot/core/testing/views.py +29 -44
- nautobot/core/tests/integration/test_app_home.py +1 -0
- nautobot/core/tests/integration/test_app_navbar.py +1 -0
- nautobot/core/tests/integration/test_filters.py +2 -0
- nautobot/core/tests/integration/test_home.py +1 -0
- nautobot/core/tests/integration/test_navbar.py +1 -0
- nautobot/core/tests/integration/test_view_authentication.py +0 -1
- nautobot/core/tests/runner.py +1 -1
- nautobot/core/tests/test_api.py +1 -98
- nautobot/core/tests/test_csv.py +3 -25
- nautobot/core/tests/test_forms.py +0 -1
- nautobot/core/tests/test_jobs.py +1 -303
- nautobot/core/tests/test_settings_schema.py +0 -7
- nautobot/core/tests/test_tables.py +0 -100
- nautobot/core/tests/test_utils.py +1 -63
- nautobot/core/tests/test_views.py +3 -30
- nautobot/core/ui/nav.py +0 -1
- nautobot/core/ui/object_detail.py +1 -15
- nautobot/core/urls.py +0 -11
- nautobot/core/utils/lookup.py +8 -11
- nautobot/core/utils/requests.py +9 -24
- nautobot/core/views/__init__.py +0 -42
- nautobot/core/views/generic.py +176 -78
- nautobot/core/views/mixins.py +34 -94
- nautobot/core/views/renderers.py +6 -6
- nautobot/dcim/api/serializers.py +62 -54
- nautobot/dcim/api/views.py +113 -47
- nautobot/dcim/filters/__init__.py +2 -31
- nautobot/dcim/forms.py +17 -36
- nautobot/dcim/graphql/types.py +2 -2
- nautobot/dcim/models/__init__.py +1 -1
- nautobot/dcim/models/device_component_templates.py +2 -2
- nautobot/dcim/models/device_components.py +20 -22
- nautobot/dcim/models/devices.py +1 -10
- nautobot/dcim/models/locations.py +3 -3
- nautobot/dcim/models/power.py +5 -6
- nautobot/dcim/models/racks.py +4 -4
- nautobot/dcim/tables/__init__.py +3 -3
- nautobot/dcim/tables/devices.py +5 -7
- nautobot/dcim/tables/devicetypes.py +2 -2
- nautobot/dcim/tables/racks.py +1 -1
- nautobot/dcim/templates/dcim/controller_create.html +7 -1
- nautobot/dcim/templates/dcim/controller_retrieve.html +9 -1
- nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +0 -2
- nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +0 -5
- nautobot/dcim/templates/dcim/device.html +9 -1
- nautobot/dcim/templates/dcim/device_edit.html +37 -36
- nautobot/dcim/templates/dcim/location.html +9 -1
- nautobot/dcim/templates/dcim/location_edit.html +7 -1
- nautobot/dcim/templates/dcim/rack.html +9 -1
- nautobot/dcim/templates/dcim/rack_edit.html +7 -1
- nautobot/dcim/templates/dcim/rackreservation.html +9 -1
- nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +9 -1
- nautobot/dcim/templates/dcim/virtualdevicecontext_update.html +7 -1
- nautobot/dcim/tests/test_api.py +3 -16
- nautobot/dcim/tests/test_filters.py +0 -33
- nautobot/dcim/tests/test_forms.py +2 -51
- nautobot/dcim/tests/test_graphql.py +0 -52
- nautobot/dcim/tests/test_models.py +5 -34
- nautobot/dcim/tests/test_views.py +83 -21
- nautobot/dcim/views.py +13 -1
- nautobot/extras/api/customfields.py +2 -2
- nautobot/extras/api/serializers.py +85 -90
- nautobot/extras/api/views.py +27 -22
- nautobot/extras/constants.py +0 -2
- nautobot/extras/filters/__init__.py +6 -8
- nautobot/extras/forms/base.py +2 -2
- nautobot/extras/forms/forms.py +31 -139
- nautobot/extras/forms/mixins.py +5 -13
- nautobot/extras/group_sync.py +3 -3
- nautobot/extras/health_checks.py +2 -1
- nautobot/extras/jobs.py +12 -70
- nautobot/extras/managers.py +1 -3
- nautobot/extras/migrations/0018_joblog_data_migration.py +9 -7
- nautobot/extras/models/__init__.py +1 -1
- nautobot/extras/models/contacts.py +1 -1
- nautobot/extras/models/customfields.py +11 -12
- nautobot/extras/models/groups.py +9 -11
- nautobot/extras/models/jobs.py +4 -23
- nautobot/extras/models/models.py +2 -2
- nautobot/extras/plugins/__init__.py +2 -13
- nautobot/extras/plugins/marketplace_manifest.yml +79 -84
- nautobot/extras/plugins/tables.py +14 -16
- nautobot/extras/plugins/views.py +69 -65
- nautobot/extras/registry.py +1 -1
- nautobot/extras/secrets/__init__.py +2 -2
- nautobot/extras/tables.py +5 -7
- nautobot/extras/templates/extras/dynamicgroup.html +9 -1
- nautobot/extras/templates/extras/job_detail.html +0 -16
- nautobot/extras/templates/extras/job_edit.html +0 -1
- nautobot/extras/templates/extras/jobqueue_retrieve.html +9 -1
- nautobot/extras/templates/extras/marketplace.html +11 -29
- nautobot/extras/templates/extras/plugin_detail.html +15 -32
- nautobot/extras/templates/extras/plugins_tiles.html +10 -21
- 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 +1 -3
- 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/soft_time_limit_greater_than_time_limit.py +1 -1
- nautobot/extras/test_jobs/task_queues.py +1 -1
- nautobot/extras/tests/integration/test_plugin_banner.py +2 -0
- nautobot/extras/tests/test_api.py +13 -13
- nautobot/extras/tests/test_customfields.py +1 -1
- nautobot/extras/tests/test_datasources.py +1 -2
- nautobot/extras/tests/test_dynamicgroups.py +1 -1
- nautobot/extras/tests/test_filters.py +6 -6
- nautobot/extras/tests/test_forms.py +1 -20
- nautobot/extras/tests/test_jobs.py +19 -160
- nautobot/extras/tests/test_models.py +10 -10
- nautobot/extras/tests/test_plugins.py +9 -62
- nautobot/extras/tests/test_relationships.py +9 -120
- nautobot/extras/tests/test_views.py +191 -52
- nautobot/extras/utils.py +2 -3
- nautobot/extras/views.py +98 -30
- nautobot/ipam/api/fields.py +3 -3
- nautobot/ipam/api/serializers.py +33 -41
- nautobot/ipam/api/views.py +117 -68
- nautobot/ipam/factory.py +1 -1
- nautobot/ipam/filters.py +2 -3
- nautobot/ipam/lookups.py +62 -101
- nautobot/ipam/models.py +16 -66
- nautobot/ipam/querysets.py +2 -2
- nautobot/ipam/tables.py +7 -23
- nautobot/ipam/templates/ipam/ipaddress.html +9 -1
- nautobot/ipam/templates/ipam/ipaddress_bulk_add.html +7 -1
- nautobot/ipam/templates/ipam/ipaddress_edit.html +7 -1
- nautobot/ipam/templates/ipam/prefix.html +9 -1
- nautobot/ipam/templates/ipam/prefix_edit.html +7 -1
- nautobot/ipam/templates/ipam/vlan.html +9 -1
- nautobot/ipam/templates/ipam/vlan_edit.html +7 -1
- nautobot/ipam/templates/ipam/vrf_edit.html +7 -1
- nautobot/ipam/tests/test_api.py +3 -416
- nautobot/ipam/tests/test_forms.py +47 -49
- nautobot/ipam/tests/test_migrations.py +30 -30
- nautobot/ipam/tests/test_models.py +34 -95
- nautobot/ipam/tests/test_querysets.py +1 -63
- nautobot/ipam/tests/test_views.py +0 -3
- nautobot/ipam/utils/__init__.py +6 -36
- nautobot/ipam/views.py +87 -61
- 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 +2 -40
- 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 +4 -46
- nautobot/project-static/docs/apps/index.html +4 -46
- nautobot/project-static/docs/apps/nautobot-apps.html +6 -47
- nautobot/project-static/docs/assets/_mkdocstrings.css +1 -25
- nautobot/project-static/docs/assets/javascripts/{bundle.88dd0f4e.min.js → bundle.83f73b43.min.js} +2 -2
- nautobot/project-static/docs/assets/javascripts/{bundle.88dd0f4e.min.js.map → bundle.83f73b43.min.js.map} +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +10 -62
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +7 -59
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +122 -374
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +18 -90
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +21 -95
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +6 -53
- nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +5 -52
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +17 -79
- nautobot/project-static/docs/code-reference/nautobot/apps/events.html +28 -102
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +21 -108
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +38 -131
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +65 -239
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +165 -581
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +36 -109
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +167 -453
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +211 -493
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +8 -60
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +15 -71
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +55 -407
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +205 -585
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +412 -858
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +7 -59
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +186 -448
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +147 -365
- nautobot/project-static/docs/development/apps/api/configuration-view.html +4 -46
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +4 -46
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +4 -46
- nautobot/project-static/docs/development/apps/api/models/global-search.html +4 -46
- nautobot/project-static/docs/development/apps/api/models/graphql.html +4 -46
- nautobot/project-static/docs/development/apps/api/models/index.html +4 -46
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +4 -46
- nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +7 -68
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +4 -46
- nautobot/project-static/docs/development/apps/api/prometheus.html +4 -46
- nautobot/project-static/docs/development/apps/api/setup.html +4 -46
- nautobot/project-static/docs/development/apps/api/testing.html +4 -46
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +4 -46
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +4 -46
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +4 -46
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +4 -46
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/base-template.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/index.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/notes.html +4 -46
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +6 -52
- nautobot/project-static/docs/development/apps/api/views/urls.html +4 -46
- nautobot/project-static/docs/development/apps/index.html +4 -46
- nautobot/project-static/docs/development/apps/migration/code-updates.html +4 -46
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +4 -46
- nautobot/project-static/docs/development/apps/migration/from-v1.html +4 -46
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +4 -46
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +4 -46
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +4 -46
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +4 -46
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +8 -50
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +4 -46
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +14 -211
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +4 -46
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +4 -46
- nautobot/project-static/docs/development/core/application-registry.html +4 -46
- nautobot/project-static/docs/development/core/best-practices.html +4 -46
- nautobot/project-static/docs/development/core/bootstrap-ui.html +4 -46
- nautobot/project-static/docs/development/core/caching.html +4 -46
- nautobot/project-static/docs/development/core/controllers.html +4 -46
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +74 -73
- nautobot/project-static/docs/development/core/generic-views.html +4 -46
- nautobot/project-static/docs/development/core/getting-started.html +224 -249
- nautobot/project-static/docs/development/core/homepage.html +7 -49
- nautobot/project-static/docs/development/core/index.html +4 -46
- nautobot/project-static/docs/development/core/{minikube-dev-environment-for-k8s-jobs.html → local-k8s.html} +168 -469
- nautobot/project-static/docs/development/core/model-checklist.html +12 -56
- nautobot/project-static/docs/development/core/model-features.html +4 -46
- nautobot/project-static/docs/development/core/natural-keys.html +4 -46
- nautobot/project-static/docs/development/core/navigation-menu.html +4 -46
- nautobot/project-static/docs/development/core/release-checklist.html +7 -49
- nautobot/project-static/docs/development/core/role-internals.html +4 -46
- nautobot/project-static/docs/development/core/settings.html +4 -46
- nautobot/project-static/docs/development/core/style-guide.html +7 -49
- nautobot/project-static/docs/development/core/templates.html +4 -46
- nautobot/project-static/docs/development/core/testing.html +4 -46
- nautobot/project-static/docs/development/core/ui-component-framework.html +273 -369
- nautobot/project-static/docs/development/core/user-preferences.html +4 -46
- nautobot/project-static/docs/development/index.html +4 -46
- nautobot/project-static/docs/development/jobs/index.html +122 -216
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +4 -46
- nautobot/project-static/docs/index.html +23 -54
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/overview/application_stack.html +7 -47
- nautobot/project-static/docs/overview/design_philosophy.html +4 -46
- nautobot/project-static/docs/release-notes/index.html +12 -52
- nautobot/project-static/docs/release-notes/version-1.0.html +193 -234
- nautobot/project-static/docs/release-notes/version-1.1.html +190 -231
- nautobot/project-static/docs/release-notes/version-1.2.html +265 -306
- nautobot/project-static/docs/release-notes/version-1.3.html +291 -332
- nautobot/project-static/docs/release-notes/version-1.4.html +377 -417
- nautobot/project-static/docs/release-notes/version-1.5.html +566 -605
- nautobot/project-static/docs/release-notes/version-1.6.html +447 -904
- nautobot/project-static/docs/release-notes/version-2.0.html +489 -528
- nautobot/project-static/docs/release-notes/version-2.1.html +324 -363
- nautobot/project-static/docs/release-notes/version-2.2.html +317 -356
- nautobot/project-static/docs/release-notes/version-2.3.html +352 -997
- nautobot/project-static/docs/release-notes/version-2.4.html +101 -417
- nautobot/project-static/docs/requirements.txt +2 -2
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +287 -295
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +4 -46
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +4 -46
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +6 -48
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +4 -46
- nautobot/project-static/docs/user-guide/administration/configuration/redis.html +4 -46
- nautobot/project-static/docs/user-guide/administration/configuration/settings.html +8 -110
- nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +4 -46
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +4 -46
- nautobot/project-static/docs/user-guide/administration/guides/docker.html +4 -46
- nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +4 -46
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +4 -46
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +4 -46
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +4 -46
- nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +4 -46
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +6 -48
- nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +4 -46
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +4 -46
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +4 -46
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +8 -66
- nautobot/project-static/docs/user-guide/administration/installation/index.html +4 -46
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +5 -47
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +4 -46
- nautobot/project-static/docs/user-guide/administration/installation/services.html +4 -46
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +4 -46
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +4 -46
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +4 -46
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +4 -46
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +4 -46
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +4 -46
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +4 -46
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +4 -46
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +4 -46
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +8 -49
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +4 -46
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +4 -46
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +12 -50
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +7 -49
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +4 -46
- nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +7 -51
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +4 -46
- nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +7 -49
- nautobot/project-static/docs/user-guide/index.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +8 -50
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/events.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +7 -50
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +7 -49
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +5 -47
- nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +25 -94
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +5 -74
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +4 -46
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +4 -46
- nautobot/project-static/js/forms.js +1 -1
- nautobot/tenancy/api/views.py +13 -9
- nautobot/tenancy/views.py +2 -4
- nautobot/users/admin.py +1 -1
- nautobot/users/api/serializers.py +4 -5
- nautobot/users/api/views.py +3 -3
- nautobot/virtualization/api/serializers.py +4 -4
- nautobot/virtualization/api/views.py +24 -5
- nautobot/virtualization/filters.py +3 -20
- nautobot/virtualization/models.py +1 -1
- nautobot/virtualization/tables.py +2 -2
- nautobot/virtualization/templates/virtualization/cluster_edit.html +7 -1
- nautobot/virtualization/templates/virtualization/virtualmachine.html +9 -1
- nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +8 -2
- nautobot/virtualization/tests/test_filters.py +0 -17
- nautobot/wireless/filters.py +2 -2
- nautobot/wireless/forms.py +1 -1
- nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +9 -1
- nautobot/wireless/tests/test_filters.py +1 -29
- nautobot/wireless/views.py +10 -0
- {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/METADATA +6 -6
- {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/RECORD +543 -591
- {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/WHEEL +1 -1
- nautobot/core/api/constants.py +0 -11
- nautobot/core/jobs/bulk_actions.py +0 -248
- nautobot/core/templates/about.html +0 -67
- nautobot/core/templates/inc/tenancy_form_panel.html +0 -9
- nautobot/core/templates/inc/tenant_table_row.html +0 -11
- nautobot/core/utils/querysets.py +0 -64
- nautobot/dcim/migrations/0067_controllermanageddevicegroup_tenant.py +0 -25
- nautobot/dcim/tests/integration/test_controller.py +0 -62
- nautobot/dcim/tests/integration/test_controller_managed_device_group.py +0 -71
- nautobot/dcim/tests/test_jobs.py +0 -118
- nautobot/extras/migrations/0120_job_is_singleton_job_is_singleton_override.py +0 -22
- nautobot/extras/migrations/0121_alter_team_contacts.py +0 -17
- nautobot/extras/test_jobs/singleton.py +0 -16
- 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/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/wireless-networks-and-controllers.html +0 -9444
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +0 -9722
- nautobot/wireless/tests/integration/__init__.py +0 -0
- nautobot/wireless/tests/integration/test_radio_profile.py +0 -42
- {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/NOTICE +0 -0
- {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/entry_points.txt +0 -0
nautobot/core/tables.py
CHANGED
|
@@ -4,6 +4,7 @@ import logging
|
|
|
4
4
|
from django.contrib.auth.models import AnonymousUser
|
|
5
5
|
from django.contrib.contenttypes.fields import GenericForeignKey
|
|
6
6
|
from django.core.exceptions import FieldDoesNotExist, FieldError
|
|
7
|
+
from django.db import NotSupportedError
|
|
7
8
|
from django.db.models import Prefetch
|
|
8
9
|
from django.db.models.fields.related import ForeignKey, RelatedField
|
|
9
10
|
from django.db.models.fields.reverse_related import ManyToOneRel
|
|
@@ -13,15 +14,13 @@ from django.utils.http import urlencode
|
|
|
13
14
|
from django.utils.safestring import mark_safe
|
|
14
15
|
from django.utils.text import Truncator
|
|
15
16
|
import django_tables2
|
|
16
|
-
from django_tables2.data import
|
|
17
|
-
from django_tables2.rows import BoundRows
|
|
17
|
+
from django_tables2.data import TableQuerysetData
|
|
18
18
|
from django_tables2.utils import Accessor, OrderBy, OrderByTuple
|
|
19
19
|
from tree_queries.models import TreeNode
|
|
20
20
|
|
|
21
21
|
from nautobot.core.models.querysets import count_related
|
|
22
22
|
from nautobot.core.templatetags import helpers
|
|
23
23
|
from nautobot.core.utils.lookup import get_model_for_view_name, get_related_field_for_models, get_route_for_model
|
|
24
|
-
from nautobot.core.utils.querysets import maybe_prefetch_related, maybe_select_related
|
|
25
24
|
from nautobot.extras import choices, models
|
|
26
25
|
|
|
27
26
|
logger = logging.getLogger(__name__)
|
|
@@ -47,27 +46,8 @@ class BaseTable(django_tables2.Table):
|
|
|
47
46
|
user=None,
|
|
48
47
|
hide_hierarchy_ui=False,
|
|
49
48
|
order_by=None,
|
|
50
|
-
data_transform_callback=None,
|
|
51
49
|
**kwargs,
|
|
52
50
|
):
|
|
53
|
-
"""
|
|
54
|
-
Instantiate a BaseTable.
|
|
55
|
-
|
|
56
|
-
Args:
|
|
57
|
-
*args (list, optional): Passed through to django_tables2.Table
|
|
58
|
-
table_changes_pending (bool): TODO
|
|
59
|
-
saved_view (SavedView, optional): TODO
|
|
60
|
-
user (User, optional): TODO
|
|
61
|
-
hide_hierarchy_ui (bool): Whether to display or hide hierarchy indentation of nested objects.
|
|
62
|
-
order_by (list, optional): Field(s) to sort by
|
|
63
|
-
data_transform_callback (function, optional): A function that takes the given `data` as an input and
|
|
64
|
-
returns new data. Runs after all of the queryset auto-optimization performed by this class.
|
|
65
|
-
Used for example in IPAM views to inject "fake" records for "available" Prefixes, IPAddresses, or VLANs.
|
|
66
|
-
**kwargs (dict, optional): Passed through to django_tables2.Table
|
|
67
|
-
Warning:
|
|
68
|
-
Do not modify/set the `base_columns` attribute after BaseTable class is instantiated.
|
|
69
|
-
Do not modify/set the `base_columns` attribute after calling super().__init__() of BaseTable class.
|
|
70
|
-
"""
|
|
71
51
|
# Add custom field columns
|
|
72
52
|
model = self._meta.model
|
|
73
53
|
|
|
@@ -109,14 +89,6 @@ class BaseTable(django_tables2.Table):
|
|
|
109
89
|
# Init table
|
|
110
90
|
super().__init__(*args, order_by=order_by, **kwargs)
|
|
111
91
|
|
|
112
|
-
if not isinstance(self.data, TableQuerysetData):
|
|
113
|
-
# LinkedCountColumns don't work properly if the data is a list of dicts instead of a queryset,
|
|
114
|
-
# as they rely on a `queryset.annotate()` call to gather the data.
|
|
115
|
-
self.exclude = [
|
|
116
|
-
*self.exclude,
|
|
117
|
-
*[column.name for column in self.columns if isinstance(column.column, LinkedCountColumn)],
|
|
118
|
-
]
|
|
119
|
-
|
|
120
92
|
# Don't show hierarchy if we're sorted
|
|
121
93
|
if order_by is not None and hide_hierarchy_ui is None:
|
|
122
94
|
hide_hierarchy_ui = True
|
|
@@ -150,7 +122,7 @@ class BaseTable(django_tables2.Table):
|
|
|
150
122
|
columns = user.get_config(f"tables.{self.__class__.__name__}.columns")
|
|
151
123
|
if columns:
|
|
152
124
|
for name, column in self.base_columns.items():
|
|
153
|
-
if name in columns
|
|
125
|
+
if name in columns:
|
|
154
126
|
self.columns.show(name)
|
|
155
127
|
else:
|
|
156
128
|
self.columns.hide(name)
|
|
@@ -189,8 +161,7 @@ class BaseTable(django_tables2.Table):
|
|
|
189
161
|
logger.error("Couldn't find model for %s", column.column.viewname)
|
|
190
162
|
continue
|
|
191
163
|
reverse_lookup = column.column.reverse_lookup or next(iter(column.column.url_params.keys()))
|
|
192
|
-
|
|
193
|
-
count_fields.append((column.name, column_model, reverse_lookup, distinct))
|
|
164
|
+
count_fields.append((column.name, column_model, reverse_lookup))
|
|
194
165
|
try:
|
|
195
166
|
lookup = column.column.lookup or get_related_field_for_models(model, column_model).name
|
|
196
167
|
# For some reason get_related_field_for_models(Tag, DynamicGroup) gives a M2M with the name
|
|
@@ -202,8 +173,7 @@ class BaseTable(django_tables2.Table):
|
|
|
202
173
|
if lookup is not None:
|
|
203
174
|
# Also attempt to prefetch the first matching record for display - see LinkedCountColumn
|
|
204
175
|
prefetch_fields.append(
|
|
205
|
-
|
|
206
|
-
Prefetch(lookup, column_model.objects.order_by()[:1], to_attr=f"{lookup}_list")
|
|
176
|
+
Prefetch(lookup, column_model.objects.all()[:1], to_attr=f"{lookup}_list")
|
|
207
177
|
)
|
|
208
178
|
continue
|
|
209
179
|
|
|
@@ -239,46 +209,75 @@ class BaseTable(django_tables2.Table):
|
|
|
239
209
|
prefetch_fields.append("__".join(prefetch_path))
|
|
240
210
|
|
|
241
211
|
if select_fields:
|
|
242
|
-
|
|
212
|
+
# Django doesn't allow .select_related() on a QuerySet that had .values()/.values_list() applied, or
|
|
213
|
+
# one that has had union()/intersection()/difference() applied.
|
|
214
|
+
# We can detect and avoid these cases the same way that Django itself does.
|
|
215
|
+
if queryset._fields is not None:
|
|
216
|
+
logger.debug(
|
|
217
|
+
"NOT applying select_related(%s) to %s QuerySet as it includes .values()/.values_list()",
|
|
218
|
+
select_fields,
|
|
219
|
+
model.__name__,
|
|
220
|
+
)
|
|
221
|
+
elif queryset.query.combinator:
|
|
222
|
+
logger.debug(
|
|
223
|
+
"NOT applying select_related(%s) to %s QuerySet as it is a combinator query",
|
|
224
|
+
select_fields,
|
|
225
|
+
model.__name__,
|
|
226
|
+
)
|
|
227
|
+
else:
|
|
228
|
+
logger.debug("Applying .select_related(%s) to %s QuerySet", select_fields, model.__name__)
|
|
229
|
+
# Belt and suspenders - we should have avoided any error cases above, but be safe anyway:
|
|
230
|
+
try:
|
|
231
|
+
queryset = queryset.select_related(*select_fields)
|
|
232
|
+
except (TypeError, ValueError, NotSupportedError) as exc:
|
|
233
|
+
logger.warning(
|
|
234
|
+
"Unexpected error when trying to .select_related() on %s QuerySet: %s",
|
|
235
|
+
model.__name__,
|
|
236
|
+
exc,
|
|
237
|
+
)
|
|
243
238
|
|
|
244
239
|
if prefetch_fields:
|
|
245
|
-
|
|
240
|
+
if queryset.query.combinator:
|
|
241
|
+
logger.debug(
|
|
242
|
+
"NOT applying prefetch_related(%s) to %s QuerySet as it is a combinator query",
|
|
243
|
+
prefetch_fields,
|
|
244
|
+
model.__name__,
|
|
245
|
+
)
|
|
246
|
+
else:
|
|
247
|
+
logger.debug("Applying .prefetch_related(%s) to %s QuerySet", prefetch_fields, model.__name__)
|
|
248
|
+
# Belt and suspenders - we should have avoided any error cases above, but be safe anyway:
|
|
249
|
+
try:
|
|
250
|
+
queryset = queryset.prefetch_related(*prefetch_fields)
|
|
251
|
+
except (AttributeError, TypeError, ValueError, NotSupportedError) as exc:
|
|
252
|
+
logger.warning(
|
|
253
|
+
"Unexpected error when trying to .prefetch_related() on %s QuerySet: %s",
|
|
254
|
+
model.__name__,
|
|
255
|
+
exc,
|
|
256
|
+
)
|
|
246
257
|
|
|
247
258
|
if count_fields:
|
|
248
|
-
for column_name, column_model, lookup_name
|
|
259
|
+
for column_name, column_model, lookup_name in count_fields:
|
|
249
260
|
if hasattr(queryset.first(), column_name):
|
|
250
261
|
continue
|
|
251
262
|
try:
|
|
252
263
|
logger.debug(
|
|
253
|
-
"Applying .annotate(%s=count_related(%s, %r
|
|
264
|
+
"Applying .annotate(%s=count_related(%s, %r) to %s QuerySet",
|
|
254
265
|
column_name,
|
|
255
266
|
column_model.__name__,
|
|
256
267
|
lookup_name,
|
|
257
|
-
distinct,
|
|
258
268
|
model.__name__,
|
|
259
269
|
)
|
|
260
|
-
queryset = queryset.annotate(
|
|
261
|
-
**{column_name: count_related(column_model, lookup_name, distinct=distinct)}
|
|
262
|
-
)
|
|
270
|
+
queryset = queryset.annotate(**{column_name: count_related(column_model, lookup_name)})
|
|
263
271
|
except FieldError:
|
|
264
272
|
# No error message logged here as the above is *very much* best-effort
|
|
265
273
|
pass
|
|
266
274
|
|
|
267
275
|
self.data.data = queryset
|
|
268
276
|
|
|
269
|
-
# TODO: it would be better if we could apply this transformation and the above queryset optimizations
|
|
270
|
-
# **before** calling super().__init__(), but the current implementation works for now, though inelegant.
|
|
271
|
-
if data_transform_callback is not None:
|
|
272
|
-
self.data = TableData.from_data(data_transform_callback(self.data.data))
|
|
273
|
-
self.data.set_table(self)
|
|
274
|
-
self.rows = BoundRows(data=self.data, table=self, pinned_data=self.pinned_data)
|
|
275
|
-
|
|
276
277
|
@property
|
|
277
278
|
def configurable_columns(self):
|
|
278
279
|
selected_columns = [
|
|
279
|
-
(name,
|
|
280
|
-
for name, column in self.columns.items()
|
|
281
|
-
if name in self.sequence and name not in ["pk", "actions"]
|
|
280
|
+
(name, self.columns[name].verbose_name) for name in self.sequence if name not in ["pk", "actions"]
|
|
282
281
|
]
|
|
283
282
|
available_columns = [
|
|
284
283
|
(name, column.verbose_name)
|
|
@@ -289,7 +288,7 @@ class BaseTable(django_tables2.Table):
|
|
|
289
288
|
|
|
290
289
|
@property
|
|
291
290
|
def visible_columns(self):
|
|
292
|
-
return [name for name
|
|
291
|
+
return [name for name in self.sequence if self.columns[name].visible]
|
|
293
292
|
|
|
294
293
|
@property
|
|
295
294
|
def order_by(self):
|
|
@@ -444,7 +443,7 @@ class ChoiceFieldColumn(django_tables2.Column):
|
|
|
444
443
|
choices. The CSS class is derived by calling .get_FOO_class() on the row record.
|
|
445
444
|
"""
|
|
446
445
|
|
|
447
|
-
def render(self,
|
|
446
|
+
def render(self, record, bound_column, value): # pylint: disable=arguments-differ
|
|
448
447
|
if value:
|
|
449
448
|
name = bound_column.name
|
|
450
449
|
css_class = getattr(record, f"get_{name}_class")()
|
|
@@ -491,7 +490,6 @@ class LinkedCountColumn(django_tables2.Column):
|
|
|
491
490
|
TODO: this currently does *not* support nested lookups via `__`. That may be solvable in the future.
|
|
492
491
|
reverse_lookup (str, optional): The reverse lookup parameter to use to derive the count.
|
|
493
492
|
If not specified, the first key in `url_params` will be implicitly used as the `reverse_lookup` value.
|
|
494
|
-
distinct (bool, optional): Parameter passed through to `count_related()`.
|
|
495
493
|
**kwargs (dict, optional): As the parent Column class.
|
|
496
494
|
|
|
497
495
|
Examples:
|
|
@@ -516,37 +514,25 @@ class LinkedCountColumn(django_tables2.Column):
|
|
|
516
514
|
# We'd like to do the below but this module isn't currently smart enough to build the right Prefetch()
|
|
517
515
|
# for a nested lookup:
|
|
518
516
|
# lookup="circuit_terminations__circuit",
|
|
519
|
-
# For the count,
|
|
520
|
-
# .annotate(circuit_count=count_related(Circuit, "circuit_terminations__cloud_network", distinct=True))
|
|
517
|
+
# For the count, .annotate(circuit_count=count_related(Circuit, "circuit_terminations__cloud_network"))
|
|
521
518
|
reverse_lookup="circuit_terminations__cloud_network",
|
|
522
|
-
distinct=True,
|
|
523
519
|
verbose_name="Circuits",
|
|
524
520
|
)
|
|
525
521
|
```
|
|
526
522
|
"""
|
|
527
523
|
|
|
528
524
|
def __init__(
|
|
529
|
-
self,
|
|
530
|
-
viewname,
|
|
531
|
-
*args,
|
|
532
|
-
view_kwargs=None,
|
|
533
|
-
url_params=None,
|
|
534
|
-
lookup=None,
|
|
535
|
-
reverse_lookup=None,
|
|
536
|
-
distinct=False,
|
|
537
|
-
default=None,
|
|
538
|
-
**kwargs,
|
|
525
|
+
self, viewname, *args, view_kwargs=None, url_params=None, lookup=None, reverse_lookup=None, default=0, **kwargs
|
|
539
526
|
):
|
|
540
527
|
self.viewname = viewname
|
|
541
528
|
self.lookup = lookup
|
|
542
529
|
self.view_kwargs = view_kwargs or {}
|
|
543
530
|
self.url_params = url_params
|
|
544
531
|
self.reverse_lookup = reverse_lookup or next(iter(url_params.keys()))
|
|
545
|
-
self.distinct = distinct
|
|
546
532
|
self.model = get_model_for_view_name(self.viewname)
|
|
547
533
|
super().__init__(*args, default=default, **kwargs)
|
|
548
534
|
|
|
549
|
-
def render(self,
|
|
535
|
+
def render(self, bound_column, record, value): # pylint: disable=arguments-differ
|
|
550
536
|
related_record = None
|
|
551
537
|
try:
|
|
552
538
|
lookup = self.lookup or get_related_field_for_models(bound_column._table._meta.model, self.model).name
|
|
@@ -630,7 +616,7 @@ class ComputedFieldColumn(django_tables2.Column):
|
|
|
630
616
|
|
|
631
617
|
super().__init__(*args, **kwargs)
|
|
632
618
|
|
|
633
|
-
def render(self,
|
|
619
|
+
def render(self, record):
|
|
634
620
|
return self.computedfield.render({"obj": record})
|
|
635
621
|
|
|
636
622
|
|
|
@@ -649,7 +635,7 @@ class CustomFieldColumn(django_tables2.Column):
|
|
|
649
635
|
|
|
650
636
|
super().__init__(*args, **kwargs)
|
|
651
637
|
|
|
652
|
-
def render(self,
|
|
638
|
+
def render(self, record, bound_column, value): # pylint: disable=arguments-differ
|
|
653
639
|
if self.customfield.type == choices.CustomFieldTypeChoices.TYPE_BOOLEAN:
|
|
654
640
|
template = helpers.render_boolean(value)
|
|
655
641
|
elif self.customfield.type == choices.CustomFieldTypeChoices.TYPE_MULTISELECT:
|
|
@@ -680,7 +666,7 @@ class RelationshipColumn(django_tables2.Column):
|
|
|
680
666
|
kwargs.setdefault("accessor", Accessor("associations"))
|
|
681
667
|
super().__init__(orderable=False, *args, **kwargs)
|
|
682
668
|
|
|
683
|
-
def render(self,
|
|
669
|
+
def render(self, record, value): # pylint: disable=arguments-differ
|
|
684
670
|
# Filter the relationship associations by the relationship instance.
|
|
685
671
|
# Since associations accessor returns all the relationship associations regardless of the relationship.
|
|
686
672
|
value = [v for v in value if v.relationship == self.relationship]
|
|
@@ -47,6 +47,3 @@
|
|
|
47
47
|
<meta name="theme-color" content="#ffffff">
|
|
48
48
|
<meta charset="UTF-8">
|
|
49
49
|
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
|
|
50
|
-
{% if settings.PUBLISH_ROBOTS_TXT %}
|
|
51
|
-
<meta name="robots" content="noindex, nofollow">
|
|
52
|
-
{% endif %}
|
|
@@ -93,7 +93,6 @@
|
|
|
93
93
|
<span class="mdi mdi-chevron-down"></span>
|
|
94
94
|
</a>
|
|
95
95
|
<ul class="collapse nav-dropdown-menu" id="adminDropdown">
|
|
96
|
-
<li><a href="{% url 'about' %}"><i class="mdi mdi-information"></i> About</a></li>
|
|
97
96
|
<li><a href="{% url 'user:profile' %}"><i class="mdi mdi-account-box"></i> Profile</a></li>
|
|
98
97
|
{% if request.user.is_staff %}
|
|
99
98
|
<li><a href="{% url 'worker_status' %}"><i class="mdi mdi-server-network"></i> Worker Status</a></li>
|
|
@@ -463,16 +463,6 @@ INSTALLATION_METRICS_ENABLED = is_truthy(os.getenv("NAUTOBOT_INSTALLATION_METRIC
|
|
|
463
463
|
#
|
|
464
464
|
# NAPALM_ARGS = {}
|
|
465
465
|
|
|
466
|
-
# Expiration date (YYYY-MM-DD) for an active Nautobot support contract with Network to Code.
|
|
467
|
-
# Displayed in the About page.
|
|
468
|
-
# if (
|
|
469
|
-
# "NAUTOBOT_NTC_SUPPORT_CONTRACT_EXPIRATION_DATE" in os.environ
|
|
470
|
-
# and os.environ["NAUTOBOT_NTC_SUPPORT_CONTRACT_EXPIRATION_DATE"] != ""
|
|
471
|
-
# ):
|
|
472
|
-
# NTC_SUPPORT_CONTRACT_EXPIRATION_DATE = datetime.date.fromisoformat(
|
|
473
|
-
# os.environ["NAUTOBOT_NTC_SUPPORT_CONTRACT_EXPIRATION_DATE"]
|
|
474
|
-
# )
|
|
475
|
-
|
|
476
466
|
# Default number of objects to display per page of the UI and REST API. Default is 50
|
|
477
467
|
#
|
|
478
468
|
# if "NAUTOBOT_PAGINATE_COUNT" in os.environ and os.environ["NAUTOBOT_PAGINATE_COUNT"] != "":
|
|
@@ -503,9 +493,6 @@ INSTALLATION_METRICS_ENABLED = is_truthy(os.getenv("NAUTOBOT_INSTALLATION_METRIC
|
|
|
503
493
|
# if "NAUTOBOT_PREFER_IPV4" in os.environ and os.environ["NAUTOBOT_PREFER_IPV4"] != "":
|
|
504
494
|
# PREFER_IPV4 = is_truthy(os.environ["NAUTOBOT_PREFER_IPV4"])
|
|
505
495
|
|
|
506
|
-
# Publish a simple "no-index" robots.txt for Nautobot?
|
|
507
|
-
# PUBLISH_ROBOTS_TXT = is_truthy(os.getenv("NAUTOBOT_PUBLISH_ROBOTS_TXT", "True"))
|
|
508
|
-
|
|
509
496
|
# Default height and width in pixels of a single rack unit in rendered rack elevations. Defaults are 22 and 230
|
|
510
497
|
#
|
|
511
498
|
# if (
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
{% load helpers %}
|
|
2
2
|
|
|
3
|
-
{% if url_name %}<a href="{% url url_name %}?tags={{ tag.name }}">{% endif %}<span class="label" style="color: {{ tag.color|fgcolor }}; background-color: #{{ tag.color }}">{{ tag }}</span>{% if url_name %}</a>{% endif %}
|
|
3
|
+
{% if url_name %}<a href="{% url url_name %}?tags={{ tag.name }}">{% endif %}<span class="label label-default" style="color: {{ tag.color|fgcolor }}; background-color: #{{ tag.color }}">{{ tag }}</span>{% if url_name %}</a>{% endif %}
|
|
@@ -330,7 +330,6 @@
|
|
|
330
330
|
<small>title for most object views</small>
|
|
331
331
|
<span class="label label-default">Default</span>
|
|
332
332
|
<span class="label label-primary">Primary</span>
|
|
333
|
-
<span class="label label-transparent">Transparent</span>
|
|
334
333
|
<span class="label label-success">Success</span>
|
|
335
334
|
<span class="label label-info">Info</span>
|
|
336
335
|
<span class="label label-warning">Warning</span>
|
|
@@ -341,7 +340,6 @@
|
|
|
341
340
|
<small>used for special purposes such as Location detail "badges"</small>
|
|
342
341
|
<span class="label label-default">Default</span>
|
|
343
342
|
<span class="label label-primary">Primary</span>
|
|
344
|
-
<span class="label label-transparent">Transparent</span>
|
|
345
343
|
<span class="label label-success">Success</span>
|
|
346
344
|
<span class="label label-info">Info</span>
|
|
347
345
|
<span class="label label-warning">Warning</span>
|
|
@@ -352,7 +350,6 @@
|
|
|
352
350
|
<small>title for object create/edit forms</small>
|
|
353
351
|
<span class="label label-default">Default</span>
|
|
354
352
|
<span class="label label-primary">Primary</span>
|
|
355
|
-
<span class="label label-transparent">Transparent</span>
|
|
356
353
|
<span class="label label-success">Success</span>
|
|
357
354
|
<span class="label label-info">Info</span>
|
|
358
355
|
<span class="label label-warning">Warning</span>
|
|
@@ -363,7 +360,6 @@
|
|
|
363
360
|
<small>used in modal titles and a few others</small>
|
|
364
361
|
<span class="label label-default">Default</span>
|
|
365
362
|
<span class="label label-primary">Primary</span>
|
|
366
|
-
<span class="label label-transparent">Transparent</span>
|
|
367
363
|
<span class="label label-success">Success</span>
|
|
368
364
|
<span class="label label-info">Info</span>
|
|
369
365
|
<span class="label label-warning">Warning</span>
|
|
@@ -374,7 +370,6 @@
|
|
|
374
370
|
<small>used in user profiles and cable traces</small>
|
|
375
371
|
<span class="label label-default">Default</span>
|
|
376
372
|
<span class="label label-primary">Primary</span>
|
|
377
|
-
<span class="label label-transparent">Transparent</span>
|
|
378
373
|
<span class="label label-success">Success</span>
|
|
379
374
|
<span class="label label-info">Info</span>
|
|
380
375
|
<span class="label label-warning">Warning</span>
|
|
@@ -385,7 +380,6 @@
|
|
|
385
380
|
<small>Unused in core</small>
|
|
386
381
|
<span class="label label-default">Default</span>
|
|
387
382
|
<span class="label label-primary">Primary</span>
|
|
388
|
-
<span class="label label-transparent">Transparent</span>
|
|
389
383
|
<span class="label label-success">Success</span>
|
|
390
384
|
<span class="label label-info">Info</span>
|
|
391
385
|
<span class="label label-warning">Warning</span>
|
|
@@ -396,7 +390,6 @@
|
|
|
396
390
|
<small>Small text</small>
|
|
397
391
|
<span class="label label-default">Default</span>
|
|
398
392
|
<span class="label label-primary">Primary</span>
|
|
399
|
-
<span class="label label-transparent">Transparent</span>
|
|
400
393
|
<span class="label label-success">Success</span>
|
|
401
394
|
<span class="label label-info">Info</span>
|
|
402
395
|
<span class="label label-warning">Warning</span>
|
|
@@ -890,13 +890,7 @@ def saved_view_modal(
|
|
|
890
890
|
"clear_view",
|
|
891
891
|
]
|
|
892
892
|
|
|
893
|
-
|
|
894
|
-
table_name = None
|
|
895
|
-
if hasattr(view_class, "table"):
|
|
896
|
-
table_name = view_class.table.__name__
|
|
897
|
-
if hasattr(view_class, "table_class"):
|
|
898
|
-
table_name = view_class.table_class.__name__
|
|
899
|
-
|
|
893
|
+
table_name = lookup.get_table_for_model(model).__name__
|
|
900
894
|
for param in non_filter_params:
|
|
901
895
|
if param == "saved_view":
|
|
902
896
|
current_saved_view_pk = filters_applied.pop(param, None)
|
|
@@ -1050,13 +1044,12 @@ def versioned_static(file_path):
|
|
|
1050
1044
|
|
|
1051
1045
|
|
|
1052
1046
|
@register.simple_tag
|
|
1053
|
-
def tree_hierarchy_ui_representation(tree_depth, hide_hierarchy_ui
|
|
1047
|
+
def tree_hierarchy_ui_representation(tree_depth, hide_hierarchy_ui):
|
|
1054
1048
|
"""Generates a visual representation of a tree record hierarchy using dots.
|
|
1055
1049
|
|
|
1056
1050
|
Args:
|
|
1057
1051
|
tree_depth (range): A range representing the depth of the tree nodes.
|
|
1058
1052
|
hide_hierarchy_ui (bool): Indicates whether to hide the hierarchy UI.
|
|
1059
|
-
base_depth (int, optional): Starting depth (number of dots to skip rendering).
|
|
1060
1053
|
|
|
1061
1054
|
Returns:
|
|
1062
1055
|
str: A string containing dots (representing hierarchy levels) if `hide_hierarchy_ui` is False,
|
|
@@ -1064,8 +1057,6 @@ def tree_hierarchy_ui_representation(tree_depth, hide_hierarchy_ui, base_depth=0
|
|
|
1064
1057
|
"""
|
|
1065
1058
|
if hide_hierarchy_ui or tree_depth == 0:
|
|
1066
1059
|
return ""
|
|
1067
|
-
if isinstance(base_depth, int): # may be an empty string
|
|
1068
|
-
tree_depth = tree_depth[base_depth:]
|
|
1069
1060
|
ui_representation = " ".join(['<i class="mdi mdi-circle-small"></i>' for _ in tree_depth])
|
|
1070
1061
|
return mark_safe(ui_representation) # noqa: S308 # suspicious-mark-safe-usage, OK here since its just the `i` tag
|
|
1071
1062
|
|
|
@@ -21,23 +21,23 @@ from nautobot.extras.models import Job, JobResult
|
|
|
21
21
|
__all__ = (
|
|
22
22
|
"APITestCase",
|
|
23
23
|
"APIViewTestCases",
|
|
24
|
-
"FilterTestCases",
|
|
25
|
-
"JobClassInfo",
|
|
26
|
-
"ModelTestCase",
|
|
27
|
-
"ModelViewTestCase",
|
|
28
|
-
"NautobotTestCaseMixin",
|
|
29
|
-
"NautobotTestClient",
|
|
30
|
-
"TestCase",
|
|
31
|
-
"ViewTestCases",
|
|
32
24
|
"create_job_result_and_run_job",
|
|
33
25
|
"create_test_user",
|
|
34
26
|
"disable_warnings",
|
|
35
27
|
"extract_form_failures",
|
|
36
28
|
"extract_page_body",
|
|
29
|
+
"FilterTestCases",
|
|
37
30
|
"get_deletable_objects",
|
|
38
31
|
"get_job_class_and_model",
|
|
32
|
+
"JobClassInfo",
|
|
33
|
+
"ModelTestCase",
|
|
34
|
+
"ModelViewTestCase",
|
|
35
|
+
"NautobotTestCaseMixin",
|
|
36
|
+
"NautobotTestClient",
|
|
39
37
|
"post_data",
|
|
40
38
|
"run_job_for_testing",
|
|
39
|
+
"TestCase",
|
|
40
|
+
"ViewTestCases",
|
|
41
41
|
)
|
|
42
42
|
|
|
43
43
|
# Use the proper swappable User model
|