Coverage report: 52%

Files Functions Classes

coverage.py v7.15.2, created at 2026-10-07 17:47 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
src/backend/InvenTree/InvenTree/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/admin.py CustomRateAdmin.has_add_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/admin.py run_schedule_now   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/admin.py ReadOnlyScheduleAdmin.has_add_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/admin.py ReadOnlyScheduleAdmin.has_change_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/admin.py ReadOnlyScheduleAdmin.has_delete_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/admin.py InvenTreeUserSessionAdmin.has_add_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/admin.py InvenTreeUserSessionAdmin.has_change_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/admin.py (no function)   100% 27 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py read_license_file   86% 21 3 0   90% 10 1   87%
src/backend/InvenTree/InvenTree/api.py LicenseView.get   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py VersionView.get   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py VersionTextView.list   100% 9 0 0   100% 4 0   100%
src/backend/InvenTree/InvenTree/api.py InfoView.worker_pending_tasks   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py InfoView.get   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/api.py InfoView.check_auth_header   33% 9 6 0   25% 4 1   31%
src/backend/InvenTree/InvenTree/api.py NotFoundView.not_found   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py NotFoundView.options   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/api.py NotFoundView.get   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py NotFoundView.post   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py NotFoundView.patch   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py NotFoundView.put   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py NotFoundView.delete   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py BulkOperationMixin.get_bulk_queryset   76% 17 4 0   70% 10 3   74%
src/backend/InvenTree/InvenTree/api.py BulkCreateMixin.create   8% 37 34 0   4% 24 1   7%
src/backend/InvenTree/InvenTree/api.py BulkUpdateMixin.validate_update   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py BulkUpdateMixin.filter_update_queryset   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/api.py BulkUpdateMixin.put   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py BulkUpdateMixin.patch   6% 17 16 0   0% 2 0   5%
src/backend/InvenTree/InvenTree/api.py ParameterListMixin.filter_queryset   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py CommonBulkDeleteMixin.validate_delete   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py CommonBulkDeleteMixin.filter_delete_queryset   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/api.py CommonBulkDeleteMixin._delete   12% 8 7 0   0% 2 0   10%
src/backend/InvenTree/InvenTree/api.py BulkDeleteMixin.delete   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py BulkDeleteViewsetMixin.bulk_delete   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py APISearchView.get_result_types   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py APISearchView.get_result_filters   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py APISearchView.post   34% 32 21 0   31% 16 1   33%
src/backend/InvenTree/InvenTree/api.py GenericMetadataView.get_permission_model   100% 7 0 0   100% 4 0   100%
src/backend/InvenTree/InvenTree/api.py GenericMetadataView.get_queryset   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py GenericMetadataView.get_serializer   71% 7 2 0   50% 4 2   64%
src/backend/InvenTree/InvenTree/api.py GenericMetadataView.dispatch   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py SimpleGenericMetadataView.dispatch   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py SimpleGenericMetadataView.get   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py SimpleGenericMetadataView.put   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py SimpleGenericMetadataView.patch   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api.py MetadataRedirectView.get_redirect_url   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/api.py meta_path   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/api.py TreeMixin.filter_queryset   43% 14 8 0   75% 4 1   50%
src/backend/InvenTree/InvenTree/api.py (no function)   100% 206 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/api_version.py (no function)   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/apps.py InvenTreeConfig.ready   83% 24 4 0   58% 12 5   75%
src/backend/InvenTree/InvenTree/apps.py InvenTreeConfig.remove_obsolete_tasks   50% 12 6 0   50% 2 1   50%
src/backend/InvenTree/InvenTree/apps.py InvenTreeConfig.start_background_tasks   67% 27 9 0   50% 14 5   61%
src/backend/InvenTree/InvenTree/apps.py InvenTreeConfig.add_heartbeat   33% 6 4 0   100% 0 0   33%
src/backend/InvenTree/InvenTree/apps.py InvenTreeConfig.collect_tasks   75% 8 2 0   100% 6 0   86%
src/backend/InvenTree/InvenTree/apps.py InvenTreeConfig.update_site_url   50% 14 7 0   38% 8 3   45%
src/backend/InvenTree/InvenTree/apps.py InvenTreeConfig.load_unit_registry   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/apps.py InvenTreeConfig.add_user_on_startup   62% 21 8 0   50% 12 4   58%
src/backend/InvenTree/InvenTree/apps.py InvenTreeConfig._create_admin_user   67% 9 3 0   50% 2 1   64%
src/backend/InvenTree/InvenTree/apps.py InvenTreeConfig.add_user_from_file   38% 13 8 0   33% 6 2   37%
src/backend/InvenTree/InvenTree/apps.py InvenTreeConfig.ensure_migrations_done   45% 11 6 0   50% 8 2   47%
src/backend/InvenTree/InvenTree/apps.py (no function)   100% 39 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/auth_overrides.py CustomLoginForm.login   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/auth_overrides.py CustomSignupForm.__init__   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/auth_overrides.py CustomSignupForm.clean   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/auth_overrides.py registration_enabled   40% 5 3 0   25% 4 1   33%
src/backend/InvenTree/InvenTree/auth_overrides.py RegistrationMixin.is_open_for_signup   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/auth_overrides.py RegistrationMixin.clean_email   0% 15 15 0   0% 10 0   0%
src/backend/InvenTree/InvenTree/auth_overrides.py RegistrationMixin.save_user   0% 10 10 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/auth_overrides.py CustomAccountAdapter.send_mail   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/auth_overrides.py CustomAccountAdapter.send_password_reset_mail   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/auth_overrides.py CustomSocialAccountAdapter.is_auto_signup_allowed   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/auth_overrides.py CustomSocialAccountAdapter.authentication_error   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/auth_overrides.py CustomSocialAccountAdapter.get_connect_redirect_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/auth_overrides.py CustomHeadlessAdapter.get_frontend_url   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/auth_overrides.py (no function)   100% 40 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/backends.py InvenTreeMaintenanceModeBackend.get_value   70% 10 3 0   100% 0 0   70%
src/backend/InvenTree/InvenTree/backends.py InvenTreeMaintenanceModeBackend.set_value   80% 15 3 0   100% 6 0   86%
src/backend/InvenTree/InvenTree/backends.py InvenTreeMailLoggingBackend.__init__   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/backends.py InvenTreeMailLoggingBackend.open   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/backends.py InvenTreeMailLoggingBackend.close   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/backends.py InvenTreeMailLoggingBackend.send_messages   0% 31 31 0   0% 14 0   0%
src/backend/InvenTree/InvenTree/backends.py InvenTreeErrorMailBackend.send_messages   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/backends.py (no function)   100% 24 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/backup.py get_backup_connector_options   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/backup.py get_backup_storage_backend   70% 10 3 0   50% 2 1   67%
src/backend/InvenTree/InvenTree/backup.py get_backup_storage_options   80% 5 1 0   50% 2 1   71%
src/backend/InvenTree/InvenTree/backup.py backup_email_on_error   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/backup.py backup_email_prefix   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/backup.py backup_gpg_recipient   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/backup.py backup_date_format   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/backup.py backup_filename_template   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/backup.py backup_media_filename_template   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/backup.py _gather_environment_metadata   0% 10 10 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/backup.py _parse_environment_metadata   0% 9 9 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/backup.py metadata_set   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/backup.py validate_restore   0% 30 30 0   0% 22 0   0%
src/backend/InvenTree/InvenTree/backup.py (no function)   100% 20 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/cache.py cache_setting   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/cache.py cache_host   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/cache.py cache_port   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/cache.py cache_password   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/cache.py cache_user   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/cache.py cache_db   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/cache.py is_global_cache_enabled   27% 11 8 0   17% 6 1   24%
src/backend/InvenTree/InvenTree/cache.py get_cache_config   85% 13 2 0   50% 4 2   76%
src/backend/InvenTree/InvenTree/cache.py create_session_cache   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/cache.py delete_session_cache   100% 4 0 0   50% 4 2   75%
src/backend/InvenTree/InvenTree/cache.py get_session_cache   100% 6 0 0   75% 4 1   90%
src/backend/InvenTree/InvenTree/cache.py set_session_cache   100% 5 0 0   75% 4 1   89%
src/backend/InvenTree/InvenTree/cache.py get_cached_content_types   100% 10 0 0   75% 4 1   93%
src/backend/InvenTree/InvenTree/cache.py (no function)   100% 22 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/config.py to_list   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/config.py to_dict   44% 9 5 0   75% 4 1   54%
src/backend/InvenTree/InvenTree/config.py is_true   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/config.py get_base_dir   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/config.py get_root_dir   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/config.py inventreeInstaller   33% 18 12 0   30% 10 3   32%
src/backend/InvenTree/InvenTree/config.py get_config_dir   38% 8 5 0   25% 8 2   31%
src/backend/InvenTree/InvenTree/config.py get_testfolder_dir   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/config.py get_version_file   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/config.py ensure_dir   50% 8 4 0   33% 6 2   43%
src/backend/InvenTree/InvenTree/config.py get_config_file   50% 16 8 0   33% 6 2   45%
src/backend/InvenTree/InvenTree/config.py load_config_data   77% 13 3 0   75% 4 1   76%
src/backend/InvenTree/InvenTree/config.py do_typecast   80% 15 3 0   80% 10 0   80%
src/backend/InvenTree/InvenTree/config.py get_config_value   100% 9 0 0   100% 4 0   100%
src/backend/InvenTree/InvenTree/config.py get_setting   100% 13 0 0   88% 8 1   95%
src/backend/InvenTree/InvenTree/config.py get_setting.set_metadata   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/config.py get_boolean_setting   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/config.py get_media_dir   67% 9 3 0   33% 6 2   53%
src/backend/InvenTree/InvenTree/config.py get_static_dir   67% 9 3 0   33% 6 2   53%
src/backend/InvenTree/InvenTree/config.py get_backup_dir   67% 9 3 0   33% 6 2   53%
src/backend/InvenTree/InvenTree/config.py get_plugin_file   83% 12 2 0   50% 4 2   75%
src/backend/InvenTree/InvenTree/config.py get_plugin_dir   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/config.py get_secret_key   68% 19 6 0   40% 10 4   59%
src/backend/InvenTree/InvenTree/config.py get_oidc_private_key   80% 20 4 0   50% 8 4   71%
src/backend/InvenTree/InvenTree/config.py get_custom_file   0% 14 14 0   0% 6 0   0%
src/backend/InvenTree/InvenTree/config.py get_frontend_settings   83% 18 3 0   50% 8 4   73%
src/backend/InvenTree/InvenTree/config.py check_config_dir   40% 10 6 0   75% 4 1   50%
src/backend/InvenTree/InvenTree/config.py load_version_file   56% 9 4 0   50% 4 2   54%
src/backend/InvenTree/InvenTree/config.py (no function)   100% 42 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/conversion.py can_cache_registry   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/conversion.py get_unit_registry_hash   100% 6 0 0   50% 4 2   80%
src/backend/InvenTree/InvenTree/conversion.py set_unit_registry_hash   80% 5 1 0   50% 2 1   71%
src/backend/InvenTree/InvenTree/conversion.py get_unit_registry   67% 6 2 0   75% 4 1   70%
src/backend/InvenTree/InvenTree/conversion.py reload_unit_registry   74% 31 8 0   50% 2 1   73%
src/backend/InvenTree/InvenTree/conversion.py from_engineering_notation   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/conversion.py convert_value   0% 8 8 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/conversion.py convert_physical_value   0% 46 46 0   0% 24 0   0%
src/backend/InvenTree/InvenTree/conversion.py is_dimensionless   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/conversion.py (no function)   100% 24 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/exceptions.py log_error   61% 31 12 0   50% 14 7   58%
src/backend/InvenTree/InvenTree/exceptions.py exception_handler   85% 27 4 0   75% 12 3   82%
src/backend/InvenTree/InvenTree/exceptions.py (no function)   100% 13 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/exchange.py InvenTreeExchange.get_rates   54% 26 12 0   40% 10 4   50%
src/backend/InvenTree/InvenTree/exchange.py InvenTreeExchange.update_rates   82% 11 2 0   50% 4 2   73%
src/backend/InvenTree/InvenTree/exchange.py (no function)   100% 12 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/fields.py InvenTreeRestURLField.__init__   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/fields.py InvenTreeRestURLField.run_validation   50% 6 3 0   25% 4 1   40%
src/backend/InvenTree/InvenTree/fields.py InvenTreeURLField.__init__   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/fields.py money_kwargs   91% 11 1 0   88% 8 1   89%
src/backend/InvenTree/InvenTree/fields.py InvenTreeModelMoneyField.__init__   80% 10 2 0   75% 4 1   79%
src/backend/InvenTree/InvenTree/fields.py InvenTreeModelMoneyField.formfield   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/fields.py InvenTreeModelMoneyField.to_python   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/fields.py InvenTreeModelMoneyField.prepare_value   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/fields.py InvenTreeMoneyField.__init__   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/fields.py DatePickerFormField.__init__   0% 6 6 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/fields.py round_decimal   62% 8 3 0   75% 4 1   67%
src/backend/InvenTree/InvenTree/fields.py RoundingDecimalFormField.to_python   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/fields.py RoundingDecimalFormField.prepare_value   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/fields.py RoundingDecimalField.to_python   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/fields.py RoundingDecimalField.formfield   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/fields.py InvenTreeNotesField.__init__   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/fields.py InvenTreeOutputOption.__init__   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/fields.py OutputConfiguration.__init_subclass__   71% 7 2 0   67% 6 2   69%
src/backend/InvenTree/InvenTree/fields.py OutputConfiguration.format_params   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/fields.py (no function)   100% 50 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/filters.py InvenTreeDateFilter.filter   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/filters.py InvenTreeSearchFilter.get_search_fields   83% 12 2 0   75% 8 2   80%
src/backend/InvenTree/InvenTree/filters.py InvenTreeSearchFilter.get_search_terms   83% 12 2 0   75% 8 2   80%
src/backend/InvenTree/InvenTree/filters.py InvenTreeOrderingFilter.get_ordering   96% 28 1 0   94% 18 1   96%
src/backend/InvenTree/InvenTree/filters.py NumberOrNullFilter.filter   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/filters.py NumberOrNullFilter.field   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/filters.py NumberOrNullFilter.field.custom_clean   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/filters.py NumericInFilter.filter   73% 11 3 0   83% 6 1   76%
src/backend/InvenTree/InvenTree/filters.py (no function)   100% 24 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/format.py parse_format_string   83% 12 2 0   67% 6 2   78%
src/backend/InvenTree/InvenTree/format.py construct_format_regex   95% 19 1 0   75% 8 2   89%
src/backend/InvenTree/InvenTree/format.py validate_string   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/format.py extract_named_group   75% 8 2 0   50% 4 2   67%
src/backend/InvenTree/InvenTree/format.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers.py extract_int   21% 34 27 0   10% 10 1   18%
src/backend/InvenTree/InvenTree/helpers.py extract_int.do_clip   70% 10 3 0   50% 8 4   61%
src/backend/InvenTree/InvenTree/helpers.py generateTestKey   78% 9 2 0   50% 4 2   69%
src/backend/InvenTree/InvenTree/helpers.py generateTestKey.valid_char   40% 5 3 0   25% 4 1   33%
src/backend/InvenTree/InvenTree/helpers.py constructPathString   60% 5 2 0   50% 2 1   57%
src/backend/InvenTree/InvenTree/helpers.py getMediaUrl   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/helpers.py regenerate_imagefile   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/helpers.py image2name   0% 8 8 0   0% 6 0   0%
src/backend/InvenTree/InvenTree/helpers.py image2name.extract   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/helpers.py getStaticUrl   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers.py TestIfImage   0% 5 5 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/helpers.py getBlankImage   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/helpers.py getBlankThumbnail   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers.py checkStaticFile   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/helpers.py getLogoImage   53% 15 7 0   42% 12 5   48%
src/backend/InvenTree/InvenTree/helpers.py getSplashScreen   80% 5 1 0   50% 4 2   67%
src/backend/InvenTree/InvenTree/helpers.py getCustomOption   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers.py TestIfImageURL   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/helpers.py str2bool   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/helpers.py is_bool   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers.py isNull   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers.py normalize   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/helpers.py increment   75% 20 5 0   62% 8 3   71%
src/backend/InvenTree/InvenTree/helpers.py decimal2string   0% 10 10 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/helpers.py decimal2money   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/helpers.py WrapWithQuotes   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/helpers.py GetExportOptions   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers.py GetExportFormats   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers.py DownloadFile   0% 14 14 0   0% 6 0   0%
src/backend/InvenTree/InvenTree/helpers.py increment_serial_number   37% 19 12 0   25% 12 3   32%
src/backend/InvenTree/InvenTree/helpers.py extract_serial_numbers   0% 94 94 0   0% 56 0   0%
src/backend/InvenTree/InvenTree/helpers.py extract_serial_numbers.add_error   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/helpers.py extract_serial_numbers.add_serial   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/helpers.py validateFilterString   31% 29 20 0   21% 14 3   28%
src/backend/InvenTree/InvenTree/helpers.py clean_decimal   0% 17 17 0   0% 10 0   0%
src/backend/InvenTree/InvenTree/helpers.py strip_html_tags   100% 9 0 0   100% 4 0   100%
src/backend/InvenTree/InvenTree/helpers.py remove_non_printable_characters   100% 9 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/helpers.py clean_markdown   71% 21 6 0   33% 6 2   63%
src/backend/InvenTree/InvenTree/helpers.py hash_barcode   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers.py current_time   80% 5 1 0   50% 2 1   71%
src/backend/InvenTree/InvenTree/helpers.py current_date   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers.py server_timezone   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers.py to_local_time   56% 16 7 0   38% 8 3   50%
src/backend/InvenTree/InvenTree/helpers.py get_objectreference   71% 14 4 0   50% 4 2   67%
src/backend/InvenTree/InvenTree/helpers.py inheritors   100% 10 0 0   75% 8 2   89%
src/backend/InvenTree/InvenTree/helpers.py pui_url   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/helpers.py plugins_info   67% 6 2 0   50% 2 1   62%
src/backend/InvenTree/InvenTree/helpers.py sanitize_token   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers.py (no function)   100% 73 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers_api.py InvenTreeApiRouter.get_routes   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/helpers_api.py InvenTreeApiRouter.get_default_basename   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/helpers_api.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers_email.py is_email_configured   81% 21 4 0   50% 18 9   67%
src/backend/InvenTree/InvenTree/helpers_email.py send_email   35% 17 11 0   25% 12 3   31%
src/backend/InvenTree/InvenTree/helpers_email.py get_email_for_user   0% 4 4 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/helpers_email.py (no function)   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers_mfa.py get_codes   0% 5 5 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/helpers_mfa.py (no function)   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/helpers_mixin.py ClassValidationMixin.validate   50% 16 8 0   30% 10 3   42%
src/backend/InvenTree/InvenTree/helpers_mixin.py ClassValidationMixin.validate.attribute_missing   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers_mixin.py ClassValidationMixin.validate.override_missing   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/helpers_mixin.py ClassProviderMixin.get_provider_file   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers_mixin.py ClassProviderMixin.get_provider_plugin   67% 3 1 0   75% 4 1   71%
src/backend/InvenTree/InvenTree/helpers_mixin.py ClassProviderMixin.get_is_builtin   60% 5 2 0   100% 0 0   60%
src/backend/InvenTree/InvenTree/helpers_mixin.py get_shared_class_instance_state_mixin   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers_mixin.py get_shared_class_instance_state_mixin.SharedClassStateMixinClass.set_shared_state   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers_mixin.py get_shared_class_instance_state_mixin.SharedClassStateMixinClass.get_shared_state   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers_mixin.py get_shared_class_instance_state_mixin.SharedClassStateMixinClass._get_key   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers_mixin.py (no function)   100% 20 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/helpers_model.py get_base_url   47% 15 8 0   33% 6 2   43%
src/backend/InvenTree/InvenTree/helpers_model.py construct_absolute_url   100% 4 0 0   50% 2 1   83%
src/backend/InvenTree/InvenTree/helpers_model.py validate_url_no_ssrf   0% 12 12 0   0% 6 0   0%
src/backend/InvenTree/InvenTree/helpers_model.py download_image_from_url   0% 54 54 0   0% 16 0   0%
src/backend/InvenTree/InvenTree/helpers_model.py getModelsWithMixin   100% 9 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/helpers_model.py notify_responsible   71% 7 2 0   50% 4 2   64%
src/backend/InvenTree/InvenTree/helpers_model.py notify_users   100% 6 0 0   50% 2 1   88%
src/backend/InvenTree/InvenTree/helpers_model.py (no function)   100% 26 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/logging.py add_request_id_to_response   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/logging.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/magic_login.py send_simple_login_email   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/magic_login.py GetSimpleLoginView.post   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/magic_login.py GetSimpleLoginView.email_submitted   67% 6 2 0   50% 2 1   62%
src/backend/InvenTree/InvenTree/magic_login.py GetSimpleLoginView.get_user   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/magic_login.py GetSimpleLoginView.create_link   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/magic_login.py (no function)   100% 23 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/metadata.py InvenTreeMetadata.determine_actions   100% 17 0 0   88% 8 1   96%
src/backend/InvenTree/InvenTree/metadata.py InvenTreeMetadata.determine_metadata   76% 37 9 0   55% 20 7   68%
src/backend/InvenTree/InvenTree/metadata.py InvenTreeMetadata.override_value   73% 11 3 0   70% 10 3   71%
src/backend/InvenTree/InvenTree/metadata.py InvenTreeMetadata.get_serializer_info   84% 93 15 0   79% 72 5   82%
src/backend/InvenTree/InvenTree/metadata.py InvenTreeMetadata.get_field_info   87% 39 5 0   87% 30 4   87%
src/backend/InvenTree/InvenTree/metadata.py (no function)   100% 22 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/middleware.py get_token_from_request   80% 10 2 0   75% 8 2   78%
src/backend/InvenTree/InvenTree/middleware.py ensure_slashes   100% 5 0 0   100% 4 0   100%
src/backend/InvenTree/InvenTree/middleware.py csrf_failure   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/middleware.py AuthRequiredMiddleware.__init__   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/middleware.py AuthRequiredMiddleware.check_token   20% 10 8 0   25% 4 1   21%
src/backend/InvenTree/InvenTree/middleware.py AuthRequiredMiddleware.__call__   82% 17 3 0   70% 10 3   78%
src/backend/InvenTree/InvenTree/middleware.py Check2FAMiddleware.on_require_2fa   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/middleware.py Check2FAMiddleware.is_allowed_page   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/middleware.py Check2FAMiddleware.is_multifactor_logged_in   0% 5 5 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/middleware.py Check2FAMiddleware.process_view   29% 14 10 0   17% 12 2   23%
src/backend/InvenTree/InvenTree/middleware.py Check2FAMiddleware.enforce_2fa   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/middleware.py InvenTreeRemoteUserMiddleware.process_request   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/middleware.py InvenTreeExceptionProcessor.process_exception   0% 11 11 0   0% 6 0   0%
src/backend/InvenTree/InvenTree/middleware.py InvenTreeRequestCacheMiddleware.process_request   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/middleware.py InvenTreeRequestCacheMiddleware.process_response   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/middleware.py InvenTreeHostSettingsMiddleware.process_request   65% 23 8 0   50% 10 3   61%
src/backend/InvenTree/InvenTree/middleware.py InvenTreeVersionHeaderMiddleware.process_response   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/middleware.py (no function)   100% 55 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/migrations/0001_initial.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/migrations/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/mixins.py CleanMixin.create   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/mixins.py CleanMixin.update   100% 8 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/mixins.py CleanMixin.clean_string   100% 22 0 0   88% 8 1   97%
src/backend/InvenTree/InvenTree/mixins.py CleanMixin.clean_data   91% 11 1 0   88% 8 1   89%
src/backend/InvenTree/InvenTree/mixins.py CustomDestroyModelMixin.destroy   33% 3 2 0   100% 0 0   33%
src/backend/InvenTree/InvenTree/mixins.py CustomDestroyModelMixin.perform_destroy   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/mixins.py CustomRetrieveUpdateDestroyAPIView.get   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/mixins.py CustomRetrieveUpdateDestroyAPIView.put   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/mixins.py CustomRetrieveUpdateDestroyAPIView.patch   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/mixins.py CustomRetrieveUpdateDestroyAPIView.delete   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/mixins.py OutputOptionsMixin.__init_subclass__   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/mixins.py OutputOptionsMixin.get_serializer   100% 8 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/mixins.py OutputOptionsMixin.get_queryset   100% 5 0 0   50% 2 1   86%
src/backend/InvenTree/InvenTree/mixins.py SerializerContextMixin.get_serializer   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/mixins.py (no function)   100% 40 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/models.py DiffMixin.get_db_instance   67% 6 2 0   100% 2 0   75%
src/backend/InvenTree/InvenTree/models.py DiffMixin.get_field_deltas   100% 10 0 0   100% 8 0   100%
src/backend/InvenTree/InvenTree/models.py DiffMixin.has_field_changed   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py PluginValidationMixin.should_plugin_validate   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/models.py PluginValidationMixin.run_plugin_validation   29% 14 10 0   33% 6 2   30%
src/backend/InvenTree/InvenTree/models.py PluginValidationMixin.full_clean   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/models.py PluginValidationMixin.save   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/models.py PluginValidationMixin.delete   42% 12 7 0   50% 4 2   44%
src/backend/InvenTree/InvenTree/models.py MetadataMixin.save   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/InvenTree/models.py MetadataMixin.clean   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/models.py MetadataMixin.validate_metadata   75% 4 1 0   75% 4 1   75%
src/backend/InvenTree/InvenTree/models.py MetadataMixin.get_metadata   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/models.py MetadataMixin.set_metadata   80% 5 1 0   50% 4 2   67%
src/backend/InvenTree/InvenTree/models.py ReferenceIndexingMixin.get_reference_pattern   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/models.py ReferenceIndexingMixin.get_reference_context   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/models.py ReferenceIndexingMixin.get_most_recent_item   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/models.py ReferenceIndexingMixin.get_next_reference   86% 14 2 0   100% 2 0   88%
src/backend/InvenTree/InvenTree/models.py ReferenceIndexingMixin.generate_reference   73% 22 6 0   50% 6 3   68%
src/backend/InvenTree/InvenTree/models.py ReferenceIndexingMixin.generate_reference.ReferenceFormatter.format_field   50% 4 2 0   50% 2 1   50%
src/backend/InvenTree/InvenTree/models.py ReferenceIndexingMixin.validate_reference_pattern   0% 10 10 0   0% 6 0   0%
src/backend/InvenTree/InvenTree/models.py ReferenceIndexingMixin.validate_reference_field   78% 9 2 0   67% 6 2   73%
src/backend/InvenTree/InvenTree/models.py ReferenceIndexingMixin.rebuild_reference_field   62% 8 3 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/models.py ContentTypeMixin.get_content_type   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreePermissionCheckMixin.check_related_permission   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/models.py InvenTreeParameterMixin.annotate_parameters   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeParameterMixin.parameters   100% 4 0 0   75% 4 1   88%
src/backend/InvenTree/InvenTree/models.py InvenTreeParameterMixin.delete   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/models.py InvenTreeParameterMixin.copy_parameters_from   0% 14 14 0   0% 6 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeParameterMixin.get_parameter   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeParameterMixin.get_parameters   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeParameterMixin.parameters_map   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeParameterMixin.check_parameter_delete   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeParameterMixin.check_parameter_save   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeAttachmentMixin.delete   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/models.py InvenTreeAttachmentMixin.attachments   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/models.py InvenTreeAttachmentMixin.attachments_for_model   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/models.py InvenTreeAttachmentMixin.create_attachment   0% 7 7 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeTree.delete   0% 25 25 0   0% 8 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeTree.handle_tree_delete   0% 18 18 0   0% 12 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeTree.delete_nodes   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeTree.api_instance_filters   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeTree.save   47% 38 20 0   61% 18 5   52%
src/backend/InvenTree/InvenTree/models.py InvenTreeTree.offload_tree_rebuild   0% 8 8 0   0% 6 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeTree.rebuild_trees   0% 6 6 0   0% 6 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeTree.partial_rebuild   0% 8 8 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeTree.delete_items   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeTree.get_items   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeTree.getUniqueParents   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeTree.getUniqueChildren   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeTree.has_children   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeTree.getNextTreeID   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/models.py PathStringMixin.save   91% 11 1 0   75% 4 1   87%
src/backend/InvenTree/InvenTree/models.py PathStringMixin.delete   0% 7 7 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py PathStringMixin.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py PathStringMixin.get_lower_nodes   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py PathStringMixin.rebuild_lower_nodes   0% 9 9 0   0% 6 0   0%
src/backend/InvenTree/InvenTree/models.py PathStringMixin.rebuild_tree_pathstring_values   0% 12 12 0   0% 6 0   0%
src/backend/InvenTree/InvenTree/models.py PathStringMixin.rebuild_tree_pathstring_values.path_names   0% 11 11 0   0% 6 0   0%
src/backend/InvenTree/InvenTree/models.py PathStringMixin.construct_pathstring   100% 3 0 0   50% 2 1   80%
src/backend/InvenTree/InvenTree/models.py PathStringMixin.validate_unique   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/models.py PathStringMixin.parentpath   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/models.py PathStringMixin.path   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/models.py PathStringMixin.get_path   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/models.py InvenTreeNotesMixin.delete   67% 6 2 0   50% 2 1   62%
src/backend/InvenTree/InvenTree/models.py InvenTreeBarcodeMixin.barcode_model_type   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/models.py InvenTreeBarcodeMixin.barcode_model_type_code   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeBarcodeMixin.format_barcode   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeBarcodeMixin.format_matched_response   0% 18 18 0   0% 6 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeBarcodeMixin.barcode   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeBarcodeMixin.lookup_barcode   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/models.py InvenTreeBarcodeMixin.assign_barcode   0% 14 14 0   0% 12 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeBarcodeMixin.unassign_barcode   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py notify_staff_users_of_error   85% 13 2 0   67% 6 2   79%
src/backend/InvenTree/InvenTree/models.py after_failed_task   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/models.py after_error_logged   67% 6 2 0   50% 2 1   62%
src/backend/InvenTree/InvenTree/models.py InvenTreeImageMixin.__init__   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/models.py InvenTreeImageMixin.rename_image   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeImageMixin.get_image_url   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/models.py InvenTreeImageMixin.get_thumbnail_url   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/models.py (no function)   100% 196 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py get_model_for_view   86% 7 1 0   83% 6 1   85%
src/backend/InvenTree/InvenTree/permissions.py map_scope   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py map_scope.scope_name   80% 5 1 0   75% 4 1   78%
src/backend/InvenTree/InvenTree/permissions.py map_scope.get_scope   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/permissions.py OASTokenMixin.has_permission   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/permissions.py OASTokenMixin.check_oauth2_authentication   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py OASTokenMixin.is_oauth2ed   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/permissions.py InvenTreeRoleScopeMixin.get_required_alternate_scopes   67% 12 4 0   50% 4 2   62%
src/backend/InvenTree/InvenTree/permissions.py InvenTreeTokenMatchesOASRequirements.has_permission   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/permissions.py InvenTreeTokenMatchesOASRequirements.has_object_permission   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py ModelPermission._queryset   100% 6 0 0   75% 4 1   90%
src/backend/InvenTree/InvenTree/permissions.py RolePermission.has_permission   17% 18 15 0   10% 10 1   14%
src/backend/InvenTree/InvenTree/permissions.py RolePermissionOrReadOnly.has_permission   56% 9 4 0   38% 8 1   47%
src/backend/InvenTree/InvenTree/permissions.py RolePermissionOrReadOnly.get_required_alternate_scopes   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py IsSuperuserOrSuperScope.has_permission   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py IsSuperuserOrSuperScope.get_required_alternate_scopes   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py IsSuperuserOrReadOnlyOrScope.has_permission   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py IsSuperuserOrReadOnlyOrScope.get_required_alternate_scopes   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py IsAuthenticatedOrReadScope.get_required_alternate_scopes   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py IsStaffOrReadOnlyScope.has_permission   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py IsStaffOrReadOnlyScope.get_required_alternate_scopes   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py IsAdminOrAdminScope.get_required_alternate_scopes   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py AllowAnyOrReadScope.has_permission   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py AllowAnyOrReadScope.get_required_alternate_scopes   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py auth_exempt   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/permissions.py auth_exempt.wrapped_view   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/permissions.py UserSettingsPermissionsOrScope.has_object_permission   57% 7 3 0   50% 2 1   56%
src/backend/InvenTree/InvenTree/permissions.py UserSettingsPermissionsOrScope.has_permission   60% 5 2 0   100% 0 0   60%
src/backend/InvenTree/InvenTree/permissions.py UserSettingsPermissionsOrScope.get_required_alternate_scopes   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py GlobalSettingsPermissions.has_permission   71% 7 2 0   100% 2 0   78%
src/backend/InvenTree/InvenTree/permissions.py GlobalSettingsPermissions.get_required_alternate_scopes   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py DataImporterPermission.has_permission   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py DataImporterPermission.get_required_alternate_scopes   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py DataImporterPermission.has_object_permission   0% 10 10 0   0% 8 0   0%
src/backend/InvenTree/InvenTree/permissions.py ContentTypePermission.has_permission   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py ContentTypePermission.get_required_alternate_scopes   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/permissions.py ContentTypePermission.has_object_permission   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/permissions.py (no function)   100% 72 0 0   100% 6 0   100%
src/backend/InvenTree/InvenTree/profiling.py ensure_debug   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/profiling.py time_function   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/profiling.py time_function.wrapper   0% 8 8 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/profiling.py profile_function   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/profiling.py profile_function.decorator   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/profiling.py profile_function.decorator.wrapper   0% 14 14 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/profiling.py log_slow_queries   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/profiling.py log_slow_queries.decorator   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/profiling.py log_slow_queries.decorator.wrapper   0% 16 16 0   0% 6 0   0%
src/backend/InvenTree/InvenTree/profiling.py (no function)   0% 6 6 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/ready.py clearLoadedApps   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/ready.py setAppLoaded   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/ready.py isAppLoaded   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/ready.py isInTestMode   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/ready.py isWaitingForDatabase   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/ready.py isImportingData   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/ready.py isRunningMigrations   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/ready.py isRebuildingData   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/ready.py isRunningBackup   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/ready.py isCollectingPlugins   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/ready.py _setGeneratingSchema   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/ready.py isGeneratingSchema   62% 26 10 0   55% 22 10   58%
src/backend/InvenTree/InvenTree/ready.py isInWorkerThread   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/ready.py isInServerThread   60% 5 2 0   50% 4 2   56%
src/backend/InvenTree/InvenTree/ready.py isInMainThread   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/ready.py readOnlyCommands   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/ready.py isReadOnlyCommand   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/ready.py canAppAccessDatabase   75% 16 4 0   71% 14 4   73%
src/backend/InvenTree/InvenTree/ready.py isPluginRegistryLoaded   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/ready.py ignore_ready_warning   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/ready.py ignore_ready_warning.wrapper   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/ready.py (no function)   100% 30 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/sanitizer.py sanitize_svg   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/sanitizer.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/schema.py ExtendedOAuth2Scheme.get_security_requirement   88% 8 1 0   83% 6 1   86%
src/backend/InvenTree/InvenTree/schema.py ExtendedAutoSchema.is_bulk_action   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/schema.py ExtendedAutoSchema.get_operation_id   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/schema.py ExtendedAutoSchema.get_operation   100% 38 0 0   100% 26 0   100%
src/backend/InvenTree/InvenTree/schema.py ExtendedAutoSchema.get_inventree_extensions   41% 22 13 0   17% 6 1   36%
src/backend/InvenTree/InvenTree/schema.py postprocess_schema_enums   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/schema.py postprocess_schema_enums.custom_warn   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/InvenTree/schema.py postprocess_required_nullable   100% 11 0 0   100% 8 0   100%
src/backend/InvenTree/InvenTree/schema.py postprocess_print_stats   94% 32 2 0   90% 20 2   92%
src/backend/InvenTree/InvenTree/schema.py schema_for_view_output_options   100% 7 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/schema.py exclude_from_schema   100% 7 0 0   100% 4 0   100%
src/backend/InvenTree/InvenTree/schema.py (no function)   100% 25 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/sentry.py default_sentry_dsn   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/sentry.py sentry_ignore_errors   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/sentry.py init_sentry   0% 9 9 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/sentry.py report_exception   23% 13 10 0   12% 8 1   19%
src/backend/InvenTree/InvenTree/sentry.py (no function)   100% 16 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/serializers.py FilterableSerializerMixin.__init__   100% 7 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/serializers.py FilterableSerializerMixin.is_exporting   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/serializers.py FilterableSerializerMixin.is_field_included   88% 25 3 0   85% 20 3   87%
src/backend/InvenTree/InvenTree/serializers.py FilterableSerializerMixin.find_optional_fields   100% 10 0 0   100% 8 0   100%
src/backend/InvenTree/InvenTree/serializers.py FilterableSerializerMixin.gather_optional_fields   100% 11 0 0   100% 8 0   100%
src/backend/InvenTree/InvenTree/serializers.py FilterableSerializerMixin.get_field_names   100% 8 0 0   100% 8 0   100%
src/backend/InvenTree/InvenTree/serializers.py FilterableSerializerMixin.build_optional_field   100% 4 0 0   50% 2 1   83%
src/backend/InvenTree/InvenTree/serializers.py FilterableSerializerMixin.build_relational_field   100% 4 0 0   75% 4 1   88%
src/backend/InvenTree/InvenTree/serializers.py FilterableSerializerMixin.build_property_field   100% 4 0 0   75% 4 1   88%
src/backend/InvenTree/InvenTree/serializers.py FilterableSerializerMixin.build_unknown_field   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/serializers.py FilterableSerializerMixin.prefetch_queryset   100% 9 0 0   80% 10 2   89%
src/backend/InvenTree/InvenTree/serializers.py TreePathSerializer.__init__   86% 7 1 0   83% 6 1   85%
src/backend/InvenTree/InvenTree/serializers.py InvenTreeMoneySerializer.__init__   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/serializers.py InvenTreeMoneySerializer.to_representation   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/serializers.py InvenTreeMoneySerializer.get_value   82% 17 3 0   83% 6 1   83%
src/backend/InvenTree/InvenTree/serializers.py InvenTreeCurrencySerializer.__init__   93% 14 1 0   90% 10 1   92%
src/backend/InvenTree/InvenTree/serializers.py DependentField.__init__   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/serializers.py DependentField.get_child   0% 20 20 0   0% 12 0   0%
src/backend/InvenTree/InvenTree/serializers.py DependentField.get_child.visit_parent   0% 4 4 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/serializers.py DependentField.to_internal_value   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/serializers.py DependentField.to_representation   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/serializers.py InvenTreeModelSerializer.__init__   89% 19 2 0   100% 10 0   93%
src/backend/InvenTree/InvenTree/serializers.py InvenTreeModelSerializer.get_initial   0% 14 14 0   0% 8 0   0%
src/backend/InvenTree/InvenTree/serializers.py InvenTreeModelSerializer.skip_create_fields   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/serializers.py InvenTreeModelSerializer.save   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/serializers.py InvenTreeModelSerializer.create   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/serializers.py InvenTreeModelSerializer.update   60% 5 2 0   100% 0 0   60%
src/backend/InvenTree/InvenTree/serializers.py InvenTreeModelSerializer.run_validation   75% 24 6 0   67% 12 2   72%
src/backend/InvenTree/InvenTree/serializers.py InvenTreeTaggitSerializer.update   67% 6 2 0   50% 2 1   62%
src/backend/InvenTree/InvenTree/serializers.py InvenTreeAttachmentSerializerField.to_representation   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/serializers.py InvenTreeImageSerializerField.to_representation   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/serializers.py InvenTreeDecimalField.to_internal_value   62% 8 3 0   25% 4 1   50%
src/backend/InvenTree/InvenTree/serializers.py CustomStatusSerializerMixin.get_status_text   36% 11 7 0   33% 6 2   35%
src/backend/InvenTree/InvenTree/serializers.py NotesFieldMixin.__init__   100% 7 0 0   83% 6 1   92%
src/backend/InvenTree/InvenTree/serializers.py ContentTypeField.__init__   80% 10 2 0   75% 4 1   79%
src/backend/InvenTree/InvenTree/serializers.py ContentTypeField.to_representation   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/serializers.py ContentTypeField.to_internal_value   85% 26 4 0   79% 14 3   82%
src/backend/InvenTree/InvenTree/serializers.py (no function)   100% 100 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/setting/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/setting/db_backend.py _get_conn_max_age   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/InvenTree/setting/db_backend.py get_db_backend   86% 22 3 0   58% 12 5   76%
src/backend/InvenTree/InvenTree/setting/db_backend.py set_db_options   62% 8 3 0   50% 6 3   57%
src/backend/InvenTree/InvenTree/setting/db_backend.py set_postgres_options   0% 18 18 0   0% 16 0   0%
src/backend/InvenTree/InvenTree/setting/db_backend.py set_mysql_options   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/setting/db_backend.py set_sqlite_options   100% 6 0 0   50% 4 2   80%
src/backend/InvenTree/InvenTree/setting/db_backend.py (no function)   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/setting/ldap.py get_ldap_config   0% 24 24 0   0% 10 0   0%
src/backend/InvenTree/InvenTree/setting/ldap.py (no function)   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/setting/locales.py (no function)   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/setting/markdown.py markdownify_config   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/setting/markdown.py (no function)   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/setting/spectacular.py get_spectacular_settings   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/setting/spectacular.py (no function)   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/setting/storages.py init_storages   47% 15 8 0   50% 6 3   48%
src/backend/InvenTree/InvenTree/setting/storages.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/setting/tracing.py configure_tracing   50% 12 6 0   33% 6 2   44%
src/backend/InvenTree/InvenTree/setting/tracing.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/setting/worker.py get_worker_config   79% 19 4 0   50% 12 6   68%
src/backend/InvenTree/InvenTree/setting/worker.py (no function)   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/settings.py (no function)   75% 384 95 0   41% 128 44   67%
src/backend/InvenTree/InvenTree/sso.py get_provider_app   0% 11 11 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/sso.py check_provider   0% 9 9 0   0% 6 0   0%
src/backend/InvenTree/InvenTree/sso.py provider_display_name   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/sso.py ensure_sso_groups   0% 26 26 0   0% 14 0   0%
src/backend/InvenTree/InvenTree/sso.py on_social_account_created   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/sso.py (no function)   100% 14 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/status.py is_worker_running   75% 12 3 0   50% 2 1   71%
src/backend/InvenTree/InvenTree/status.py check_system_health   88% 17 2 0   50% 16 8   70%
src/backend/InvenTree/InvenTree/status.py (no function)   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/status_codes.py (no function)   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/tasks.py schedule_task   0% 15 15 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/tasks.py raise_warning   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/tasks.py check_daily_holdoff   0% 29 29 0   0% 14 0   0%
src/backend/InvenTree/InvenTree/tasks.py record_task_attempt   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/tasks.py record_task_success   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/tasks.py check_existing_task   86% 14 2 0   80% 10 2   83%
src/backend/InvenTree/InvenTree/tasks.py offload_task   37% 59 37 0   43% 14 2   38%
src/backend/InvenTree/InvenTree/tasks.py get_queued_task   93% 15 1 0   88% 8 1   91%
src/backend/InvenTree/InvenTree/tasks.py TaskRegister.register   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/tasks.py scheduled_task   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/tasks.py scheduled_task._task_wrapper   71% 7 2 0   50% 4 2   64%
src/backend/InvenTree/InvenTree/tasks.py rebuild_model_tree   0% 13 13 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/tasks.py heartbeat   0% 17 17 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/tasks.py delete_successful_tasks   0% 10 10 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/tasks.py delete_failed_tasks   0% 10 10 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/tasks.py delete_old_error_logs   0% 10 10 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/tasks.py delete_old_notifications   0% 14 14 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/tasks.py delete_old_emails   0% 13 13 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/tasks.py check_for_updates   0% 34 34 0   0% 16 0   0%
src/backend/InvenTree/InvenTree/tasks.py update_exchange_rates   55% 31 14 0   38% 8 3   51%
src/backend/InvenTree/InvenTree/tasks.py run_backup   0% 9 9 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/tasks.py get_migration_plan   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/tasks.py get_migration_count   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/tasks.py check_for_migrations   68% 38 12 0   56% 16 5   65%
src/backend/InvenTree/InvenTree/tasks.py check_for_migrations.set_pending_migrations   60% 5 2 0   100% 0 0   60%
src/backend/InvenTree/InvenTree/tasks.py email_user   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/tasks.py run_oauth_maintenance   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/tasks.py (no function)   100% 88 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/template.py InvenTreeTemplateLoader.get_template   83% 6 1 0   50% 2 1   75%
src/backend/InvenTree/InvenTree/template.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/templatetags/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py define   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py decimal   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py render_date   0% 15 15 0   0% 8 0   0%
src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py str2bool   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py to_list   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py inventree_instance_name   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py inventree_title   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py inventree_logo   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py inventree_version   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py inventree_commit_hash   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py inventree_installer   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py inventree_commit_date   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py setting_object   0% 12 12 0   0% 6 0   0%
src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py settings_value   40% 5 3 0   25% 4 1   33%
src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py keyvalue   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py inventree_customize   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py (no function)   100% 45 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/test_helpers/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/test_helpers/sample_tasks.py get_result   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/test_helpers/sample_tasks.py (no function)   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/tracing.py setup_tracing   0% 56 56 0   0% 24 0   0%
src/backend/InvenTree/InvenTree/tracing.py setup_instruments   0% 26 26 0   0% 14 0   0%
src/backend/InvenTree/InvenTree/tracing.py (no function)   100% 22 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/unit_test.py count_queries   0% 14 14 0   0% 8 0   0%
src/backend/InvenTree/InvenTree/unit_test.py addUserPermission   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/unit_test.py getMigrationFileNames   0% 8 8 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/unit_test.py getOldestMigrationFile   0% 12 12 0   0% 8 0   0%
src/backend/InvenTree/InvenTree/unit_test.py getNewestMigrationFile   0% 12 12 0   0% 8 0   0%
src/backend/InvenTree/InvenTree/unit_test.py findOffloadedTask   0% 24 24 0   0% 22 0   0%
src/backend/InvenTree/InvenTree/unit_test.py findOffloadedEvent   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/unit_test.py UserMixin.setUpTestData   0% 13 13 0   0% 8 0   0%
src/backend/InvenTree/InvenTree/unit_test.py UserMixin.setUp   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/unit_test.py UserMixin.login   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/unit_test.py UserMixin.logout   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/unit_test.py UserMixin.clearRoles   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/unit_test.py UserMixin.assignRole   0% 21 21 0   0% 22 0   0%
src/backend/InvenTree/InvenTree/unit_test.py PluginMixin.setUp   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/unit_test.py ExchangeRateMixin.generate_exchange_rates   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/unit_test.py TestQueryMixin.assertNumQueriesLessThan   0% 15 15 0   0% 10 0   0%
src/backend/InvenTree/InvenTree/unit_test.py PluginRegistryMixin.setUpTestData   0% 9 9 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/unit_test.py PluginRegistryMixin.ensurePluginsLoaded   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/unit_test.py InvenTreeAPITestCase.check_response   0% 10 10 0   0% 10 0   0%
src/backend/InvenTree/InvenTree/unit_test.py InvenTreeAPITestCase.getActions   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/unit_test.py InvenTreeAPITestCase.query   0% 17 17 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/unit_test.py InvenTreeAPITestCase.get   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/unit_test.py InvenTreeAPITestCase.post   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/unit_test.py InvenTreeAPITestCase.delete   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/unit_test.py InvenTreeAPITestCase.patch   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/unit_test.py InvenTreeAPITestCase.put   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/unit_test.py InvenTreeAPITestCase.options   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/unit_test.py InvenTreeAPITestCase.download_file   0% 20 20 0   0% 8 0   0%
src/backend/InvenTree/InvenTree/unit_test.py InvenTreeAPITestCase.export_data   0% 22 22 0   0% 10 0   0%
src/backend/InvenTree/InvenTree/unit_test.py InvenTreeAPITestCase.process_csv   0% 24 24 0   0% 18 0   0%
src/backend/InvenTree/InvenTree/unit_test.py InvenTreeAPITestCase.assertDictContainsSubset   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/unit_test.py InvenTreeAPITestCase.run_ordering_test   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/unit_test.py InvenTreeAPITestCase.run_output_test   0% 10 10 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/unit_test.py InvenTreeAPITestCase.run_output_test.get_response   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/InvenTree/unit_test.py AdminTestCase.helper   0% 10 10 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/unit_test.py in_env_context   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/unit_test.py (no function)   100% 87 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/urls.py (no function)   92% 51 4 0   50% 10 5   85%
src/backend/InvenTree/InvenTree/validators.py validate_physical_units   62% 8 3 0   50% 2 1   60%
src/backend/InvenTree/InvenTree/validators.py validate_currency_code   50% 2 1 0   50% 2 1   50%
src/backend/InvenTree/InvenTree/validators.py allowable_url_schemes   67% 6 2 0   25% 4 1   50%
src/backend/InvenTree/InvenTree/validators.py AllowedURLValidator.__call__   0% 8 8 0   0% 6 0   0%
src/backend/InvenTree/InvenTree/validators.py validate_purchase_order_reference   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/validators.py validate_sales_order_reference   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/InvenTree/validators.py validate_tree_name   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/validators.py (no function)   100% 16 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/version.py checkMinPythonVersion   78% 9 2 0   50% 4 2   69%
src/backend/InvenTree/InvenTree/version.py inventreeInstanceName   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/version.py inventreeInstanceTitle   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/InvenTree/version.py inventreeVersion   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/version.py inventreeVersionTuple   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/version.py isInvenTreeDevelopmentVersion   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/version.py inventreeDocUrl   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/version.py inventreeAppUrl   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/version.py inventreeGithubUrl   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/version.py isInvenTreeUpToDate   57% 7 3 0   50% 2 1   56%
src/backend/InvenTree/InvenTree/version.py inventreeApiVersion   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/version.py parse_version_text   100% 14 0 0   100% 4 0   100%
src/backend/InvenTree/InvenTree/version.py inventreeApiText   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/InvenTree/version.py inventreeDjangoVersion   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/version.py inventreePythonVersion   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/version.py inventreeCommitHash   50% 6 3 0   25% 4 1   40%
src/backend/InvenTree/InvenTree/version.py inventreeCommitDate   43% 7 4 0   25% 4 1   36%
src/backend/InvenTree/InvenTree/version.py inventreeBranch   67% 6 2 0   50% 4 2   60%
src/backend/InvenTree/InvenTree/version.py inventreeTarget   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/version.py inventreePlatform   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/version.py inventreeDatabase   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/version.py inventree_identifier   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/InvenTree/version.py (no function)   77% 73 17 0   25% 4 3   74%
src/backend/InvenTree/InvenTree/views.py auth_request   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/InvenTree/views.py (no function)   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/InvenTree/wsgi.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/build/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/build/admin.py (no function)   100% 17 0 0   100% 0 0   100%
src/backend/InvenTree/build/api.py BuildFilter.filter_status   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/build/api.py BuildFilter.filter_active   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/build/api.py BuildFilter.filter_include_variants   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/build/api.py BuildFilter.filter_part   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/build/api.py BuildFilter.filter_category   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/build/api.py BuildFilter.filter_ancestor   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/build/api.py BuildFilter.filter_overdue   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/build/api.py BuildFilter.filter_assigned_to_me   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/build/api.py BuildFilter.filter_responsible   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/build/api.py BuildFilter.filter_has_project_code   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/build/api.py BuildFilter.filter_has_start_date   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/build/api.py BuildFilter.filter_has_target_date   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/build/api.py BuildFilter.filter_min_date   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/api.py BuildFilter.filter_max_date   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/api.py BuildFilter.filter_exclude_tree   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/build/api.py BuildMixin.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/build/api.py BuildList.get_serializer   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/build/api.py BuildList.create   40% 5 3 0   100% 0 0   40%
src/backend/InvenTree/build/api.py BuildDetail.destroy   25% 4 3 0   0% 2 0   17%
src/backend/InvenTree/build/api.py BuildUnallocate.get_serializer_context   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/build/api.py BuildLineFilter.filter_order_outstanding   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/build/api.py BuildLineFilter.filter_allocated   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/build/api.py BuildLineFilter.filter_consumed   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/build/api.py BuildLineFilter.filter_available   83% 6 1 0   50% 2 1   75%
src/backend/InvenTree/build/api.py BuildLineFilter.filter_on_order   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/build/api.py BuildLineMixin.get_source_build   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/api.py BuildLineMixin.get_queryset   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/build/api.py BuildLineList.get_source_build   75% 8 2 0   100% 2 0   80%
src/backend/InvenTree/build/api.py BuildLineDetail.get_source_build   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/build/api.py BuildOrderContextMixin.get_build   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/api.py BuildOrderContextMixin.get_serializer_context   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/build/api.py BuildOutputCreate.create   33% 6 4 0   100% 0 0   33%
src/backend/InvenTree/build/api.py BuildOutputScrap.get_serializer_context   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/build/api.py BuildOutputScrap.post   33% 9 6 0   100% 0 0   33%
src/backend/InvenTree/build/api.py BuildOutputComplete.post   30% 10 7 0   100% 0 0   30%
src/backend/InvenTree/build/api.py BuildOutputDelete.get_serializer_context   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/build/api.py BuildOutputDelete.post   33% 9 6 0   100% 0 0   33%
src/backend/InvenTree/build/api.py BuildFinish.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/build/api.py BuildAutoAllocate.post   30% 10 7 0   100% 0 0   30%
src/backend/InvenTree/build/api.py BuildConsume.post   25% 12 9 0   100% 0 0   25%
src/backend/InvenTree/build/api.py BuildItemFilter.filter_include_variants   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/api.py BuildItemFilter.filter_part   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/build/api.py BuildItemFilter.filter_tracked   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/build/api.py BuildItemFilter.filter_location   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/build/api.py BuildItemList.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/build/api.py (no function)   100% 222 0 0   100% 0 0   100%
src/backend/InvenTree/build/apps.py (no function)   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/build/events.py (no function)   100% 10 0 0   100% 0 0   100%
src/backend/InvenTree/build/filters.py annotate_required_quantity   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/filters.py annotate_allocated_quantity   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/filters.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0001_initial.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0002_auto_20190520_2204.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0003_auto_20190525_2355.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0004_auto_20190525_2356.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0005_auto_20190604_2217.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0006_auto_20190913_1407.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0007_auto_20191118_2321.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0008_auto_20200201_1247.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0009_auto_20200210_1032.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0010_auto_20200318_1027.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0011_auto_20200406_0123.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0012_build_sales_order.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0013_auto_20200425_0507.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0014_auto_20200425_1243.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0015_auto_20200425_1350.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0016_auto_20200426_0551.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0017_auto_20200426_0612.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0018_build_reference.py add_default_reference   50% 8 4 0   50% 4 2   50%
src/backend/InvenTree/build/migrations/0018_build_reference.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0019_auto_20201019_1302.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0020_auto_20201019_1325.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0021_auto_20201020_0908_squashed_0026_auto_20201023_1228.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0022_buildorderattachment.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0023_auto_20201110_0911.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0024_auto_20201201_1023.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0025_build_target_date.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0026_auto_20210216_1539.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0027_auto_20210404_2016.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0028_builditem_bom_item.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0029_auto_20210601_1525.py assign_bom_items   0% 18 18 0   0% 6 0   0%
src/backend/InvenTree/build/migrations/0029_auto_20210601_1525.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0030_alter_build_reference.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0031_build_reference_int.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0032_auto_20211014_0632.py build_refs   15% 13 11 0   17% 6 1   16%
src/backend/InvenTree/build/migrations/0032_auto_20211014_0632.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0033_auto_20211128_0151.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0034_alter_build_reference_int.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0035_alter_build_notes.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0036_auto_20220707_1101.py update_build_reference   67% 21 7 0   33% 6 2   59%
src/backend/InvenTree/build/migrations/0036_auto_20220707_1101.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0037_build_priority.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0038_alter_build_responsible.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0039_auto_20230317_0816.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0040_auto_20230404_1310.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0041_alter_build_title.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0042_alter_build_notes.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0043_buildline.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0044_auto_20230528_1410.py get_bom_items_for_part   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/build/migrations/0044_auto_20230528_1410.py add_lines_to_builds   60% 15 6 0   38% 8 3   52%
src/backend/InvenTree/build/migrations/0044_auto_20230528_1410.py remove_build_lines   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/build/migrations/0044_auto_20230528_1410.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0045_builditem_build_line.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0046_auto_20230606_1033.py add_build_line_links   38% 16 10 0   25% 8 2   33%
src/backend/InvenTree/build/migrations/0046_auto_20230606_1033.py reverse_build_links   0% 8 8 0   0% 4 0   0%
src/backend/InvenTree/build/migrations/0046_auto_20230606_1033.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0047_auto_20230606_1058.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0048_build_project_code.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0049_alter_builditem_build_line.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0050_auto_20240508_0138.py forward   60% 5 2 0   50% 2 1   57%
src/backend/InvenTree/build/migrations/0050_auto_20240508_0138.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0051_delete_buildorderattachment.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0052_build_status_custom_key_alter_build_status.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0053_alter_build_part.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0054_build_start_date.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0055_auto_20250221_1230.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0056_alter_build_link.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0057_build_external.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0058_buildline_consumed.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/0059_build_tags.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/build/migrations/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/build/models.py Build.get_overdue_filter   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/build/models.py Build.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/build/models.py Build.api_instance_filters   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.api_defaults   100% 4 0 0   50% 2 1   83%
src/backend/InvenTree/build/models.py Build.barcode_model_type_code   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.save   0% 15 15 0   0% 18 0   0%
src/backend/InvenTree/build/models.py Build.clean   0% 10 10 0   0% 10 0   0%
src/backend/InvenTree/build/models.py Build.report_context   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.get_absolute_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.status_text   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.created_by   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.sub_builds   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/build/models.py Build.sub_build_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.has_open_child_builds   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.is_overdue   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.active   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.tracked_line_items   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.has_tracked_line_items   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.untracked_line_items   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.are_untracked_parts_allocated   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.has_untracked_line_items   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.remaining   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.output_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.has_build_outputs   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.get_build_outputs   0% 12 12 0   0% 8 0   0%
src/backend/InvenTree/build/models.py Build.complete_outputs   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.complete_count   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/build/models.py Build.is_partially_allocated   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.incomplete_outputs   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.incomplete_count   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/build/models.py Build.getNextBuildNumber   0% 19 19 0   0% 10 0   0%
src/backend/InvenTree/build/models.py Build.can_complete   0% 9 9 0   0% 8 0   0%
src/backend/InvenTree/build/models.py Build.complete_allocations   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.complete_build   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build._action_complete   0% 12 12 0   0% 4 0   0%
src/backend/InvenTree/build/models.py Build.issue_build   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.can_issue   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build._action_issue   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/build/models.py Build.hold_build   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.can_hold   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build._action_hold   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/build/models.py Build.cancel_build   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build._action_cancel   0% 9 9 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.deallocate_stock   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/build/models.py Build.create_build_output   0% 36 36 0   0% 18 0   0%
src/backend/InvenTree/build/models.py Build.delete_output   0% 8 8 0   0% 6 0   0%
src/backend/InvenTree/build/models.py Build.trim_allocated_stock   0% 20 20 0   0% 10 0   0%
src/backend/InvenTree/build/models.py Build.allocated_stock   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.subtract_allocated_stock   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/build/models.py Build.scrap_build_output   0% 24 24 0   0% 14 0   0%
src/backend/InvenTree/build/models.py Build.complete_build_output   0% 38 38 0   0% 20 0   0%
src/backend/InvenTree/build/models.py Build.auto_allocate_stock   0% 4 4 0   0% 4 0   0%
src/backend/InvenTree/build/models.py Build.auto_allocate_tracked_output   0% 30 30 0   0% 18 0   0%
src/backend/InvenTree/build/models.py Build.auto_allocate_tracked_stock   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/build/models.py Build.auto_allocate_untracked_stock   0% 52 52 0   0% 26 0   0%
src/backend/InvenTree/build/models.py Build.auto_allocate_untracked_stock.stock_sort   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/build/models.py Build.unallocated_lines   0% 9 9 0   0% 4 0   0%
src/backend/InvenTree/build/models.py Build.is_fully_allocated   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.is_output_fully_allocated   0% 8 8 0   0% 4 0   0%
src/backend/InvenTree/build/models.py Build.is_overallocated   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.is_active   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.is_complete   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py Build.create_build_line_items   0% 13 13 0   0% 8 0   0%
src/backend/InvenTree/build/models.py Build.update_build_line_items   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/build/models.py after_save_build   0% 7 7 0   0% 6 0   0%
src/backend/InvenTree/build/models.py BuildLine.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/build/models.py BuildLine.report_context   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py BuildLine.part   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py BuildLine.allocated_quantity   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/build/models.py BuildLine.unallocated_quantity   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py BuildLine.is_fully_allocated   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/build/models.py BuildLine.is_overallocated   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/build/models.py BuildLine.is_fully_consumed   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py BuildItem.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/build/models.py BuildItem.save   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/build/models.py BuildItem.clean   0% 31 31 0   0% 20 0   0%
src/backend/InvenTree/build/models.py BuildItem.check_allocated_quantity   0% 21 21 0   0% 10 0   0%
src/backend/InvenTree/build/models.py BuildItem.build   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py BuildItem.bom_item   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/models.py BuildItem.complete_allocation   0% 25 25 0   0% 12 0   0%
src/backend/InvenTree/build/models.py (no function)   100% 214 0 0   100% 0 0   100%
src/backend/InvenTree/build/serializers.py BuildSerializer.annotate_queryset   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/build/serializers.py BuildSerializer.__init__   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/build/serializers.py BuildSerializer.validate_reference   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/build/serializers.py BuildOutputSerializer.validate_output   0% 16 16 0   0% 14 0   0%
src/backend/InvenTree/build/serializers.py BuildOutputQuantitySerializer.validate   0% 9 9 0   0% 6 0   0%
src/backend/InvenTree/build/serializers.py BuildOutputCreateSerializer.get_build   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/serializers.py BuildOutputCreateSerializer.get_part   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/build/serializers.py BuildOutputCreateSerializer.validate_quantity   22% 9 7 0   12% 8 1   18%
src/backend/InvenTree/build/serializers.py BuildOutputCreateSerializer.validate_serial_numbers   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/build/serializers.py BuildOutputCreateSerializer.validate   0% 18 18 0   0% 6 0   0%
src/backend/InvenTree/build/serializers.py BuildOutputCreateSerializer.save   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/build/serializers.py BuildOutputDeleteSerializer.validate   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/build/serializers.py BuildOutputScrapSerializer.validate   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/build/serializers.py BuildOutputCompleteSerializer.validate   0% 16 16 0   0% 12 0   0%
src/backend/InvenTree/build/serializers.py BuildIssueSerializer.save   50% 2 1 0   100% 0 0   50%
src/backend/InvenTree/build/serializers.py BuildHoldSerializer.save   50% 2 1 0   100% 0 0   50%
src/backend/InvenTree/build/serializers.py BuildCancelSerializer.get_context_data   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/build/serializers.py BuildCancelSerializer.save   25% 4 3 0   100% 0 0   25%
src/backend/InvenTree/build/serializers.py BuildCompleteSerializer.get_context_data   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/build/serializers.py BuildCompleteSerializer.validate_accept_overallocated   25% 4 3 0   0% 2 0   17%
src/backend/InvenTree/build/serializers.py BuildCompleteSerializer.validate_accept_unallocated   25% 4 3 0   0% 2 0   17%
src/backend/InvenTree/build/serializers.py BuildCompleteSerializer.validate_accept_incomplete   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/build/serializers.py BuildCompleteSerializer.validate   0% 8 8 0   0% 6 0   0%
src/backend/InvenTree/build/serializers.py BuildCompleteSerializer.save   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/build/serializers.py BuildUnallocationSerializer.validate_output   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/build/serializers.py BuildUnallocationSerializer.save   33% 3 2 0   100% 0 0   33%
src/backend/InvenTree/build/serializers.py BuildAllocationItemSerializer.validate_build_line   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/build/serializers.py BuildAllocationItemSerializer.validate_stock_item   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/build/serializers.py BuildAllocationItemSerializer.validate_quantity   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/build/serializers.py BuildAllocationItemSerializer.validate   0% 14 14 0   0% 6 0   0%
src/backend/InvenTree/build/serializers.py BuildAllocationSerializer.validate   80% 5 1 0   50% 2 1   71%
src/backend/InvenTree/build/serializers.py BuildAllocationSerializer.save   0% 18 18 0   0% 6 0   0%
src/backend/InvenTree/build/serializers.py BuildLineSerializer.annotate_queryset   88% 24 3 0   50% 4 2   82%
src/backend/InvenTree/build/serializers.py BuildConsumeAllocationSerializer.validate_quantity   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/build/serializers.py BuildConsumeAllocationSerializer.validate   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/build/serializers.py BuildConsumeSerializer.validate_items   0% 10 10 0   0% 6 0   0%
src/backend/InvenTree/build/serializers.py BuildConsumeSerializer.validate_lines   0% 10 10 0   0% 6 0   0%
src/backend/InvenTree/build/serializers.py BuildConsumeSerializer.validate   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/build/serializers.py (no function)   100% 236 0 0   100% 0 0   100%
src/backend/InvenTree/build/status_codes.py (no function)   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/build/tasks.py auto_allocate_build   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/build/tasks.py consume_build_stock   0% 14 14 0   0% 10 0   0%
src/backend/InvenTree/build/tasks.py complete_build_allocations   0% 10 10 0   0% 2 0   0%
src/backend/InvenTree/build/tasks.py delete_build_outputs   0% 8 8 0   0% 4 0   0%
src/backend/InvenTree/build/tasks.py scrap_build_outputs   0% 10 10 0   0% 4 0   0%
src/backend/InvenTree/build/tasks.py complete_build_outputs   0% 11 11 0   0% 4 0   0%
src/backend/InvenTree/build/tasks.py cancel_build   0% 9 9 0   0% 4 0   0%
src/backend/InvenTree/build/tasks.py complete_build   0% 18 18 0   0% 6 0   0%
src/backend/InvenTree/build/tasks.py update_build_order_lines   0% 22 22 0   0% 14 0   0%
src/backend/InvenTree/build/tasks.py check_build_stock   0% 28 28 0   0% 12 0   0%
src/backend/InvenTree/build/tasks.py notify_overdue_build_order   0% 11 11 0   0% 4 0   0%
src/backend/InvenTree/build/tasks.py check_overdue_build_orders   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/build/tasks.py (no function)   100% 43 0 0   100% 0 0   100%
src/backend/InvenTree/build/validators.py generate_next_build_reference   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/build/validators.py validate_build_order_reference_pattern   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/build/validators.py validate_build_order_reference   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/build/validators.py (no function)   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/common/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/common/admin.py AttachmentAdmin.formfield_for_dbfield   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/common/admin.py DataOutputAdmin.has_add_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/admin.py DataOutputAdmin.has_change_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/admin.py BarcodeScanResultAdmin.has_add_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/admin.py BarcodeScanResultAdmin.has_change_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/admin.py SettingsAdmin.get_readonly_fields   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/common/admin.py UserSettingsAdmin.get_readonly_fields   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/common/admin.py NotificationEntryAdmin.has_add_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/admin.py NotificationEntryAdmin.has_change_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/admin.py NotificationMessageAdmin.has_add_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/admin.py NotificationMessageAdmin.has_change_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/admin.py NewsFeedEntryAdmin.has_add_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/admin.py NewsFeedEntryAdmin.has_change_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/admin.py ReadOnlyAdmin.has_add_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/admin.py ReadOnlyAdmin.has_change_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/admin.py ReadOnlyAdmin.has_delete_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/admin.py (no function)   100% 80 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py CsrfExemptMixin.dispatch   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py WebhookView.post   8% 13 12 0   0% 2 0   7%
src/backend/InvenTree/common/api.py WebhookView._process_payload   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/common/api.py WebhookView._process_result   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/common/api.py WebhookView._escalate_object   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/common/api.py WebhookView._get_webhook   57% 7 3 0   100% 0 0   57%
src/backend/InvenTree/common/api.py CurrencyViewSet.exchange   69% 16 5 0   75% 4 1   70%
src/backend/InvenTree/common/api.py CurrencyViewSet.refresh   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py GlobalSettingsList.list   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py GlobalSettingsDetail.get_object   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/common/api.py UserSettingsList.list   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py UserSettingsList.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py UserSettingsList.filter_queryset   67% 9 3 0   50% 2 1   64%
src/backend/InvenTree/common/api.py UserSettingsDetail.get_object   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/common/api.py NotificationMessageViewSet.get_queryset   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py NotificationMessageViewSet.filter_queryset   67% 9 3 0   50% 2 1   64%
src/backend/InvenTree/common/api.py NotificationMessageViewSet.filter_delete_queryset   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/common/api.py NotificationMessageViewSet.readall   60% 5 2 0   100% 0 0   60%
src/backend/InvenTree/common/api.py ConfigViewSet.get_object   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/common/api.py NotesImageList.perform_create   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/api.py TagFilter.filter_model_type   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/common/api.py CustomUnitViewset.all   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py CustomUnitViewset.get_unit   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/common/api.py BackgroundTaskDetail.get   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py BackgroundTaskOverview.get   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py ScheduledTaskList.get_queryset   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py FlagDetail.get_object   80% 5 1 0   50% 2 1   71%
src/backend/InvenTree/common/api.py ContentTypeModelDetail.get_object   88% 8 1 0   50% 2 1   80%
src/backend/InvenTree/common/api.py ContentTypeModelDetail.get   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py AttachmentFilter.filter_has_thumbnail   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/common/api.py AttachmentFilter.filter_is_link   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/common/api.py AttachmentFilter.filter_is_file   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/common/api.py AttachmentList.perform_create   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py AttachmentList.validate_delete   0% 7 7 0   0% 6 0   0%
src/backend/InvenTree/common/api.py AttachmentDetail.update   8% 12 11 0   0% 4 0   6%
src/backend/InvenTree/common/api.py AttachmentDetail.destroy   25% 4 3 0   0% 2 0   17%
src/backend/InvenTree/common/api.py ParameterTemplateFilter.filter_has_choices   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/common/api.py ParameterTemplateFilter.filter_has_units   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/common/api.py ParameterTemplateFilter.filter_model_type   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py ParameterTemplateFilter.filter_for_model   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py ParameterTemplateFilter.filter_exists_for_model   38% 8 5 0   25% 4 1   33%
src/backend/InvenTree/common/api.py ParameterTemplateFilter.filter_exists_for_model_id   17% 18 15 0   17% 6 1   17%
src/backend/InvenTree/common/api.py ParameterTemplateFilter.filter_exists_for_related_model   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/api.py ParameterTemplateFilter.filter_exists_for_related_model_id   0% 27 27 0   0% 8 0   0%
src/backend/InvenTree/common/api.py ParameterFilter.filter_model_type   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py IconList.get_queryset   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py SelectionListMixin.get_queryset   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py EntryMixin.get_queryset   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py EntryMixin.perform_destroy   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/common/api.py DataOutputViewSet.get_queryset   62% 8 3 0   50% 2 1   60%
src/backend/InvenTree/common/api.py EmailViewSet.test   86% 7 1 0   50% 2 1   78%
src/backend/InvenTree/common/api.py HealthCheckView.get   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/api.py ObservabilityEnd.create   18% 11 9 0   50% 2 1   23%
src/backend/InvenTree/common/api.py (no function)   100% 372 0 0   100% 0 0   100%
src/backend/InvenTree/common/apps.py CommonConfig.ready   80% 5 1 0   50% 2 1   71%
src/backend/InvenTree/common/apps.py CommonConfig.clear_restart_flag   29% 7 5 0   25% 4 1   27%
src/backend/InvenTree/common/apps.py (no function)   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/common/currency.py currency_code_default   69% 13 4 0   50% 6 3   63%
src/backend/InvenTree/common/currency.py all_currency_codes   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/currency.py currency_codes_default_list   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/currency.py currency_codes   83% 18 3 0   75% 12 3   80%
src/backend/InvenTree/common/currency.py currency_code_mappings   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/currency.py after_change_currency   78% 9 2 0   50% 4 2   69%
src/backend/InvenTree/common/currency.py validate_currency_codes   0% 14 14 0   0% 10 0   0%
src/backend/InvenTree/common/currency.py currency_exchange_plugins   62% 8 3 0   50% 2 1   60%
src/backend/InvenTree/common/currency.py get_price   0% 32 32 0   0% 20 0   0%
src/backend/InvenTree/common/currency.py (no function)   100% 19 0 0   100% 0 0   100%
src/backend/InvenTree/common/filters.py determine_content_type   88% 16 2 0   75% 4 1   85%
src/backend/InvenTree/common/filters.py filter_content_type   78% 9 2 0   67% 6 2   73%
src/backend/InvenTree/common/filters.py TagsFilter.__init__   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/common/filters.py TagsFilter.filter   100% 6 0 0   100% 4 0   100%
src/backend/InvenTree/common/filters.py filter_parameters_by_value   0% 38 38 0   0% 14 0   0%
src/backend/InvenTree/common/filters.py filter_parametric_data   70% 10 3 0   75% 4 1   71%
src/backend/InvenTree/common/filters.py order_by_parameter   46% 13 7 0   75% 4 1   53%
src/backend/InvenTree/common/filters.py enable_project_code_filter   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/filters.py enable_project_label_filter   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/filters.py enable_parameters_filter   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/filters.py enable_tags_filter   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/filters.py (no function)   100% 26 0 0   100% 0 0   100%
src/backend/InvenTree/common/icons.py get_icon_packs   67% 15 5 0   75% 4 1   68%
src/backend/InvenTree/common/icons.py reload_icon_packs   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/common/icons.py validate_icon   33% 12 8 0   0% 6 0   22%
src/backend/InvenTree/common/icons.py (no function)   100% 15 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0001_initial.py CreateModelOrSkip.database_forwards   50% 4 2 0   100% 0 0   50%
src/backend/InvenTree/common/migrations/0001_initial.py CreateModelOrSkip.state_forwards   50% 4 2 0   100% 0 0   50%
src/backend/InvenTree/common/migrations/0001_initial.py (no function)   100% 10 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0002_auto_20190902_2304.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0003_auto_20190902_2310.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0004_inventreesetting.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0005_auto_20190915_1256.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0006_auto_20200203_0951.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0007_colortheme.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0008_remove_inventreesetting_description.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0009_delete_currency.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0010_migrate_currency_setting.py set_default_currency   57% 7 3 0   25% 4 1   45%
src/backend/InvenTree/common/migrations/0010_migrate_currency_setting.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0011_auto_20210722_2114.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0012_notificationentry.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0013_webhookendpoint_webhookmessage.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0014_notificationmessage.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0015_newsfeedentry.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0016_alter_notificationentry_updated.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0017_notesimage.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0018_projectcode.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0019_projectcode_metadata.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0020_customunit.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0021_auto_20230805_1748.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0022_projectcode_responsible.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0023_auto_20240602_1332.py set_currencies   18% 28 23 0   6% 18 1   13%
src/backend/InvenTree/common/migrations/0023_auto_20240602_1332.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0024_notesimage_model_id_notesimage_model_type.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0025_attachment.py (no function)   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0026_auto_20240608_1238.py get_legacy_models   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0026_auto_20240608_1238.py update_attachments   35% 20 13 0   30% 10 1   33%
src/backend/InvenTree/common/migrations/0026_auto_20240608_1238.py reverse_attachments   0% 14 14 0   0% 6 0   0%
src/backend/InvenTree/common/migrations/0026_auto_20240608_1238.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0027_alter_customunit_symbol.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0028_colortheme_user_obj.py migrate_userthemes   38% 8 5 0   50% 2 1   40%
src/backend/InvenTree/common/migrations/0028_colortheme_user_obj.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0029_inventreecustomuserstatemodel.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0030_barcodescanresult.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0031_auto_20241026_0024.py update_news_feed_urls   44% 9 5 0   33% 6 2   40%
src/backend/InvenTree/common/migrations/0031_auto_20241026_0024.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0032_selectionlist_selectionlistentry_and_more.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0033_delete_colortheme.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0034_alter_inventreecustomuserstatemodel_unique_together_and_more.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0035_auto_20250221_1513.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0036_alter_attachment_link.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0037_dataoutput.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0038_alter_attachment_model_type.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0039_emailthread_emailmessage.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0040_parametertemplate_parameter.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0041_auto_20251203_1244.py convert_to_numeric_value   0% 13 13 0   0% 2 0   0%
src/backend/InvenTree/common/migrations/0041_auto_20251203_1244.py copy_manufacturer_part_parameters   58% 19 8 0   38% 8 3   52%
src/backend/InvenTree/common/migrations/0041_auto_20251203_1244.py update_global_setting   58% 12 5 0   0% 2 0   50%
src/backend/InvenTree/common/migrations/0041_auto_20251203_1244.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0042_attachment_is_image_attachment_thumbnail.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0043_auto_20260518_1206.py update_image_attachments   38% 13 8 0   12% 8 1   29%
src/backend/InvenTree/common/migrations/0043_auto_20260518_1206.py (no function)   100% 12 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/0044_notificationmessage_charfield_pk.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/migrations/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py RenderMeta.choices   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/common/models.py UpdatedUserMixin.save   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/common/models.py ProjectCode.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py ProjectCode.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.save   100% 10 0 0   50% 2 1   92%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.build_default_values   78% 9 2 0   100% 2 0   82%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting._call_settings_function   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.cache_key   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.save_to_cache   75% 8 2 0   100% 2 0   80%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.create_cache_key   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.get_filters   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.get_filters_for_instance   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.all_settings   69% 29 9 0   65% 20 7   67%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.allValues   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.check_all_settings   0% 8 8 0   0% 6 0   0%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.get_setting_definition   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.get_setting_name   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.get_setting_description   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.get_setting_units   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.get_setting_validator   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.get_setting_default   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.get_setting_choices   100% 8 0 0   100% 2 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.get_setting_object   84% 44 7 0   89% 18 2   85%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.get_setting   81% 16 3 0   90% 10 1   85%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.set_setting   47% 36 19 0   50% 16 6   48%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.name   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.default_value   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.description   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.units   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.clean   85% 13 2 0   80% 10 2   83%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.run_validator   58% 33 14 0   73% 22 4   64%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.validate_unique   62% 8 3 0   50% 2 1   60%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.choices   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.valid_options   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.is_choice   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.as_choice   0% 7 7 0   0% 6 0   0%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.is_model   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.model_name   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.confirm   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.confirm_text   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.model_filters   80% 5 1 0   50% 2 1   71%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.model_class   17% 18 15 0   17% 6 1   17%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.api_url   27% 11 8 0   25% 4 1   27%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.is_bool   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.as_bool   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.setting_type   86% 7 1 0   83% 6 1   85%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.validator_is_bool   86% 7 1 0   88% 8 1   87%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.is_float   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.validator_is_float   43% 7 4 0   25% 8 2   33%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.as_float   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.is_int   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.validator_is_int   100% 7 0 0   75% 8 2   87%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.as_int   43% 7 4 0   0% 2 0   33%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.is_protected   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.protected   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.is_required   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py BaseInvenTreeSetting.required   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py InvenTreeSetting.save   67% 6 2 0   50% 4 2   60%
src/backend/InvenTree/common/models.py InvenTreeSetting.get_setting_default   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/common/models.py InvenTreeSetting.get_setting   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/common/models.py InvenTreeSetting.to_native_value   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/models.py InvenTreeSetting.requires_restart   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/common/models.py InvenTreeUserSetting.to_native_value   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/models.py PriceBreak.convert_to   0% 6 6 0   100% 0 0   0%
src/backend/InvenTree/common/models.py WebhookEndpoint.init   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/models.py WebhookEndpoint.process_webhook   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/common/models.py WebhookEndpoint.validate_token   0% 12 12 0   0% 10 0   0%
src/backend/InvenTree/common/models.py WebhookEndpoint.save_data   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/models.py WebhookEndpoint.process_payload   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/models.py WebhookEndpoint.get_return   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/models.py NotificationEntry.check_recent   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py NotificationEntry.notify   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py NotificationMessage.get_api_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/models.py NotificationMessage.age   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py NotificationMessage.age_human   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py rename_notes_image   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/common/models.py CustomUnit.fmt_string   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/common/models.py CustomUnit.validate_unique   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/common/models.py CustomUnit.clean   73% 15 4 0   100% 2 0   76%
src/backend/InvenTree/common/models.py after_custom_unit_updated   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/common/models.py rename_attachment   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/common/models.py Attachment.delete   0% 13 13 0   0% 4 0   0%
src/backend/InvenTree/common/models.py Attachment.save   21% 19 15 0   7% 14 1   15%
src/backend/InvenTree/common/models.py Attachment.clean_svg   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/common/models.py Attachment.__str__   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/common/models.py Attachment.validate_rename   0% 13 13 0   0% 6 0   0%
src/backend/InvenTree/common/models.py Attachment.rename   0% 16 16 0   0% 8 0   0%
src/backend/InvenTree/common/models.py Attachment.basename   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/common/models.py Attachment.fully_qualified_url   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/common/models.py Attachment.check_permission   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/common/models.py Attachment.check_is_image   0% 15 15 0   0% 6 0   0%
src/backend/InvenTree/common/models.py Attachment.generate_thumbnail   0% 20 20 0   0% 6 0   0%
src/backend/InvenTree/common/models.py InvenTreeCustomUserStateModel.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/models.py InvenTreeCustomUserStateModel.save   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/common/models.py InvenTreeCustomUserStateModel.clean   0% 18 18 0   0% 16 0   0%
src/backend/InvenTree/common/models.py InvenTreeCustomUserStateModel.get_status_class   0% 7 7 0   0% 6 0   0%
src/backend/InvenTree/common/models.py SelectionList.__str__   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/common/models.py SelectionList.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py SelectionList.get_choices   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/common/models.py SelectionList.has_choice   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/common/models.py SelectionListEntry.__str__   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/common/models.py ParameterTemplate.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py ParameterTemplate.__str__   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/common/models.py ParameterTemplate.clean   28% 18 13 0   19% 16 3   24%
src/backend/InvenTree/common/models.py ParameterTemplate.validate_unique   50% 8 4 0   50% 2 1   50%
src/backend/InvenTree/common/models.py ParameterTemplate.get_choices   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/common/models.py post_save_parameter_template   100% 4 0 0   75% 4 1   88%
src/backend/InvenTree/common/models.py Parameter.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py Parameter.save   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/common/models.py Parameter.delete   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/common/models.py Parameter.clean   0% 23 23 0   0% 14 0   0%
src/backend/InvenTree/common/models.py Parameter.calculate_numeric_value   0% 12 12 0   0% 6 0   0%
src/backend/InvenTree/common/models.py Parameter.check_permission   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/common/models.py Parameter.check_save   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/common/models.py Parameter.check_delete   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/common/models.py Parameter.units   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/models.py Parameter.name   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/models.py Parameter.description   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/common/models.py DataOutput.mark_complete   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/common/models.py DataOutput.mark_failure   0% 8 8 0   0% 4 0   0%
src/backend/InvenTree/common/models.py NoDeleteQuerySet.delete   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/common/models.py NoDeleteManager.get_queryset   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py EmailMessage.save   0% 8 8 0   0% 4 0   0%
src/backend/InvenTree/common/models.py EmailMessage.delete   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/common/models.py EmailThread.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/models.py issue_mail   0% 11 11 0   0% 8 0   0%
src/backend/InvenTree/common/models.py log_email_messages   0% 12 12 0   0% 2 0   0%
src/backend/InvenTree/common/models.py handle_inbound   0% 6 6 0   100% 0 0   0%
src/backend/InvenTree/common/models.py handle_event   0% 25 25 0   0% 12 0   0%
src/backend/InvenTree/common/models.py spawn_callback   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/common/models.py (no function)   99% 529 2 0   50% 2 1   99%
src/backend/InvenTree/common/notifications.py trigger_notification   71% 68 20 0   54% 54 11   63%
src/backend/InvenTree/common/notifications.py (no function)   100% 26 0 0   100% 0 0   100%
src/backend/InvenTree/common/serializers.py SettingsValueField.get_attribute   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/serializers.py SettingsValueField.to_representation   75% 12 3 0   70% 10 3   73%
src/backend/InvenTree/common/serializers.py SettingsValueField.to_internal_value   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/common/serializers.py SettingsSerializer.get_choices   100% 6 0 0   100% 4 0   100%
src/backend/InvenTree/common/serializers.py SettingsSerializer.validate_value   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/common/serializers.py SettingsSerializer.is_valid   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/common/serializers.py GlobalSettingsSerializer.get_read_only   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/common/serializers.py GenericReferencedSettingSerializer.__init__   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/common/serializers.py GenericReferencedSettingSerializer.validate_value   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/common/serializers.py NotificationMessageSerializer.get_target   75% 12 3 0   50% 6 3   67%
src/backend/InvenTree/common/serializers.py NotificationMessageSerializer.get_source   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/serializers.py ConfigSerializer.to_representation   100% 8 0 0   100% 6 0   100%
src/backend/InvenTree/common/serializers.py TagSerializer.validate   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/common/serializers.py FlagSerializer.to_representation   100% 7 0 0   100% 4 0   100%
src/backend/InvenTree/common/serializers.py ContentTypeSerializer.get_is_plugin   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/serializers.py TaskDetailSerializer.from_task   100% 13 0 0   75% 4 1   94%
src/backend/InvenTree/common/serializers.py ScheduledTaskSerializer.annotate_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/common/serializers.py AttachmentSerializer.__init__   100% 3 0 0   50% 2 1   80%
src/backend/InvenTree/common/serializers.py AttachmentSerializer.save   73% 15 4 0   50% 8 4   65%
src/backend/InvenTree/common/serializers.py ParameterTemplateSerializer.validate_model_type   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/serializers.py ParameterSerializer.save   0% 18 18 0   0% 8 0   0%
src/backend/InvenTree/common/serializers.py SelectionEntrySerializer.validate   80% 5 1 0   50% 2 1   71%
src/backend/InvenTree/common/serializers.py SelectionListSerializer.annotate_queryset   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/serializers.py SelectionListSerializer.validate   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/common/serializers.py (no function)   100% 260 0 0   100% 0 0   100%
src/backend/InvenTree/common/setting/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/common/setting/system.py validate_part_name_format   0% 18 18 0   0% 6 0   0%
src/backend/InvenTree/common/setting/system.py update_instance_name   22% 9 7 0   50% 2 1   27%
src/backend/InvenTree/common/setting/system.py update_instance_url   0% 9 9 0   0% 2 0   0%
src/backend/InvenTree/common/setting/system.py settings_group_options   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/setting/system.py reload_plugin_registry   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/common/setting/system.py enforce_mfa   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/common/setting/system.py barcode_plugins   67% 6 2 0   100% 0 0   67%
src/backend/InvenTree/common/setting/system.py default_uuid4   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/setting/system.py BaseURLValidator.__init__   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/setting/system.py BaseURLValidator.__call__   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/common/setting/system.py (no function)   100% 30 0 0   100% 0 0   100%
src/backend/InvenTree/common/setting/type.py (no function)   70% 10 3 0   50% 2 1   67%
src/backend/InvenTree/common/setting/user.py label_printer_options   100% 5 0 0   50% 2 1   86%
src/backend/InvenTree/common/setting/user.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/common/settings.py plugin_setting_overrides   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/common/settings.py global_setting_overrides   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/common/settings.py get_global_setting   82% 11 2 0   75% 8 2   79%
src/backend/InvenTree/common/settings.py set_global_setting   82% 11 2 0   75% 4 1   80%
src/backend/InvenTree/common/settings.py set_global_warning   0% 25 25 0   0% 8 0   0%
src/backend/InvenTree/common/settings.py stock_expiry_enabled   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/common/settings.py prevent_build_output_complete_on_incompleted_tests   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/common/settings.py (no function)   100% 17 0 0   100% 0 0   100%
src/backend/InvenTree/common/tasks.py cleanup_old_data_outputs   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/common/tasks.py delete_old_notifications   0% 7 7 0   100% 0 0   0%
src/backend/InvenTree/common/tasks.py update_news_feed   0% 24 24 0   0% 8 0   0%
src/backend/InvenTree/common/tasks.py delete_old_notes_images   0% 37 37 0   0% 20 0   0%
src/backend/InvenTree/common/tasks.py rebuild_parameters   0% 16 16 0   0% 6 0   0%
src/backend/InvenTree/common/tasks.py rebuild_attachment   0% 5 5 0   100% 0 0   0%
src/backend/InvenTree/common/tasks.py (no function)   100% 33 0 0   100% 0 0   100%
src/backend/InvenTree/common/validators.py parameter_model_types   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/validators.py parameter_model_options   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/validators.py parameter_template_model_options   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/common/validators.py attachment_model_types   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/common/validators.py attachment_model_options   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/common/validators.py attachment_model_class_from_label   67% 6 2 0   67% 6 2   67%
src/backend/InvenTree/common/validators.py validate_attachment_model_type   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/common/validators.py validate_attachment_file   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/common/validators.py validate_notes_model_type   88% 8 1 0   50% 4 2   75%
src/backend/InvenTree/common/validators.py validate_decimal_places_min   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/common/validators.py validate_decimal_places_max   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/common/validators.py validate_email_domains   0% 8 8 0   0% 8 0   0%
src/backend/InvenTree/common/validators.py validate_icon   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/common/validators.py validate_uppercase   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/common/validators.py validate_variable_string   100% 2 0 0   50% 2 1   75%
src/backend/InvenTree/common/validators.py validate_locale   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/common/validators.py (no function)   100% 23 0 0   100% 0 0   100%
src/backend/InvenTree/company/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/company/admin.py (no function)   100% 35 0 0   100% 0 0   100%
src/backend/InvenTree/company/api.py CompanyMixin.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/company/api.py ManufacturerPartMixin.get_queryset   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/api.py SupplierPartFilter.filter_company   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/api.py SupplierPartFilter.filter_has_stock   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/company/api.py SupplierPartMixin.get_queryset   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/api.py (no function)   100% 125 0 0   100% 0 0   100%
src/backend/InvenTree/company/apps.py CompanyConfig.ready   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/company/apps.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/filters.py annotate_on_order_quantity   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/company/filters.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0001_initial.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0002_auto_20190520_2204.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0003_remove_supplierpart_minimum.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0004_auto_20190525_2354.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0005_auto_20190525_2356.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0006_supplierpricebreak_currency.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0007_remove_supplierpart_lead_time.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0008_auto_20190913_1407.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0009_auto_20191118_2323.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0010_auto_20200201_1231.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0011_auto_20200318_1114.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0012_auto_20200318_1114.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0013_auto_20200406_0131.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0014_auto_20200407_0116.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0015_company_is_manufacturer.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0016_auto_20200412_2330.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0017_auto_20200413_0320.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0018_supplierpart_manufacturer.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0019_auto_20200413_0642.py clear   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/company/migrations/0019_auto_20200413_0642.py reverse_association   0% 27 27 0   0% 10 0   0%
src/backend/InvenTree/company/migrations/0019_auto_20200413_0642.py associate_manufacturers   14% 44 38 0   10% 10 1   13%
src/backend/InvenTree/company/migrations/0019_auto_20200413_0642.py associate_manufacturers.get_manufacturer_name   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/company/migrations/0019_auto_20200413_0642.py associate_manufacturers.link_part   0% 13 13 0   0% 4 0   0%
src/backend/InvenTree/company/migrations/0019_auto_20200413_0642.py associate_manufacturers.create_manufacturer   0% 7 7 0   100% 0 0   0%
src/backend/InvenTree/company/migrations/0019_auto_20200413_0642.py associate_manufacturers.find_matches   0% 8 8 0   0% 6 0   0%
src/backend/InvenTree/company/migrations/0019_auto_20200413_0642.py associate_manufacturers.map_part_to_manufacturer   0% 53 53 0   0% 22 0   0%
src/backend/InvenTree/company/migrations/0019_auto_20200413_0642.py (no function)   100% 14 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0020_auto_20200413_0839.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0021_remove_supplierpart_manufacturer_name.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0022_auto_20200613_1045.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0023_auto_20200808_0715.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0024_unique_name_email_constraint.py reverse_empty_email   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/company/migrations/0024_unique_name_email_constraint.py make_empty_email_field_null   40% 5 3 0   25% 4 1   33%
src/backend/InvenTree/company/migrations/0024_unique_name_email_constraint.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0025_auto_20201110_1001.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0026_auto_20201110_1011.py migrate_currencies   43% 28 16 0   25% 12 3   38%
src/backend/InvenTree/company/migrations/0026_auto_20201110_1011.py reverse_currencies   0% 25 25 0   0% 8 0   0%
src/backend/InvenTree/company/migrations/0026_auto_20201110_1011.py (no function)   100% 12 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0027_remove_supplierpricebreak_currency.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0028_remove_supplierpricebreak_cost.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0029_company_currency.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0030_auto_20201112_1112.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0031_auto_20210103_2215.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0032_auto_20210403_1837.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0033_auto_20210410_1528.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0034_manufacturerpart.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0035_supplierpart_update_1.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0036_supplierpart_update_2.py supplierpart_make_manufacturer_parts   11% 45 40 0   8% 12 1   11%
src/backend/InvenTree/company/migrations/0036_supplierpart_update_2.py supplierpart_populate_manufacturer_info   0% 18 18 0   0% 10 0   0%
src/backend/InvenTree/company/migrations/0036_supplierpart_update_2.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0037_supplierpart_update_3.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0038_manufacturerpartparameter.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0039_auto_20210701_0509.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0040_alter_company_currency.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0041_alter_company_options.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0042_supplierpricebreak_updated.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0043_manufacturerpartattachment.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0044_auto_20220607_2204.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0045_alter_company_notes.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0046_alter_company_image.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0047_supplierpart_pack_size.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0048_auto_20220913_0312.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0049_company_metadata.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0050_alter_company_website.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0051_alter_supplierpricebreak_price.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0052_alter_supplierpricebreak_updated.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0053_supplierpart_updated.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0054_companyattachment.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0055_auto_20230317_0816.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0056_alter_company_notes.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0057_auto_20230427_2033.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0058_auto_20230515_0004.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0059_supplierpart_pack_units.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0060_auto_20230519_0344.py update_supplier_part_units   44% 9 5 0   50% 4 2   46%
src/backend/InvenTree/company/migrations/0060_auto_20230519_0344.py reverse_pack_quantity   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/company/migrations/0060_auto_20230519_0344.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0061_remove_supplierpart_pack_size.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0062_contact_metadata.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0063_auto_20230502_1956.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0064_move_address_field_to_address_model.py move_address_to_new_model   33% 9 6 0   25% 4 1   31%
src/backend/InvenTree/company/migrations/0064_move_address_field_to_address_model.py revert_address_move   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/company/migrations/0064_move_address_field_to_address_model.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0065_remove_company_address.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0066_auto_20230616_2059.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0067_alter_supplierpricebreak_price_currency.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0068_auto_20231120_1108.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0069_company_active.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0070_remove_manufacturerpartattachment_manufacturer_part_and_more.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0071_manufacturerpart_notes_supplierpart_notes.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0072_auto_20250221_1236.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0073_alter_address_link_alter_company_link_and_more.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0074_alter_manufacturerpart_link.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0075_company_tax_id.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0076_alter_company_image.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0077_delete_manufacturerpartparameter.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0078_supplierpart_primary.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0079_auto_20260212_1054.py link_primary_supplier_part   67% 6 2 0   50% 2 1   62%
src/backend/InvenTree/company/migrations/0079_auto_20260212_1054.py reverse_link_primary_supplier_part   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/company/migrations/0079_auto_20260212_1054.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/0080_company_tags.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/company/migrations/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/company/models.py rename_company_image   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/company/models.py Company.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/company/models.py Company.report_context   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/models.py Company.address   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/company/models.py Company.primary_address   50% 4 2 0   50% 2 1   50%
src/backend/InvenTree/company/models.py Company.currency_code   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/company/models.py Company.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/models.py Company.get_absolute_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/models.py Company.parts   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/models.py Company.stock_items   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/company/models.py Contact.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/company/models.py Address.__init__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/models.py Address.__str__   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/company/models.py Address.save   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/company/models.py Address.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/company/models.py ManufacturerPart.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/company/models.py ManufacturerPart.barcode_model_type_code   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/models.py ManufacturerPart.create   0% 9 9 0   0% 2 0   0%
src/backend/InvenTree/company/models.py ManufacturerPart.__str__   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/company/models.py SupplierPart.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/company/models.py SupplierPart.get_absolute_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/models.py SupplierPart.api_instance_filters   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/models.py SupplierPart.barcode_model_type_code   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/models.py SupplierPart.clean   0% 17 17 0   0% 12 0   0%
src/backend/InvenTree/company/models.py SupplierPart.save   0% 20 20 0   0% 10 0   0%
src/backend/InvenTree/company/models.py SupplierPart.base_quantity   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/company/models.py SupplierPart.update_available_quantity   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/company/models.py SupplierPart.name   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/models.py SupplierPart.manufacturer_string   0% 7 7 0   0% 6 0   0%
src/backend/InvenTree/company/models.py SupplierPart.has_price_breaks   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/models.py SupplierPart.price_breaks   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/models.py SupplierPart.unit_pricing   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/models.py SupplierPart.add_price_break   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/company/models.py SupplierPart.open_orders   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/models.py SupplierPart.on_order   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/company/models.py SupplierPart.purchase_orders   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/models.py SupplierPart.pretty_name   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/models.py SupplierPart.__str__   0% 8 8 0   0% 4 0   0%
src/backend/InvenTree/company/models.py SupplierPriceBreak.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/company/models.py SupplierPriceBreak.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/company/models.py after_save_supplier_price   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/company/models.py after_delete_supplier_price   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/company/models.py (no function)   100% 176 0 0   100% 0 0   100%
src/backend/InvenTree/company/serializers.py CompanySerializer.annotate_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/company/serializers.py SupplierPartSerializer.__init__   89% 9 1 0   75% 4 1   85%
src/backend/InvenTree/company/serializers.py SupplierPartSerializer.annotate_queryset   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/company/serializers.py SupplierPartSerializer.update   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/company/serializers.py SupplierPartSerializer.create   0% 10 10 0   0% 4 0   0%
src/backend/InvenTree/company/serializers.py SupplierPriceBreakSerializer.annotate_queryset   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/company/serializers.py (no function)   100% 110 0 0   100% 0 0   100%
src/backend/InvenTree/data_exporter/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/data_exporter/apps.py DataExporterConfig.ready   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/data_exporter/apps.py DataExporterConfig.cleanup   80% 5 1 0   100% 0 0   80%
src/backend/InvenTree/data_exporter/apps.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/data_exporter/migrations/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/data_exporter/mixins.py DataExportSerializerMixin.get_export_only_fields   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/data_exporter/mixins.py DataExportSerializerMixin.get_export_exclude_fields   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/data_exporter/mixins.py DataExportSerializerMixin.__init__   75% 8 2 0   50% 6 1   64%
src/backend/InvenTree/data_exporter/mixins.py DataExportSerializerMixin.get_exportable_fields   0% 14 14 0   0% 10 0   0%
src/backend/InvenTree/data_exporter/mixins.py DataExportSerializerMixin.get_child_fields   0% 8 8 0   0% 6 0   0%
src/backend/InvenTree/data_exporter/mixins.py DataExportSerializerMixin.arrange_export_headers   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/data_exporter/mixins.py DataExportSerializerMixin.get_nested_value   0% 9 9 0   0% 6 0   0%
src/backend/InvenTree/data_exporter/mixins.py DataExportSerializerMixin.generate_headers   0% 10 10 0   0% 4 0   0%
src/backend/InvenTree/data_exporter/mixins.py DataExportSerializerMixin.export_to_file   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/data_exporter/mixins.py DataExportViewMixin.is_exporting   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/data_exporter/mixins.py DataExportViewMixin.get_plugin   0% 7 7 0   0% 6 0   0%
src/backend/InvenTree/data_exporter/mixins.py DataExportViewMixin.get_serializer   35% 17 11 0   50% 4 2   38%
src/backend/InvenTree/data_exporter/mixins.py DataExportViewMixin.export_data   0% 53 53 0   0% 10 0   0%
src/backend/InvenTree/data_exporter/mixins.py DataExportViewMixin.get   12% 25 22 0   8% 12 1   11%
src/backend/InvenTree/data_exporter/mixins.py (no function)   100% 38 0 0   100% 0 0   100%
src/backend/InvenTree/data_exporter/serializers.py DataExportOptionsSerializer.__init__   0% 24 24 0   0% 14 0   0%
src/backend/InvenTree/data_exporter/serializers.py (no function)   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/data_exporter/tasks.py export_data   0% 19 19 0   0% 6 0   0%
src/backend/InvenTree/data_exporter/tasks.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/generic/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/generic/enums.py StringEnum.__str__   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/generic/enums.py StringEnum.__repr__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/generic/enums.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/generic/events.py (no function)   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/__init__.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/api.py StatusView.get_status_model   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/generic/states/api.py StatusView.get   67% 21 7 0   64% 14 3   66%
src/backend/InvenTree/generic/states/api.py AllStatusViews.get   61% 18 7 0   40% 10 2   54%
src/backend/InvenTree/generic/states/api.py (no function)   100% 46 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/custom.py get_custom_status_labels   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/generic/states/custom.py state_color_mappings   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/custom.py state_reference_mappings   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/custom.py get_logical_value   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/generic/states/custom.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/fields.py CustomChoiceField.__init__   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/fields.py CustomChoiceField.to_internal_value   0% 10 10 0   0% 2 0   0%
src/backend/InvenTree/generic/states/fields.py CustomChoiceField.get_field_info   78% 9 2 0   50% 2 1   73%
src/backend/InvenTree/generic/states/fields.py ExtraCustomChoiceField.to_representation   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/generic/states/fields.py InvenTreeCustomStatusModelField.__init__   100% 7 0 0   100% 2 0   100%
src/backend/InvenTree/generic/states/fields.py InvenTreeCustomStatusModelField.deconstruct   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/fields.py InvenTreeCustomStatusModelField.contribute_to_class   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/generic/states/fields.py InvenTreeCustomStatusModelField.clean   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/generic/states/fields.py InvenTreeCustomStatusModelField.add_field   90% 10 1 0   75% 4 1   86%
src/backend/InvenTree/generic/states/fields.py ExtraInvenTreeCustomStatusModelField.__init__   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/fields.py InvenTreeCustomStatusSerializerMixin.update   25% 16 12 0   20% 10 2   23%
src/backend/InvenTree/generic/states/fields.py InvenTreeCustomStatusSerializerMixin.to_representation   60% 5 2 0   25% 4 1   44%
src/backend/InvenTree/generic/states/fields.py InvenTreeCustomStatusSerializerMixin.gather_custom_fields   80% 10 2 0   75% 4 1   79%
src/backend/InvenTree/generic/states/fields.py InvenTreeCustomStatusSerializerMixin.build_standard_field   84% 25 4 0   69% 16 1   78%
src/backend/InvenTree/generic/states/fields.py (no function)   100% 36 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/serializers.py (no function)   100% 16 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/states.py BaseEnum.__new__   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/generic/states/states.py BaseEnum.__int__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/generic/states/states.py BaseEnum.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/generic/states/states.py BaseEnum.__eq__   57% 7 3 0   50% 6 3   54%
src/backend/InvenTree/generic/states/states.py BaseEnum.__ne__   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/generic/states/states.py StatusCode.__new__   60% 15 6 0   50% 4 2   58%
src/backend/InvenTree/generic/states/states.py StatusCode._is_element   60% 10 4 0   50% 8 4   56%
src/backend/InvenTree/generic/states/states.py StatusCode.custom_queryset   60% 5 2 0   100% 0 0   60%
src/backend/InvenTree/generic/states/states.py StatusCode.custom_values   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/generic/states/states.py StatusCode.values   86% 7 1 0   75% 4 1   82%
src/backend/InvenTree/generic/states/states.py StatusCode.render   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/generic/states/states.py StatusCode.tag   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/generic/states/states.py StatusCode.items   88% 8 1 0   75% 4 1   83%
src/backend/InvenTree/generic/states/states.py StatusCode.keys   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/states.py StatusCode.labels   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/generic/states/states.py StatusCode.names   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/generic/states/states.py StatusCode.text   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/generic/states/states.py StatusCode.label   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/generic/states/states.py StatusCode.dict   56% 9 4 0   50% 6 1   53%
src/backend/InvenTree/generic/states/states.py StatusCode.list   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/generic/states/states.py StatusCode.template_context   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/generic/states/states.py StatusCodeMixin.status_class   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/states.py StatusCodeMixin.save   100% 5 0 0   50% 4 2   78%
src/backend/InvenTree/generic/states/states.py StatusCodeMixin.get_status   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/states.py StatusCodeMixin.get_custom_status   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/states.py StatusCodeMixin.compare_status   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/generic/states/states.py StatusCodeMixin.set_status   0% 24 24 0   0% 10 0   0%
src/backend/InvenTree/generic/states/states.py (no function)   100% 62 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/tags.py status_label   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/generic/states/tags.py display_status_label   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/generic/states/tags.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/transition.py TransitionMethod.__init__   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/generic/states/transition.py TransitionMethod.transition   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/generic/states/transition.py StateTransitionMixin.handle_transition   25% 20 15 0   10% 10 1   20%
src/backend/InvenTree/generic/states/transition.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/validators.py CustomStatusCodeValidator.__init__   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/generic/states/validators.py CustomStatusCodeValidator.__call__   75% 4 1 0   50% 4 2   62%
src/backend/InvenTree/generic/states/validators.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/generic/templatetags/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/generic/templatetags/generic.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/importer/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/importer/admin.py DataImportColumnMapAdmin.get_readonly_fields   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/importer/admin.py DataImportColumnMapAdmin.formfield_for_dbfield   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/importer/admin.py DataImportSessionAdmin.get_readonly_fields   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/importer/admin.py DataImportSessionAdmin.formfield_for_dbfield   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/importer/admin.py DataImportRowAdmin.get_readonly_fields   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/importer/admin.py (no function)   100% 20 0 0   100% 0 0   100%
src/backend/InvenTree/importer/api.py DataImporterModelList.get   100% 6 0 0   100% 2 0   100%
src/backend/InvenTree/importer/api.py DataImportSessionMixin.get_queryset   62% 8 3 0   50% 2 1   60%
src/backend/InvenTree/importer/api.py DataImportSessionAcceptFields.post   12% 8 7 0   0% 6 0   7%
src/backend/InvenTree/importer/api.py DataImportSessionAcceptRows.get_serializer_context   67% 12 4 0   25% 4 1   56%
src/backend/InvenTree/importer/api.py DataImportSessionChildMixin.get_queryset   62% 8 3 0   50% 2 1   60%
src/backend/InvenTree/importer/api.py (no function)   100% 65 0 0   100% 0 0   100%
src/backend/InvenTree/importer/apps.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/importer/migrations/0001_initial.py (no function)   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/importer/migrations/0002_dataimportsession_field_overrides.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/importer/migrations/0003_dataimportsession_field_filters.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/importer/migrations/0004_alter_dataimportsession_model_type.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/importer/migrations/0005_dataimportsession_update_records.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/importer/migrations/0006_dataimportcolumnmap_lookup_field.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/importer/migrations/0007_dataimportsession_completed_row_count_history_and_more.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/importer/migrations/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/importer/mixins.py DataImportSerializerMixin.get_import_only_fields   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/importer/mixins.py DataImportSerializerMixin.get_import_exclude_fields   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/importer/mixins.py DataImportSerializerMixin.__init__   33% 12 8 0   20% 10 2   27%
src/backend/InvenTree/importer/mixins.py DataImportSerializerMixin.get_importable_fields   0% 17 17 0   0% 14 0   0%
src/backend/InvenTree/importer/mixins.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/importer/models.py DataImportSession.get_api_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/importer/models.py DataImportSession.save   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/importer/models.py DataImportSession.field_mapping   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/importer/models.py DataImportSession.model_class   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/importer/models.py DataImportSession.serializer_class   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/importer/models.py DataImportSession.get_lookup_fields_for_field   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/importer/models.py DataImportSession.field_lookup_mapping   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/importer/models.py DataImportSession.get_related_model   0% 9 9 0   0% 2 0   0%
src/backend/InvenTree/importer/models.py DataImportSession.extract_columns   0% 29 29 0   0% 16 0   0%
src/backend/InvenTree/importer/models.py DataImportSession.accept_mapping   0% 16 16 0   0% 12 0   0%
src/backend/InvenTree/importer/models.py DataImportSession.trigger_data_import   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/importer/models.py DataImportSession.import_data   0% 20 20 0   0% 6 0   0%
src/backend/InvenTree/importer/models.py DataImportSession.check_complete   0% 10 10 0   0% 4 0   0%
src/backend/InvenTree/importer/models.py DataImportSession.row_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/importer/models.py DataImportSession.completed_row_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/importer/models.py DataImportSession.available_fields   0% 18 18 0   0% 12 0   0%
src/backend/InvenTree/importer/models.py DataImportSession.required_fields   0% 8 8 0   0% 6 0   0%
src/backend/InvenTree/importer/models.py DataImportColumnMap.get_api_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/importer/models.py DataImportColumnMap.save   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/importer/models.py DataImportColumnMap.validate_unique   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/importer/models.py DataImportColumnMap.clean   0% 16 16 0   0% 14 0   0%
src/backend/InvenTree/importer/models.py DataImportColumnMap.available_fields   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/importer/models.py DataImportColumnMap.field_definition   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/importer/models.py DataImportColumnMap.label   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/importer/models.py DataImportColumnMap.description   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/importer/models.py DataImportRow.get_api_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/importer/models.py DataImportRow.save   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/importer/models.py DataImportRow.delete   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/importer/models.py DataImportRow.default_values   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/importer/models.py DataImportRow.override_values   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/importer/models.py DataImportRow.extract_data   0% 56 56 0   0% 38 0   0%
src/backend/InvenTree/importer/models.py DataImportRow.convert_date_field   0% 10 10 0   0% 4 0   0%
src/backend/InvenTree/importer/models.py DataImportRow.lookup_related_field   0% 36 36 0   0% 22 0   0%
src/backend/InvenTree/importer/models.py DataImportRow.serializer_data   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/importer/models.py DataImportRow.construct_serializer   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/importer/models.py DataImportRow.validate   0% 41 41 0   0% 14 0   0%
src/backend/InvenTree/importer/models.py (no function)   100% 101 0 0   100% 0 0   100%
src/backend/InvenTree/importer/operations.py load_data_file   0% 24 24 0   0% 10 0   0%
src/backend/InvenTree/importer/operations.py extract_column_names   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/importer/operations.py normalize_headers   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/importer/operations.py get_field_label   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/importer/operations.py (no function)   100% 10 0 0   100% 0 0   100%
src/backend/InvenTree/importer/registry.py DataImportSerializerRegister.register   56% 9 4 0   50% 6 3   53%
src/backend/InvenTree/importer/registry.py get_supported_serializers   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/importer/registry.py supported_models   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/importer/registry.py supported_model_options   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/importer/registry.py register_importer   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/importer/registry.py register_importer._decorator   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/importer/registry.py (no function)   100% 12 0 0   100% 0 0   100%
src/backend/InvenTree/importer/serializers.py DataImportSessionSerializer.__init__   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/importer/serializers.py DataImportSessionSerializer.validate_field_defaults   62% 8 3 0   50% 4 2   58%
src/backend/InvenTree/importer/serializers.py DataImportSessionSerializer.validate_field_overrides   62% 8 3 0   50% 4 2   58%
src/backend/InvenTree/importer/serializers.py DataImportSessionSerializer.validate_field_filters   62% 8 3 0   50% 4 2   58%
src/backend/InvenTree/importer/serializers.py DataImportSessionSerializer.create   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/importer/serializers.py DataImportAcceptRowSerializer.validate_rows   27% 11 8 0   10% 10 1   19%
src/backend/InvenTree/importer/serializers.py DataImportAcceptRowSerializer.save   0% 8 8 0   0% 4 0   0%
src/backend/InvenTree/importer/serializers.py (no function)   100% 43 0 0   100% 0 0   100%
src/backend/InvenTree/importer/status_codes.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/importer/tasks.py import_data   0% 8 8 0   100% 0 0   0%
src/backend/InvenTree/importer/tasks.py cleanup_import_sessions   0% 11 11 0   0% 4 0   0%
src/backend/InvenTree/importer/tasks.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/importer/validators.py validate_data_file   0% 11 11 0   0% 8 0   0%
src/backend/InvenTree/importer/validators.py validate_importer_model_type   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/importer/validators.py validate_field_defaults   57% 7 3 0   50% 4 2   55%
src/backend/InvenTree/importer/validators.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/machine/__init__.py (no function)   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/machine/admin.py MachineSettingInline.has_add_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/admin.py MachineConfigAdmin.get_readonly_fields   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/machine/admin.py (no function)   100% 13 0 0   100% 0 0   100%
src/backend/InvenTree/machine/api.py MachineList.get_serializer_class   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/machine/api.py get_machine   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/machine/api.py MachineSettingList.get   14% 7 6 0   0% 2 0   11%
src/backend/InvenTree/machine/api.py MachineSettingDetail.get_object   50% 8 4 0   0% 2 0   40%
src/backend/InvenTree/machine/api.py MachineRestart.post   25% 4 3 0   100% 0 0   25%
src/backend/InvenTree/machine/api.py MachineTypesList.get   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/machine/api.py MachineDriverList.get   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/machine/api.py RegistryStatusView.get   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/machine/api.py (no function)   100% 52 0 0   100% 0 0   100%
src/backend/InvenTree/machine/apps.py MachineConfig.ready   71% 7 2 0   100% 2 0   78%
src/backend/InvenTree/machine/apps.py MachineConfig.initialize_registry   100% 4 0 0   50% 2 1   83%
src/backend/InvenTree/machine/apps.py (no function)   100% 10 0 0   100% 0 0   100%
src/backend/InvenTree/machine/machine_type.py BaseDriver.__init__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseDriver.init_driver   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/machine/machine_type.py BaseDriver.init_machine   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/machine/machine_type.py BaseDriver.update_machine   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/machine/machine_type.py BaseDriver.restart_machine   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/machine/machine_type.py BaseDriver.ping_machines   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/machine/machine_type.py BaseDriver.get_machines   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseDriver.handle_error   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/machine/machine_type.py BaseDriver.errors   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.__init__   0% 11 11 0   0% 4 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.__repr__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.machine_config   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.name   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.active   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.initialize   0% 15 15 0   0% 8 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.update   0% 11 11 0   0% 8 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.restart   0% 10 10 0   0% 2 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.handle_error   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.reset_errors   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.get_setting   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.set_setting   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.check_settings   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.set_status   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.set_status_text   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.set_properties   0% 10 10 0   0% 10 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.initialized   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.initialized   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.restart_required   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.restart_required   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.errors   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.status   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.status_text   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.properties   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py BaseMachineType.properties_dict   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_type.py (no function)   97% 63 2 0   50% 2 1   95%
src/backend/InvenTree/machine/machine_types/__init__.py (no function)   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/machine/machine_types/label_printer.py LabelPrinterBaseDriver.print_label   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/machine/machine_types/label_printer.py LabelPrinterBaseDriver.print_labels   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/machine/machine_types/label_printer.py LabelPrinterBaseDriver.get_printers   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_types/label_printer.py LabelPrinterBaseDriver.get_printing_options_serializer   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_types/label_printer.py LabelPrinterBaseDriver.machine_plugin   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_types/label_printer.py LabelPrinterBaseDriver.render_to_pdf   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_types/label_printer.py LabelPrinterBaseDriver.render_to_pdf_data   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_types/label_printer.py LabelPrinterBaseDriver.render_to_html   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_types/label_printer.py LabelPrinterBaseDriver.render_to_png   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_types/label_printer.py LabelPrinterBaseDriver._get_dummy_request   0% 5 5 0   100% 0 0   0%
src/backend/InvenTree/machine/machine_types/label_printer.py LabelPrinterMachine.location   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/machine/machine_types/label_printer.py (no function)   100% 51 0 0   100% 0 0   100%
src/backend/InvenTree/machine/migrations/0001_initial.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/machine/migrations/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/machine/models.py MachineConfig.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/models.py MachineConfig.save   67% 9 3 0   33% 6 2   53%
src/backend/InvenTree/machine/models.py MachineConfig.delete   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/machine/models.py MachineConfig.to_dict   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/machine/models.py MachineConfig.machine   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/machine/models.py MachineConfig.errors   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/machine/models.py MachineConfig.is_driver_available   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/machine/models.py MachineConfig.no_errors   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/models.py MachineConfig.initialized   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/models.py MachineConfig.get_admin_errors   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/models.py MachineConfig.get_machine_status   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/machine/models.py MachineSetting.to_native_value   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/models.py MachineSetting.save   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/machine/models.py MachineSetting.get_config_type   100% 4 0 0   75% 4 1   88%
src/backend/InvenTree/machine/models.py MachineSetting.get_setting_definition   0% 9 9 0   0% 8 0   0%
src/backend/InvenTree/machine/models.py (no function)   100% 50 0 0   100% 0 0   100%
src/backend/InvenTree/machine/registry.py machine_registry_entrypoint   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/machine/registry.py machine_registry_entrypoint.decorator   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/machine/registry.py machine_registry_entrypoint.decorator.wrapper   70% 27 8 0   83% 12 2   74%
src/backend/InvenTree/machine/registry.py MachineRegistry.__init__   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/machine/registry.py MachineRegistry.errors   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/machine/registry.py MachineRegistry.is_ready   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/machine/registry.py MachineRegistry.handle_error   100% 2 0 0   100% 2 0   100%
src/backend/InvenTree/machine/registry.py MachineRegistry.initialize   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/machine/registry.py MachineRegistry.discover_machine_types   63% 27 10 0   75% 8 2   66%
src/backend/InvenTree/machine/registry.py MachineRegistry.discover_drivers   38% 24 15 0   38% 8 1   38%
src/backend/InvenTree/machine/registry.py MachineRegistry.get_driver_instance   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/machine/registry.py MachineRegistry.load_machines   53% 17 8 0   50% 10 3   52%
src/backend/InvenTree/machine/registry.py MachineRegistry.reload_machines   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/machine/registry.py MachineRegistry.add_machine   40% 10 6 0   17% 6 1   31%
src/backend/InvenTree/machine/registry.py MachineRegistry.update_machine   0% 4 4 0   0% 4 0   0%
src/backend/InvenTree/machine/registry.py MachineRegistry.restart_machine   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/registry.py MachineRegistry.remove_machine   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/machine/registry.py MachineRegistry.get_machines   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/machine/registry.py MachineRegistry.get_machines.filter_machine   0% 12 12 0   0% 14 0   0%
src/backend/InvenTree/machine/registry.py MachineRegistry.get_machine_types   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/machine/registry.py MachineRegistry.get_machine   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/machine/registry.py MachineRegistry.get_driver_types   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/machine/registry.py MachineRegistry.get_drivers   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/registry.py MachineRegistry._calculate_registry_hash   64% 14 5 0   50% 4 2   61%
src/backend/InvenTree/machine/registry.py MachineRegistry._check_reload   72% 18 5 0   88% 8 1   77%
src/backend/InvenTree/machine/registry.py MachineRegistry._update_registry_hash   60% 15 6 0   100% 2 0   65%
src/backend/InvenTree/machine/registry.py MachineRegistry.call_machine_function   0% 18 18 0   0% 12 0   0%
src/backend/InvenTree/machine/registry.py call_machine_function   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/machine/registry.py (no function)   100% 53 0 0   100% 0 0   100%
src/backend/InvenTree/machine/serializers.py MachineConfigSerializer.get_initialized   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/machine/serializers.py MachineConfigSerializer.get_status   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/machine/serializers.py MachineConfigSerializer.get_status_model   50% 2 1 0   50% 2 1   50%
src/backend/InvenTree/machine/serializers.py MachineConfigSerializer.get_status_text   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/machine/serializers.py MachineConfigSerializer.get_errors   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/machine/serializers.py MachineConfigSerializer.get_is_driver_available   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/machine/serializers.py MachineConfigSerializer.get_restart_required   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/machine/serializers.py MachineSettingSerializer.__init__   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/machine/serializers.py BaseMachineClassSerializer.get_provider_file   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/machine/serializers.py BaseMachineClassSerializer.get_provider_plugin   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/machine/serializers.py BaseMachineClassSerializer.get_is_builtin   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/machine/serializers.py MachineDriverSerializer.get_errors   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/machine/serializers.py (no function)   100% 77 0 0   100% 0 0   100%
src/backend/InvenTree/machine/tasks.py ping_machines   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/machine/tasks.py (no function)   100% 10 0 0   100% 0 0   100%
src/backend/InvenTree/manage.py main   0% 6 6 0   100% 0 0   0%
src/backend/InvenTree/manage.py (no function)   0% 9 9 0   0% 2 0   0%
src/backend/InvenTree/order/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/order/admin.py (no function)   100% 78 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py GeneralExtraLineList.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py OrderCreateMixin.create   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py OrderFilter.filter_status   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py OrderFilter.filter_assigned_to_me   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/order/api.py OrderFilter.filter_overdue   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/order/api.py OrderFilter.filter_outstanding   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/order/api.py OrderFilter.filter_has_project_code   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/order/api.py OrderFilter.filter_has_start_date   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py OrderFilter.filter_has_target_date   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py OrderFilter.filter_min_date   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py OrderFilter.filter_max_date   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py LineItemFilter.filter_has_pricing   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/order/api.py PurchaseOrderFilter.filter_part   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/api.py PurchaseOrderFilter.filter_supplier_part   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/api.py PurchaseOrderFilter.filter_external_build   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/api.py PurchaseOrderMixin.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py PurchaseOrderContextMixin.get_serializer_context   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py PurchaseOrderReceive.create   33% 6 4 0   100% 0 0   33%
src/backend/InvenTree/order/api.py PurchaseOrderLineItemFilter.filter_order_complete   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/order/api.py PurchaseOrderLineItemFilter.filter_include_variants   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/api.py PurchaseOrderLineItemFilter.filter_base_part   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/order/api.py PurchaseOrderLineItemFilter.filter_pending   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/order/api.py PurchaseOrderLineItemFilter.filter_received   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/order/api.py PurchaseOrderLineItemMixin.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py PurchaseOrderLineItemMixin.perform_update   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/order/api.py PurchaseOrderLineItemList.create   11% 18 16 0   0% 8 0   8%
src/backend/InvenTree/order/api.py SalesOrderFilter.filter_include_variants   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/api.py SalesOrderFilter.filter_part   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/order/api.py SalesOrderMixin.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py SalesOrderLineItemFilter.filter_include_variants   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/api.py SalesOrderLineItemFilter.filter_part   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/order/api.py SalesOrderLineItemFilter.filter_allocated   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/order/api.py SalesOrderLineItemFilter.filter_completed   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/order/api.py SalesOrderLineItemFilter.filter_order_complete   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/order/api.py SalesOrderLineItemFilter.filter_order_outstanding   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/order/api.py SalesOrderLineItemMixin.get_queryset   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py SalesOrderContextMixin.get_serializer_context   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py SalesOrderAutoAllocate.post   23% 13 10 0   100% 0 0   23%
src/backend/InvenTree/order/api.py SalesOrderAllocationFilter.filter_include_variants   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py SalesOrderAllocationFilter.filter_part   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/order/api.py SalesOrderAllocationFilter.filter_outstanding   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/order/api.py SalesOrderAllocationFilter.filter_assigned_to_shipment   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/order/api.py SalesOrderAllocationFilter.filter_location   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/api.py SalesOrderAllocationMixin.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py SalesOrderAllocationList.filter_delete_queryset   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/api.py SalesOrderShipmentFilter.filter_checked   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/order/api.py SalesOrderShipmentFilter.filter_shipped   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/order/api.py SalesOrderShipmentFilter.filter_delivered   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/order/api.py SalesOrderShipmentFilter.filter_order_outstanding   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/order/api.py SalesOrderShipmentFilter.filter_order_status   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py SalesOrderShipmentMixin.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py SalesOrderShipmentComplete.get_shipment   80% 5 1 0   100% 0 0   80%
src/backend/InvenTree/order/api.py SalesOrderShipmentComplete.get_serializer_context   75% 4 1 0   100% 0 0   75%
src/backend/InvenTree/order/api.py SalesOrderShipmentComplete.post   14% 7 6 0   100% 0 0   14%
src/backend/InvenTree/order/api.py ReturnOrderFilter.filter_include_variants   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/api.py ReturnOrderFilter.filter_part   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/order/api.py ReturnOrderMixin.get_queryset   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py ReturnOrderContextMixin.get_serializer_context   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py ReturnOrderLineItemFilter.filter_received   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/order/api.py ReturnOrderLineItemMixin.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py TransferOrderFilter.filter_include_variants   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py TransferOrderFilter.filter_part   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/order/api.py TransferOrderMixin.get_queryset   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py TransferOrderContextMixin.get_serializer_context   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py TransferOrderAllocationFilter.filter_include_variants   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py TransferOrderAllocationFilter.filter_part   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/order/api.py TransferOrderAllocationFilter.filter_outstanding   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/order/api.py TransferOrderAllocationFilter.filter_location   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/api.py TransferOrderAllocationMixin.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py TransferOrderLineItemFilter.filter_include_variants   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/api.py TransferOrderLineItemFilter.filter_part   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/order/api.py TransferOrderLineItemFilter.filter_allocated   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/order/api.py TransferOrderLineItemFilter.filter_completed   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/order/api.py TransferOrderLineItemFilter.filter_order_complete   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/order/api.py TransferOrderLineItemFilter.filter_order_outstanding   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/order/api.py TransferOrderLineItemMixin.get_queryset   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/api.py OrderCalendarExport.__call__   0% 18 18 0   0% 12 0   0%
src/backend/InvenTree/order/api.py OrderCalendarExport.get_object   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/order/api.py OrderCalendarExport.title   0% 11 11 0   0% 8 0   0%
src/backend/InvenTree/order/api.py OrderCalendarExport.product_id   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/api.py OrderCalendarExport.items   0% 18 18 0   0% 16 0   0%
src/backend/InvenTree/order/api.py OrderCalendarExport.item_title   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/api.py OrderCalendarExport.item_description   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/order/api.py OrderCalendarExport.item_start_datetime   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/api.py OrderCalendarExport.item_end_datetime   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/api.py OrderCalendarExport.item_created   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/api.py OrderCalendarExport.item_class   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/api.py OrderCalendarExport.item_guid   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/api.py OrderCalendarExport.item_link   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/api.py (no function)   100% 518 0 0   100% 0 0   100%
src/backend/InvenTree/order/apps.py (no function)   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/order/events.py (no function)   100% 26 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0001_initial.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0002_auto_20190604_2224.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0003_auto_20190604_2226.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0004_purchaseorder_status.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0005_purchaseorderlineitem_part.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0006_auto_20190605_2056.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0007_auto_20190605_2138.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0008_auto_20190605_2140.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0009_auto_20190606_2133.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0010_purchaseorderlineitem_notes.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0011_auto_20190615_1928.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0012_auto_20190617_1943.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0013_auto_20191118_2323.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0014_auto_20191118_2328.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0015_auto_20200201_2346.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0016_purchaseorderattachment.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0017_auto_20200331_1000.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0018_auto_20200406_0151.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0019_purchaseorder_supplier_reference.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0020_auto_20200420_0940.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0021_auto_20200420_1010.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0022_salesorderlineitem_part.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0023_auto_20200420_2309.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0024_salesorderallocation.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0025_auto_20200422_0222.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0026_auto_20200422_0224.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0027_auto_20200422_0236.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0028_auto_20200423_0956.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0029_auto_20200423_1042.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0030_auto_20200426_0551.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0031_auto_20200426_0612.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0032_auto_20200427_0044.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0033_auto_20200512_1033.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0034_auto_20200512_1054.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0035_auto_20200513_0016.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0036_auto_20200831_0912.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0037_auto_20201110_0911.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0038_auto_20201112_1737.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0039_auto_20201112_2203.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0040_salesorder_target_date.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0041_auto_20210114_1728.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0042_auto_20210310_1619.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0043_auto_20210330_0013.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0044_auto_20210404_2016.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0045_auto_20210504_1946.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0046_purchaseorderlineitem_destination.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0047_auto_20210701_0509.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0048_auto_20210702_2321.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0049_alter_purchaseorderlineitem_unique_together.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0050_alter_purchaseorderlineitem_destination.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0051_auto_20211014_0623.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0052_auto_20211014_0631.py build_refs   15% 26 22 0   17% 12 2   16%
src/backend/InvenTree/order/migrations/0052_auto_20211014_0631.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0053_auto_20211128_0151.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0053_salesordershipment.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0054_auto_20211201_2139.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0054_salesorderallocation_shipment.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0055_auto_20211025_0645.py add_shipment   32% 19 13 0   20% 10 2   28%
src/backend/InvenTree/order/migrations/0055_auto_20211025_0645.py reverse_add_shipment   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/order/migrations/0055_auto_20211025_0645.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0056_alter_salesorderallocation_shipment.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0057_salesorderlineitem_shipped.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0058_auto_20211126_1210.py calculate_shipped_quantity   33% 9 6 0   25% 4 1   31%
src/backend/InvenTree/order/migrations/0058_auto_20211126_1210.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0059_salesordershipment_tracking_number.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0060_auto_20211129_1339.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0061_merge_0054_auto_20211201_2139_0060_auto_20211129_1339.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0062_auto_20220228_0321.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0063_alter_purchaseorderlineitem_unique_together.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0064_purchaseorderextraline_salesorderextraline.py _convert_model   38% 13 8 0   25% 4 1   35%
src/backend/InvenTree/order/migrations/0064_purchaseorderextraline_salesorderextraline.py _reconvert_model   0% 11 11 0   0% 6 0   0%
src/backend/InvenTree/order/migrations/0064_purchaseorderextraline_salesorderextraline.py convert_line_items   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0064_purchaseorderextraline_salesorderextraline.py nunconvert_line_items   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/migrations/0064_purchaseorderextraline_salesorderextraline.py (no function)   100% 14 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0065_alter_purchaseorderlineitem_part.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0066_alter_purchaseorder_supplier.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0067_auto_20220516_1120.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0068_alter_salesorderallocation_unique_together.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0069_auto_20220524_0508.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0070_auto_20220620_0728.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0071_auto_20220628_0133.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0072_alter_salesorder_reference.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0073_alter_purchaseorder_reference.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0074_auto_20220709_0108.py update_order_references   43% 7 4 0   25% 4 1   36%
src/backend/InvenTree/order/migrations/0074_auto_20220709_0108.py update_salesorder_reference   81% 16 3 0   50% 2 1   78%
src/backend/InvenTree/order/migrations/0074_auto_20220709_0108.py update_purchaseorder_reference   81% 16 3 0   50% 2 1   78%
src/backend/InvenTree/order/migrations/0074_auto_20220709_0108.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0075_auto_20221110_0108.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0076_auto_20221111_0153.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0077_auto_20230129_0154.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0078_auto_20230304_0721.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0079_auto_20230304_0904.py update_purchase_order_price   23% 30 23 0   19% 16 3   22%
src/backend/InvenTree/order/migrations/0079_auto_20230304_0904.py update_sales_order_price   23% 30 23 0   19% 16 3   22%
src/backend/InvenTree/order/migrations/0079_auto_20230304_0904.py (no function)   100% 12 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0080_auto_20230317_0816.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0081_auto_20230314_0725.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0082_auto_20230314_1259.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0083_returnorderextraline.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0084_auto_20230321_1111.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0085_auto_20230322_1056.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0086_auto_20230323_1108.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0087_alter_salesorder_status.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0088_auto_20230403_1402.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0089_auto_20230404_0030.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0090_auto_20230412_1752.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0091_auto_20230419_0037.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0092_auto_20230419_0250.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0093_auto_20230426_0248.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0094_auto_20230514_2331.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0095_salesordershipment_delivery_date.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0096_alter_returnorderlineitem_outcome.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0097_auto_20230529_0107.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0098_auto_20231024_1844.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0099_alter_salesorder_status.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0100_remove_returnorderattachment_order_and_more.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0101_purchaseorder_status_custom_key_and_more.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0102_purchaseorder_destination_and_more.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0103_alter_salesorderallocation_shipment.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0104_alter_returnorderlineitem_quantity.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0105_auto_20241128_0431.py update_shipment_date   37% 19 12 0   33% 6 2   36%
src/backend/InvenTree/order/migrations/0105_auto_20241128_0431.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0106_purchaseorder_start_date_returnorder_start_date_and_more.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0107_auto_20250221_1241.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0108_alter_purchaseorder_link_and_more_squashed_0109_alter_purchaseorderextraline_link_and_more.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0109_salesorder_issue_date.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0110_salesordershipment_barcode_data_and_more.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0111_purchaseorderlineitem_build_order.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0112_alter_salesorderlineitem_part.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0113_salesordershipment_shipment_address.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0114_purchaseorderextraline_project_code_and_more.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0115_purchaseorder_updated_at_returnorder_updated_at_and_more.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0116_purchaseorderextraline_line_and_more.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0117_purchaseorderextraline_line_int_and_more.py add_integer_line_number   36% 11 7 0   67% 6 2   47%
src/backend/InvenTree/order/migrations/0117_purchaseorderextraline_line_int_and_more.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0118_transferorder.py (no function)   100% 15 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0119_transferorderlineitem_line_int.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/0120_purchaseorder_tags_returnorder_tags_salesorder_tags_and_more.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/migrations/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py TotalPriceMixin.save   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/order/models.py TotalPriceMixin.currency   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/order/models.py TotalPriceMixin.update_total_price   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/order/models.py TotalPriceMixin.calculate_total_price   0% 25 25 0   0% 12 0   0%
src/backend/InvenTree/order/models.py Order.save   70% 10 3 0   50% 6 1   62%
src/backend/InvenTree/order/models.py Order.check_locked   40% 5 3 0   25% 4 1   33%
src/backend/InvenTree/order/models.py Order.check_complete   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py Order.clean   55% 11 5 0   42% 12 5   48%
src/backend/InvenTree/order/models.py Order.clean_line_item   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/order/models.py Order.report_context   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py Order.overdue_filter   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py Order.is_overdue   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py Order.company   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py Order.order_address   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py Order.status_text   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/order/models.py Order.get_status_class   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.clean_line_item   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.report_context   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.get_absolute_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py PurchaseOrder.get_status_class   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py PurchaseOrder.api_defaults   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py PurchaseOrder.barcode_model_type_code   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.subscribed_users   0% 6 6 0   0% 6 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.company   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.add_line_item   0% 22 22 0   0% 10 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder._action_place   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder._action_complete   0% 11 11 0   0% 8 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.issue_order   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.can_issue   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.place_order   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.complete_order   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.hold_order   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.cancel_order   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.is_pending   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.is_open   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.can_cancel   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder._action_cancel   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.can_hold   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder._action_hold   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.pending_line_items   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.completed_line_items   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.line_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.completed_line_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.pending_line_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.is_complete   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.receive_line_items   0% 107 107 0   0% 54 0   0%
src/backend/InvenTree/order/models.py PurchaseOrder.receive_line_item   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.clean_line_item   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.report_context   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.get_absolute_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py SalesOrder.get_status_class   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py SalesOrder.api_defaults   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py SalesOrder.barcode_model_type_code   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.subscribed_users   0% 6 6 0   0% 6 0   0%
src/backend/InvenTree/order/models.py SalesOrder.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.company   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py SalesOrder.is_pending   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.is_open   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.stock_allocations   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.is_fully_allocated   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.is_overallocated   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.auto_allocate_stock   0% 47 47 0   0% 32 0   0%
src/backend/InvenTree/order/models.py SalesOrder.is_completed   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.can_complete   0% 20 20 0   0% 16 0   0%
src/backend/InvenTree/order/models.py SalesOrder.place_order   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.can_issue   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder._action_place   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/order/models.py SalesOrder.can_hold   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder._action_hold   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/order/models.py SalesOrder._action_complete   0% 19 19 0   0% 12 0   0%
src/backend/InvenTree/order/models.py SalesOrder.can_cancel   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder._action_cancel   0% 10 10 0   0% 6 0   0%
src/backend/InvenTree/order/models.py SalesOrder.issue_order   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.ship_order   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.complete_order   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.hold_order   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.cancel_order   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.line_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.completed_line_items   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.pending_line_items   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.completed_line_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.pending_line_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.completed_shipments   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.pending_shipments   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.allocations   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.pending_allocations   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.shipment_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.completed_shipment_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.pending_shipment_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrder.pending_allocation_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py after_save_sales_order   0% 5 5 0   0% 6 0   0%
src/backend/InvenTree/order/models.py OrderLineItem.save   0% 12 12 0   0% 6 0   0%
src/backend/InvenTree/order/models.py OrderLineItem.delete   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/order/models.py OrderLineItem.total_line_price   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/order/models.py PurchaseOrderLineItem.get_overdue_filter   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py PurchaseOrderLineItem.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py PurchaseOrderLineItem.clean   0% 16 16 0   0% 18 0   0%
src/backend/InvenTree/order/models.py PurchaseOrderLineItem.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrderLineItem.get_base_part   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/order/models.py PurchaseOrderLineItem.price   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrderLineItem.get_destination   0% 6 6 0   0% 6 0   0%
src/backend/InvenTree/order/models.py PurchaseOrderLineItem.remaining   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrderLineItem.is_completed   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py PurchaseOrderLineItem.update_pricing   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/order/models.py PurchaseOrderExtraLine.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py SalesOrderLineItem.get_overdue_filter   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py SalesOrderLineItem.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py SalesOrderLineItem.clean   0% 4 4 0   0% 4 0   0%
src/backend/InvenTree/order/models.py SalesOrderLineItem.price   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrderLineItem.fulfilled_quantity   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/order/models.py SalesOrderLineItem.allocated_quantity   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/order/models.py SalesOrderLineItem.is_fully_allocated   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/order/models.py SalesOrderLineItem.is_overallocated   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrderLineItem.is_completed   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/order/models.py SalesOrderShipment.barcode_model_type_code   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrderShipment.clean   0% 4 4 0   0% 4 0   0%
src/backend/InvenTree/order/models.py SalesOrderShipment.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py SalesOrderShipment.report_context   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrderShipment.address   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrderShipment.is_checked   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrderShipment.is_complete   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrderShipment.is_delivered   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrderShipment.check_can_complete   0% 12 12 0   0% 8 0   0%
src/backend/InvenTree/order/models.py SalesOrderShipment.complete_shipment   0% 13 13 0   0% 6 0   0%
src/backend/InvenTree/order/models.py SalesOrderExtraLine.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py SalesOrderAllocation.get_api_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrderAllocation.clean   0% 30 30 0   0% 18 0   0%
src/backend/InvenTree/order/models.py SalesOrderAllocation.get_location   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrderAllocation.get_po   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py SalesOrderAllocation.complete_allocation   0% 7 7 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.clean_line_item   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.report_context   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.get_absolute_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py ReturnOrder.get_status_class   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py ReturnOrder.api_defaults   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py ReturnOrder.barcode_model_type_code   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.subscribed_users   0% 6 6 0   0% 6 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.company   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py ReturnOrder.is_pending   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.is_open   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.is_received   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.can_hold   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrder._action_hold   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.can_cancel   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrder._action_cancel   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/order/models.py ReturnOrder._action_complete   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.place_order   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.can_issue   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrder._action_place   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.hold_order   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.issue_order   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.complete_order   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.cancel_order   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrder.receive_line_item   0% 26 26 0   0% 8 0   0%
src/backend/InvenTree/order/models.py ReturnOrderLineItem.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py ReturnOrderLineItem.clean   0% 9 9 0   0% 8 0   0%
src/backend/InvenTree/order/models.py ReturnOrderLineItem.received   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py ReturnOrderExtraLine.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py TransferOrder.report_context   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrder.get_absolute_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py TransferOrder.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py TransferOrder.get_status_class   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py TransferOrder.api_defaults   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py TransferOrder.barcode_model_type_code   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrder.subscribed_users   50% 6 3 0   17% 6 1   33%
src/backend/InvenTree/order/models.py TransferOrder.clean_line_item   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrder.__str__   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py TransferOrder.status_text   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrder.company   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py TransferOrder.is_pending   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrder.is_open   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrder.stock_allocations   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrder.is_fully_allocated   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py TransferOrder.is_overallocated   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrder.is_completed   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrder.can_complete   50% 14 7 0   30% 10 3   42%
src/backend/InvenTree/order/models.py TransferOrder.can_issue   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py TransferOrder.issue_order   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py TransferOrder._action_issue   17% 6 5 0   50% 2 1   25%
src/backend/InvenTree/order/models.py TransferOrder.can_hold   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py TransferOrder._action_hold   25% 4 3 0   50% 2 1   33%
src/backend/InvenTree/order/models.py TransferOrder._action_complete   0% 12 12 0   0% 6 0   0%
src/backend/InvenTree/order/models.py TransferOrder.complete_order   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrder.hold_order   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py TransferOrder.cancel_order   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py TransferOrder.can_cancel   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py TransferOrder._action_cancel   67% 9 3 0   33% 6 2   53%
src/backend/InvenTree/order/models.py TransferOrder.line_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrder.completed_line_items   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrder.pending_line_items   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrder.completed_line_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrder.pending_line_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrder.allocations   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrderLineItem.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/models.py TransferOrderLineItem.allocated_quantity   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/order/models.py TransferOrderLineItem.is_fully_allocated   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/order/models.py TransferOrderLineItem.is_overallocated   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrderLineItem.is_completed   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/order/models.py TransferOrderAllocation.get_api_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrderAllocation.clean   0% 27 27 0   0% 16 0   0%
src/backend/InvenTree/order/models.py TransferOrderAllocation.get_location   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrderAllocation.get_po   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py TransferOrderAllocation.complete_allocation   0% 20 20 0   0% 12 0   0%
src/backend/InvenTree/order/models.py _touch_order_updated_at   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/order/models.py update_order_on_lineitem_change   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/models.py (no function)   100% 552 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py AbstractOrderSerializer.validate_reference   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py AbstractOrderSerializer.validate_status_custom_key   17% 12 10 0   17% 6 1   17%
src/backend/InvenTree/order/serializers.py AbstractOrderSerializer.annotate_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py AbstractOrderSerializer.order_fields   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py AbstractOrderSerializer.clean_line_item   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/serializers.py AbstractOrderSerializer.create   17% 23 19 0   8% 12 1   14%
src/backend/InvenTree/order/serializers.py AbstractLineItemSerializer.line_fields   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py AbstractExtraLineSerializer.extra_line_fields   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py PurchaseOrderSerializer.skip_create_fields   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/serializers.py PurchaseOrderSerializer.annotate_queryset   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py OrderAdjustSerializer.order   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py PurchaseOrderHoldSerializer.save   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py PurchaseOrderCancelSerializer.save   33% 3 2 0   0% 2 2   20%
src/backend/InvenTree/order/serializers.py PurchaseOrderCompleteSerializer.validate_accept_incomplete   25% 4 3 0   0% 2 0   17%
src/backend/InvenTree/order/serializers.py PurchaseOrderCompleteSerializer.get_context_data   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/serializers.py PurchaseOrderCompleteSerializer.save   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/serializers.py PurchaseOrderIssueSerializer.save   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py PurchaseOrderLineItemSerializer.skip_create_fields   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/order/serializers.py PurchaseOrderLineItemSerializer.annotate_queryset   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py PurchaseOrderLineItemSerializer.validate_quantity   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/order/serializers.py PurchaseOrderLineItemSerializer.validate_purchase_order   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/order/serializers.py PurchaseOrderLineItemSerializer.validate   0% 10 10 0   0% 6 0   0%
src/backend/InvenTree/order/serializers.py PurchaseOrderLineItemReceiveSerializer.validate_quantity   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/order/serializers.py PurchaseOrderLineItemReceiveSerializer.validate_barcode   33% 6 4 0   25% 4 1   30%
src/backend/InvenTree/order/serializers.py PurchaseOrderLineItemReceiveSerializer.validate   0% 23 23 0   0% 6 0   0%
src/backend/InvenTree/order/serializers.py PurchaseOrderReceiveSerializer.validate   10% 21 19 0   0% 14 0   6%
src/backend/InvenTree/order/serializers.py PurchaseOrderReceiveSerializer.save   0% 10 10 0   100% 0 0   0%
src/backend/InvenTree/order/serializers.py SalesOrderSerializer.skip_create_fields   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py SalesOrderSerializer.annotate_queryset   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py SalesOrderIssueSerializer.save   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py SalesOrderLineItemSerializer.annotate_queryset   100% 10 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py SalesOrderShipmentSerializer.annotate_queryset   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py SalesOrderShipmentCompleteSerializer.validate   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/order/serializers.py SalesOrderShipmentAllocationItemSerializer.validate_line_item   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/order/serializers.py SalesOrderShipmentAllocationItemSerializer.validate_quantity   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/order/serializers.py SalesOrderShipmentAllocationItemSerializer.validate   0% 12 12 0   0% 8 0   0%
src/backend/InvenTree/order/serializers.py SalesOrderCompleteSerializer.validate_accept_incomplete   25% 4 3 0   0% 2 0   17%
src/backend/InvenTree/order/serializers.py SalesOrderCompleteSerializer.get_context_data   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/serializers.py SalesOrderCompleteSerializer.validate   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/order/serializers.py SalesOrderCompleteSerializer.save   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/order/serializers.py SalesOrderHoldSerializer.save   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py SalesOrderCancelSerializer.get_context_data   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/serializers.py SalesOrderCancelSerializer.save   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py SalesOrderSerialAllocationSerializer.validate_line_item   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/order/serializers.py SalesOrderSerialAllocationSerializer.validate_shipment   17% 6 5 0   0% 4 0   10%
src/backend/InvenTree/order/serializers.py SalesOrderSerialAllocationSerializer.validate   0% 42 42 0   0% 16 0   0%
src/backend/InvenTree/order/serializers.py SalesOrderSerialAllocationSerializer.save   0% 9 9 0   0% 2 0   0%
src/backend/InvenTree/order/serializers.py SalesOrderShipmentAllocationSerializer.validate_shipment   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/order/serializers.py SalesOrderShipmentAllocationSerializer.validate   80% 5 1 0   50% 2 1   71%
src/backend/InvenTree/order/serializers.py SalesOrderShipmentAllocationSerializer.save   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/order/serializers.py SalesOrderAutoAllocationSerializer.validate_shipment   0% 8 8 0   0% 6 0   0%
src/backend/InvenTree/order/serializers.py SalesOrderAutoAllocationSerializer.validate_line_items   0% 6 6 0   0% 6 0   0%
src/backend/InvenTree/order/serializers.py ReturnOrderSerializer.skip_create_fields   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py ReturnOrderSerializer.annotate_queryset   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py ReturnOrderHoldSerializer.save   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py ReturnOrderIssueSerializer.save   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py ReturnOrderCancelSerializer.save   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py ReturnOrderCompleteSerializer.save   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py ReturnOrderLineItemReceiveSerializer.validate_line_item   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/order/serializers.py ReturnOrderReceiveSerializer.validate   0% 8 8 0   0% 4 0   0%
src/backend/InvenTree/order/serializers.py ReturnOrderReceiveSerializer.save   0% 9 9 0   0% 2 0   0%
src/backend/InvenTree/order/serializers.py TransferOrderSerializer.skip_create_fields   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py TransferOrderSerializer.annotate_queryset   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py TransferOrderHoldSerializer.save   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py TransferOrderIssueSerializer.save   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py TransferOrderCancelSerializer.save   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/order/serializers.py TransferOrderCompleteSerializer.validate_accept_incomplete_allocation   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/order/serializers.py TransferOrderCompleteSerializer.get_context_data   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/serializers.py TransferOrderCompleteSerializer.validate   67% 3 1 0   100% 0 0   67%
src/backend/InvenTree/order/serializers.py TransferOrderCompleteSerializer.save   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/order/serializers.py TransferOrderLineItemSerializer.annotate_queryset   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/order/serializers.py TransferOrderAllocationItemSerializer.validate_line_item   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/order/serializers.py TransferOrderAllocationItemSerializer.validate_quantity   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/order/serializers.py TransferOrderAllocationItemSerializer.validate   0% 9 9 0   0% 4 0   0%
src/backend/InvenTree/order/serializers.py TransferOrderLineItemAllocationSerializer.validate   80% 5 1 0   50% 2 1   71%
src/backend/InvenTree/order/serializers.py TransferOrderLineItemAllocationSerializer.save   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/order/serializers.py TransferOrderSerialAllocationSerializer.validate_line_item   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/order/serializers.py TransferOrderSerialAllocationSerializer.validate   0% 38 38 0   0% 12 0   0%
src/backend/InvenTree/order/serializers.py TransferOrderSerialAllocationSerializer.save   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/order/serializers.py (no function)   100% 433 0 0   100% 0 0   100%
src/backend/InvenTree/order/status_codes.py (no function)   100% 52 0 0   100% 0 0   100%
src/backend/InvenTree/order/tasks.py notify_overdue_purchase_order   0% 11 11 0   0% 4 0   0%
src/backend/InvenTree/order/tasks.py check_overdue_purchase_orders   0% 11 11 0   0% 6 0   0%
src/backend/InvenTree/order/tasks.py notify_overdue_sales_order   0% 11 11 0   0% 4 0   0%
src/backend/InvenTree/order/tasks.py check_overdue_sales_orders   0% 11 11 0   0% 6 0   0%
src/backend/InvenTree/order/tasks.py notify_overdue_return_order   0% 11 11 0   0% 4 0   0%
src/backend/InvenTree/order/tasks.py check_overdue_return_orders   0% 11 11 0   0% 6 0   0%
src/backend/InvenTree/order/tasks.py complete_sales_order_shipment   0% 14 14 0   0% 4 0   0%
src/backend/InvenTree/order/tasks.py auto_allocate_sales_order   0% 5 5 0   100% 0 0   0%
src/backend/InvenTree/order/tasks.py (no function)   100% 38 0 0   100% 0 0   100%
src/backend/InvenTree/order/validators.py generate_next_sales_order_reference   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/validators.py generate_next_purchase_order_reference   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/validators.py generate_next_return_order_reference   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/validators.py generate_next_transfer_order_reference   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/validators.py validate_sales_order_reference_pattern   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/validators.py validate_purchase_order_reference_pattern   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/validators.py validate_return_order_reference_pattern   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/validators.py validate_sales_order_reference   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/validators.py validate_purchase_order_reference   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/validators.py validate_return_order_reference   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/validators.py validate_transfer_order_reference_pattern   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/order/validators.py validate_transfer_order_reference   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/order/validators.py (no function)   100% 12 0 0   100% 0 0   100%
src/backend/InvenTree/part/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/part/admin.py (no function)   100% 45 0 0   100% 0 0   100%
src/backend/InvenTree/part/api.py CategoryMixin.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/part/api.py CategoryFilter.filter_starred   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/part/api.py CategoryFilter.filter_depth   100% 4 0 0   50% 2 1   83%
src/backend/InvenTree/part/api.py CategoryFilter.filter_top_level   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/part/api.py CategoryFilter.filter_cascade   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/part/api.py CategoryFilter.filter_parent   0% 10 10 0   0% 4 0   0%
src/backend/InvenTree/part/api.py CategoryFilter.filter_exclude_tree   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/part/api.py CategoryDetail.update   67% 6 2 0   50% 2 1   62%
src/backend/InvenTree/part/api.py CategoryDetail.destroy   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/api.py CategoryTreeFilter.filter_max_level   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/api.py CategoryTree.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/part/api.py CategoryParameterList.get_queryset   36% 14 9 0   25% 4 1   33%
src/backend/InvenTree/part/api.py PartTestTemplateFilter.filter_part   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/part/api.py PartTestTemplateFilter.filter_has_results   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/part/api.py PartTestTemplateMixin.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/part/api.py PartThumbs.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/part/api.py PartThumbs.list   100% 10 0 0   100% 4 0   100%
src/backend/InvenTree/part/api.py PartPricingDetail.get_object   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/part/api.py PartPricingDetail._get_serializer   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/part/api.py PartCopyBOM.get_serializer_context   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/api.py PartValidateBOM.update   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/part/api.py PartFilter.filter_is_variant   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_is_revision   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/part/api.py PartFilter.filter_has_revisions   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_has_units   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_has_ipn   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/part/api.py PartFilter.filter_low_stock   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_high_stock   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_has_stock   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_unallocated_stock   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_convert_from   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_exclude_tree   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_ancestor   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_variant_of   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_in_bom   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_has_pricing   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_stock_to_build   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_depleted_stock   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_starred   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_related_parts   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_exclude_related_parts   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/part/api.py PartFilter._get_related_part_ids   0% 9 9 0   0% 6 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_cascade   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/api.py PartFilter.filter_category   0% 13 13 0   0% 6 0   0%
src/backend/InvenTree/part/api.py PartMixin.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/part/api.py PartMixin.get_serializer   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/part/api.py PartDetail.update   67% 6 2 0   50% 2 1   62%
src/backend/InvenTree/part/api.py PartRelatedFilter.filter_part   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/api.py PartRelatedMixin.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/part/api.py PartStocktakeList.get_serializer_context   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/part/api.py PartStocktakeGenerate.post   100% 17 0 0   100% 4 0   100%
src/backend/InvenTree/part/api.py BomFilter.filter_available_stock   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/api.py BomFilter.filter_on_order   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/api.py BomFilter.filter_has_pricing   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/part/api.py BomFilter.filter_part   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/api.py BomFilter.filter_category   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/part/api.py BomFilter.filter_uses   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/api.py BomMixin.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/part/api.py BomList.validate_delete   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/part/api.py BomItemValidate.update   44% 9 5 0   0% 2 0   36%
src/backend/InvenTree/part/api.py (no function)   100% 335 0 0   100% 0 0   100%
src/backend/InvenTree/part/apps.py PartConfig.ready   88% 8 1 0   67% 6 2   79%
src/backend/InvenTree/part/apps.py PartConfig.update_trackable_status   40% 10 6 0   50% 2 1   42%
src/backend/InvenTree/part/apps.py PartConfig.reset_part_pricing_flags   42% 12 7 0   33% 6 2   39%
src/backend/InvenTree/part/apps.py (no function)   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/part/events.py (no function)   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/part/filters.py annotate_in_production_quantity   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/part/filters.py annotate_scheduled_to_build_quantity   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/part/filters.py annotate_on_order_quantity   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/part/filters.py annotate_total_stock   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/part/filters.py annotate_build_order_requirements   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/part/filters.py annotate_build_order_allocations   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/part/filters.py annotate_sales_order_requirements   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/part/filters.py annotate_sales_order_allocations   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/part/filters.py annotate_transfer_order_allocations   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/part/filters.py variant_stock_query   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/part/filters.py annotate_variant_quantity   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/filters.py annotate_category_parts   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/part/filters.py annotate_default_location   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/part/filters.py annotate_sub_categories   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/part/filters.py annotate_bom_item_can_build   100% 13 0 0   100% 0 0   100%
src/backend/InvenTree/part/filters.py (no function)   100% 26 0 0   100% 0 0   100%
src/backend/InvenTree/part/helpers.py compile_full_name_template   80% 10 2 0   100% 2 0   83%
src/backend/InvenTree/part/helpers.py render_part_full_name   50% 8 4 0   50% 2 1   50%
src/backend/InvenTree/part/helpers.py get_part_image_directory   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/part/helpers.py (no function)   100% 12 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0001_initial.py attach_file   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/migrations/0001_initial.py (no function)   100% 12 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0002_auto_20190520_2204.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0003_auto_20190525_2226.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0004_auto_20190525_2356.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0005_auto_20190526_1119.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0006_auto_20190526_1215.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0007_auto_20190602_1944.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0008_auto_20190618_0042.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0009_part_virtual.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0010_auto_20190620_2135.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0011_part_revision.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0012_auto_20190627_2144.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0013_auto_20190628_0951.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0014_partparameter.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0015_auto_20190820_0251.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0016_auto_20190820_0257.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0017_bomitem_checksum.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0018_auto_20190907_0941.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0019_auto_20190908_0404.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0020_auto_20190908_0404.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0021_auto_20190908_0916.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0022_auto_20190908_0918.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0023_auto_20190913_1401.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0024_auto_20191118_2139.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0025_auto_20191118_2316.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0026_auto_20200131_1022.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0027_auto_20200202_1024.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0028_auto_20200203_1007.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0029_auto_20200223_0901.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0030_auto_20200318_1027.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0031_auto_20200318_1044.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0032_auto_20200322_0453.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0033_auto_20200404_0445.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0034_auto_20200404_1238.py create_thumbnails   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0034_auto_20200404_1238.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0035_auto_20200406_0045.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0036_partattachment_user.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0037_partattachment_upload_date.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0038_auto_20200513_0016.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0039_auto_20200515_1127.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0040_parttesttemplate.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0041_auto_20200517_0348.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0042_auto_20200518_0900.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0043_auto_20200527_0005.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0044_auto_20200605_0931.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0045_auto_20200605_0932.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0046_auto_20200804_0107.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0047_auto_20200808_0715.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0048_auto_20200902_1404.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0049_partsellpricebreak.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0050_auto_20200917_2315.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0051_bomitem_optional.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0052_partrelated.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0053_partcategoryparametertemplate.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0054_auto_20201109_1246.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0055_auto_20201110_1001.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0056_auto_20201110_1125.py migrate_currencies   43% 28 16 0   25% 12 3   38%
src/backend/InvenTree/part/migrations/0056_auto_20201110_1125.py reverse_currencies   0% 25 25 0   0% 8 0   0%
src/backend/InvenTree/part/migrations/0056_auto_20201110_1125.py (no function)   100% 12 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0057_remove_partsellpricebreak_currency.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0058_remove_partsellpricebreak_cost.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0059_auto_20201112_1112.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0060_merge_20201112_1722.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0061_auto_20210103_2313.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0061_auto_20210104_2331.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0062_merge_20210105_0056.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0063_bomitem_inherited.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0064_auto_20210404_2016.py (no function)   100% 12 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0065_auto_20210505_2144.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0066_bomitem_allow_variants.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0067_partinternalpricebreak.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0068_part_unique_part.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0069_auto_20210701_0509.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0070_alter_part_variant_of.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0071_alter_partparametertemplate_name.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0072_bomitemsubstitute.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0073_auto_20211013_1048.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0074_partcategorystar.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0075_auto_20211128_0151.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0076_auto_20220516_0819.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0077_alter_bomitem_unique_together.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0078_auto_20220606_0024.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0079_alter_part_notes.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0080_alter_part_image.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0081_alter_partcategory_name.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0082_partcategory_pathstring.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0083_auto_20220731_2357.py update_pathstring   23% 13 10 0   17% 6 1   21%
src/backend/InvenTree/part/migrations/0083_auto_20220731_2357.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0084_partcategory_icon.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0085_partparametertemplate_description.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0086_auto_20220912_0007.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0087_bomitem_consumable.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0088_alter_partparametertemplate_name.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0089_auto_20221112_0128.py (no function)   100% 10 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0090_auto_20221115_0816.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0091_partstocktake.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0092_part_last_stocktake.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0093_auto_20230115_1404.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0094_alter_part_units.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0095_alter_part_responsible.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0096_auto_20230211_0029.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0097_partstocktakereport.py fake_func   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/migrations/0097_partstocktakereport.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0098_auto_20230214_1115.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0099_alter_bomitem_inherited.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0100_alter_bomitem_reference.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0101_bomitem_validated.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0102_auto_20230314_0112.py update_bom_item   11% 36 32 0   8% 12 1   10%
src/backend/InvenTree/part/migrations/0102_auto_20230314_0112.py (no function)   100% 10 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0103_auto_20230317_0816.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0104_alter_part_description.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0105_alter_part_notes.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0106_part_tags.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0107_alter_part_tags.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0108_auto_20230516_1334.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0109_auto_20230517_1048.py update_template_units   8% 48 44 0   5% 20 1   7%
src/backend/InvenTree/part/migrations/0109_auto_20230517_1048.py convert_to_numeric_value   0% 12 12 0   0% 2 0   0%
src/backend/InvenTree/part/migrations/0109_auto_20230517_1048.py update_parameter_values   40% 10 6 0   50% 4 2   43%
src/backend/InvenTree/part/migrations/0109_auto_20230517_1048.py (no function)   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0110_alter_part_units.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0111_auto_20230521_1350.py migrate_part_units   11% 46 41 0   6% 18 1   9%
src/backend/InvenTree/part/migrations/0111_auto_20230521_1350.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0112_auto_20230525_1606.py RemoveFieldOrSkip.database_backwards   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/migrations/0112_auto_20230525_1606.py RemoveFieldOrSkip.database_forwards   80% 5 1 0   100% 0 0   80%
src/backend/InvenTree/part/migrations/0112_auto_20230525_1606.py RemoveFieldOrSkip.state_forwards   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0112_auto_20230525_1606.py AddFieldOrSkip.database_backwards   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/migrations/0112_auto_20230525_1606.py AddFieldOrSkip.database_forwards   50% 4 2 0   100% 0 0   50%
src/backend/InvenTree/part/migrations/0112_auto_20230525_1606.py AddFieldOrSkip.state_forwards   50% 4 2 0   100% 0 0   50%
src/backend/InvenTree/part/migrations/0112_auto_20230525_1606.py (no function)   100% 13 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0113_auto_20230531_1205.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0114_alter_part_minimum_stock.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0115_part_responsible_owner.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0116_auto_20231023_0332.py migrate_part_responsible_owner   67% 12 4 0   50% 4 2   62%
src/backend/InvenTree/part/migrations/0116_auto_20231023_0332.py reverse_owner_migration   0% 15 15 0   0% 6 0   0%
src/backend/InvenTree/part/migrations/0116_auto_20231023_0332.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0117_remove_part_responsible.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0118_auto_20231024_1844.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0119_auto_20231120_0457.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0120_parttesttemplate_key.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0121_auto_20240207_0344.py set_key   57% 7 3 0   50% 4 2   55%
src/backend/InvenTree/part/migrations/0121_auto_20240207_0344.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0122_parttesttemplate_enabled.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0123_parttesttemplate_choices.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0124_delete_partattachment.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0125_part_locked.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0126_part_revision_of.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0127_remove_partcategory_icon_partcategory__icon.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0128_part_testable.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0129_auto_20240815_0214.py set_testable   60% 5 2 0   50% 2 1   57%
src/backend/InvenTree/part/migrations/0129_auto_20240815_0214.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0130_alter_parttesttemplate_part.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0131_partrelated_note.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0132_partparametertemplate_selectionlist.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0133_alter_partcategory__icon.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0134_auto_20250221_1309.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0135_alter_part_link.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0136_partparameter_note_partparameter_updated_and_more.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0137_bomitem_attrition_bomitem_rounding_multiple_and_more.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0138_auto_20250718_2342.py convert_overage   15% 27 23 0   17% 6 1   15%
src/backend/InvenTree/part/migrations/0138_auto_20250718_2342.py revert_overage   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/part/migrations/0138_auto_20250718_2342.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0139_remove_bomitem_overage.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0140_part_bom_validated.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0141_auto_20250722_0303.py cache_bom_valid   39% 23 14 0   19% 16 3   31%
src/backend/InvenTree/part/migrations/0141_auto_20250722_0303.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0142_remove_part_last_stocktake_remove_partstocktake_note_and_more.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0143_alter_part_image.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0144_auto_20251203_1045.py update_parameter   67% 15 5 0   50% 4 2   63%
src/backend/InvenTree/part/migrations/0144_auto_20251203_1045.py reverse_update_parameter   0% 8 8 0   0% 4 0   0%
src/backend/InvenTree/part/migrations/0144_auto_20251203_1045.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0145_auto_20251203_1238.py update_category_parameters   50% 10 5 0   50% 4 2   50%
src/backend/InvenTree/part/migrations/0145_auto_20251203_1238.py reverse_update_category_parameters   0% 10 10 0   0% 4 0   0%
src/backend/InvenTree/part/migrations/0145_auto_20251203_1238.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0146_auto_20251203_1241.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0147_remove_part_default_supplier.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0148_auto_20260427_2233.py update_bom_role   44% 9 5 0   25% 4 1   38%
src/backend/InvenTree/part/migrations/0148_auto_20260427_2233.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0149_bomitem_raw_amount.py set_default_raw_amount   69% 16 5 0   50% 6 3   64%
src/backend/InvenTree/part/migrations/0149_bomitem_raw_amount.py set_default_raw_amount.add_bom_item   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/part/migrations/0149_bomitem_raw_amount.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/0150_part_maximum_stock.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/migrations/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/part/models.py PartCategory.delete   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py PartCategory.icon   60% 5 2 0   50% 4 2   56%
src/backend/InvenTree/part/models.py PartCategory.icon   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/part/models.py PartCategory.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/models.py PartCategory.get_absolute_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py PartCategory.clean   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/part/models.py PartCategory.get_parts   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/part/models.py PartCategory.item_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py PartCategory.get_items   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py PartCategory.partcount   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/part/models.py PartCategory.prefetch_parts_parameters   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py PartCategory.get_unique_parameters   0% 8 8 0   0% 6 0   0%
src/backend/InvenTree/part/models.py PartCategory.get_parts_parameters   0% 12 12 0   0% 6 0   0%
src/backend/InvenTree/part/models.py PartCategory.get_parent_categories   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/part/models.py PartCategory.get_parameter_templates   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/part/models.py PartCategory.get_subscribers   0% 8 8 0   0% 4 0   0%
src/backend/InvenTree/part/models.py PartCategory.is_starred_by   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py PartCategory.set_starred   0% 7 7 0   0% 6 0   0%
src/backend/InvenTree/part/models.py rename_part_image   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/part/models.py PartCategoryParameterTemplate.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/models.py PartCategoryParameterTemplate.__str__   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/models.py PartCategoryParameterTemplate.clean   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/part/models.py Part.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/models.py Part.api_instance_filters   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.barcode_model_type_code   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.report_context   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.check_parameter_delete   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/part/models.py Part.check_parameter_save   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/part/models.py Part.delete   38% 8 5 0   25% 8 2   31%
src/backend/InvenTree/part/models.py Part.save   88% 16 2 0   100% 8 0   92%
src/backend/InvenTree/part/models.py Part.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.get_parts_in_bom   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/part/models.py Part.check_if_part_in_bom   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.check_add_to_bom   0% 17 17 0   0% 12 0   0%
src/backend/InvenTree/part/models.py Part.validate_name   25% 12 9 0   25% 8 2   25%
src/backend/InvenTree/part/models.py Part.validate_ipn   29% 17 12 0   25% 12 3   28%
src/backend/InvenTree/part/models.py Part.validate_revision   8% 12 11 0   7% 14 1   8%
src/backend/InvenTree/part/models.py Part.validate_serial_number   0% 34 34 0   0% 22 0   0%
src/backend/InvenTree/part/models.py Part.find_conflicting_serial_numbers   0% 17 17 0   0% 8 0   0%
src/backend/InvenTree/part/models.py Part.get_latest_serial_number   50% 16 8 0   40% 10 4   46%
src/backend/InvenTree/part/models.py Part.get_next_serial_number   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/part/models.py Part.full_name   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/models.py Part.get_absolute_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.validate_unique   45% 11 6 0   38% 8 3   42%
src/backend/InvenTree/part/models.py Part.clean   90% 10 1 0   67% 6 2   81%
src/backend/InvenTree/part/models.py Part.ensure_trackable   17% 6 5 0   17% 6 1   17%
src/backend/InvenTree/part/models.py Part.get_default_location   0% 8 8 0   0% 8 0   0%
src/backend/InvenTree/part/models.py Part.default_supplier   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.category_path   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/models.py Part.available_stock   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/part/models.py Part.requiring_build_orders   88% 8 1 0   75% 4 1   83%
src/backend/InvenTree/part/models.py Part.required_build_order_quantity   39% 18 11 0   20% 10 2   32%
src/backend/InvenTree/part/models.py Part.requiring_sales_orders   0% 8 8 0   0% 4 0   0%
src/backend/InvenTree/part/models.py Part.required_sales_order_quantity   55% 11 5 0   33% 6 2   47%
src/backend/InvenTree/part/models.py Part.required_order_quantity   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.quantity_to_order   0% 5 5 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.net_stock   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.get_subscribers   0% 11 11 0   0% 8 0   0%
src/backend/InvenTree/part/models.py Part.is_starred_by   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.set_starred   0% 7 7 0   0% 6 0   0%
src/backend/InvenTree/part/models.py Part.can_build   21% 14 11 0   12% 8 1   18%
src/backend/InvenTree/part/models.py Part.active_builds   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.quantity_being_built   75% 8 2 0   50% 4 2   67%
src/backend/InvenTree/part/models.py Part.quantity_in_production   75% 8 2 0   50% 4 2   67%
src/backend/InvenTree/part/models.py Part.build_order_allocations   86% 7 1 0   50% 2 1   78%
src/backend/InvenTree/part/models.py Part.build_order_allocation_count   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/part/models.py Part.sales_order_allocations   75% 12 3 0   33% 6 2   61%
src/backend/InvenTree/part/models.py Part.sales_order_allocation_count   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/part/models.py Part.transfer_order_allocations   0% 12 12 0   0% 6 0   0%
src/backend/InvenTree/part/models.py Part.transfer_order_allocation_count   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.allocation_count   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/part/models.py Part.stock_entries   54% 13 6 0   40% 10 4   48%
src/backend/InvenTree/part/models.py Part.get_stock_count   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/part/models.py Part.total_stock   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/models.py Part.get_bom_item_filter   67% 9 3 0   67% 6 2   67%
src/backend/InvenTree/part/models.py Part.get_bom_items   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/part/models.py Part.get_installed_part_options   0% 7 7 0   0% 6 0   0%
src/backend/InvenTree/part/models.py Part.get_used_in_bom_item_filter   82% 11 2 0   50% 4 2   73%
src/backend/InvenTree/part/models.py Part.get_used_in   29% 14 10 0   12% 8 1   23%
src/backend/InvenTree/part/models.py Part.has_bom   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/models.py Part.get_trackable_parts   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.has_trackable_parts   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.bom_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.used_in_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.get_bom_hash   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/part/models.py Part.is_bom_valid   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/models.py Part.validate_bom   78% 9 2 0   25% 4 1   62%
src/backend/InvenTree/part/models.py Part.clear_bom   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.getRequiredParts   0% 10 10 0   0% 8 0   0%
src/backend/InvenTree/part/models.py Part.supplier_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.update_pricing   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.pricing   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/part/models.py Part.schedule_pricing_update   0% 13 13 0   0% 6 0   0%
src/backend/InvenTree/part/models.py Part.get_price_info   0% 9 9 0   0% 4 0   0%
src/backend/InvenTree/part/models.py Part.get_supplier_price_range   0% 15 15 0   0% 10 0   0%
src/backend/InvenTree/part/models.py Part.get_bom_price_range   0% 23 23 0   0% 12 0   0%
src/backend/InvenTree/part/models.py Part.get_price_range   0% 14 14 0   0% 10 0   0%
src/backend/InvenTree/part/models.py Part.has_price_breaks   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.price_breaks   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.unit_pricing   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.add_price_break   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/models.py Part.get_internal_price   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.has_internal_price_breaks   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.internal_price_breaks   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.get_purchase_price   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/part/models.py Part.copy_bom_from   0% 25 25 0   0% 16 0   0%
src/backend/InvenTree/part/models.py Part.copy_tests_from   0% 12 12 0   0% 8 0   0%
src/backend/InvenTree/part/models.py Part.copy_category_parameters   0% 14 14 0   0% 6 0   0%
src/backend/InvenTree/part/models.py Part.getTestTemplates   0% 8 8 0   0% 6 0   0%
src/backend/InvenTree/part/models.py Part.getTestTemplateMap   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/part/models.py Part.getRequiredTests   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.sales_orders   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/part/models.py Part.purchase_orders   0% 6 6 0   0% 6 0   0%
src/backend/InvenTree/part/models.py Part.on_order   62% 8 3 0   25% 4 1   50%
src/backend/InvenTree/part/models.py Part.has_variants   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.get_all_variants   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.can_convert   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.get_conversion_options   0% 12 12 0   0% 6 0   0%
src/backend/InvenTree/part/models.py Part.get_related_parts   0% 8 8 0   0% 4 0   0%
src/backend/InvenTree/part/models.py Part.related_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py Part.is_part_low_on_stock   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py after_save_part   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/part/models.py PartPricing.is_valid   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py PartPricing.convert   0% 9 9 0   0% 2 0   0%
src/backend/InvenTree/part/models.py PartPricing.schedule_for_update   0% 36 36 0   0% 12 0   0%
src/backend/InvenTree/part/models.py PartPricing.update_pricing   0% 26 26 0   0% 10 0   0%
src/backend/InvenTree/part/models.py PartPricing.update_assemblies   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/models.py PartPricing.update_templates   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/models.py PartPricing.save   56% 9 4 0   100% 0 0   56%
src/backend/InvenTree/part/models.py PartPricing.update_bom_cost   0% 42 42 0   0% 28 0   0%
src/backend/InvenTree/part/models.py PartPricing.update_purchase_cost   0% 32 32 0   0% 24 0   0%
src/backend/InvenTree/part/models.py PartPricing.update_internal_cost   0% 15 15 0   0% 12 0   0%
src/backend/InvenTree/part/models.py PartPricing.update_supplier_cost   0% 18 18 0   0% 16 0   0%
src/backend/InvenTree/part/models.py PartPricing.update_variant_cost   0% 20 20 0   0% 16 0   0%
src/backend/InvenTree/part/models.py PartPricing.update_overall_cost   67% 36 12 0   43% 30 9   56%
src/backend/InvenTree/part/models.py PartPricing.update_sale_cost   0% 29 29 0   0% 18 0   0%
src/backend/InvenTree/part/models.py PartSellPriceBreak.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/models.py PartInternalPriceBreak.get_api_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py PartTestTemplate.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py PartTestTemplate.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/models.py PartTestTemplate.save   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/part/models.py PartTestTemplate.clean   0% 18 18 0   0% 12 0   0%
src/backend/InvenTree/part/models.py PartTestTemplate.validate_unique   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/part/models.py PartTestTemplate.get_choices   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/models.py BomItem.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py BomItem.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/models.py BomItem.get_assemblies   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/part/models.py BomItem.get_valid_parts_for_allocation   0% 19 19 0   0% 18 0   0%
src/backend/InvenTree/part/models.py BomItem.is_stock_item_valid   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py BomItem.get_stock_filter   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py BomItem.set_quantity   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/part/models.py BomItem.recalculate_quantity   0% 20 20 0   0% 10 0   0%
src/backend/InvenTree/part/models.py BomItem.delete   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/part/models.py BomItem.save   0% 19 19 0   0% 12 0   0%
src/backend/InvenTree/part/models.py BomItem.check_part_lock   0% 8 8 0   0% 10 0   0%
src/backend/InvenTree/part/models.py BomItem.hash_fields   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py BomItem.get_item_hash   0% 14 14 0   0% 8 0   0%
src/backend/InvenTree/part/models.py BomItem.validate_hash   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/part/models.py BomItem.is_line_valid   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/models.py BomItem.clean   0% 15 15 0   0% 8 0   0%
src/backend/InvenTree/part/models.py BomItem.can_build_quantity   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/part/models.py BomItem.get_required_quantity   0% 22 22 0   0% 6 0   0%
src/backend/InvenTree/part/models.py BomItem.price_range   0% 10 10 0   0% 4 0   0%
src/backend/InvenTree/part/models.py update_bom_build_lines   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/models.py update_pricing_after_edit   0% 3 3 0   0% 4 0   0%
src/backend/InvenTree/part/models.py update_pricing_after_delete   0% 3 3 0   0% 4 0   0%
src/backend/InvenTree/part/models.py BomItemSubstitute.save   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/part/models.py BomItemSubstitute.validate_unique   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/models.py BomItemSubstitute.get_api_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py PartRelated.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/models.py PartRelated.save   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/part/models.py PartRelated.clean   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/part/models.py (no function)   100% 451 0 0   100% 0 0   100%
src/backend/InvenTree/part/serializers.py CategorySerializer.annotate_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/part/serializers.py CategorySerializer.get_starred   80% 5 1 0   75% 4 1   78%
src/backend/InvenTree/part/serializers.py CategoryTreeSerializer.annotate_queryset   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/serializers.py PartTestTemplateSerializer.annotate_queryset   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/serializers.py PartThumbSerializerUpdate.validate_image   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/part/serializers.py InitialSupplierSerializer.validate_supplier   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/serializers.py InitialSupplierSerializer.validate_manufacturer   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/part/serializers.py InitialSupplierSerializer.validate   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/part/serializers.py PartSerializer.__init__   89% 9 1 0   88% 8 1   88%
src/backend/InvenTree/part/serializers.py PartSerializer.get_api_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/serializers.py PartSerializer.skip_create_fields   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/part/serializers.py PartSerializer.annotate_queryset   100% 13 0 0   100% 0 0   100%
src/backend/InvenTree/part/serializers.py PartSerializer.get_starred   80% 5 1 0   50% 4 2   67%
src/backend/InvenTree/part/serializers.py PartSerializer.validate_existing_image   71% 7 2 0   50% 4 2   64%
src/backend/InvenTree/part/serializers.py PartSerializer.create   31% 42 29 0   18% 28 5   26%
src/backend/InvenTree/part/serializers.py PartSerializer.save   67% 9 3 0   50% 2 1   64%
src/backend/InvenTree/part/serializers.py PartRequirementsSerializer.get_allocated_to_sales_orders   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/serializers.py PartStocktakeSerializer.__init__   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/part/serializers.py PartStocktakeSerializer.save   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/part/serializers.py PartPricingSerializer.validate   46% 13 7 0   25% 4 1   41%
src/backend/InvenTree/part/serializers.py PartPricingSerializer.save   60% 5 2 0   50% 2 1   57%
src/backend/InvenTree/part/serializers.py BomItemSerializer.validate   0% 9 9 0   0% 4 0   0%
src/backend/InvenTree/part/serializers.py BomItemSerializer.annotate_queryset   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/part/serializers.py PartCopyBOMSerializer.validate_part   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/part/serializers.py PartCopyBOMSerializer.save   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/part/serializers.py (no function)   100% 351 0 0   100% 0 0   100%
src/backend/InvenTree/part/settings.py part_assembly_default   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/settings.py part_template_default   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/settings.py part_virtual_default   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/settings.py part_component_default   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/settings.py part_purchaseable_default   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/settings.py part_salable_default   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/settings.py part_trackable_default   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/part/settings.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/part/stocktake.py perform_stocktake   9% 103 94 0   2% 42 1   7%
src/backend/InvenTree/part/stocktake.py (no function)   100% 10 0 0   100% 0 0   100%
src/backend/InvenTree/part/tasks.py notify_low_stock   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/part/tasks.py notify_stale_stock   0% 28 28 0   0% 14 0   0%
src/backend/InvenTree/part/tasks.py notify_low_stock_if_required   0% 10 10 0   0% 4 0   0%
src/backend/InvenTree/part/tasks.py check_stale_stock   0% 28 28 0   0% 14 0   0%
src/backend/InvenTree/part/tasks.py update_part_pricing   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/part/tasks.py check_missing_pricing   0% 28 28 0   0% 18 0   0%
src/backend/InvenTree/part/tasks.py scheduled_stocktake_reports   0% 21 21 0   0% 10 0   0%
src/backend/InvenTree/part/tasks.py rebuild_supplier_parts   0% 16 16 0   0% 4 0   0%
src/backend/InvenTree/part/tasks.py check_bom_valid   0% 10 10 0   0% 2 0   0%
src/backend/InvenTree/part/tasks.py validate_bom   60% 15 6 0   50% 2 1   59%
src/backend/InvenTree/part/tasks.py (no function)   100% 38 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/__init__.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/admin.py plugin_update   0% 8 8 0   0% 6 0   0%
src/backend/InvenTree/plugin/admin.py plugin_activate   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/admin.py plugin_deactivate   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/admin.py PluginSettingInline.has_add_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/admin.py PluginUserSettingInline.has_add_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/admin.py (no function)   100% 25 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/api.py PluginFilter.filter_mixin   91% 11 1 0   62% 8 3   79%
src/backend/InvenTree/plugin/api.py PluginFilter.filter_builtin   100% 5 0 0   75% 4 1   89%
src/backend/InvenTree/plugin/api.py PluginFilter.filter_mandatory   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/plugin/api.py PluginFilter.filter_sample   80% 5 1 0   75% 4 1   78%
src/backend/InvenTree/plugin/api.py PluginFilter.filter_installed   100% 5 0 0   75% 4 1   89%
src/backend/InvenTree/plugin/api.py PluginDetail.delete   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/plugin/api.py PluginInstall.create   57% 7 3 0   100% 0 0   57%
src/backend/InvenTree/plugin/api.py PluginInstall.perform_create   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/api.py PluginUninstall.perform_update   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/api.py PluginActivate.get_object   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/plugin/api.py PluginActivate.perform_update   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/api.py PluginReload.perform_create   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/api.py PluginSettingList.get   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/api.py check_plugin   65% 20 7 0   50% 12 4   59%
src/backend/InvenTree/plugin/api.py PluginAllSettingList.get   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/api.py PluginSettingDetail.get_object   83% 6 1 0   50% 2 1   75%
src/backend/InvenTree/plugin/api.py PluginUserSettingList.get   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/api.py PluginUserSettingDetail.get_object   83% 6 1 0   50% 2 1   75%
src/backend/InvenTree/plugin/api.py RegistryStatusView.get   57% 7 3 0   17% 6 1   38%
src/backend/InvenTree/plugin/api.py (no function)   100% 124 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/apps.py PluginAppConfig.ready   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/apps.py PluginAppConfig.reload_plugin_registry   78% 9 2 0   67% 6 2   73%
src/backend/InvenTree/plugin/apps.py (no function)   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/action/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/action/api.py ActionPluginView.post   54% 13 6 0   50% 6 1   53%
src/backend/InvenTree/plugin/base/action/api.py (no function)   100% 19 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/action/mixins.py ActionMixin.__init__   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/action/mixins.py ActionMixin.action_name   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/action/mixins.py ActionMixin.perform_action   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/action/mixins.py ActionMixin.get_result   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/action/mixins.py ActionMixin.get_info   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/action/mixins.py ActionMixin.get_response   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/action/mixins.py (no function)   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/barcodes/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/barcodes/api.py BarcodeView.log_scan   19% 27 22 0   7% 14 1   15%
src/backend/InvenTree/plugin/base/barcodes/api.py BarcodeView.queryset   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/barcodes/api.py BarcodeView.create   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/barcodes/api.py BarcodeView.handle_barcode   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/barcodes/api.py BarcodeView.scan_barcode   44% 27 15 0   30% 10 1   41%
src/backend/InvenTree/plugin/base/barcodes/api.py BarcodeScan.handle_barcode   62% 8 3 0   50% 2 1   60%
src/backend/InvenTree/plugin/base/barcodes/api.py BarcodeGenerate.queryset   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/barcodes/api.py BarcodeGenerate.create   15% 13 11 0   0% 2 0   13%
src/backend/InvenTree/plugin/base/barcodes/api.py BarcodeAssign.handle_barcode   55% 20 9 0   50% 10 3   53%
src/backend/InvenTree/plugin/base/barcodes/api.py BarcodeUnassign.create   50% 22 11 0   29% 14 2   42%
src/backend/InvenTree/plugin/base/barcodes/api.py BarcodePOAllocate.get_supplier_part   0% 18 18 0   0% 16 0   0%
src/backend/InvenTree/plugin/base/barcodes/api.py BarcodePOAllocate.handle_barcode   0% 14 14 0   0% 4 0   0%
src/backend/InvenTree/plugin/base/barcodes/api.py BarcodePOReceive.handle_barcode   36% 81 52 0   19% 36 7   31%
src/backend/InvenTree/plugin/base/barcodes/api.py BarcodeSOAllocate.get_line_item   0% 10 10 0   0% 6 0   0%
src/backend/InvenTree/plugin/base/barcodes/api.py BarcodeSOAllocate.get_shipment   0% 9 9 0   0% 6 0   0%
src/backend/InvenTree/plugin/base/barcodes/api.py BarcodeSOAllocate.handle_barcode   0% 45 45 0   0% 24 0   0%
src/backend/InvenTree/plugin/base/barcodes/api.py BarcodeScanResultMixin.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/barcodes/api.py (no function)   100% 79 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/barcodes/helper.py cache   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/barcodes/helper.py cache.wrapper   100% 6 0 0   100% 4 0   100%
src/backend/InvenTree/plugin/base/barcodes/helper.py generate_barcode   0% 6 6 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/barcodes/helper.py get_supported_barcode_models   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/barcodes/helper.py get_supported_barcode_models_map   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/barcodes/helper.py get_supported_barcode_model_codes_map   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/barcodes/helper.py (no function)   100% 13 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/barcodes/mixins.py BarcodeMixin.__init__   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/barcodes/mixins.py BarcodeMixin.has_barcode   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/barcodes/mixins.py BarcodeMixin.scan   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py BarcodeMixin.has_barcode_generation   86% 7 1 0   100% 0 0   86%
src/backend/InvenTree/plugin/base/barcodes/mixins.py BarcodeMixin.generate   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.__init__   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.get_field_value   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.get_part   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.quantity   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.supplier_part_number   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.get_supplier_part   0% 15 15 0   0% 12 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.manufacturer_part_number   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.get_manufacturer_part   0% 11 11 0   0% 6 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.customer_order_number   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.supplier_order_number   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.get_purchase_order   0% 12 12 0   0% 10 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.extract_barcode_fields   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.scan   0% 15 15 0   0% 8 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.scan_receive_item   0% 47 47 0   0% 22 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.get_supplier   0% 16 16 0   0% 10 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.get_supplier._cache_supplier   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.ecia_field_map   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.parse_ecia_barcode2d   0% 10 10 0   0% 8 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.split_fields   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py SupplierBarcodeMixin.parse_isoiec_15434_barcode2d   0% 9 9 0   0% 4 0   0%
src/backend/InvenTree/plugin/base/barcodes/mixins.py (no function)   100% 66 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/barcodes/serializers.py BarcodeGenerateSerializer.validate_model   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/plugin/base/barcodes/serializers.py BarcodeAssignMixin.__init__   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/plugin/base/barcodes/serializers.py BarcodeAssignMixin.get_model_fields   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/barcodes/serializers.py BarcodePOAllocateSerializer.validate_purchase_order   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/barcodes/serializers.py BarcodePOReceiveSerializer.validate_purchase_order   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/plugin/base/barcodes/serializers.py BarcodePOReceiveSerializer.validate_location   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/plugin/base/barcodes/serializers.py BarcodeSOAllocateSerializer.validate_sales_order   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/barcodes/serializers.py BarcodeSOAllocateSerializer.validate_shipment   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/plugin/base/barcodes/serializers.py (no function)   100% 51 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/event/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/event/events.py trigger_event   17% 12 10 0   17% 6 1   17%
src/backend/InvenTree/plugin/base/event/events.py register_event   0% 11 11 0   0% 8 0   0%
src/backend/InvenTree/plugin/base/event/events.py process_event   0% 10 10 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/event/events.py allow_table_event   80% 10 2 0   67% 6 2   75%
src/backend/InvenTree/plugin/base/event/events.py after_save   100% 9 0 0   100% 6 0   100%
src/backend/InvenTree/plugin/base/event/events.py after_delete   100% 7 0 0   75% 4 1   91%
src/backend/InvenTree/plugin/base/event/events.py (no function)   100% 25 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/event/mixins.py EventMixin.wants_process_event   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/event/mixins.py EventMixin.process_event   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/event/mixins.py EventMixin.__init__   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/event/mixins.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/icons/mixins.py IconPackMixin.__init__   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/icons/mixins.py IconPackMixin._activate_mixin   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/icons/mixins.py IconPackMixin.icon_packs   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/icons/mixins.py (no function)   100% 12 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/APICallMixin.py APICallMixin.__init__   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/APICallMixin.py APICallMixin.has_api_call   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/plugin/base/integration/APICallMixin.py APICallMixin.api_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/APICallMixin.py APICallMixin.api_headers   43% 7 4 0   25% 4 1   36%
src/backend/InvenTree/plugin/base/integration/APICallMixin.py APICallMixin.api_build_url_args   100% 6 0 0   75% 4 1   90%
src/backend/InvenTree/plugin/base/integration/APICallMixin.py APICallMixin.api_call   71% 21 6 0   50% 16 8   62%
src/backend/InvenTree/plugin/base/integration/APICallMixin.py (no function)   100% 24 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/AppMixin.py AppMixin.__init__   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/AppMixin.py AppMixin._activate_mixin   11% 18 16 0   8% 12 1   10%
src/backend/InvenTree/plugin/base/integration/AppMixin.py AppMixin._deactivate_mixin   23% 22 17 0   12% 8 1   20%
src/backend/InvenTree/plugin/base/integration/AppMixin.py AppMixin._reregister_contrib_apps   0% 15 15 0   0% 10 0   0%
src/backend/InvenTree/plugin/base/integration/AppMixin.py AppMixin._get_plugin_path   0% 9 9 0   0% 4 0   0%
src/backend/InvenTree/plugin/base/integration/AppMixin.py AppMixin.has_app   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/AppMixin.py (no function)   100% 23 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/CurrencyExchangeMixin.py CurrencyExchangeMixin.__init__   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/CurrencyExchangeMixin.py CurrencyExchangeMixin.update_exchange_rates   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/CurrencyExchangeMixin.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/DataExport.py DataExportMixin.__init__   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/DataExport.py DataExportMixin.supports_export   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/DataExport.py DataExportMixin.generate_filename   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/DataExport.py DataExportMixin.update_headers   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/DataExport.py DataExportMixin.filter_queryset   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/DataExport.py DataExportMixin.export_data   0% 12 12 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/integration/DataExport.py DataExportMixin.get_export_options_serializer   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/integration/DataExport.py (no function)   100% 20 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/MachineMixin.py MachineDriverMixin.__init__   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/MachineMixin.py MachineDriverMixin.get_machine_types   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/MachineMixin.py MachineDriverMixin.get_machine_drivers   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/MachineMixin.py (no function)   100% 10 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/NavigationMixin.py NavigationMixin.__init__   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/NavigationMixin.py NavigationMixin.setup_navigation   0% 6 6 0   0% 6 0   0%
src/backend/InvenTree/plugin/base/integration/NavigationMixin.py NavigationMixin.has_navigation   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/NavigationMixin.py NavigationMixin.navigation_name   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/integration/NavigationMixin.py NavigationMixin.navigation_icon   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/NavigationMixin.py (no function)   100% 17 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/NotificationMixin.py NotificationMixin.__init__   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/NotificationMixin.py NotificationMixin.filter_targets   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/NotificationMixin.py NotificationMixin.send_notification   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/NotificationMixin.py (no function)   93% 15 1 0   50% 2 1   88%
src/backend/InvenTree/plugin/base/integration/ReportMixin.py ReportMixin.__init__   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ReportMixin.py ReportMixin.add_report_context   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/ReportMixin.py ReportMixin.add_label_context   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/ReportMixin.py ReportMixin.report_callback   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/ReportMixin.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py ScheduleMixin.__init__   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py ScheduleMixin._activate_mixin   48% 21 11 0   29% 14 4   40%
src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py ScheduleMixin.get_scheduled_tasks   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py ScheduleMixin.has_scheduled_tasks   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py ScheduleMixin.validate_scheduled_tasks   0% 12 12 0   0% 12 0   0%
src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py ScheduleMixin.get_task_name   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py ScheduleMixin.get_task_names   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py ScheduleMixin.register_tasks   0% 30 30 0   0% 12 0   0%
src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py ScheduleMixin.unregister_tasks   0% 11 11 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py (no function)   100% 23 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/SettingsMixin.py SettingsMixin.__init__   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/SettingsMixin.py SettingsMixin._activate_mixin   100% 9 0 0   100% 4 0   100%
src/backend/InvenTree/plugin/base/integration/SettingsMixin.py SettingsMixin._deactivate_mixin   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/SettingsMixin.py SettingsMixin.has_settings   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/SettingsMixin.py SettingsMixin.get_setting   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/SettingsMixin.py SettingsMixin.set_setting   0% 10 10 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/integration/SettingsMixin.py SettingsMixin.get_user_setting   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/SettingsMixin.py SettingsMixin.set_user_setting   0% 10 10 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/integration/SettingsMixin.py SettingsMixin.check_settings   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/SettingsMixin.py SettingsMixin.get_settings_dict   0% 10 10 0   0% 6 0   0%
src/backend/InvenTree/plugin/base/integration/SettingsMixin.py (no function)   93% 28 2 0   50% 2 1   90%
src/backend/InvenTree/plugin/base/integration/TransitionMixin.py TransitionMixin.__init__   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/TransitionMixin.py TransitionMixin.has_transition_handlers   0% 5 5 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/TransitionMixin.py TransitionMixin.get_transition_handlers   0% 10 10 0   0% 6 0   0%
src/backend/InvenTree/plugin/base/integration/TransitionMixin.py (no function)   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/UrlsMixin.py UrlsMixin.__init__   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/UrlsMixin.py UrlsMixin._activate_mixin   12% 8 7 0   12% 8 1   12%
src/backend/InvenTree/plugin/base/integration/UrlsMixin.py UrlsMixin.setup_urls   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/UrlsMixin.py UrlsMixin.base_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/UrlsMixin.py UrlsMixin.internal_name   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/UrlsMixin.py UrlsMixin.urlpatterns   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/UrlsMixin.py UrlsMixin.has_urls   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/UrlsMixin.py (no function)   100% 21 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/ValidationMixin.py ValidationMixin.__init__   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ValidationMixin.py ValidationMixin.raise_error   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ValidationMixin.py ValidationMixin.validate_model_deletion   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ValidationMixin.py ValidationMixin.validate_model_instance   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ValidationMixin.py ValidationMixin.validate_part_name   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ValidationMixin.py ValidationMixin.validate_part_ipn   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ValidationMixin.py ValidationMixin.validate_batch_code   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ValidationMixin.py ValidationMixin.generate_batch_code   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ValidationMixin.py ValidationMixin.validate_serial_number   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ValidationMixin.py ValidationMixin.convert_serial_to_int   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ValidationMixin.py ValidationMixin.get_latest_serial_number   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ValidationMixin.py ValidationMixin.increment_serial_number   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ValidationMixin.py ValidationMixin.validate_parameter   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/integration/ValidationMixin.py (no function)   100% 23 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/integration/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/label/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/label/label.py print_label   0% 17 17 0   0% 6 0   0%
src/backend/InvenTree/plugin/base/label/label.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/label/mixins.py LabelPrintingMixin.__init__   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/label/mixins.py LabelPrintingMixin.render_to_pdf   0% 5 5 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/label/mixins.py LabelPrintingMixin.render_to_html   0% 5 5 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/label/mixins.py LabelPrintingMixin.render_to_png   0% 9 9 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/label/mixins.py LabelPrintingMixin.print_labels   0% 21 21 0   0% 6 0   0%
src/backend/InvenTree/plugin/base/label/mixins.py LabelPrintingMixin.get_generated_file   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/label/mixins.py LabelPrintingMixin.print_label   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/label/mixins.py LabelPrintingMixin.get_printing_options_serializer   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/plugin/base/label/mixins.py LabelPrintingMixin.before_printing   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/label/mixins.py LabelPrintingMixin.after_printing   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/label/mixins.py (no function)   100% 26 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/locate/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/locate/api.py LocatePluginView.post   19% 32 26 0   38% 8 1   22%
src/backend/InvenTree/plugin/base/locate/api.py (no function)   100% 18 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/locate/mixins.py LocateMixin.__init__   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/locate/mixins.py LocateMixin.locate_stock_item   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/locate/mixins.py LocateMixin.locate_stock_location   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/locate/mixins.py (no function)   100% 10 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/mail/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/mail/mail.py process_mail_out   0% 11 11 0   0% 8 0   0%
src/backend/InvenTree/plugin/base/mail/mail.py process_mail_in   0% 17 17 0   0% 8 0   0%
src/backend/InvenTree/plugin/base/mail/mail.py (no function)   0% 9 9 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/mail/mixins.py MailMixin.process_mail_out   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/mail/mixins.py MailMixin.process_mail_in   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/mail/mixins.py MailMixin.__init__   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/mail/mixins.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/supplier/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/supplier/api.py get_supplier_plugin   40% 10 6 0   25% 8 2   33%
src/backend/InvenTree/plugin/base/supplier/api.py ListSupplier.get   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/plugin/base/supplier/api.py SearchPart.get   40% 10 6 0   100% 0 0   40%
src/backend/InvenTree/plugin/base/supplier/api.py ImportPart.post   22% 41 32 0   12% 16 0   19%
src/backend/InvenTree/plugin/base/supplier/api.py (no function)   97% 36 1 0   50% 2 1   95%
src/backend/InvenTree/plugin/base/supplier/helpers.py SearchResult.__post_init__   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/supplier/helpers.py ImportParameter.__post_init__   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/supplier/helpers.py (no function)   100% 22 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/supplier/mixins.py SupplierMixin.__init__   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/supplier/mixins.py SupplierMixin.supplier_company   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/supplier/mixins.py SupplierMixin.get_suppliers   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/supplier/mixins.py SupplierMixin.get_search_results   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/supplier/mixins.py SupplierMixin.get_import_data   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/supplier/mixins.py SupplierMixin.get_pricing_data   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/supplier/mixins.py SupplierMixin.get_parameters   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/supplier/mixins.py SupplierMixin.import_part   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/supplier/mixins.py SupplierMixin.import_manufacturer_part   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/supplier/mixins.py SupplierMixin.import_supplier_part   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/supplier/mixins.py SupplierMixin.download_image   0% 5 5 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/supplier/mixins.py SupplierMixin.get_template_part   0% 15 15 0   0% 10 0   0%
src/backend/InvenTree/plugin/base/supplier/mixins.py SupplierMixin.create_related_parts   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/supplier/mixins.py (no function)   100% 29 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/supplier/serializers.py SearchResultSerializer.get_existing_part_id   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/supplier/serializers.py ImportParameterSerializer.get_parameter_template   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/supplier/serializers.py ImportResultSerializer.get_pricing   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/supplier/serializers.py (no function)   100% 46 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/ui/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/ui/api.py PluginUIFeatureList.get   14% 21 18 0   8% 12 1   12%
src/backend/InvenTree/plugin/base/ui/api.py (no function)   100% 15 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/ui/mixins.py UserInterfaceMixin.__init__   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/ui/mixins.py UserInterfaceMixin.get_ui_features   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/plugin/base/ui/mixins.py UserInterfaceMixin.get_ui_spotlight_actions   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/ui/mixins.py UserInterfaceMixin.get_ui_panels   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/ui/mixins.py UserInterfaceMixin.get_ui_dashboard_items   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/ui/mixins.py UserInterfaceMixin.get_ui_template_editors   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/ui/mixins.py UserInterfaceMixin.get_ui_template_previews   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/ui/mixins.py UserInterfaceMixin.get_ui_navigation_items   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/ui/mixins.py UserInterfaceMixin.get_ui_primary_actions   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/base/ui/mixins.py (no function)   100% 21 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/base/ui/serializers.py (no function)   100% 14 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/broken/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/broken/bad_actor.py BadActorPlugin.__init__   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/broken/bad_actor.py BadActorPlugin.plugin_slug   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/broken/bad_actor.py BadActorPlugin.plugin_name   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/broken/bad_actor.py (no function)   0% 6 6 0   100% 0 0   0%
src/backend/InvenTree/plugin/broken/broken_file.py (no function)   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/plugin/broken/broken_sample.py BrokenIntegrationPlugin.__init__   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/broken/broken_sample.py (no function)   0% 6 6 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/barcodes/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py InvenTreeInternalBarcodePlugin.format_matched_response   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py InvenTreeInternalBarcodePlugin.scan   44% 39 22 0   39% 18 5   42%
src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py InvenTreeInternalBarcodePlugin.generate   67% 6 2 0   50% 2 1   62%
src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py (no function)   100% 19 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/events/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/events/auto_create_builds.py AutoCreateBuildsPlugin.wants_process_event   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/events/auto_create_builds.py AutoCreateBuildsPlugin.process_event   0% 11 11 0   0% 4 0   0%
src/backend/InvenTree/plugin/builtin/events/auto_create_builds.py AutoCreateBuildsPlugin.process_build   0% 11 11 0   0% 4 0   0%
src/backend/InvenTree/plugin/builtin/events/auto_create_builds.py (no function)   100% 18 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/events/auto_issue_orders.py AutoIssueOrdersPlugin.auto_issue_orders   0% 8 8 0   0% 8 0   0%
src/backend/InvenTree/plugin/builtin/events/auto_issue_orders.py AutoIssueOrdersPlugin.issue_func   0% 13 13 0   0% 6 0   0%
src/backend/InvenTree/plugin/builtin/events/auto_issue_orders.py AutoIssueOrdersPlugin.auto_issue_build_orders   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/events/auto_issue_orders.py AutoIssueOrdersPlugin.auto_issue_purchase_orders   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/events/auto_issue_orders.py AutoIssueOrdersPlugin.auto_issue_sales_orders   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/events/auto_issue_orders.py AutoIssueOrdersPlugin.auto_issue_return_orders   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/events/auto_issue_orders.py (no function)   100% 20 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/exporter/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/exporter/bom_exporter.py BomExporterPlugin.supports_export   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/exporter/bom_exporter.py BomExporterPlugin.update_headers   0% 29 29 0   0% 26 0   0%
src/backend/InvenTree/plugin/builtin/exporter/bom_exporter.py BomExporterPlugin.prefetch_queryset   0% 10 10 0   0% 8 0   0%
src/backend/InvenTree/plugin/builtin/exporter/bom_exporter.py BomExporterPlugin.export_data   0% 18 18 0   0% 2 0   0%
src/backend/InvenTree/plugin/builtin/exporter/bom_exporter.py BomExporterPlugin.process_bom_row   0% 22 22 0   0% 16 0   0%
src/backend/InvenTree/plugin/builtin/exporter/bom_exporter.py BomExporterPlugin.get_substitute_data   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/plugin/builtin/exporter/bom_exporter.py BomExporterPlugin.get_supplier_data   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/plugin/builtin/exporter/bom_exporter.py BomExporterPlugin.get_manufacturer_data   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/plugin/builtin/exporter/bom_exporter.py BomExporterPlugin.get_parameter_data   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/plugin/builtin/exporter/bom_exporter.py (no function)   100% 35 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/exporter/inventree_exporter.py InvenTreeExporter.supports_export   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/exporter/inventree_exporter.py (no function)   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/exporter/parameter_exporter.py ParameterExporter.supports_export   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/exporter/parameter_exporter.py ParameterExporter.update_headers   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/plugin/builtin/exporter/parameter_exporter.py ParameterExporter.prefetch_queryset   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/exporter/parameter_exporter.py ParameterExporter.export_data   0% 15 15 0   0% 6 0   0%
src/backend/InvenTree/plugin/builtin/exporter/parameter_exporter.py (no function)   100% 18 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/exporter/stocktake_exporter.py PartStocktakeExporter.supports_export   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/exporter/stocktake_exporter.py PartStocktakeExporter.generate_filename   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/exporter/stocktake_exporter.py PartStocktakeExporter.update_headers   0% 12 12 0   0% 6 0   0%
src/backend/InvenTree/plugin/builtin/exporter/stocktake_exporter.py PartStocktakeExporter.prefetch_queryset   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/exporter/stocktake_exporter.py PartStocktakeExporter.export_data   0% 28 28 0   0% 16 0   0%
src/backend/InvenTree/plugin/builtin/exporter/stocktake_exporter.py (no function)   100% 26 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/integration/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/integration/core_notifications.py InvenTreeUINotifications.send_notification   91% 11 1 0   83% 6 1   88%
src/backend/InvenTree/plugin/builtin/integration/core_notifications.py InvenTreeEmailNotifications.send_notification   59% 17 7 0   33% 12 4   48%
src/backend/InvenTree/plugin/builtin/integration/core_notifications.py InvenTreeSlackNotifications.send_notification   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/plugin/builtin/integration/core_notifications.py (no function)   100% 37 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/integration/currency_exchange.py InvenTreeCurrencyExchange.update_exchange_rates   71% 7 2 0   50% 2 1   67%
src/backend/InvenTree/plugin/builtin/integration/currency_exchange.py InvenTreeCurrencyExchange.api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/integration/currency_exchange.py (no function)   100% 15 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/integration/machine_types.py InvenTreeMachineTypes.get_machine_types   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/integration/machine_types.py InvenTreeMachineTypes.get_machine_drivers   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/integration/machine_types.py (no function)   100% 13 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/integration/part_notifications.py PartNotificationsPlugin.wants_process_event   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/integration/part_notifications.py PartNotificationsPlugin.process_event   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/plugin/builtin/integration/part_notifications.py (no function)   100% 17 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/labels/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/labels/inventree_label.py InvenTreeLabelPlugin.before_printing   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/labels/inventree_label.py InvenTreeLabelPlugin.print_label   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/plugin/builtin/labels/inventree_label.py InvenTreeLabelPlugin.get_generated_file   0% 15 15 0   0% 6 0   0%
src/backend/InvenTree/plugin/builtin/labels/inventree_label.py (no function)   100% 20 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py get_machine_and_driver   0% 10 10 0   0% 6 0   0%
src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py get_last_used_printers   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py InvenTreeLabelPlugin.print_labels   0% 19 19 0   0% 12 0   0%
src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py InvenTreeLabelPlugin.PrintingOptionsSerializer.__init__   0% 15 15 0   0% 6 0   0%
src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py InvenTreeLabelPlugin.PrintingOptionsSerializer.get_printer_name   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py InvenTreeLabelPlugin.PrintingOptionsSerializer.get_driver_options   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py (no function)   100% 27 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/labels/label_sheet.py InvenTreeLabelSheetPlugin.print_labels   0% 37 37 0   0% 12 0   0%
src/backend/InvenTree/plugin/builtin/labels/label_sheet.py InvenTreeLabelSheetPlugin.print_page   0% 22 22 0   0% 8 0   0%
src/backend/InvenTree/plugin/builtin/labels/label_sheet.py InvenTreeLabelSheetPlugin.wrap_pages   0% 16 16 0   0% 4 0   0%
src/backend/InvenTree/plugin/builtin/labels/label_sheet.py (no function)   100% 33 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/suppliers/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/suppliers/digikey.py DigiKeyPlugin.extract_barcode_fields   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/builtin/suppliers/digikey.py (no function)   100% 13 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/suppliers/lcsc.py LCSCPlugin.extract_barcode_fields   0% 9 9 0   0% 6 0   0%
src/backend/InvenTree/plugin/builtin/suppliers/lcsc.py (no function)   100% 16 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/suppliers/mouser.py MouserPlugin.extract_barcode_fields   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/plugin/builtin/suppliers/mouser.py (no function)   100% 13 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/builtin/suppliers/tme.py TMEPlugin.extract_barcode_fields   0% 18 18 0   0% 18 0   0%
src/backend/InvenTree/plugin/builtin/suppliers/tme.py (no function)   100% 17 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/events.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/helpers.py IntegrationPluginError.__init__   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/helpers.py IntegrationPluginError.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/helpers.py log_registry_error   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/plugin/helpers.py handle_error   0% 25 25 0   0% 10 0   0%
src/backend/InvenTree/plugin/helpers.py get_entrypoints   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/plugin/helpers.py get_git_log   77% 22 5 0   50% 6 3   71%
src/backend/InvenTree/plugin/helpers.py get_modules   68% 31 10 0   60% 10 2   66%
src/backend/InvenTree/plugin/helpers.py get_classes   40% 5 3 0   100% 0 0   40%
src/backend/InvenTree/plugin/helpers.py get_plugins   100% 8 0 0   100% 6 0   100%
src/backend/InvenTree/plugin/helpers.py (no function)   100% 26 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/installer.py pip_command   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/installer.py handle_pip_error   0% 11 11 0   0% 6 0   0%
src/backend/InvenTree/plugin/installer.py get_install_info   0% 21 21 0   0% 6 0   0%
src/backend/InvenTree/plugin/installer.py plugins_file_hash   60% 10 4 0   50% 2 1   58%
src/backend/InvenTree/plugin/installer.py install_plugins_file   41% 22 13 0   50% 2 1   42%
src/backend/InvenTree/plugin/installer.py update_plugins_file   0% 40 40 0   0% 20 0   0%
src/backend/InvenTree/plugin/installer.py update_plugins_file.compare_line   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/installer.py install_plugin   7% 43 40 0   8% 26 2   7%
src/backend/InvenTree/plugin/installer.py validate_package_plugin   0% 8 8 0   0% 8 0   0%
src/backend/InvenTree/plugin/installer.py uninstall_plugin   12% 34 30 0   11% 18 2   12%
src/backend/InvenTree/plugin/installer.py (no function)   100% 20 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/machine/__init__.py (no function)   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/machine/machine_types.py (no function)   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/migrations/0001_initial.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/migrations/0002_alter_pluginconfig_options.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/migrations/0003_pluginsetting.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/migrations/0004_alter_pluginsetting_key.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/migrations/0005_notificationusersetting.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/migrations/0006_pluginconfig_metadata.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/migrations/0007_auto_20230805_1748.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/migrations/0008_pluginconfig_package_name.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/migrations/0009_alter_pluginconfig_key.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/migrations/0010_pluginusersetting.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/migrations/0011_delete_notificationusersetting.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/migrations/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/mixins/__init__.py (no function)   100% 24 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/mock/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/mock/simple.py (no function)   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/plugin/models.py PluginConfig.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/models.py PluginConfig.__str__   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/plugin/models.py PluginConfig.mixins   67% 6 2 0   100% 2 0   75%
src/backend/InvenTree/plugin/models.py PluginConfig.__init__   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/models.py PluginConfig.__init__.get_plugin_meta   100% 8 0 0   100% 6 0   100%
src/backend/InvenTree/plugin/models.py PluginConfig.__getstate__   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/models.py PluginConfig.save   70% 10 3 0   50% 6 1   62%
src/backend/InvenTree/plugin/models.py PluginConfig.is_installed   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/models.py PluginConfig.is_sample   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/plugin/models.py PluginConfig.is_builtin   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/plugin/models.py PluginConfig.is_mandatory   50% 4 2 0   25% 4 1   38%
src/backend/InvenTree/plugin/models.py PluginConfig.is_active   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/models.py PluginConfig.is_package   67% 6 2 0   50% 4 2   60%
src/backend/InvenTree/plugin/models.py PluginConfig.admin_source   50% 10 5 0   50% 6 3   50%
src/backend/InvenTree/plugin/models.py PluginConfig.admin_context   50% 10 5 0   50% 6 3   50%
src/backend/InvenTree/plugin/models.py PluginConfig.activate   30% 10 7 0   25% 4 1   29%
src/backend/InvenTree/plugin/models.py PluginSetting.to_native_value   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/models.py PluginSetting.save   83% 6 1 0   50% 4 2   70%
src/backend/InvenTree/plugin/models.py PluginSetting.get_setting_default   86% 7 1 0   50% 4 2   73%
src/backend/InvenTree/plugin/models.py PluginSetting.get_setting   86% 7 1 0   50% 4 2   73%
src/backend/InvenTree/plugin/models.py PluginSetting.get_setting_definition   100% 7 0 0   50% 6 3   77%
src/backend/InvenTree/plugin/models.py PluginUserSetting.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/models.py PluginUserSetting.get_setting_definition   0% 7 7 0   0% 6 0   0%
src/backend/InvenTree/plugin/models.py (no function)   100% 70 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py is_method_like   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py mark_final   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/plugin/plugin.py get_final_methods   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py MetaBase.get_meta_value   75% 8 2 0   67% 6 2   71%
src/backend/InvenTree/plugin/plugin.py MetaBase.plugin_name   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py MetaBase.name   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py MetaBase.plugin_slug   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/plugin/plugin.py MetaBase.slug   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py MetaBase.plugin_title   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/plugin/plugin.py MetaBase.human_name   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py MetaBase.plugin_config   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py MetaBase.is_active   33% 6 4 0   25% 4 1   30%
src/backend/InvenTree/plugin/plugin.py MixinBase.__init__   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py MixinBase.mixin   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py MixinBase.mixin_enabled   90% 10 1 0   83% 6 1   88%
src/backend/InvenTree/plugin/plugin.py MixinBase.add_mixin   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py MixinBase.setup_mixin   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py MixinBase.get_registered_mixins   100% 9 0 0   100% 6 0   100%
src/backend/InvenTree/plugin/plugin.py MixinBase.registered_mixins   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/plugin.py VersionMixin.check_version   0% 5 5 0   100% 0 0   0%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.__init__   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.__init_subclass__   83% 6 1 0   75% 4 1   80%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.file   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.path   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin._get_value   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.description   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.author   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.pub_date   80% 5 1 0   50% 2 1   71%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.version   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.website   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.license   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.check_is_package   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin._is_package   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.check_is_sample   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.is_sample   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.check_is_builtin   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.is_builtin   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.is_mandatory   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.check_package_path   50% 6 3 0   50% 2 1   50%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.package_path   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.check_package_install_name   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.package_install_name   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.settings_url   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin._get_package_commit   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.is_editable   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin._get_package_metadata   0% 12 12 0   100% 0 0   0%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.define_package   62% 8 3 0   50% 2 1   60%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.get_static_path   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.hashed_file_lookup   0% 16 16 0   0% 6 0   0%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.plugin_static_file   0% 23 23 0   0% 12 0   0%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.get_admin_source   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/plugin/plugin.py InvenTreePlugin.get_admin_context   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/plugin.py (no function)   100% 175 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/registry.py registry_entrypoint   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/registry.py registry_entrypoint.decorator   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/registry.py registry_entrypoint.decorator.wrapper   67% 6 2 0   75% 4 1   70%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.__init__   100% 12 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.set_ready   77% 13 3 0   50% 10 5   65%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.is_ready   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.is_loading   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.get_plugin   69% 13 4 0   62% 8 3   67%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.get_plugin_config   68% 19 6 0   100% 4 0   74%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.set_plugin_state   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.call_plugin_function   0% 12 12 0   0% 8 0   0%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.with_mixin   71% 28 8 0   75% 12 3   72%
src/backend/InvenTree/plugin/registry.py PluginsRegistry._load_plugins   85% 13 2 0   50% 2 1   80%
src/backend/InvenTree/plugin/registry.py PluginsRegistry._unload_plugins   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.reload_plugins   65% 37 13 0   75% 16 4   68%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.plugin_dirs   9% 35 32 0   5% 20 1   7%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.collect_plugins   48% 31 16 0   44% 16 3   47%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.discover_mixins   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.install_plugin_file   100% 5 0 0   50% 2 1   86%
src/backend/InvenTree/plugin/registry.py PluginsRegistry._init_plugin   56% 72 32 0   54% 26 8   55%
src/backend/InvenTree/plugin/registry.py PluginsRegistry._init_plugin.safe_reference   71% 7 2 0   75% 4 1   73%
src/backend/InvenTree/plugin/registry.py PluginsRegistry._init_plugins   73% 15 4 0   50% 6 1   67%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.__get_mixin_order   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/registry.py PluginsRegistry._activate_plugins   100% 7 0 0   100% 4 0   100%
src/backend/InvenTree/plugin/registry.py PluginsRegistry._deactivate_plugins   100% 4 0 0   100% 4 0   100%
src/backend/InvenTree/plugin/registry.py PluginsRegistry._try_reload   60% 5 2 0   100% 0 0   60%
src/backend/InvenTree/plugin/registry.py PluginsRegistry._reload_apps   89% 9 1 0   75% 4 1   85%
src/backend/InvenTree/plugin/registry.py PluginsRegistry._clean_installed_apps   50% 4 2 0   25% 4 1   38%
src/backend/InvenTree/plugin/registry.py PluginsRegistry._clean_registry   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/registry.py PluginsRegistry._update_urls   90% 10 1 0   83% 6 1   88%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.update_plugin_hash   54% 13 6 0   100% 2 0   60%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.plugin_settings_keys   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.calculate_plugin_hash   87% 15 2 0   100% 4 0   89%
src/backend/InvenTree/plugin/registry.py PluginsRegistry.check_reload   60% 20 8 0   70% 10 3   63%
src/backend/InvenTree/plugin/registry.py call_plugin_function   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/registry.py _load_source   0% 11 11 0   0% 6 0   0%
src/backend/InvenTree/plugin/registry.py (no function)   100% 76 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/samples/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/samples/event/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/samples/event/event_sample.py EventPluginSample.process_event   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/plugin/samples/event/event_sample.py (no function)   0% 10 10 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/event/filtered_event_sample.py FilteredEventPluginSample.wants_process_event   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/event/filtered_event_sample.py FilteredEventPluginSample.process_event   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/plugin/samples/event/filtered_event_sample.py (no function)   0% 11 11 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/icons/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/samples/icons/icon_sample.py SampleIconPlugin.icon_packs   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/icons/icon_sample.py (no function)   0% 10 10 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/samples/integration/another_sample.py (no function)   0% 6 6 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/api_caller.py SampleApiCallerPlugin.get_external_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/api_caller.py (no function)   0% 9 9 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/label_sample.py SampleLabelPrinter.print_label   0% 7 7 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/label_sample.py (no function)   0% 14 14 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py SampleReportPlugin.some_custom_function   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py SampleReportPlugin.add_report_context   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py (no function)   0% 11 11 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/sample.py validate_json   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/sample.py SampleIntegrationPlugin.view_test   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/sample.py SampleIntegrationPlugin.setup_urls   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/sample.py (no function)   0% 19 19 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/sample_currency_exchange.py SampleCurrencyExchangePlugin.update_exchange_rates   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/plugin/samples/integration/sample_currency_exchange.py (no function)   0% 11 11 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/scheduled_task.py print_hello   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/scheduled_task.py print_world   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/scheduled_task.py ScheduledTaskPlugin.member_func   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/scheduled_task.py (no function)   0% 12 12 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/simpleactionplugin.py SimpleActionPlugin.perform_action   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/simpleactionplugin.py SimpleActionPlugin.get_info   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/simpleactionplugin.py SimpleActionPlugin.get_result   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/simpleactionplugin.py (no function)   0% 9 9 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/transition.py SampleTransitionPlugin.ReturnChangeHandler.transition   0% 8 8 0   0% 4 0   0%
src/backend/InvenTree/plugin/samples/integration/transition.py BrokenTransitionPlugin.has_transition_handlers   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/transition.py BrokenTransitionPlugin.get_transition_handlers   0% 8 8 0   0% 6 0   0%
src/backend/InvenTree/plugin/samples/integration/transition.py (no function)   0% 21 21 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/user_interface_sample.py SampleUserInterfacePlugin.get_ui_spotlight_actions   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/user_interface_sample.py SampleUserInterfacePlugin.get_ui_panels   0% 20 20 0   0% 12 0   0%
src/backend/InvenTree/plugin/samples/integration/user_interface_sample.py SampleUserInterfacePlugin.get_ui_dashboard_items   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/plugin/samples/integration/user_interface_sample.py SampleUserInterfacePlugin.get_ui_template_editors   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/plugin/samples/integration/user_interface_sample.py SampleUserInterfacePlugin.get_ui_template_previews   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/user_interface_sample.py SampleUserInterfacePlugin.get_ui_navigation_items   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/user_interface_sample.py SampleUserInterfacePlugin.get_ui_primary_actions   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/user_interface_sample.py SampleUserInterfacePlugin.get_admin_context   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/user_interface_sample.py (no function)   0% 23 23 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/validation_sample.py SampleValidatorPlugin.validate_model_instance   0% 12 12 0   0% 12 0   0%
src/backend/InvenTree/plugin/samples/integration/validation_sample.py SampleValidatorPlugin.validate_part_name   0% 6 6 0   0% 6 0   0%
src/backend/InvenTree/plugin/samples/integration/validation_sample.py SampleValidatorPlugin.validate_part_ipn   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/plugin/samples/integration/validation_sample.py SampleValidatorPlugin.validate_parameter   0% 4 4 0   0% 4 0   0%
src/backend/InvenTree/plugin/samples/integration/validation_sample.py SampleValidatorPlugin.validate_serial_number   0% 12 12 0   0% 10 0   0%
src/backend/InvenTree/plugin/samples/integration/validation_sample.py SampleValidatorPlugin.increment_serial_number   0% 9 9 0   0% 2 0   0%
src/backend/InvenTree/plugin/samples/integration/validation_sample.py SampleValidatorPlugin.validate_batch_code   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/plugin/samples/integration/validation_sample.py SampleValidatorPlugin.generate_batch_code   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/plugin/samples/integration/validation_sample.py (no function)   0% 18 18 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/integration/version.py (no function)   0% 7 7 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/locate/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/samples/locate/locate_sample.py SampleLocatePlugin.locate_stock_item   0% 8 8 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/locate/locate_sample.py SampleLocatePlugin.locate_stock_location   0% 8 8 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/locate/locate_sample.py (no function)   0% 11 11 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/machines/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/samples/machines/sample_printer.py SamplePrinterDriver.init_machine   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/machines/sample_printer.py SamplePrinterDriver.print_label   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/plugin/samples/machines/sample_printer.py SamplePrinterMachine.get_machine_drivers   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/machines/sample_printer.py (no function)   0% 23 23 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/mail/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/samples/mail/mail_sample.py MailPluginSample.process_mail_out   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/plugin/samples/mail/mail_sample.py MailPluginSample.process_mail_in   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/plugin/samples/mail/mail_sample.py (no function)   0% 11 11 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/supplier/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py SampleSupplierPlugin.__init__   0% 6 6 0   0% 6 0   0%
src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py SampleSupplierPlugin.get_suppliers   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py SampleSupplierPlugin.get_search_results   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py SampleSupplierPlugin.get_import_data   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py SampleSupplierPlugin.get_pricing_data   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py SampleSupplierPlugin.get_parameters   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py SampleSupplierPlugin.import_part   0% 13 13 0   0% 6 0   0%
src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py SampleSupplierPlugin.import_manufacturer_part   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py SampleSupplierPlugin.import_supplier_part   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py (no function)   0% 20 20 0   100% 0 0   0%
src/backend/InvenTree/plugin/serializers.py MetadataSerializer.__init__   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/serializers.py MetadataSerializer.update   40% 5 3 0   50% 2 1   43%
src/backend/InvenTree/plugin/serializers.py PluginConfigInstallSerializer.validate   100% 7 0 0   100% 4 0   100%
src/backend/InvenTree/plugin/serializers.py PluginConfigInstallSerializer.save   89% 9 1 0   50% 2 1   82%
src/backend/InvenTree/plugin/serializers.py PluginReloadSerializer.save   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/serializers.py PluginActivateSerializer.update   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/plugin/serializers.py PluginUninstallSerializer.update   80% 5 1 0   50% 2 1   71%
src/backend/InvenTree/plugin/serializers.py PluginSettingSerializer.get_read_only   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/serializers.py PluginRelationSerializer.__init__   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/serializers.py PluginRelationSerializer.use_pk_only_optimization   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/serializers.py PluginRelationSerializer.to_internal_value   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/serializers.py PluginRelationSerializer.to_representation   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/serializers.py (no function)   100% 83 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/staticfiles.py clear_static_dir   0% 11 11 0   0% 8 0   0%
src/backend/InvenTree/plugin/staticfiles.py collect_plugins_static_files   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/plugin/staticfiles.py clear_plugins_static_files   0% 8 8 0   0% 6 0   0%
src/backend/InvenTree/plugin/staticfiles.py copy_plugin_static_files   0% 29 29 0   0% 14 0   0%
src/backend/InvenTree/plugin/staticfiles.py clear_plugin_static_files   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/staticfiles.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/template.py PluginTemplateLoader.get_dirs   86% 7 1 0   75% 4 1   82%
src/backend/InvenTree/plugin/template.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/templatetags/plugin_extras.py plugin_list   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/templatetags/plugin_extras.py inactive_plugin_list   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/templatetags/plugin_extras.py plugin_settings   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/templatetags/plugin_extras.py mixin_enabled   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/templatetags/plugin_extras.py mixin_available   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/templatetags/plugin_extras.py safe_url   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/plugin/templatetags/plugin_extras.py (no function)   100% 16 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/testing/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/testing/label_machines.py TestingLabelPrinterDriver.restart_machine   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/testing/label_machines.py TestingLabelPrinterDriver.print_label   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/plugin/testing/label_machines.py TestingLabelPrinterDriver.custom_func   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/testing/label_machines.py TestingLabelPrinterDriverError1.print_label   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/testing/label_machines.py TestingLabelPrinterDriverError2.print_label   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/plugin/testing/label_machines.py LabelPrinterMachineTest.get_machine_drivers   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/plugin/testing/label_machines.py (no function)   0% 35 35 0   100% 0 0   0%
src/backend/InvenTree/plugin/urls.py get_plugin_urls   0% 18 18 0   0% 10 0   0%
src/backend/InvenTree/plugin/urls.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/plugins/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/report/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/report/admin.py ReportAdmin.formfield_for_dbfield   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/report/admin.py (no function)   100% 15 0 0   100% 0 0   100%
src/backend/InvenTree/report/api.py ReportFilterBase.filter_items   31% 13 9 0   17% 6 1   26%
src/backend/InvenTree/report/api.py LabelPrint.get_plugin_class   86% 14 2 0   80% 10 2   83%
src/backend/InvenTree/report/api.py LabelPrint.get_plugin_serializer   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/report/api.py LabelPrint.get_serializer   90% 10 1 0   67% 6 2   81%
src/backend/InvenTree/report/api.py LabelPrint.post   11% 18 16 0   0% 8 0   8%
src/backend/InvenTree/report/api.py LabelPrint.print   0% 10 10 0   0% 2 0   0%
src/backend/InvenTree/report/api.py ReportPrint.post   17% 12 10 0   0% 4 0   12%
src/backend/InvenTree/report/api.py ReportPrint.print   0% 8 8 0   100% 0 0   0%
src/backend/InvenTree/report/api.py (no function)   100% 84 0 0   100% 0 0   100%
src/backend/InvenTree/report/apps.py ReportConfig.ready   71% 21 6 0   83% 12 2   76%
src/backend/InvenTree/report/apps.py ReportConfig.cleanup   80% 5 1 0   100% 0 0   80%
src/backend/InvenTree/report/apps.py ReportConfig.file_from_template   80% 5 1 0   50% 2 1   71%
src/backend/InvenTree/report/apps.py ReportConfig.create_default_labels   52% 21 10 0   50% 6 1   52%
src/backend/InvenTree/report/apps.py ReportConfig.create_default_reports   50% 20 10 0   50% 6 1   50%
src/backend/InvenTree/report/apps.py (no function)   100% 21 0 0   100% 0 0   100%
src/backend/InvenTree/report/fetcher.py InvenTreeURLFetcher.__init__   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/report/fetcher.py InvenTreeURLFetcher.fetch   0% 9 9 0   0% 4 0   0%
src/backend/InvenTree/report/fetcher.py InvenTreeURLFetcher._validate_http_url   0% 12 12 0   0% 4 0   0%
src/backend/InvenTree/report/fetcher.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/report/helpers.py report_model_types   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/report/helpers.py report_model_from_name   100% 5 0 0   83% 6 1   91%
src/backend/InvenTree/report/helpers.py report_model_options   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/report/helpers.py report_page_size_options   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/report/helpers.py page_sizes   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/report/helpers.py page_size   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/report/helpers.py report_page_size_default   50% 6 3 0   100% 0 0   50%
src/backend/InvenTree/report/helpers.py encode_image_base64   0% 5 5 0   100% 0 0   0%
src/backend/InvenTree/report/helpers.py (no function)   100% 14 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0001_initial.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0002_delete_reporttemplate.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0003_testreport_enabled.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0004_auto_20200823_1104.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0005_auto_20210119_0815.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0006_reportsnippet.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0007_auto_20210204_1617.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0008_auto_20210204_2100.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0009_testreport_revision.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0010_auto_20210205_1201.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0011_auto_20210212_2024.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0012_buildreport.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0013_testreport_include_installed.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0014_purchaseorderreport_salesorderreport.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0015_auto_20210403_1837.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0016_auto_20210513_1303.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0017_auto_20230317_0816.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0018_returnorderreport.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0019_returnorderreport_metadata.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0020_stocklocationreport.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0021_auto_20231009_0144.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0022_reporttemplate.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0023_auto_20240421_0455.py report_model_map   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0023_auto_20240421_0455.py forward   27% 22 16 0   33% 12 2   29%
src/backend/InvenTree/report/migrations/0023_auto_20240421_0455.py reverse   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/report/migrations/0023_auto_20240421_0455.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0024_delete_billofmaterialsreport_delete_buildreport_and_more.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0025_labeltemplate.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0026_auto_20240422_1301.py label_model_map   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0026_auto_20240422_1301.py convert_legacy_labels   30% 33 23 0   0% 12 0   22%
src/backend/InvenTree/report/migrations/0026_auto_20240422_1301.py forward   86% 7 1 0   75% 4 1   82%
src/backend/InvenTree/report/migrations/0026_auto_20240422_1301.py reverse   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/report/migrations/0026_auto_20240422_1301.py (no function)   100% 13 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0027_alter_labeltemplate_model_type_and_more.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0028_labeltemplate_attach_to_model_and_more.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0029_remove_reportoutput_template_and_more.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0030_alter_labeltemplate_model_type_and_more.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0031_reporttemplate_merge.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/0032_labeltemplate_updated_labeltemplate_updated_by_and_more.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/report/migrations/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/report/mixins.py InvenTreeReportMixin.report_context   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/report/mixins.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/report/models.py log_report_error   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/report/models.py rename_template   67% 6 2 0   50% 2 1   62%
src/backend/InvenTree/report/models.py TemplateUploadMixin.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/report/models.py TemplateUploadMixin.template_name   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/report/models.py TemplateUploadMixin.extension   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/report/models.py TemplateUploadMixin.get_upload_path   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/report/models.py TemplateUploadMixin.check_existing_file   80% 5 1 0   50% 2 1   71%
src/backend/InvenTree/report/models.py TemplateUploadMixin.validate_unique   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/report/models.py ReportTemplateBase.save   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/report/models.py ReportTemplateBase.generate_filename   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/report/models.py ReportTemplateBase.render_as_string   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/report/models.py ReportTemplateBase.render   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/report/models.py ReportTemplateBase.clean   80% 5 1 0   50% 2 1   71%
src/backend/InvenTree/report/models.py ReportTemplateBase.get_model   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/report/models.py ReportTemplateBase.get_filters   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/report/models.py ReportTemplateBase.base_context   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/report/models.py ReportTemplateBase.get_context   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/report/models.py ReportTemplate.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/report/models.py ReportTemplate.__init__   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/report/models.py ReportTemplate.get_report_size   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/report/models.py ReportTemplate.get_report_context   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/report/models.py ReportTemplate.get_context   0% 5 5 0   100% 0 0   0%
src/backend/InvenTree/report/models.py ReportTemplate.get_plugin_context   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/report/models.py ReportTemplate.handle_attachment   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/report/models.py ReportTemplate.notify_plugins   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/report/models.py ReportTemplate.print   0% 107 107 0   0% 30 0   0%
src/backend/InvenTree/report/models.py LabelTemplate.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/report/models.py LabelTemplate.generate_page_style   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/report/models.py LabelTemplate.get_context   0% 13 13 0   0% 4 0   0%
src/backend/InvenTree/report/models.py LabelTemplate.print   0% 21 21 0   0% 8 0   0%
src/backend/InvenTree/report/models.py (no function)   96% 117 5 0   100% 0 0   96%
src/backend/InvenTree/report/serializers.py ReportSerializerBase.__init__   100% 3 0 0   50% 2 1   80%
src/backend/InvenTree/report/serializers.py ReportSerializerBase.save   86% 7 1 0   50% 2 1   78%
src/backend/InvenTree/report/serializers.py ReportSerializerBase.base_fields   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/report/serializers.py LabelPrintSerializer.__init__   50% 6 3 0   25% 4 1   40%
src/backend/InvenTree/report/serializers.py (no function)   100% 48 0 0   100% 0 0   100%
src/backend/InvenTree/report/tasks.py print_reports   0% 20 20 0   0% 4 0   0%
src/backend/InvenTree/report/tasks.py print_labels   0% 26 26 0   0% 6 0   0%
src/backend/InvenTree/report/tasks.py (no function)   100% 10 0 0   100% 0 0   100%
src/backend/InvenTree/report/templatetags/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/report/templatetags/barcode.py image_data   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/report/templatetags/barcode.py clean_barcode   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/report/templatetags/barcode.py qrcode   0% 12 12 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/barcode.py barcode   0% 10 10 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/barcode.py datamatrix   0% 32 32 0   0% 10 0   0%
src/backend/InvenTree/report/templatetags/barcode.py (no function)   100% 19 0 0   100% 0 0   100%
src/backend/InvenTree/report/templatetags/report.py get_locale   0% 5 5 0   100% 0 0   0%
src/backend/InvenTree/report/templatetags/report.py order_queryset   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py filter_queryset   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py filter_db_model   0% 12 12 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py getindex   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py getkey   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py media_file_exists   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py static_file_exists   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py get_static_file_contents   0% 11 11 0   0% 8 0   0%
src/backend/InvenTree/report/templatetags/report.py get_media_file_contents   0% 11 11 0   0% 8 0   0%
src/backend/InvenTree/report/templatetags/report.py asset   0% 22 22 0   0% 16 0   0%
src/backend/InvenTree/report/templatetags/report.py uploaded_image   0% 50 50 0   0% 26 0   0%
src/backend/InvenTree/report/templatetags/report.py encode_svg_image   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/report/templatetags/report.py part_image   0% 7 7 0   0% 6 0   0%
src/backend/InvenTree/report/templatetags/report.py parameter   0% 10 10 0   0% 8 0   0%
src/backend/InvenTree/report/templatetags/report.py parameter_value   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py part_parameter   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/report/templatetags/report.py company_image   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py logo_image   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/report/templatetags/report.py internal_link   0% 9 9 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py make_decimal   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py cast_to_type   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py debug_vars   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/report/templatetags/report.py check_nulls   0% 2 2 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py add   0% 6 6 0   100% 0 0   0%
src/backend/InvenTree/report/templatetags/report.py subtract   0% 6 6 0   100% 0 0   0%
src/backend/InvenTree/report/templatetags/report.py multiply   0% 6 6 0   100% 0 0   0%
src/backend/InvenTree/report/templatetags/report.py divide   0% 8 8 0   100% 0 0   0%
src/backend/InvenTree/report/templatetags/report.py modulo   0% 8 8 0   100% 0 0   0%
src/backend/InvenTree/report/templatetags/report.py render_currency   0% 36 36 0   0% 18 0   0%
src/backend/InvenTree/report/templatetags/report.py create_currency   0% 10 10 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py convert_currency   0% 12 12 0   0% 4 0   0%
src/backend/InvenTree/report/templatetags/report.py render_html_text   0% 11 11 0   0% 6 0   0%
src/backend/InvenTree/report/templatetags/report.py format_number   0% 37 37 0   0% 18 0   0%
src/backend/InvenTree/report/templatetags/report.py format_datetime   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py format_date   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py icon   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py include_icon_fonts   0% 11 11 0   0% 8 0   0%
src/backend/InvenTree/report/templatetags/report.py lowercase   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py uppercase   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py titlecase   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py strip   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py lstrip   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py rstrip   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py split   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py join   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py length   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py replace   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py first   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py last   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py reverse   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py truncate   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/report/templatetags/report.py (no function)   100% 136 0 0   100% 0 0   100%
src/backend/InvenTree/report/validators.py validate_report_model_type   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/report/validators.py validate_filters   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/report/validators.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/stock/admin.py LocationTypeAdmin.get_queryset   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/admin.py LocationTypeAdmin.location_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/admin.py StockTrackingAdmin.has_add_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/admin.py StockTrackingAdmin.has_change_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/admin.py StockTrackingAdmin.has_delete_permission   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/admin.py (no function)   100% 33 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py GenerateBatchCode.post   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py GenerateSerialNumber.post   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py StockItemContextMixin.get_serializer_context   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py StockItemSerialize.create   33% 6 4 0   100% 0 0   33%
src/backend/InvenTree/stock/api.py StockAdjustView.get_serializer_context   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py StockAssign.get_serializer_context   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py StockMerge.get_serializer_context   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py StockLocationFilter.filter_has_location_type   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/stock/api.py StockLocationFilter.filter_depth   100% 4 0 0   50% 2 1   83%
src/backend/InvenTree/stock/api.py StockLocationFilter.filter_top_level   100% 4 0 0   100% 2 0   100%
src/backend/InvenTree/stock/api.py StockLocationFilter.filter_cascade   100% 5 0 0   100% 2 0   100%
src/backend/InvenTree/stock/api.py StockLocationFilter.filter_parent   0% 10 10 0   0% 4 0   0%
src/backend/InvenTree/stock/api.py StockLocationMixin.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py StockLocationDetail.destroy   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py LocationTreeFilter.filter_max_level   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py StockLocationTree.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py StockLocationTypeList.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py StockLocationTypeDetail.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py StockFilter.filter_manufacturer   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_include_variants   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_part   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_status   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_allocated   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_expired   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_external   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_in_stock   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/stock/api.py StockFilter.filter_available   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_serialized   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_has_batch   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_tracked   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_consumed   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_installed   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_has_installed   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_has_child_items   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_sent_to_customer   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_depleted   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_has_purchase_price   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_ancestor   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_category   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_bom_item   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_part_tree   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_company   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_has_stocktake   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_stale   0% 8 8 0   0% 4 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_exclude_tree   0% 6 6 0   100% 0 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_cascade   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/api.py StockFilter.filter_location   0% 13 13 0   0% 6 0   0%
src/backend/InvenTree/stock/api.py StockApiMixin.get_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py StockApiMixin.get_serializer_context   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py StockList.create   12% 85 75 0   6% 36 0   10%
src/backend/InvenTree/stock/api.py StockItemTestResultMixin.get_serializer_context   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py StockItemTestResultFilter.filter_test_name   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py StockItemTestResultFilter.filter_include_installed   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py StockItemTestResultFilter.filter_stock_item   50% 10 5 0   0% 2 0   42%
src/backend/InvenTree/stock/api.py StockItemTestResultList.perform_create   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/api.py StockTrackingFilter.filter_include_variants   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py StockTrackingFilter.filter_part   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/stock/api.py StockTrackingList.get_delta_model_map   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/stock/api.py StockTrackingList.list   71% 24 7 0   50% 16 2   62%
src/backend/InvenTree/stock/api.py (no function)   100% 315 0 0   100% 0 0   100%
src/backend/InvenTree/stock/apps.py (no function)   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/stock/events.py (no function)   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/stock/filters.py annotate_location_items   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/stock/filters.py annotate_sub_locations   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/stock/filters.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/stock/generators.py generate_batch_code   26% 23 17 0   12% 8 1   23%
src/backend/InvenTree/stock/generators.py generate_serial_number   17% 18 15 0   12% 8 1   15%
src/backend/InvenTree/stock/generators.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0001_initial.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0002_auto_20190525_2226.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0003_auto_20190525_2303.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0004_auto_20190525_2356.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0005_auto_20190602_1944.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0006_stockitem_purchase_order.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0007_auto_20190618_0042.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0008_stockitemtracking_url.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0009_auto_20190715_2351.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0010_stockitem_build.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0011_auto_20190908_0404.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0012_auto_20190908_0405.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0013_auto_20190908_0916.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0014_auto_20190908_0918.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0015_auto_20190913_1407.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0016_auto_20191118_2146.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0017_auto_20191118_2311.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0018_auto_20200202_0103.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0019_auto_20200202_1024.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0020_auto_20200206_1213.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0021_auto_20200215_2232.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0022_auto_20200217_1109.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0023_auto_20200318_1027.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0024_auto_20200405_2239.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0025_auto_20200405_2243.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0026_stockitem_uid.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0027_stockitem_sales_order.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0028_auto_20200421_0724.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0029_auto_20200421_2359.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0030_auto_20200422_0015.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0031_auto_20200422_0209.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0032_stockitem_build_order.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0033_auto_20200426_0539.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0034_auto_20200426_0602.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0035_auto_20200502_2308.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0036_stockitemattachment.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0037_stockitemattachment_user.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0038_stockitemattachment_upload_date.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0039_auto_20200513_0016.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0040_stockitemtestresult.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0041_stockitemtestresult_notes.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0042_auto_20200523_0121.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0043_auto_20200525_0420.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0044_auto_20200528_1036.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0045_stockitem_customer.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0046_auto_20200605_0931.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0047_auto_20200605_0932.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0048_auto_20200807_2344.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0049_auto_20200820_0454.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0050_auto_20200821_1403.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0051_auto_20200928_0928.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0052_stockitem_is_building.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0053_auto_20201110_0513.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0054_remove_stockitem_build_order.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0055_auto_20201117_1453.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0056_stockitem_expiry_date.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0057_stock_location_item_owner.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0058_stockitem_packaging.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0059_auto_20210404_2016.py (no function)   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0060_auto_20210511_1713.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0061_auto_20210511_0911.py update_history   7% 108 100 0   5% 66 3   6%
src/backend/InvenTree/stock/migrations/0061_auto_20210511_0911.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0062_auto_20210511_2151.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0063_auto_20210511_2343.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0064_auto_20210621_1724.py extract_purchase_price   39% 23 14 0   25% 12 3   34%
src/backend/InvenTree/stock/migrations/0064_auto_20210621_1724.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0065_auto_20210701_0509.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0066_stockitem_scheduled_for_deletion.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0067_alter_stockitem_part.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0068_stockitem_serial_int.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0069_auto_20211109_2347.py update_serials   13% 15 13 0   12% 8 1   13%
src/backend/InvenTree/stock/migrations/0069_auto_20211109_2347.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0070_auto_20211128_0151.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0071_auto_20211205_1733.py delete_scheduled   50% 10 5 0   25% 4 1   43%
src/backend/InvenTree/stock/migrations/0071_auto_20211205_1733.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0072_remove_stockitem_scheduled_for_deletion.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0073_alter_stockitem_belongs_to.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0074_alter_stockitem_batch.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0075_auto_20220515_1440.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0076_alter_stockitem_status.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0077_alter_stockitem_notes.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0078_alter_stockitem_supplier_part.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0079_alter_stocklocation_name.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0080_stocklocation_pathstring.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0081_auto_20220801_0044.py update_pathstring   23% 13 10 0   17% 6 1   21%
src/backend/InvenTree/stock/migrations/0081_auto_20220801_0044.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0082_alter_stockitem_link.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0083_stocklocation_icon.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0084_auto_20220903_0154.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0085_auto_20220903_0225.py uid_to_barcode   57% 7 3 0   50% 4 2   55%
src/backend/InvenTree/stock/migrations/0085_auto_20220903_0225.py barcode_to_uid   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/stock/migrations/0085_auto_20220903_0225.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0086_remove_stockitem_uid.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0087_auto_20220912_2341.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0088_remove_stockitem_infinite.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0089_alter_stockitem_purchase_price.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0090_stocklocation_structural.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0091_alter_stockitem_delete_on_deplete.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0092_alter_stockitem_updated.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0093_auto_20230217_2140.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0094_auto_20230220_0025.py fix_purchase_price   41% 17 10 0   20% 10 2   33%
src/backend/InvenTree/stock/migrations/0094_auto_20230220_0025.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0095_stocklocation_external.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0096_auto_20230330_1121.py update_stock_history   41% 17 10 0   25% 8 2   36%
src/backend/InvenTree/stock/migrations/0096_auto_20230330_1121.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0097_alter_stockitem_notes.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0098_auto_20230427_2033.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0099_alter_stockitem_status.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0100_auto_20230515_0004.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0100_stockitem_consumed_by.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0101_stockitemtestresult_metadata.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0102_alter_stockitem_status.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0103_stock_location_types.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0104_alter_stockitem_purchase_price_currency.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0105_stockitemtestresult_template.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0106_auto_20240207_0353.py set_template   22% 45 35 0   6% 16 1   18%
src/backend/InvenTree/stock/migrations/0106_auto_20240207_0353.py remove_template   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/stock/migrations/0106_auto_20240207_0353.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0107_remove_stockitemtestresult_test_and_more.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0108_auto_20240219_0252.py update_templates   18% 34 28 0   7% 14 1   15%
src/backend/InvenTree/stock/migrations/0108_auto_20240219_0252.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0109_add_additional_test_fields.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0110_alter_stockitemtestresult_finished_datetime_and_more.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0111_delete_stockitemattachment.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0112_alter_stocklocation_custom_icon_and_more.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0113_stockitem_status_custom_key_and_more.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0114_alter_stocklocation_custom_icon.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0115_auto_20250221_1323.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0116_alter_stockitem_link.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0117_stockitemtracking_part_alter_stockitemtracking_item.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0118_auto_20260205_1218.py add_part_links   27% 22 16 0   21% 14 3   25%
src/backend/InvenTree/stock/migrations/0118_auto_20260205_1218.py remove_null_items   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/stock/migrations/0118_auto_20260205_1218.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0119_alter_stockitemtestresult_date.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0120_stockitem_creation_date.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0121_auto_20260526_0849.py set_creation_date   32% 28 19 0   17% 12 2   28%
src/backend/InvenTree/stock/migrations/0121_auto_20260526_0849.py set_creation_date.process_item   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/stock/migrations/0121_auto_20260526_0849.py set_creation_date.make_aware   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/migrations/0121_auto_20260526_0849.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0122_alter_stockitem_creation_date.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/0123_remove_stockitem_review_needed.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/stock/migrations/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/stock/models.py StockLocationType.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/stock/models.py StockLocationType.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockLocation.delete   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockLocation.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/stock/models.py StockLocation.barcode_model_type_code   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockLocation.report_context   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockLocation.icon   57% 7 3 0   50% 6 3   54%
src/backend/InvenTree/stock/models.py StockLocation.icon   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockLocation.get_location_owner   0% 4 4 0   0% 4 0   0%
src/backend/InvenTree/stock/models.py StockLocation.check_ownership   0% 9 9 0   0% 6 0   0%
src/backend/InvenTree/stock/models.py StockLocation.clean   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/stock/models.py StockLocation.get_absolute_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockLocation.get_stock_items   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/stock/models.py StockLocation.stock_item_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockLocation.item_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockLocation.get_items   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py default_delete_on_deplete   50% 4 2 0   100% 0 0   50%
src/backend/InvenTree/stock/models.py StockItem.save   0% 33 33 0   0% 14 0   0%
src/backend/InvenTree/stock/models.py StockItem.delete   0% 4 4 0   0% 4 0   0%
src/backend/InvenTree/stock/models.py StockItem.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/stock/models.py StockItem.api_instance_filters   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.barcode_model_type_code   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.get_test_keys   0% 11 11 0   0% 12 0   0%
src/backend/InvenTree/stock/models.py StockItem.report_context   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.get_expired_filter   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/stock/models.py StockItem._create_serial_numbers   0% 43 43 0   0% 18 0   0%
src/backend/InvenTree/stock/models.py StockItem.convert_serial_to_int   0% 16 16 0   0% 8 0   0%
src/backend/InvenTree/stock/models.py StockItem.update_serial_number   0% 12 12 0   0% 4 0   0%
src/backend/InvenTree/stock/models.py StockItem.get_next_serialized_item   0% 17 17 0   0% 10 0   0%
src/backend/InvenTree/stock/models.py StockItem.get_next_stock_item   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.get_previous_stock_item   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.status_label   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.serialized   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.validate_unique   0% 7 7 0   0% 2 0   0%
src/backend/InvenTree/stock/models.py StockItem.validate_batch_code   0% 9 9 0   0% 4 0   0%
src/backend/InvenTree/stock/models.py StockItem.clean   0% 46 46 0   0% 40 0   0%
src/backend/InvenTree/stock/models.py StockItem.get_absolute_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.get_part_name   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.status_text   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.convert_to_variant   0% 7 7 0   0% 4 0   0%
src/backend/InvenTree/stock/models.py StockItem.get_item_owner   0% 7 7 0   0% 6 0   0%
src/backend/InvenTree/stock/models.py StockItem.check_ownership   0% 9 9 0   0% 6 0   0%
src/backend/InvenTree/stock/models.py StockItem.is_stale   0% 10 10 0   0% 6 0   0%
src/backend/InvenTree/stock/models.py StockItem.is_expired   0% 6 6 0   0% 4 0   0%
src/backend/InvenTree/stock/models.py StockItem.clearAllocations   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.allocateToCustomer   0% 20 20 0   0% 8 0   0%
src/backend/InvenTree/stock/models.py StockItem.return_from_customer   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.return_to_stock   0% 39 39 0   0% 20 0   0%
src/backend/InvenTree/stock/models.py StockItem.is_allocated   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.build_allocation_count   0% 10 10 0   0% 6 0   0%
src/backend/InvenTree/stock/models.py StockItem.get_sales_order_allocations   0% 10 10 0   0% 8 0   0%
src/backend/InvenTree/stock/models.py StockItem.sales_order_allocation_count   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/stock/models.py StockItem.get_transfer_order_allocations   0% 10 10 0   0% 8 0   0%
src/backend/InvenTree/stock/models.py StockItem.transfer_order_allocation_count   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/stock/models.py StockItem.allocation_count   0% 4 4 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.unallocated_quantity   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.can_delete   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/stock/models.py StockItem.get_installed_items   0% 13 13 0   0% 10 0   0%
src/backend/InvenTree/stock/models.py StockItem.installed_item_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.installStockItem   0% 14 14 0   0% 6 0   0%
src/backend/InvenTree/stock/models.py StockItem.uninstall_into_location   0% 9 9 0   0% 2 0   0%
src/backend/InvenTree/stock/models.py StockItem.children   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.child_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.is_in_stock   0% 7 7 0   0% 6 0   0%
src/backend/InvenTree/stock/models.py StockItem.in_stock   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.can_adjust_location   0% 5 5 0   0% 4 0   0%
src/backend/InvenTree/stock/models.py StockItem.tracking_info_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.has_tracking_info   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.add_tracking_entry   0% 14 14 0   0% 10 0   0%
src/backend/InvenTree/stock/models.py StockItem.serializeStock   0% 40 40 0   0% 24 0   0%
src/backend/InvenTree/stock/models.py StockItem.copyHistoryFrom   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/stock/models.py StockItem.copyTestResultsFrom   0% 9 9 0   0% 4 0   0%
src/backend/InvenTree/stock/models.py StockItem.add_test_result   0% 13 13 0   0% 6 0   0%
src/backend/InvenTree/stock/models.py StockItem.can_merge   0% 29 29 0   0% 24 0   0%
src/backend/InvenTree/stock/models.py StockItem.merge_stock_items   0% 54 54 0   0% 32 0   0%
src/backend/InvenTree/stock/models.py StockItem.splitStock   0% 51 51 0   0% 20 0   0%
src/backend/InvenTree/stock/models.py StockItem.optional_transfer_fields   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.move   0% 43 43 0   0% 18 0   0%
src/backend/InvenTree/stock/models.py StockItem.updateQuantity   0% 14 14 0   0% 4 0   0%
src/backend/InvenTree/stock/models.py StockItem.stocktake   0% 34 34 0   0% 12 0   0%
src/backend/InvenTree/stock/models.py StockItem.add_stock   0% 28 28 0   0% 12 0   0%
src/backend/InvenTree/stock/models.py StockItem.take_stock   0% 35 35 0   0% 18 0   0%
src/backend/InvenTree/stock/models.py StockItem.__str__   0% 8 8 0   0% 6 0   0%
src/backend/InvenTree/stock/models.py StockItem.clear_test_results   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.getTestResults   0% 11 11 0   0% 8 0   0%
src/backend/InvenTree/stock/models.py StockItem.testResultMap   0% 14 14 0   0% 10 0   0%
src/backend/InvenTree/stock/models.py StockItem.testResultList   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.requiredTestStatus   0% 14 14 0   0% 8 0   0%
src/backend/InvenTree/stock/models.py StockItem.required_test_count   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.hasRequiredTests   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItem.passedAllRequiredTests   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py after_delete_stock_item   0% 8 8 0   0% 8 0   0%
src/backend/InvenTree/stock/models.py after_save_stock_item   0% 7 7 0   0% 8 0   0%
src/backend/InvenTree/stock/models.py StockItemTracking.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/stock/models.py StockItemTracking.save   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/stock/models.py StockItemTracking.get_absolute_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItemTracking.label   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/stock/models.py rename_stock_item_test_result_attachment   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItemTestResult.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItemTestResult.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/stock/models.py StockItemTestResult.save   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItemTestResult.clean   0% 14 14 0   0% 10 0   0%
src/backend/InvenTree/stock/models.py StockItemTestResult.key   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py StockItemTestResult.test_name   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/stock/models.py (no function)   100% 309 0 0   100% 0 0   100%
src/backend/InvenTree/stock/serializers.py StockItemTestResultSerializer.__init__   100% 4 0 0   50% 2 1   83%
src/backend/InvenTree/stock/serializers.py StockItemTestResultSerializer.validate   0% 21 21 0   0% 10 0   0%
src/backend/InvenTree/stock/serializers.py StockItemSerializer.validate_part   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/stock/serializers.py StockItemSerializer.update   0% 9 9 0   0% 2 0   0%
src/backend/InvenTree/stock/serializers.py StockItemSerializer.annotate_queryset   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/stock/serializers.py SerializeStockItemSerializer.validate_quantity   33% 9 6 0   17% 6 1   27%
src/backend/InvenTree/stock/serializers.py SerializeStockItemSerializer.validate   0% 18 18 0   0% 6 0   0%
src/backend/InvenTree/stock/serializers.py SerializeStockItemSerializer.save   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/stock/serializers.py InstallStockItemSerializer.validate_quantity   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/stock/serializers.py InstallStockItemSerializer.validate_stock_item   0% 8 8 0   0% 6 0   0%
src/backend/InvenTree/stock/serializers.py InstallStockItemSerializer.validate   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/stock/serializers.py InstallStockItemSerializer.save   0% 7 7 0   100% 0 0   0%
src/backend/InvenTree/stock/serializers.py UninstallStockItemSerializer.save   0% 8 8 0   0% 2 0   0%
src/backend/InvenTree/stock/serializers.py ConvertStockItemSerializer.validate_part   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/stock/serializers.py ConvertStockItemSerializer.validate   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/stock/serializers.py ConvertStockItemSerializer.save   0% 5 5 0   100% 0 0   0%
src/backend/InvenTree/stock/serializers.py StockStatusCustomSerializer.__init__   89% 9 1 0   62% 8 3   76%
src/backend/InvenTree/stock/serializers.py StockChangeStatusSerializer.validate_items   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/stock/serializers.py StockChangeStatusSerializer.save   0% 24 24 0   0% 8 0   0%
src/backend/InvenTree/stock/serializers.py StockLocationTypeSerializer.annotate_queryset   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/stock/serializers.py LocationTreeSerializer.annotate_queryset   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/stock/serializers.py LocationSerializer.annotate_queryset   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/stock/serializers.py StockAssignmentItemSerializer.validate_item   0% 11 11 0   0% 10 0   0%
src/backend/InvenTree/stock/serializers.py StockAssignmentSerializer.validate_customer   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/stock/serializers.py StockAssignmentSerializer.validate   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/stock/serializers.py StockAssignmentSerializer.save   0% 10 10 0   0% 2 0   0%
src/backend/InvenTree/stock/serializers.py StockMergeItemSerializer.validate_item   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/stock/serializers.py StockMergeSerializer.validate   0% 16 16 0   0% 8 0   0%
src/backend/InvenTree/stock/serializers.py StockMergeSerializer.save   0% 9 9 0   0% 2 0   0%
src/backend/InvenTree/stock/serializers.py stock_item_adjust_status_options   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/stock/serializers.py StockAdjustmentItemSerializer.__init__   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/stock/serializers.py StockAdjustmentItemSerializer.validate_pk   0% 8 8 0   0% 8 0   0%
src/backend/InvenTree/stock/serializers.py StockAdjustmentItemSerializer.validate_quantity   60% 5 2 0   50% 4 2   56%
src/backend/InvenTree/stock/serializers.py StockAdjustmentSerializer.validate   80% 5 1 0   50% 2 1   71%
src/backend/InvenTree/stock/serializers.py StockCountSerializer.save   0% 16 16 0   0% 8 0   0%
src/backend/InvenTree/stock/serializers.py StockAddSerializer.save   0% 14 14 0   0% 8 0   0%
src/backend/InvenTree/stock/serializers.py StockRemoveSerializer.save   0% 14 14 0   0% 8 0   0%
src/backend/InvenTree/stock/serializers.py StockTransferSerializer.save   0% 14 14 0   0% 6 0   0%
src/backend/InvenTree/stock/serializers.py StockReturnSerializer.save   0% 15 15 0   0% 6 0   0%
src/backend/InvenTree/stock/serializers.py (no function)   100% 277 0 0   100% 0 0   100%
src/backend/InvenTree/stock/status_codes.py (no function)   100% 42 0 0   100% 0 0   100%
src/backend/InvenTree/stock/tasks.py rebuild_stock_items   0% 10 10 0   100% 0 0   0%
src/backend/InvenTree/stock/tasks.py rebuild_stock_item_tree   0% 17 17 0   0% 4 0   0%
src/backend/InvenTree/stock/tasks.py delete_old_stock_tracking   0% 9 9 0   0% 4 0   0%
src/backend/InvenTree/stock/tasks.py (no function)   100% 13 0 0   100% 0 0   100%
src/backend/InvenTree/users/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/users/admin.py ApiTokenAdmin.get_fields   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/users/admin.py ApiTokenAdmin.get_readonly_fields   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/users/admin.py InvenTreeGroupAdminForm.__init__   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/users/admin.py InvenTreeGroupAdminForm.save_m2m   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/users/admin.py InvenTreeGroupAdminForm.save   0% 3 3 0   100% 0 0   0%
src/backend/InvenTree/users/admin.py InvenTreeUserAdmin.get_readonly_fields   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/users/admin.py (no function)   100% 46 0 0   100% 0 0   100%
src/backend/InvenTree/users/api.py OwnerFilter.filter_is_active   93% 14 1 0   62% 8 3   82%
src/backend/InvenTree/users/api.py OwnerList.filter_queryset   100% 16 0 0   80% 10 2   92%
src/backend/InvenTree/users/api.py RoleDetails.get_object   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/users/api.py UserDetail.perform_destroy   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/users/api.py UserDetailSetPassword.get_object   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/users/api.py UserDetailSetPassword.perform_update   0% 12 12 0   0% 4 0   0%
src/backend/InvenTree/users/api.py MeUserDetail.get_object   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/users/api.py MeUserDetail.get_permission_model   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/users/api.py GetAuthToken.get   95% 20 1 0   67% 6 2   88%
src/backend/InvenTree/users/api.py TokenMixin.get_queryset   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/users/api.py TokenMixin.get   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/users/api.py TokenListView.create   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/users/api.py TokenListView.get   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/users/api.py TokenDetailView.perform_destroy   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/users/api.py LoginRedirect.get_redirect_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/users/api.py UserProfileDetail.get_object   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/users/api.py (no function)   100% 124 0 0   100% 0 0   100%
src/backend/InvenTree/users/apps.py UsersConfig.ready   50% 18 9 0   67% 6 2   54%
src/backend/InvenTree/users/apps.py UsersConfig.update_owners   71% 7 2 0   50% 4 2   64%
src/backend/InvenTree/users/apps.py (no function)   100% 9 0 0   100% 0 0   100%
src/backend/InvenTree/users/authentication.py ApiTokenAuthentication.authenticate_credentials   0% 9 9 0   0% 6 0   0%
src/backend/InvenTree/users/authentication.py (no function)   100% 10 0 0   100% 0 0   100%
src/backend/InvenTree/users/migrations/0001_initial.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/users/migrations/0002_auto_20201004_0158.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/users/migrations/0003_auto_20201005_2227.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/users/migrations/0004_auto_20210113_1909.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/users/migrations/0005_owner_model.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/users/migrations/0006_alter_ruleset_name.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/users/migrations/0007_alter_ruleset_name.py (no function)   100% 5 0 0   100% 0 0   100%
src/backend/InvenTree/users/migrations/0008_apitoken.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/users/migrations/0009_auto_20231020_2356.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/users/migrations/0010_alter_apitoken_key.py (no function)   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py clear_sessions   75% 8 2 0   50% 2 1   70%
src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py (no function)   100% 10 0 0   100% 0 0   100%
src/backend/InvenTree/users/migrations/0012_alter_ruleset_can_view.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/users/migrations/0013_migrate_mfa_20240408_1659.py move_mfa   36% 11 7 0   25% 4 1   33%
src/backend/InvenTree/users/migrations/0013_migrate_mfa_20240408_1659.py (no function)   100% 10 0 0   100% 0 0   100%
src/backend/InvenTree/users/migrations/0014_userprofile.py backfill_user_profiles   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/users/migrations/0014_userprofile.py (no function)   100% 7 0 0   100% 0 0   100%
src/backend/InvenTree/users/migrations/0015_alter_userprofile_type.py (no function)   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/users/migrations/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/users/models.py user_model_str   50% 4 2 0   25% 4 1   38%
src/backend/InvenTree/users/models.py create_email_address   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/users/models.py default_token   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/users/models.py default_token_expiry   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/users/models.py ApiToken.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/users/models.py ApiToken.generate_key   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/users/models.py ApiToken.sanitize_name   100% 6 0 0   100% 0 0   100%
src/backend/InvenTree/users/models.py ApiToken.token   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/users/models.py ApiToken.expired   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/users/models.py ApiToken.active   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/users/models.py RuleSet.label   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/users/models.py RuleSet.__str__   0% 3 3 0   0% 2 0   0%
src/backend/InvenTree/users/models.py RuleSet.save   71% 7 2 0   50% 6 3   62%
src/backend/InvenTree/users/models.py RuleSet.get_models   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/users/models.py Owner.get_owners_matching_user   50% 14 7 0   50% 2 1   50%
src/backend/InvenTree/users/models.py Owner.get_api_url   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/users/models.py Owner.__str__   0% 4 4 0   0% 2 0   0%
src/backend/InvenTree/users/models.py Owner.name   40% 5 3 0   25% 4 1   33%
src/backend/InvenTree/users/models.py Owner.label   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/users/models.py Owner.create   71% 7 2 0   100% 2 0   78%
src/backend/InvenTree/users/models.py Owner.get_owner   100% 14 0 0   67% 6 2   90%
src/backend/InvenTree/users/models.py Owner.get_related_owners   0% 11 11 0   0% 6 0   0%
src/backend/InvenTree/users/models.py Owner.is_user_allowed   0% 2 2 0   100% 0 0   0%
src/backend/InvenTree/users/models.py create_owner   100% 2 0 0   50% 2 1   75%
src/backend/InvenTree/users/models.py delete_owner   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/users/models.py create_missing_rule_sets   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/users/models.py UserProfile.__str__   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/users/models.py UserProfile.save   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/users/models.py create_or_update_user_profile   80% 5 1 0   75% 4 1   78%
src/backend/InvenTree/users/models.py validate_primary_group_on_save   20% 5 4 0   25% 4 1   22%
src/backend/InvenTree/users/models.py validate_primary_group_on_delete   20% 5 4 0   25% 4 1   22%
src/backend/InvenTree/users/models.py validate_primary_group_on_group_change   0% 7 7 0   0% 6 0   0%
src/backend/InvenTree/users/models.py (no function)   98% 128 3 0   50% 2 1   97%
src/backend/InvenTree/users/oauth2_scopes.py get_granular_scope   100% 3 0 0   100% 2 0   100%
src/backend/InvenTree/users/oauth2_scopes.py (no function)   100% 8 0 0   100% 0 0   100%
src/backend/InvenTree/users/permissions.py split_model   100% 3 0 0   100% 0 0   100%
src/backend/InvenTree/users/permissions.py get_model_permission_string   100% 2 0 0   100% 0 0   100%
src/backend/InvenTree/users/permissions.py split_permission   0% 6 6 0   0% 2 0   0%
src/backend/InvenTree/users/permissions.py prefetch_rule_sets   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/users/permissions.py check_user_role   20% 20 16 0   19% 16 3   19%
src/backend/InvenTree/users/permissions.py check_user_permission   14% 29 25 0   12% 24 3   13%
src/backend/InvenTree/users/permissions.py (no function)   100% 12 0 0   100% 0 0   100%
src/backend/InvenTree/users/ruleset.py get_ruleset_models   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/users/ruleset.py get_ruleset_ignore   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/users/ruleset.py (no function)   100% 21 0 0   100% 0 0   100%
src/backend/InvenTree/users/serializers.py RoleSerializer.get_roles   92% 12 1 0   75% 8 2   85%
src/backend/InvenTree/users/serializers.py RoleSerializer.get_permissions   75% 4 1 0   50% 2 1   67%
src/backend/InvenTree/users/serializers.py generate_permission_dict   100% 7 0 0   100% 4 0   100%
src/backend/InvenTree/users/serializers.py ApiTokenSerializer.get_in_use   100% 4 0 0   100% 0 0   100%
src/backend/InvenTree/users/serializers.py ApiTokenSerializer.validate   75% 8 2 0   50% 6 3   64%
src/backend/InvenTree/users/serializers.py GroupSerializer.get_permissions   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/users/serializers.py ExtendedUserSerializer.validate_is_superuser   80% 5 1 0   75% 4 1   78%
src/backend/InvenTree/users/serializers.py ExtendedUserSerializer.update   0% 5 5 0   0% 2 0   0%
src/backend/InvenTree/users/serializers.py make_random_password   100% 6 0 0   100% 2 0   100%
src/backend/InvenTree/users/serializers.py UserCreateSerializer.validate   83% 6 1 0   50% 2 1   75%
src/backend/InvenTree/users/serializers.py UserCreateSerializer.create   100% 11 0 0   50% 2 1   92%
src/backend/InvenTree/users/serializers.py (no function)   100% 105 0 0   100% 0 0   100%
src/backend/InvenTree/users/tasks.py rebuild_all_permissions   67% 3 1 0   50% 2 1   60%
src/backend/InvenTree/users/tasks.py update_group_roles   55% 60 27 0   50% 42 7   53%
src/backend/InvenTree/users/tasks.py update_group_roles.add_model   56% 9 4 0   38% 8 3   47%
src/backend/InvenTree/users/tasks.py update_group_roles.get_permission_object   0% 11 11 0   100% 0 0   0%
src/backend/InvenTree/users/tasks.py (no function)   100% 11 0 0   100% 0 0   100%
src/backend/InvenTree/web/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/web/templatetags/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/backend/InvenTree/web/templatetags/spa_helper.py spa_bundle   0% 20 20 0   0% 6 0   0%
src/backend/InvenTree/web/templatetags/spa_helper.py spa_bundle.get_url   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/web/templatetags/spa_helper.py spa_settings   0% 1 1 0   100% 0 0   0%
src/backend/InvenTree/web/templatetags/spa_helper.py (no function)   100% 14 0 0   100% 0 0   100%
src/backend/InvenTree/web/urls.py cui_compatibility_urls   100% 1 0 0   100% 0 0   100%
src/backend/InvenTree/web/urls.py (no function)   100% 7 0 0   100% 0 0   100%
Total     59% 37680 15387 0   23% 9692 1104   52%

No items found using the specified filter.