Coverage report: 74%

Files Functions Classes

coverage.py v7.15.2, created at 2026-10-07 06:14 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
api/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
api/admin/__init__.py (no function)   100% 15 0 0   100% 2 0   100%
api/admin/media_report.py register   100% 10 0 0   100% 0 0   100%
api/admin/media_report.py get_report_form   0% 7 7 0   100% 0 0   0%
api/admin/media_report.py get_report_form.MediaReportForm.__init__   0% 3 3 0   0% 2 0   0%
api/admin/media_report.py MultipleValueField.valid_value   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py get_decision_form   0% 9 9 0   100% 0 0   0%
api/admin/media_report.py get_decision_form.MediaDecisionForm.__init__   0% 3 3 0   0% 2 0   0%
api/admin/media_report.py get_decision_form.MediaDecisionForm.clean_report_id   0% 7 7 0   0% 2 0   0%
api/admin/media_report.py _production_deferred   67% 3 1 0   50% 2 1   60%
api/admin/media_report.py _non_production_deferred   67% 3 1 0   50% 2 1   60%
api/admin/media_report.py PredeterminedOrderChangelist._get_default_ordering   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py get_source_filter   0% 6 6 0   100% 0 0   0%
api/admin/media_report.py get_source_filter.SourceFilter.lookups   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py get_source_filter.SourceFilter.queryset   0% 4 4 0   0% 2 0   0%
api/admin/media_report.py get_pending_record_filter   0% 7 7 0   100% 0 0   0%
api/admin/media_report.py get_pending_record_filter.PendingRecordCountFilter.choices   0% 2 2 0   0% 2 0   0%
api/admin/media_report.py get_pending_record_filter.PendingRecordCountFilter.lookups   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py get_pending_record_filter.PendingRecordCountFilter.queryset   0% 12 12 0   0% 6 0   0%
api/admin/media_report.py get_media_decision_filter   0% 18 18 0   0% 4 0   0%
api/admin/media_report.py get_media_decision_filter.MediaDecisionFilter.__init__   0% 6 6 0   0% 2 0   0%
api/admin/media_report.py get_media_decision_filter.MediaDecisionFilter.has_output   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py get_media_decision_filter.MediaDecisionFilter.choices   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py get_media_decision_filter.MediaDecisionFilter.expected_parameters   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py get_media_decision_filter.MediaDecisionFilter.queryset   0% 4 4 0   0% 2 0   0%
api/admin/media_report.py get_media_decision_filter.MediaDecisionFilter.value   0% 7 7 0   0% 2 0   0%
api/admin/media_report.py get_single_bulk_moderation_filter   0% 6 6 0   100% 0 0   0%
api/admin/media_report.py get_single_bulk_moderation_filter.SingleBulkModerationFilter.lookups   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py get_single_bulk_moderation_filter.SingleBulkModerationFilter.queryset   0% 5 5 0   0% 2 0   0%
api/admin/media_report.py BulkModerationMixin.has_bulk_mod_permission   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py BulkModerationMixin._bulk_mod   0% 23 23 0   0% 6 0   0%
api/admin/media_report.py MediaListAdmin.__init__   100% 2 0 0   100% 0 0   100%
api/admin/media_report.py MediaListAdmin.get_urls   100% 6 0 0   100% 0 0   100%
api/admin/media_report.py MediaListAdmin.get_urls.wrap   100% 3 0 0   100% 0 0   100%
api/admin/media_report.py MediaListAdmin.get_urls.wrap.wrapper   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py MediaListAdmin.has_sensitive_text   0% 8 8 0   0% 2 0   0%
api/admin/media_report.py MediaListAdmin.get_list_filter   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py MediaListAdmin.get_list_display   0% 5 5 0   0% 4 0   0%
api/admin/media_report.py MediaListAdmin.get_search_results   0% 6 6 0   0% 2 0   0%
api/admin/media_report.py MediaListAdmin.total_report_count   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py MediaListAdmin.pending_report_count   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py MediaListAdmin.oldest_report_date   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py MediaListAdmin.pending_reports_links   0% 7 7 0   0% 2 0   0%
api/admin/media_report.py MediaListAdmin.changelist_view   0% 6 6 0   100% 0 0   0%
api/admin/media_report.py MediaListAdmin.change_view   0% 30 30 0   0% 10 0   0%
api/admin/media_report.py MediaListAdmin.lock_view   0% 4 4 0   0% 2 0   0%
api/admin/media_report.py MediaListAdmin.decision_create_view   0% 26 26 0   0% 10 0   0%
api/admin/media_report.py MediaListAdmin.report_create_view   0% 10 10 0   0% 4 0   0%
api/admin/media_report.py MediaListAdmin.get_changelist   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py MediaListAdmin.marked_sensitive   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py MediaListAdmin.deindexed_sensitive   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py MediaListAdmin.deindexed_copyright   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py MediaReportAdmin.is_pending   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py MediaReportAdmin.media_id   0% 2 2 0   100% 0 0   0%
api/admin/media_report.py MediaReportAdmin.get_readonly_fields   0% 3 3 0   0% 2 0   0%
api/admin/media_report.py MediaReportAdmin.get_exclude   0% 3 3 0   0% 2 0   0%
api/admin/media_report.py MediaDecisionAdmin.has_add_permission   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py MediaDecisionAdmin.get_list_filter   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py MediaDecisionAdmin.media_ids   0% 9 9 0   0% 2 0   0%
api/admin/media_report.py MediaDecisionAdmin.change_view   0% 8 8 0   0% 2 0   0%
api/admin/media_report.py MediaDecisionAdmin.get_readonly_fields   0% 3 3 0   0% 2 0   0%
api/admin/media_report.py MediaDecisionAdmin.get_exclude   0% 3 3 0   0% 2 0   0%
api/admin/media_report.py MediaDecisionAdmin.get_inlines   0% 14 14 0   0% 2 0   0%
api/admin/media_report.py MediaDecisionAdmin.get_inlines.MediaDecisionThroughAdmin.get_readonly_fields   0% 3 3 0   0% 2 0   0%
api/admin/media_report.py MediaDecisionAdmin.get_inlines.MediaDecisionThroughAdmin.get_exclude   0% 3 3 0   0% 2 0   0%
api/admin/media_report.py MediaDecisionAdmin.get_inlines.MediaDecisionThroughAdmin.has_add_permission   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py MediaDecisionAdmin.get_inlines.MediaDecisionThroughAdmin.has_change_permission   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py MediaDecisionAdmin.get_inlines.MediaDecisionThroughAdmin.has_delete_permission   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py MediaDecisionAdmin.save_model   0% 2 2 0   100% 0 0   0%
api/admin/media_report.py MediaSubreportAdmin.get_list_filter   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py MediaSubreportAdmin.has_add_permission   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py DeletedMediaAdmin.reversed_deindex   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py SensitiveMediaAdmin.is_deindexed   0% 5 5 0   100% 0 0   0%
api/admin/media_report.py SensitiveMediaAdmin.reversed_mark_sensitive   0% 1 1 0   100% 0 0   0%
api/admin/media_report.py (no function)   100% 149 0 0   100% 0 0   100%
api/admin/oauth.py register   100% 2 0 0   100% 0 0   100%
api/admin/oauth.py ThrottledApplicationAdmin.has_delete_permission   0% 1 1 0   100% 0 0   0%
api/admin/oauth.py (no function)   100% 25 0 0   100% 0 0   100%
api/admin/site.py OpenverseAdmin.get_app_list   0% 20 20 0   0% 12 0   0%
api/admin/site.py OpenverseAdmin.get_app_list.key   0% 6 6 0   0% 4 0   0%
api/admin/site.py (no function)   100% 6 0 0   100% 0 0   100%
api/admin/user.py register   100% 3 0 0   100% 0 0   100%
api/admin/user.py UserPreferencesAdminForm.__init__   0% 2 2 0   100% 0 0   0%
api/admin/user.py UserPreferencesAdminForm.save   0% 2 2 0   100% 0 0   0%
api/admin/user.py IndividualUserPreferencesAdmin.get_queryset   0% 2 2 0   100% 0 0   0%
api/admin/user.py IndividualUserPreferencesAdmin.has_change_permission   0% 1 1 0   100% 0 0   0%
api/admin/user.py IndividualUserPreferencesAdmin.has_add_permission   0% 1 1 0   100% 0 0   0%
api/admin/user.py IndividualUserPreferencesAdmin.has_delete_permission   0% 1 1 0   100% 0 0   0%
api/admin/user.py IndividualUserPreferencesAdmin.changelist_view   0% 2 2 0   100% 0 0   0%
api/admin/user.py (no function)   100% 24 0 0   100% 0 0   100%
api/apps.py (no function)   100% 5 0 0   100% 0 0   100%
api/constants/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
api/constants/field_order.py (no function)   100% 2 0 0   100% 0 0   100%
api/constants/field_values.py (no function)   100% 5 0 0   100% 0 0   100%
api/constants/licenses.py (no function)   100% 7 0 0   100% 0 0   100%
api/constants/media_types.py (no function)   100% 8 0 0   100% 0 0   100%
api/constants/moderation.py DecisionAction.is_forward   0% 1 1 0   100% 0 0   0%
api/constants/moderation.py DecisionAction.is_reverse   0% 1 1 0   100% 0 0   0%
api/constants/moderation.py DecisionAction.is_deindex   0% 1 1 0   100% 0 0   0%
api/constants/moderation.py DecisionAction.verb   0% 15 15 0   0% 14 0   0%
api/constants/moderation.py (no function)   100% 17 0 0   100% 0 0   100%
api/constants/parameters.py (no function)   100% 2 0 0   100% 0 0   100%
api/constants/restricted_features.py RestrictedFeature.__post_init__   100% 1 0 0   100% 0 0   100%
api/constants/restricted_features.py RestrictedFeature.request_level   80% 5 1 0   75% 4 1   78%
api/constants/restricted_features.py RestrictedFeature.choices   100% 1 0 0   100% 0 0   100%
api/constants/restricted_features.py (no function)   100% 23 0 0   100% 0 0   100%
api/constants/search.py (no function)   100% 4 0 0   100% 0 0   100%
api/constants/sensitivity.py (no function)   100% 3 0 0   100% 0 0   100%
api/constants/sorting.py (no function)   100% 6 0 0   100% 0 0   100%
api/controllers/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
api/controllers/elasticsearch/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
api/controllers/elasticsearch/helpers.py log_timing_info   100% 2 0 0   100% 0 0   100%
api/controllers/elasticsearch/helpers.py log_timing_info.wrapper   100% 8 0 0   100% 2 0   100%
api/controllers/elasticsearch/helpers.py get_es_response   56% 9 4 0   50% 4 2   54%
api/controllers/elasticsearch/helpers.py get_raw_es_response   100% 1 0 0   100% 0 0   100%
api/controllers/elasticsearch/helpers.py _unmasked_query_end   100% 1 0 0   100% 0 0   100%
api/controllers/elasticsearch/helpers.py _paginate_with_dead_link_mask   68% 19 6 0   75% 8 2   70%
api/controllers/elasticsearch/helpers.py get_query_slice   86% 7 1 0   75% 4 1   82%
api/controllers/elasticsearch/helpers.py (no function)   100% 24 0 0   100% 0 0   100%
api/controllers/elasticsearch/related.py related_media   85% 26 4 0   50% 10 3   75%
api/controllers/elasticsearch/related.py (no function)   100% 7 0 0   100% 0 0   100%
api/controllers/search_controller.py _quote_escape   100% 4 0 0   100% 2 0   100%
api/controllers/search_controller.py _post_process_results   87% 23 3 0   79% 14 3   84%
api/controllers/search_controller.py get_excluded_sources_query   60% 15 6 0   50% 4 2   58%
api/controllers/search_controller.py get_index   83% 6 1 0   75% 4 1   80%
api/controllers/search_controller.py create_search_filter_queries   100% 10 0 0   100% 6 0   100%
api/controllers/search_controller.py create_ranking_queries   100% 6 0 0   100% 2 0   100%
api/controllers/search_controller.py build_search_query   96% 24 1 0   88% 16 2   92%
api/controllers/search_controller.py log_query_features   100% 6 0 0   100% 6 0   100%
api/controllers/search_controller.py build_collection_query   0% 12 12 0   0% 8 0   0%
api/controllers/search_controller.py query_media   100% 17 0 0   75% 4 1   95%
api/controllers/search_controller.py tally_results   60% 10 4 0   50% 6 1   56%
api/controllers/search_controller.py execute_search   100% 7 0 0   100% 0 0   100%
api/controllers/search_controller.py get_sources   67% 21 7 0   100% 2 0   70%
api/controllers/search_controller.py _get_result_and_page_count   100% 9 0 0   83% 6 1   93%
api/controllers/search_controller.py (no function)   98% 49 1 0   50% 2 1   96%
api/docs/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
api/docs/audio_docs.py (no function)   100% 18 0 0   100% 0 0   100%
api/docs/base_docs.py fields_to_md   100% 3 0 0   100% 0 0   100%
api/docs/base_docs.py APIExceptionOpenApiSerializerExtension._get_detail   100% 1 0 0   100% 0 0   100%
api/docs/base_docs.py APIExceptionOpenApiSerializerExtension.get_name   100% 2 0 0   100% 0 0   100%
api/docs/base_docs.py APIExceptionOpenApiSerializerExtension.map_serializer   100% 5 0 0   100% 2 0   100%
api/docs/base_docs.py APIExceptionOpenApiSerializerExtension.exception_example   100% 3 0 0   100% 2 0   100%
api/docs/base_docs.py get_examples   100% 6 0 0   100% 4 0   100%
api/docs/base_docs.py custom_extend_schema   100% 18 0 0   80% 10 2   93%
api/docs/base_docs.py MediaSchema.get_description   100% 1 0 0   100% 0 0   100%
api/docs/base_docs.py MediaSchema.get_operation_id   100% 6 0 0   100% 4 0   100%
api/docs/base_docs.py build_source_path_parameter   0% 2 2 0   100% 0 0   0%
api/docs/base_docs.py (no function)   100% 33 0 0   100% 0 0   100%
api/docs/image_docs.py (no function)   100% 19 0 0   100% 0 0   100%
api/docs/oauth2_docs.py (no function)   100% 7 0 0   100% 0 0   100%
api/examples/__init__.py (no function)   100% 8 0 0   100% 0 0   100%
api/examples/audio_requests.py (no function)   100% 11 0 0   100% 0 0   100%
api/examples/audio_responses.py (no function)   100% 13 0 0   100% 0 0   100%
api/examples/environment.py (no function)   100% 5 0 0   100% 0 0   100%
api/examples/image_requests.py (no function)   100% 11 0 0   100% 0 0   100%
api/examples/image_responses.py (no function)   100% 12 0 0   100% 0 0   100%
api/examples/oauth2_requests.py (no function)   100% 5 0 0   100% 0 0   100%
api/examples/oauth2_responses.py (no function)   100% 3 0 0   100% 0 0   100%
api/models/__init__.py (no function)   100% 7 0 0   100% 0 0   100%
api/models/audio.py AltAudioFile.__init__   0% 3 3 0   100% 0 0   0%
api/models/audio.py AltAudioFile.sample_rate_in_khz   0% 1 1 0   100% 0 0   0%
api/models/audio.py AltAudioFile.bit_rate_in_kbps   0% 1 1 0   100% 0 0   0%
api/models/audio.py AltAudioFile.__str__   0% 3 3 0   100% 0 0   0%
api/models/audio.py AltAudioFile.__repr__   0% 1 1 0   100% 0 0   0%
api/models/audio.py AudioSet.identifier   0% 1 1 0   100% 0 0   0%
api/models/audio.py AudioSet.tracks   0% 1 1 0   100% 0 0   0%
api/models/audio.py AudioFileMixin.sample_rate_in_khz   0% 1 1 0   100% 0 0   0%
api/models/audio.py AudioFileMixin.bit_rate_in_kbps   0% 1 1 0   100% 0 0   0%
api/models/audio.py Audio.sensitive   100% 1 0 0   100% 0 0   100%
api/models/audio.py Audio.alternative_files   0% 3 3 0   0% 2 0   0%
api/models/audio.py Audio.duration_in_s   0% 1 1 0   100% 0 0   0%
api/models/audio.py Audio.audio_set   100% 1 0 0   100% 0 0   100%
api/models/audio.py Audio.get_or_create_waveform   100% 6 0 0   100% 2 0   100%
api/models/audio.py Audio.get_absolute_url   0% 2 2 0   100% 0 0   0%
api/models/audio.py AudioList.save   0% 2 2 0   100% 0 0   0%
api/models/audio.py (no function)   100% 95 0 0   100% 0 0   100%
api/models/base.py OpenLedgerModel.__iter__   0% 3 3 0   0% 2 0   0%
api/models/base.py (no function)   100% 7 0 0   100% 0 0   100%
api/models/image.py ImageFileMixin.resolution_in_mp   0% 1 1 0   100% 0 0   0%
api/models/image.py Image.get_absolute_url   0% 2 2 0   100% 0 0   0%
api/models/image.py Image.sensitive   100% 1 0 0   100% 0 0   100%
api/models/image.py ImageList.save   0% 2 2 0   100% 0 0   0%
api/models/image.py (no function)   100% 49 0 0   100% 0 0   100%
api/models/media.py AbstractMedia.license_url   29% 7 5 0   50% 2 1   33%
api/models/media.py AbstractMedia.attribution   50% 4 2 0   100% 0 0   50%
api/models/media.py AbstractMedia.__str__   100% 1 0 0   100% 0 0   100%
api/models/media.py AbstractMediaReport.clean   50% 2 1 0   50% 2 1   50%
api/models/media.py AbstractMediaReport.media_url   0% 4 4 0   0% 2 0   0%
api/models/media.py AbstractMediaReport.url   0% 2 2 0   100% 0 0   0%
api/models/media.py AbstractMediaReport.is_pending   0% 1 1 0   100% 0 0   0%
api/models/media.py AbstractMediaReport.save   100% 2 0 0   100% 0 0   100%
api/models/media.py AbstractMediaDecisionThrough.perform_action   0% 5 5 0   0% 4 0   0%
api/models/media.py AbstractMediaDecisionThrough.save   0% 2 2 0   100% 0 0   0%
api/models/media.py PerformIndexUpdateMixin.indexes   0% 1 1 0   100% 0 0   0%
api/models/media.py PerformIndexUpdateMixin._perform_index_update   0% 12 12 0   0% 4 0   0%
api/models/media.py PerformIndexUpdateMixin._bulk_perform_index_update   0% 4 4 0   100% 0 0   0%
api/models/media.py AbstractDeletedMedia.save   0% 2 2 0   100% 0 0   0%
api/models/media.py AbstractDeletedMedia._update_es   0% 1 1 0   100% 0 0   0%
api/models/media.py AbstractDeletedMedia.perform_action   0% 2 2 0   100% 0 0   0%
api/models/media.py AbstractDeletedMedia._bulk_update_es   0% 1 1 0   100% 0 0   0%
api/models/media.py AbstractDeletedMedia.bulk_perform_action   0% 2 2 0   100% 0 0   0%
api/models/media.py AbstractSensitiveMedia.save   0% 2 2 0   100% 0 0   0%
api/models/media.py AbstractSensitiveMedia.delete   0% 2 2 0   100% 0 0   0%
api/models/media.py AbstractSensitiveMedia._update_es   0% 1 1 0   100% 0 0   0%
api/models/media.py AbstractSensitiveMedia._bulk_update_es   0% 1 1 0   100% 0 0   0%
api/models/media.py AbstractSensitiveMedia.bulk_perform_action   0% 1 1 0   100% 0 0   0%
api/models/media.py AbstractAltFile.__init__   0% 3 3 0   100% 0 0   0%
api/models/media.py AbstractAltFile.size_in_mib   0% 1 1 0   100% 0 0   0%
api/models/media.py AbstractAltFile.size_in_mb   0% 1 1 0   100% 0 0   0%
api/models/media.py AbstractAltFile.mime_type   0% 1 1 0   100% 0 0   0%
api/models/media.py (no function)   100% 132 0 0   100% 0 0   100%
api/models/mixins.py FileMixin.size_in_mib   0% 1 1 0   100% 0 0   0%
api/models/mixins.py FileMixin.size_in_mbs   0% 1 1 0   100% 0 0   0%
api/models/mixins.py FileMixin.mime_type   0% 1 1 0   100% 0 0   0%
api/models/mixins.py (no function)   100% 31 0 0   100% 0 0   100%
api/models/models.py (no function)   100% 20 0 0   100% 0 0   100%
api/models/moderation.py UserPreferences.__str__   0% 1 1 0   100% 0 0   0%
api/models/moderation.py UserPreferences.moderator   0% 3 3 0   0% 2 0   0%
api/models/moderation.py UserPreferences.moderator   0% 1 1 0   100% 0 0   0%
api/models/moderation.py UserPreferences.blur_images   0% 1 1 0   100% 0 0   0%
api/models/moderation.py UserPreferences.blur_images   0% 1 1 0   100% 0 0   0%
api/models/moderation.py create_or_update_user_profile   0% 3 3 0   0% 2 0   0%
api/models/moderation.py get_moderators   0% 2 2 0   100% 0 0   0%
api/models/moderation.py (no function)   100% 21 0 0   100% 0 0   100%
api/models/oauth.py (no function)   100% 18 0 0   100% 0 0   100%
api/serializers/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
api/serializers/audio_serializers.py AudioSerializer.__init__   100% 3 0 0   100% 2 0   100%
api/serializers/audio_serializers.py AudioSerializer.get_peaks   100% 3 0 0   100% 2 0   100%
api/serializers/audio_serializers.py AudioSerializer.to_representation   86% 7 1 0   75% 4 1   82%
api/serializers/audio_serializers.py AudioWaveformSerializer.get_len   100% 1 0 0   100% 0 0   100%
api/serializers/audio_serializers.py (no function)   100% 47 0 0   100% 0 0   100%
api/serializers/base.py BaseModelSerializer.build_property_field   100% 4 0 0   50% 2 1   83%
api/serializers/base.py (no function)   100% 3 0 0   100% 0 0   100%
api/serializers/docs.py (no function)   100% 12 0 0   100% 0 0   100%
api/serializers/fields.py SchemableHyperlinkedIdentityField.__init__   100% 2 0 0   100% 0 0   100%
api/serializers/fields.py SchemableHyperlinkedIdentityField.get_url   75% 4 1 0   50% 2 1   67%
api/serializers/fields.py EnumCharField.__init__   100% 3 0 0   100% 0 0   100%
api/serializers/fields.py EnumCharField._validate_enum   100% 6 0 0   100% 4 0   100%
api/serializers/fields.py EnumCharField.to_internal_value   100% 3 0 0   100% 0 0   100%
api/serializers/fields.py (no function)   100% 12 0 0   100% 0 0   100%
api/serializers/image_serializers.py OembedRequestSerializer.to_internal_value   100% 11 0 0   100% 2 0   100%
api/serializers/image_serializers.py OembedSerializer.get_type   100% 1 0 0   100% 0 0   100%
api/serializers/image_serializers.py OembedSerializer.get_version   100% 1 0 0   100% 0 0   100%
api/serializers/image_serializers.py OembedSerializer.get_width   100% 1 0 0   100% 0 0   100%
api/serializers/image_serializers.py OembedSerializer.get_height   100% 1 0 0   100% 0 0   100%
api/serializers/image_serializers.py (no function)   100% 45 0 0   100% 0 0   100%
api/serializers/media_serializers.py PaginatedRequestSerializer.validate_page_size   89% 9 1 0   50% 2 1   82%
api/serializers/media_serializers.py PaginatedRequestSerializer.clamp_result_count   100% 4 0 0   100% 2 0   100%
api/serializers/media_serializers.py PaginatedRequestSerializer.clamp_page_count   100% 6 0 0   100% 2 0   100%
api/serializers/media_serializers.py PaginatedRequestSerializer.validate   91% 11 1 0   50% 2 1   85%
api/serializers/media_serializers.py MediaSearchRequestSerializer.__init__   89% 9 1 0   50% 2 1   82%
api/serializers/media_serializers.py MediaSearchRequestSerializer.is_request_anonymous   100% 2 0 0   100% 0 0   100%
api/serializers/media_serializers.py MediaSearchRequestSerializer._truncate   100% 2 0 0   100% 0 0   100%
api/serializers/media_serializers.py MediaSearchRequestSerializer.validate_q   100% 1 0 0   100% 0 0   100%
api/serializers/media_serializers.py MediaSearchRequestSerializer.validate_license   100% 5 0 0   100% 4 0   100%
api/serializers/media_serializers.py MediaSearchRequestSerializer.validate_license_type   62% 8 3 0   50% 4 2   58%
api/serializers/media_serializers.py MediaSearchRequestSerializer.validate_unstable__collection   100% 9 0 0   100% 8 0   100%
api/serializers/media_serializers.py MediaSearchRequestSerializer.validate_source   88% 17 2 0   90% 10 1   89%
api/serializers/media_serializers.py MediaSearchRequestSerializer.validate_excluded_source   100% 3 0 0   100% 2 0   100%
api/serializers/media_serializers.py MediaSearchRequestSerializer.validate_creator   100% 1 0 0   100% 0 0   100%
api/serializers/media_serializers.py MediaSearchRequestSerializer.validate_tags   100% 1 0 0   100% 0 0   100%
api/serializers/media_serializers.py MediaSearchRequestSerializer.validate_title   100% 1 0 0   100% 0 0   100%
api/serializers/media_serializers.py MediaSearchRequestSerializer.validate_unstable__sort_by   100% 1 0 0   100% 0 0   100%
api/serializers/media_serializers.py MediaSearchRequestSerializer.validate_unstable__sort_dir   100% 1 0 0   100% 0 0   100%
api/serializers/media_serializers.py MediaSearchRequestSerializer.validate_unstable__authority   100% 1 0 0   100% 0 0   100%
api/serializers/media_serializers.py MediaSearchRequestSerializer.validate_unstable__include_sensitive_results   100% 4 0 0   100% 2 0   100%
api/serializers/media_serializers.py MediaSearchRequestSerializer.validate_internal__index   0% 7 7 0   0% 6 0   0%
api/serializers/media_serializers.py MediaSearchRequestSerializer.validate_extension   100% 1 0 0   100% 0 0   100%
api/serializers/media_serializers.py MediaSearchRequestSerializer.validate   75% 8 2 0   67% 6 2   71%
api/serializers/media_serializers.py MediaThumbnailRequestSerializer.validate   100% 3 0 0   100% 2 0   100%
api/serializers/media_serializers.py MediaReportRequestSerializer.to_internal_value   100% 2 0 0   100% 0 0   100%
api/serializers/media_serializers.py MediaReportRequestSerializer.validate   100% 3 0 0   100% 2 0   100%
api/serializers/media_serializers.py MediaReportRequestSerializer._map_reason   100% 1 0 0   100% 0 0   100%
api/serializers/media_serializers.py MediaSerializer.get_unstable__sensitivity   83% 6 1 0   75% 4 1   80%
api/serializers/media_serializers.py MediaSerializer.to_representation   68% 19 6 0   80% 10 2   72%
api/serializers/media_serializers.py get_hyperlinks_serializer   100% 7 0 0   100% 0 0   100%
api/serializers/media_serializers.py (no function)   100% 121 0 0   100% 0 0   100%
api/serializers/oauth2_serializers.py (no function)   100% 34 0 0   100% 0 0   100%
api/serializers/source_serializers.py SourceSerializer.get_logo_url   100% 1 0 0   100% 0 0   100%
api/serializers/source_serializers.py SourceSerializer.get_media_count   100% 2 0 0   100% 0 0   100%
api/serializers/source_serializers.py (no function)   100% 16 0 0   100% 0 0   100%
api/templatetags/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
api/templatetags/get_attr.py get_attr   0% 7 7 0   0% 6 0   0%
api/templatetags/get_attr.py (no function)   100% 6 0 0   100% 0 0   100%
api/utils/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
api/utils/aiohttp.py _close_sessions   80% 10 2 0   100% 2 0   83%
api/utils/aiohttp.py get_aiohttp_session   88% 17 2 0   88% 8 1   88%
api/utils/aiohttp.py LogTiming.__init__   100% 4 0 0   100% 0 0   100%
api/utils/aiohttp.py LogTiming._start_timing   100% 1 0 0   100% 0 0   100%
api/utils/aiohttp.py LogTiming._log_timing   54% 13 6 0   25% 8 2   43%
api/utils/aiohttp.py (no function)   100% 18 0 0   100% 0 0   100%
api/utils/check_dead_links/__init__.py _get_cached_statuses   50% 6 3 0   100% 0 0   50%
api/utils/check_dead_links/__init__.py _get_expiry   0% 1 1 0   100% 0 0   0%
api/utils/check_dead_links/__init__.py _head   36% 11 7 0   0% 4 0   27%
api/utils/check_dead_links/__init__.py _make_head_requests   100% 5 0 0   100% 0 0   100%
api/utils/check_dead_links/__init__.py check_dead_links   94% 53 3 0   96% 24 1   95%
api/utils/check_dead_links/__init__.py (no function)   100% 25 0 0   100% 0 0   100%
api/utils/check_dead_links/provider_status_mappings.py (no function)   100% 7 0 0   100% 0 0   100%
api/utils/dead_link_mask.py get_query_hash   100% 5 0 0   100% 0 0   100%
api/utils/dead_link_mask.py get_query_mask   57% 7 3 0   100% 0 0   57%
api/utils/dead_link_mask.py save_query_mask   78% 9 2 0   100% 0 0   78%
api/utils/dead_link_mask.py (no function)   100% 10 0 0   100% 0 0   100%
api/utils/drf_renderer.py BrowsableAPIRendererWithoutForms.get_context   0% 3 3 0   100% 0 0   0%
api/utils/drf_renderer.py BrowsableAPIRendererWithoutForms.show_form_for_method   0% 1 1 0   100% 0 0   0%
api/utils/drf_renderer.py BrowsableAPIRendererWithoutForms.get_rendered_html_form   0% 1 1 0   100% 0 0   0%
api/utils/drf_renderer.py (no function)   100% 5 0 0   100% 0 0   100%
api/utils/exceptions.py exception_handler   100% 4 0 0   100% 2 0   100%
api/utils/exceptions.py (no function)   100% 3 0 0   100% 0 0   100%
api/utils/help_text.py make_comma_separated_help_text   100% 5 0 0   50% 2 1   86%
api/utils/help_text.py (no function)   100% 2 0 0   100% 0 0   100%
api/utils/image_proxy/__init__.py get_request_params_for_extension   33% 9 6 0   25% 8 2   29%
api/utils/image_proxy/__init__.py _tally_response   75% 8 2 0   100% 0 0   75%
api/utils/image_proxy/__init__.py _tally_client_response_errors   50% 4 2 0   100% 0 0   50%
api/utils/image_proxy/__init__.py _cache_repeated_failures   100% 3 0 0   100% 0 0   100%
api/utils/image_proxy/__init__.py _cache_repeated_failures.do_cache   68% 28 9 0   75% 4 1   69%
api/utils/image_proxy/__init__.py get   93% 30 2 0   50% 2 1   91%
api/utils/image_proxy/__init__.py (no function)   100% 36 0 0   100% 0 0   100%
api/utils/image_proxy/dataclasses.py (no function)   100% 13 0 0   100% 0 0   100%
api/utils/image_proxy/exception.py (no function)   100% 6 0 0   100% 0 0   100%
api/utils/image_proxy/extension.py get_image_extension   63% 27 10 0   50% 10 1   59%
api/utils/image_proxy/extension.py _cache_extension   50% 4 2 0   100% 0 0   50%
api/utils/image_proxy/extension.py _get_file_extension_from_url   100% 3 0 0   100% 0 0   100%
api/utils/image_proxy/extension.py _get_file_extension_from_content_type   67% 3 1 0   50% 2 1   60%
api/utils/image_proxy/extension.py (no function)   100% 21 0 0   100% 0 0   100%
api/utils/image_proxy/photon.py get_photon_request_params   93% 15 1 0   80% 10 2   88%
api/utils/image_proxy/photon.py (no function)   100% 2 0 0   100% 0 0   100%
api/utils/image_proxy/wikimedia.py get_wikimedia_thumbnail_url   0% 11 11 0   0% 6 0   0%
api/utils/image_proxy/wikimedia.py (no function)   100% 7 0 0   100% 0 0   100%
api/utils/moderation.py perform_moderation   0% 40 40 0   0% 14 0   0%
api/utils/moderation.py (no function)   100% 8 0 0   100% 0 0   100%
api/utils/moderation_lock.py handle_redis_exception   100% 2 0 0   100% 0 0   100%
api/utils/moderation_lock.py handle_redis_exception.wrapper   0% 4 4 0   100% 0 0   0%
api/utils/moderation_lock.py LockManager.__init__   100% 1 0 0   100% 0 0   100%
api/utils/moderation_lock.py LockManager.prune   0% 14 14 0   0% 6 0   0%
api/utils/moderation_lock.py LockManager.add_locks   0% 6 6 0   100% 0 0   0%
api/utils/moderation_lock.py LockManager.remove_locks   0% 4 4 0   100% 0 0   0%
api/utils/moderation_lock.py LockManager.moderator_set   0% 5 5 0   100% 0 0   0%
api/utils/moderation_lock.py LockManager.score   0% 5 5 0   100% 0 0   0%
api/utils/moderation_lock.py (no function)   100% 22 0 0   100% 0 0   100%
api/utils/pagination.py StandardPagination.__init__   100% 5 0 0   100% 0 0   100%
api/utils/pagination.py StandardPagination.get_paginated_response   100% 2 0 0   100% 0 0   100%
api/utils/pagination.py StandardPagination.get_paginated_response_schema   100% 3 0 0   100% 0 0   100%
api/utils/pagination.py (no function)   100% 12 0 0   100% 0 0   100%
api/utils/search_context.py SearchContext.build   91% 11 1 0   75% 4 1   87%
api/utils/search_context.py SearchContext.asdict   100% 1 0 0   100% 0 0   100%
api/utils/search_context.py (no function)   100% 15 0 0   100% 0 0   100%
api/utils/status_code_view.py get_status_code_view   100% 5 0 0   100% 0 0   100%
api/utils/status_code_view.py get_status_code_view.StatusCodeView.dispatch   0% 1 1 0   100% 0 0   0%
api/utils/status_code_view.py (no function)   100% 5 0 0   100% 0 0   100%
api/utils/tallies.py get_weekly_timestamp   100% 3 0 0   100% 0 0   100%
api/utils/tallies.py get_monthly_timestamp   100% 2 0 0   100% 0 0   100%
api/utils/tallies.py count_provider_occurrences   85% 13 2 0   100% 4 0   88%
api/utils/tallies.py (no function)   100% 10 0 0   100% 0 0   100%
api/utils/throttle.py SimpleRateThrottle.allow_request   57% 7 3 0   100% 0 0   57%
api/utils/throttle.py SimpleRateThrottle.headers   100% 5 0 0   100% 2 0   100%
api/utils/throttle.py SimpleRateThrottle.has_valid_token   83% 6 1 0   75% 4 1   80%
api/utils/throttle.py SimpleRateThrottle.get_cache_key   100% 1 0 0   100% 0 0   100%
api/utils/throttle.py AbstractAnonRateThrottle.get_cache_key   80% 5 1 0   75% 4 1   78%
api/utils/throttle.py AbstractOpenverseReferrerRateThrottle.get_cache_key   0% 5 5 0   0% 4 0   0%
api/utils/throttle.py AbstractOAuth2IdRateThrottle.get_cache_key   0% 6 6 0   0% 4 0   0%
api/utils/throttle.py (no function)   100% 56 0 0   100% 0 0   100%
api/utils/url.py add_protocol   75% 4 1 0   50% 2 1   67%
api/utils/url.py (no function)   100% 2 0 0   100% 0 0   100%
api/utils/waveform.py ext_from_url   100% 5 0 0   100% 2 0   100%
api/utils/waveform.py download_audio   90% 21 2 0   50% 4 2   84%
api/utils/waveform.py generate_waveform   100% 13 0 0   100% 0 0   100%
api/utils/waveform.py process_waveform_output   100% 16 0 0   100% 8 0   100%
api/utils/waveform.py cleanup   73% 11 3 0   100% 2 0   77%
api/utils/waveform.py generate_peaks   100% 7 0 0   100% 0 0   100%
api/utils/waveform.py (no function)   100% 29 0 0   100% 0 0   100%
api/views/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
api/views/audio_views.py AudioViewSet.get_queryset   100% 1 0 0   100% 0 0   100%
api/views/audio_views.py AudioViewSet.include_addons   100% 1 0 0   100% 0 0   100%
api/views/audio_views.py AudioViewSet.get_image_proxy_media_info   89% 9 1 0   83% 6 1   87%
api/views/audio_views.py AudioViewSet.thumbnail   100% 1 0 0   100% 0 0   100%
api/views/audio_views.py AudioViewSet.waveform   100% 4 0 0   100% 0 0   100%
api/views/audio_views.py AudioViewSet.report   100% 1 0 0   100% 0 0   100%
api/views/audio_views.py (no function)   100% 35 0 0   100% 0 0   100%
api/views/health_views.py HealthCheck._check_db   50% 4 2 0   100% 0 0   50%
api/views/health_views.py HealthCheck._check_es   0% 5 5 0   0% 4 0   0%
api/views/health_views.py HealthCheck.get   75% 4 1 0   50% 2 1   67%
api/views/health_views.py (no function)   100% 19 0 0   100% 0 0   100%
api/views/image_views.py ImageViewSet.get_queryset   100% 1 0 0   100% 0 0   100%
api/views/image_views.py ImageViewSet.oembed   57% 14 6 0   50% 2 1   56%
api/views/image_views.py ImageViewSet.get_image_proxy_media_info   80% 5 1 0   50% 2 1   71%
api/views/image_views.py ImageViewSet.thumbnail   100% 1 0 0   100% 0 0   100%
api/views/image_views.py ImageViewSet.report   100% 1 0 0   100% 0 0   100%
api/views/image_views.py (no function)   100% 35 0 0   100% 0 0   100%
api/views/media_views.py MediaViewSet.__init__   60% 5 2 0   50% 2 1   57%
api/views/media_views.py MediaViewSet.get_queryset   100% 1 0 0   100% 0 0   100%
api/views/media_views.py MediaViewSet.get_serializer_context   100% 4 0 0   100% 0 0   100%
api/views/media_views.py MediaViewSet._get_request_serializer   100% 3 0 0   100% 0 0   100%
api/views/media_views.py MediaViewSet.get_db_results   100% 13 0 0   100% 6 0   100%
api/views/media_views.py MediaViewSet.retrieve   100% 5 0 0   100% 0 0   100%
api/views/media_views.py MediaViewSet.list   100% 2 0 0   100% 0 0   100%
api/views/media_views.py MediaViewSet._validate_source   0% 4 4 0   0% 2 0   0%
api/views/media_views.py MediaViewSet.include_addons   100% 1 0 0   100% 0 0   100%
api/views/media_views.py MediaViewSet.get_media_results   78% 23 5 0   50% 2 1   76%
api/views/media_views.py MediaViewSet.stats   100% 5 0 0   100% 0 0   100%
api/views/media_views.py MediaViewSet.related   92% 13 1 0   100% 0 0   92%
api/views/media_views.py MediaViewSet.report   100% 4 0 0   100% 0 0   100%
api/views/media_views.py MediaViewSet.get_image_proxy_media_info   0% 1 1 0   100% 0 0   0%
api/views/media_views.py MediaViewSet.thumbnail   100% 4 0 0   100% 0 0   100%
api/views/media_views.py MediaViewSet._get_user_ip   80% 5 1 0   50% 2 1   71%
api/views/media_views.py (no function)   100% 57 0 0   100% 0 0   100%
api/views/oauth2_views.py Register.post   88% 17 2 0   100% 2 0   89%
api/views/oauth2_views.py VerifyEmail.get   0% 8 8 0   100% 0 0   0%
api/views/oauth2_views.py TokenView.post   83% 6 1 0   100% 0 0   83%
api/views/oauth2_views.py log_app_authorized   100% 2 0 0   100% 0 0   100%
api/views/oauth2_views.py CheckRates.get   58% 26 11 0   17% 6 1   50%
api/views/oauth2_views.py (no function)   100% 54 0 0   100% 0 0   100%
conf/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
conf/asgi.py (no function)   64% 14 5 0   33% 6 2   55%
conf/context_processors.py export_environment   0% 1 1 0   100% 0 0   0%
conf/context_processors.py (no function)   0% 2 2 0   100% 0 0   0%
conf/oauth2_extensions.py OAuth2Authentication.authenticate   90% 10 1 0   75% 8 2   83%
conf/oauth2_extensions.py (no function)   100% 11 0 0   100% 0 0   100%
conf/settings/__init__.py (no function)   100% 5 0 0   100% 0 0   100%
conf/settings/auth.py (no function)   100% 2 0 0   100% 0 0   100%
conf/settings/base.py (no function)   100% 9 0 0   100% 0 0   100%
conf/settings/caches.py _make_cache_config   100% 1 0 0   100% 0 0   100%
conf/settings/caches.py (no function)   100% 6 0 0   100% 0 0   100%
conf/settings/databases.py (no function)   100% 2 0 0   100% 0 0   100%
conf/settings/elasticsearch.py _elasticsearch_connect   100% 8 0 0   100% 0 0   100%
conf/settings/elasticsearch.py (no function)   91% 11 1 0   50% 2 1   85%
conf/settings/email.py (no function)   92% 13 1 0   50% 2 1   87%
conf/settings/i18n.py (no function)   100% 4 0 0   100% 0 0   100%
conf/settings/link_validation.py LinkValidationCacheExpiryConfiguration.__init__   50% 12 6 0   75% 4 1   56%
conf/settings/link_validation.py LinkValidationCacheExpiryConfiguration._config   60% 5 2 0   100% 0 0   60%
conf/settings/link_validation.py (no function)   100% 16 0 0   100% 0 0   100%
conf/settings/logging.py health_check_filter   0% 1 1 0   100% 0 0   0%
conf/settings/logging.py suppress_unwanted_logs   100% 1 0 0   100% 0 0   100%
conf/settings/logging.py (no function)   79% 28 6 0   25% 8 2   67%
conf/settings/misc.py (no function)   100% 9 0 0   100% 0 0   100%
conf/settings/oauth2.py (no function)   100% 9 0 0   50% 4 2   85%
conf/settings/openverse.py (no function)   100% 3 0 0   50% 2 1   80%
conf/settings/rest_framework.py (no function)   100% 18 0 0   50% 4 2   91%
conf/settings/security.py (no function)   92% 26 2 0   70% 10 3   86%
conf/settings/sentry.py profiles_sampler   0% 4 4 0   0% 2 0   0%
conf/settings/sentry.py (no function)   75% 16 4 0   50% 2 1   72%
conf/settings/signals.py add_request_id_to_error_response   100% 2 0 0   100% 0 0   100%
conf/settings/signals.py (no function)   100% 6 0 0   100% 0 0   100%
conf/settings/spectacular.py (no function)   100% 6 0 0   50% 2 1   88%
conf/settings/static.py (no function)   100% 3 0 0   100% 0 0   100%
conf/settings/thumbnails.py (no function)   100% 11 0 0   100% 0 0   100%
conf/urls/__init__.py (no function)   100% 16 0 0   100% 0 0   100%
conf/urls/auth_tokens.py (no function)   100% 4 0 0   100% 0 0   100%
conf/urls/deprecations.py (no function)   100% 6 0 0   100% 0 0   100%
conf/urls/openapi.py (no function)   100% 3 0 0   100% 0 0   100%
Total     78% 3801 837 0   50% 628 87   74%

No items found using the specified filter.