Coverage report: 91%

Files Functions Classes

coverage.py v7.17.0, created at 2026-10-24 19:06 +0000

File function   statements missing excluded   coverage
cluster/__init__.py (no function)   1 0 0   100%
cluster/forms.py Form.__init__   6 0 0   100%
cluster/forms.py (no function)   12 0 0   100%
cluster/models.py ModelManager.get_by_natural_key   1 0 0   100%
cluster/models.py Model.natural_key   1 0 0   100%
cluster/models.py Model.get_natural_key_fields   1 1 0   0%
cluster/models.py Model.get_natural_key_info   1 1 0   0%
cluster/models.py Model.__str__   1 0 0   100%
cluster/models.py Model.get_absolute_url   1 0 0   100%
cluster/models.py (no function)   26 0 0   100%
cluster/urls.py (no function)   4 0 0   100%
cluster/views.py (no function)   46 0 0   100%
clusterpackage/__init__.py (no function)   1 0 0   100%
clusterpackage/forms.py Form.__init__   3 0 0   100%
clusterpackage/forms.py Form.clean   19 1 0   95%
clusterpackage/forms.py (no function)   10 0 0   100%
clusterpackage/models.py ClusterPackageManager.get_by_natural_key   9 4 0   56%
clusterpackage/models.py Model.__str__   1 0 0   100%
clusterpackage/models.py Model.natural_key   1 0 0   100%
clusterpackage/models.py Model.get_natural_key_fields   1 1 0   0%
clusterpackage/models.py Model.get_natural_key_info   1 1 0   0%
clusterpackage/models.py Model.get_absolute_url   1 0 0   100%
clusterpackage/models.py (no function)   34 0 0   100%
clusterpackage/urls.py (no function)   4 0 0   100%
clusterpackage/views.py ListView.get_queryset   5 0 0   100%
clusterpackage/views.py DetailView.get_queryset   5 2 0   60%
clusterpackage/views.py UpdateView.get_form_kwargs   3 0 0   100%
clusterpackage/views.py UpdateView.form_valid   4 0 0   100%
clusterpackage/views.py UpdateView.get_queryset   5 2 0   60%
clusterpackage/views.py CreateView.get_form_kwargs   3 0 0   100%
clusterpackage/views.py CreateView.form_valid   6 0 0   100%
clusterpackage/views.py DeleteView.get_queryset   5 2 0   60%
clusterpackage/views.py (no function)   57 0 2   100%
clusterpackagetype/__init__.py (no function)   1 0 0   100%
clusterpackagetype/forms.py (no function)   7 0 0   100%
clusterpackagetype/models.py ClusterPackageTypeManager.get_by_natural_key   1 0 0   100%
clusterpackagetype/models.py Model.__str__   1 0 0   100%
clusterpackagetype/models.py Model.natural_key   1 0 0   100%
clusterpackagetype/models.py Model.get_natural_key_fields   1 1 0   0%
clusterpackagetype/models.py Model.get_natural_key_info   1 1 0   0%
clusterpackagetype/models.py Model.get_absolute_url   1 0 0   100%
clusterpackagetype/models.py (no function)   25 0 0   100%
clusterpackagetype/urls.py (no function)   4 0 0   100%
clusterpackagetype/views.py ListView.get_queryset   1 0 0   100%
clusterpackagetype/views.py (no function)   47 0 0   100%
clustersoftware/__init__.py (no function)   1 0 0   100%
clustersoftware/forms.py Form.__init__   2 0 0   100%
clustersoftware/forms.py (no function)   10 0 0   100%
clustersoftware/models.py ClusterSoftwareManager.get_by_natural_key   3 1 0   67%
clustersoftware/models.py Model.__str__   4 0 1   100%
clustersoftware/models.py Model.natural_key   1 0 0   100%
clustersoftware/models.py Model.get_natural_key_fields   1 1 0   0%
clustersoftware/models.py Model.get_natural_key_info   1 1 0   0%
clustersoftware/models.py Model.get_absolute_url   1 0 0   100%
clustersoftware/models.py (no function)   29 0 0   100%
clustersoftware/urls.py (no function)   4 0 0   100%
clustersoftware/views.py ListView.get_queryset   1 0 0   100%
clustersoftware/views.py CreateView.get_initial   8 1 0   88%
clustersoftware/views.py (no function)   48 0 0   100%
domain/__init__.py (no function)   1 0 0   100%
domain/forms.py (no function)   7 0 0   100%
domain/models.py ModelManager.get_by_natural_key   1 0 0   100%
domain/models.py Model.natural_key   1 0 0   100%
domain/models.py Model.get_natural_key_fields   1 1 0   0%
domain/models.py Model.get_natural_key_info   1 1 0   0%
domain/models.py Model.__str__   1 0 0   100%
domain/models.py Model.get_absolute_url   1 0 0   100%
domain/models.py (no function)   25 0 0   100%
domain/urls.py (no function)   4 0 0   100%
domain/views.py (no function)   47 0 2   100%
location/__init__.py (no function)   1 0 0   100%
location/forms.py (no function)   7 0 0   100%
location/models.py LocationManager.get_by_natural_key   1 0 0   100%
location/models.py Model.__str__   3 0 0   100%
location/models.py Model.natural_key   1 0 0   100%
location/models.py Model.get_natural_key_fields   1 1 0   0%
location/models.py Model.get_natural_key_info   1 1 0   0%
location/models.py Model.get_absolute_url   1 0 0   100%
location/models.py (no function)   27 0 0   100%
location/urls.py (no function)   4 0 0   100%
location/views.py (no function)   46 0 0   100%
operatingsystem/__init__.py (no function)   1 0 0   100%
operatingsystem/forms.py Form.__init__   2 0 0   100%
operatingsystem/forms.py (no function)   10 0 0   100%
operatingsystem/models.py Manager.get_by_natural_key   47 6 3   87%
operatingsystem/models.py Model.__str__   5 2 0   60%
operatingsystem/models.py Model.natural_key   1 0 0   100%
operatingsystem/models.py Model.get_natural_key_fields   1 1 0   0%
operatingsystem/models.py Model.get_natural_key_info   1 1 0   0%
operatingsystem/models.py Model.get_absolute_url   1 0 0   100%
operatingsystem/models.py (no function)   29 0 0   100%
operatingsystem/urls.py (no function)   4 0 0   100%
operatingsystem/views.py ListView.get_queryset   7 0 0   100%
operatingsystem/views.py CreateView.get_initial   4 1 0   75%
operatingsystem/views.py (no function)   49 0 0   100%
patchtime/__init__.py (no function)   1 0 0   100%
patchtime/forms.py (no function)   7 0 0   100%
patchtime/models.py ModelManager.get_by_natural_key   1 0 0   100%
patchtime/models.py Model.natural_key   1 0 0   100%
patchtime/models.py Model.get_natural_key_fields   1 1 0   0%
patchtime/models.py Model.get_natural_key_info   1 1 0   0%
patchtime/models.py Model.__str__   1 0 0   100%
patchtime/models.py Model.get_absolute_url   1 0 0   100%
patchtime/models.py (no function)   25 0 0   100%
patchtime/urls.py (no function)   4 0 0   100%
patchtime/views.py (no function)   46 0 0   100%
server/__init__.py (no function)   1 0 0   100%
server/forms.py Form.__init__   5 0 2   100%
server/forms.py (no function)   16 0 0   100%
server/models.py ServerManager.get_by_natural_key   3 3 0   0%
server/models.py Model.__str__   1 0 0   100%
server/models.py Model.is_decommissioned   1 0 0   100%
server/models.py Model.lifecycle_stage   5 1 0   80%
server/models.py Model.natural_key   1 1 0   0%
server/models.py Model.get_natural_key_fields   1 1 0   0%
server/models.py Model.get_natural_key_info   1 1 0   0%
server/models.py Model.get_absolute_url   1 0 0   100%
server/models.py (no function)   59 0 0   100%
server/urls.py (no function)   4 0 0   100%
server/views.py ListView.get_queryset   5 0 0   100%
server/views.py ListView.get_context_data   3 0 0   100%
server/views.py BulkActionView.post   39 8 0   79%
server/views.py DecommissionView.post   8 0 0   100%
server/views.py RestoreView.post   8 2 0   75%
server/views.py (no function)   63 0 0   100%
servermodel/__init__.py (no function)   1 0 0   100%
servermodel/forms.py Form.__init__   2 0 0   100%
servermodel/forms.py (no function)   10 0 0   100%
servermodel/models.py ServerModelManager.get_by_natural_key   3 1 0   67%
servermodel/models.py Model.__str__   1 0 0   100%
servermodel/models.py Model.natural_key   1 0 0   100%
servermodel/models.py Model.get_natural_key_fields   1 1 0   0%
servermodel/models.py Model.get_natural_key_info   1 1 0   0%
servermodel/models.py Model.get_absolute_url   1 0 0   100%
servermodel/models.py (no function)   28 0 0   100%
servermodel/urls.py (no function)   4 0 0   100%
servermodel/views.py ListView.get_queryset   7 0 0   100%
servermodel/views.py CreateView.get_initial   8 1 0   88%
servermodel/views.py (no function)   48 0 0   100%
sm/__init__.py (no function)   0 0 0   100%
sm/adapter.py MySocialAccountAdapter.pre_social_login   12 0 0   100%
sm/adapter.py (no function)   4 0 0   100%
sm/admin.py GroupAdminWithProfile.profile_owner   2 2 0   0%
sm/admin.py GroupAdminWithProfile.profile_max_items   2 2 0   0%
sm/admin.py GroupAdminWithProfile.profile_max_users   2 2 0   0%
sm/admin.py (no function)   110 0 0   100%
sm/api/authentication.py ApiKeyAuthentication.authenticate   19 0 0   100%
sm/api/authentication.py ApiKeyAuthentication.authenticate_header   1 0 0   100%
sm/api/authentication.py ApiKeyAuthenticationScheme.get_security_requirement   1 1 0   0%
sm/api/authentication.py ApiKeyAuthenticationScheme.get_security_definition   1 1 0   0%
sm/api/authentication.py (no function)   17 0 0   100%
sm/api/permissions.py (no function)   3 0 0   100%
sm/api/serializers.py TenantSlugRelatedField.get_queryset   4 1 0   75%
sm/api/serializers.py TenantPrimaryKeyRelatedField.get_queryset   4 1 0   75%
sm/api/serializers.py CoercingDateField.to_representation   3 0 0   100%
sm/api/serializers.py ServerSerializer.to_internal_value   3 0 0   100%
sm/api/serializers.py ClusterPackageSerializer.validate   17 2 0   88%
sm/api/serializers.py (no function)   108 0 0   100%
sm/api/views.py (no function)   88 0 0   100%
sm/apps.py SmConfig.ready   4 0 0   100%
sm/apps.py (no function)   5 0 0   100%
sm/context_processors.py theme_settings   1 0 0   100%
sm/context_processors.py (no function)   3 0 0   100%
sm/forms.py SMForm.__init__   3 0 0   100%
sm/forms.py SMForm.scope_querysets   5 0 0   100%
sm/forms.py UniquePerGroupMixin.clean   15 1 0   93%
sm/forms.py SMFormDisabled.__init__   7 0 0   100%
sm/forms.py (no function)   19 0 0   100%
sm/forms_admin.py (no function)   6 0 0   100%
sm/management/__init__.py (no function)   0 0 0   100%
sm/management/commands/__init__.py (no function)   0 0 0   100%
sm/management/commands/add_testdata.py Command.handle   25 25 0   0%
sm/management/commands/add_testdata.py (no function)   6 6 0   0%
sm/management/commands/cleanup_api_keys.py Command.add_arguments   2 0 0   100%
sm/management/commands/cleanup_api_keys.py Command.handle   20 0 0   100%
sm/management/commands/cleanup_api_keys.py (no function)   8 0 0   100%
sm/mixins.py required_permission_codename   7 1 0   86%
sm/mixins.py get_accessible_group_ids   7 0 0   100%
sm/mixins.py filter_queryset_by_tenant   7 0 0   100%
sm/mixins.py filter_queryset_for_user   4 0 0   100%
sm/mixins.py filter_history_queryset_by_tenant   8 1 0   88%
sm/mixins.py BulkActionMixin.get_context_data   7 0 0   100%
sm/mixins.py get_tenant_model_counts   15 0 0   100%
sm/mixins.py MultiTenantMixin._tenant_permission_model   1 0 0   100%
sm/mixins.py MultiTenantMixin.get_queryset   9 2 0   78%
sm/mixins.py MultiTenantMixin.dispatch   11 0 0   100%
sm/mixins.py MultiTenantMixin.get_context_data   7 0 0   100%
sm/mixins.py MultiTenantMixin.get_form_kwargs   4 0 0   100%
sm/mixins.py MultiTenantMixin.get_form   8 0 0   100%
sm/mixins.py MultiTenantMixin.check_quota   9 0 0   100%
sm/mixins.py MultiTenantMixin.form_valid   23 2 0   91%
sm/mixins.py APIMultiTenantMixin.get_queryset   9 5 0   44%
sm/mixins.py APIMultiTenantMixin.check_duplicate_per_group   33 7 0   79%
sm/mixins.py APIMultiTenantMixin.perform_create   15 1 0   93%
sm/mixins.py APIMultiTenantMixin.perform_update   3 0 0   100%
sm/mixins.py APIMultiTenantMixin.perform_destroy   3 0 0   100%
sm/mixins.py (no function)   36 0 0   100%
sm/models.py GroupProfile.__str__   1 1 0   0%
sm/models.py create_group_profile   4 0 0   100%
sm/models.py create_personal_group   11 1 0   91%
sm/models.py Invitation.__str__   1 1 0   0%
sm/models.py Invitation.is_expired   1 0 0   100%
sm/models.py ApiKey.__str__   1 0 0   100%
sm/models.py ApiKey.is_expired   1 0 0   100%
sm/models.py ApiKey.create_for_user   4 0 0   100%
sm/models.py ApiKey.rotate   4 0 0   100%
sm/models.py (no function)   55 0 0   100%
sm/notifications.py _notification_enabled   1 0 0   100%
sm/notifications.py _recipients   9 2 0   78%
sm/notifications.py _send_status_change_email   6 1 0   83%
sm/notifications.py remember_status_change   8 2 0   75%
sm/notifications.py notify_on_status_change   6 0 0   100%
sm/notifications.py (no function)   15 0 0   100%
sm/patches.py patch_serializers   2 0 0   100%
sm/patches.py patch_serializers.build_instance   15 2 0   87%
sm/patches.py apply_patches   1 0 0   100%
sm/patches.py (no function)   3 0 0   100%
sm/runner.py SmTestRunner.teardown_databases   15 3 0   80%
sm/runner.py (no function)   3 0 0   100%
sm/settings.py (no function)   126 30 0   76%
sm/signals.py set_sqlite_pragmas   6 4 0   33%
sm/signals.py (no function)   4 0 0   100%
sm/template/__init__.py (no function)   0 0 0   100%
sm/template/loaders/__init__.py (no function)   0 0 0   100%
sm/template/loaders/app_directories_enhanced.py Loader.__init__   2 0 0   100%
sm/template/loaders/app_directories_enhanced.py Loader.get_template_sources   4 0 0   100%
sm/template/loaders/app_directories_enhanced.py (no function)   7 0 0   100%
sm/templatetags/__init__.py (no function)   0 0 0   100%
sm/templatetags/avatar_tags.py user_avatar_url   3 0 0   100%
sm/templatetags/avatar_tags.py (no function)   6 0 0   100%
sm/templatetags/history_url_tags.py get_history_diff_url   3 0 0   100%
sm/templatetags/history_url_tags.py (no function)   5 0 0   100%
sm/templatetags/sm_history_tags.py get_history_diff   22 3 0   86%
sm/templatetags/sm_history_tags.py get_history_diff.resolve_fk   7 3 0   57%
sm/templatetags/sm_history_tags.py (no function)   5 0 0   100%
sm/templatetags/sm_theme_bootstrap_tags.py get_message_tags   14 0 0   100%
sm/templatetags/sm_theme_bootstrap_tags.py has_unverified_emails   1 1 0   0%
sm/templatetags/sm_theme_bootstrap_tags.py (no function)   9 0 0   100%
sm/templatetags/social_tags.py user_can_disconnect   1 1 0   0%
sm/templatetags/social_tags.py get_social_providers_safe   12 4 0   67%
sm/templatetags/social_tags.py provider_icon_class   8 8 0   0%
sm/templatetags/social_tags.py (no function)   8 0 0   100%
sm/urls.py (no function)   33 2 0   94%
sm/utils.py get_email_hash   3 0 0   100%
sm/utils.py random_string   1 0 0   100%
sm/utils.py random_number   1 0 0   100%
sm/utils.py (no function)   6 0 0   100%
sm/utils_permissions.py get_group_permissions_for_model   6 3 0   50%
sm/utils_permissions.py assign_group_permissions   1 1 0   0%
sm/utils_permissions.py sync_group_permissions   8 1 0   88%
sm/utils_permissions.py (no function)   10 0 0   100%
sm/utils_starterpack.py _load_fixture   5 1 0   80%
sm/utils_starterpack.py import_starter_pack   29 4 0   86%
sm/utils_starterpack.py (no function)   10 0 0   100%
sm/views.py SafeDeleteMixin.form_valid   11 1 0   91%
sm/views.py GenericBulkDeleteView.get_queryset   12 9 0   25%
sm/views.py GenericBulkDeleteView.get_success_url   1 0 0   100%
sm/views.py GenericBulkDeleteView.post   21 5 0   76%
sm/views.py GenericCSVExportView.get_queryset   12 4 0   67%
sm/views.py GenericCSVExportView.get_filename   1 0 0   100%
sm/views.py GenericCSVExportView.resolve_value   9 0 0   100%
sm/views.py GenericCSVExportView.get   9 0 0   100%
sm/views.py DashboardView.get_queryset_filtered   3 1 0   67%
sm/views.py DashboardView.get_context_data   13 0 0   100%
sm/views.py SearchView.get_queryset_filtered   3 1 0   67%
sm/views.py SearchView.get_template_names   3 0 0   100%
sm/views.py SearchView.get_context_data   29 2 0   93%
sm/views.py HistoryDiffView.get_context_data   16 1 0   94%
sm/views.py PatchScheduleView.get_servers   9 4 0   56%
sm/views.py PatchScheduleView.get_context_data   10 0 0   100%
sm/views.py ImportStarterPackView.post   8 2 0   75%
sm/views.py HealthView.get   11 4 0   64%
sm/views.py (no function)   72 0 0   100%
sm/views_admin.py StaffRequiredMixin.test_func   1 0 0   100%
sm/views_admin.py UserListView.get_context_data   3 0 0   100%
sm/views_admin.py GroupProfileUpdateView.form_valid   3 0 0   100%
sm/views_admin.py (no function)   23 0 0   100%
sm/views_api_keys.py CreateApiKeyForm.clean_expires_in_days   2 0 0   100%
sm/views_api_keys.py ApiKeyListView.get_context_data   3 0 0   100%
sm/views_api_keys.py ApiKeyListView.form_valid   11 0 0   100%
sm/views_api_keys.py RevokeApiKeyView.post   6 0 0   100%
sm/views_api_keys.py RotateApiKeyView.post   9 0 0   100%
sm/views_api_keys.py (no function)   29 0 0   100%
sm/views_audit.py AuditLogView.get_group   4 0 0   100%
sm/views_audit.py AuditLogView.get_queryset   21 3 0   86%
sm/views_audit.py AuditLogView.get_context_data   8 0 0   100%
sm/views_audit.py (no function)   12 0 0   100%
sm/views_avatars.py _validate_size   5 2 0   60%
sm/views_avatars.py avatar_proxy   21 7 0   67%
sm/views_avatars.py (no function)   10 0 0   100%
sm/views_group.py GroupOwnerRequiredMixin.test_func   3 1 0   67%
sm/views_group.py GroupMemberListView.get_queryset   3 1 0   67%
sm/views_group.py AddGroupMemberForm.clean_username   7 0 0   100%
sm/views_group.py AddGroupMemberView.get_success_url   1 0 0   100%
sm/views_group.py AddGroupMemberView.form_valid   11 1 0   91%
sm/views_group.py RemoveGroupMemberView.post   11 1 0   91%
sm/views_group.py GroupPermissionForm.__init__   11 0 0   100%
sm/views_group.py GroupPermissionForm.save   7 0 0   100%
sm/views_group.py GroupPermissionUpdateView.get_form_kwargs   6 1 0   83%
sm/views_group.py GroupPermissionUpdateView.get_success_url   1 0 0   100%
sm/views_group.py GroupPermissionUpdateView.form_valid   3 0 0   100%
sm/views_group.py UserPermissionForm.__init__   16 16 0   0%
sm/views_group.py UserPermissionForm.save   7 7 0   0%
sm/views_group.py UserPermissionUpdateView.get_form_kwargs   9 9 0   0%
sm/views_group.py UserPermissionUpdateView.get_success_url   1 1 0   0%
sm/views_group.py UserPermissionUpdateView.form_valid   3 3 0   0%
sm/views_group.py InviteGroupMemberForm.clean_email   4 1 0   75%
sm/views_group.py InviteGroupMemberView.get_success_url   1 0 0   100%
sm/views_group.py InviteGroupMemberView.get_group   4 1 0   75%
sm/views_group.py InviteGroupMemberView.form_valid   11 0 0   100%
sm/views_group.py InviteGroupMemberView.send_invitation_email   4 0 0   100%
sm/views_group.py AcceptInvitationView.get_context_data   11 2 0   82%
sm/views_group.py AcceptInvitationView.post   37 13 0   65%
sm/views_group.py GroupFilterView.post   18 0 0   100%
sm/views_group.py GroupCreateView.form_valid   21 0 0   100%
sm/views_group.py GroupCreateView.form_invalid   2 2 0   0%
sm/views_group.py (no function)   79 0 0   100%
sm/views_onboarding.py user_has_real_groups   4 0 0   100%
sm/views_onboarding.py GroupOnboardingView.get_context_data   3 0 0   100%
sm/views_onboarding.py GroupOnboardingView.post   17 7 0   59%
sm/views_onboarding.py OnboardingBannerContext.__init__   1 1 0   0%
sm/views_onboarding.py OnboardingBannerContext.needs_onboarding   4 4 0   0%
sm/views_onboarding.py (no function)   17 0 0   100%
sm/views_profile.py UserProfileForm.clean_email   4 0 0   100%
sm/views_profile.py ProfileView.get_initial   2 0 0   100%
sm/views_profile.py ProfileView.get_form_kwargs   3 0 0   100%
sm/views_profile.py ProfileView.form_valid   3 0 0   100%
sm/views_profile.py ProfileView.get_success_url   1 0 0   100%
sm/views_profile.py (no function)   19 0 0   100%
sm/wsgi.py (no function)   4 0 0   100%
status/__init__.py (no function)   1 0 0   100%
status/forms.py (no function)   7 0 0   100%
status/models.py ModelManager.get_by_natural_key   1 0 0   100%
status/models.py Model.natural_key   1 0 0   100%
status/models.py Model.get_natural_key_fields   1 1 0   0%
status/models.py Model.get_natural_key_info   1 1 0   0%
status/models.py Model.__str__   1 0 0   100%
status/models.py Model.get_absolute_url   1 0 0   100%
status/models.py (no function)   25 0 0   100%
status/urls.py (no function)   4 0 0   100%
status/views.py (no function)   46 0 0   100%
vendor/__init__.py (no function)   1 0 0   100%
vendor/forms.py (no function)   7 0 0   100%
vendor/models.py VendorManager.get_by_natural_key   1 0 0   100%
vendor/models.py Model.__str__   1 0 0   100%
vendor/models.py Model.natural_key   1 0 0   100%
vendor/models.py Model.get_natural_key_fields   1 1 0   0%
vendor/models.py Model.get_natural_key_info   1 1 0   0%
vendor/models.py Model.get_absolute_url   1 0 0   100%
vendor/models.py (no function)   27 0 0   100%
vendor/urls.py (no function)   4 0 0   100%
vendor/views.py (no function)   47 0 2   100%
Total     3527 323 12   91%

No items found using the specified filter.