Coverage report: 86%

Files Functions Classes

coverage.py v7.13.5, created at 2026-04-12 10:49 +0000

File function   statements missing excluded   coverage
apps / __init__.py (no function)   0 0 0   100%
apps / ai / __init__.py (no function)   0 0 0   100%
apps / ai / api.py handle_ai_errors   3 0 0   100%
apps / ai / api.py handle_ai_errors.wrapper   6 0 0   100%
apps / ai / api.py get_ai_status   14 0 0   100%
apps / ai / api.py test_api_key   6 0 0   100%
apps / ai / api.py save_api_key   7 0 0   100%
apps / ai / api.py list_prompts   2 0 0   100%
apps / ai / api.py _get_prompt_or_error   4 0 0   100%
apps / ai / api.py _validate_model   7 3 0   57%
apps / ai / api.py get_prompt   1 0 0   100%
apps / ai / api.py update_prompt   18 2 0   89%
apps / ai / api.py list_models   7 0 0   100%
apps / ai / api.py tips_endpoint   26 3 0   88%
apps / ai / api.py timer_name_endpoint   21 3 0   86%
apps / ai / api.py repair_selector_endpoint   12 2 0   83%
apps / ai / api.py sources_needing_attention_endpoint   2 0 0   100%
apps / ai / api.py (no function)   79 0 0   100%
apps / ai / api_discover.py discover_endpoint   30 11 0   63%
apps / ai / api_discover.py (no function)   19 0 0   100%
apps / ai / api_quotas.py _build_quota_response   4 0 0   100%
apps / ai / api_quotas.py get_quotas   6 0 0   100%
apps / ai / api_quotas.py update_quotas   9 1 0   89%
apps / ai / api_quotas.py (no function)   15 0 0   100%
apps / ai / api_remix.py remix_suggestions   25 25 0   0%
apps / ai / api_remix.py create_remix_endpoint   28 28 0   0%
apps / ai / api_remix.py (no function)   29 0 0   100%
apps / ai / api_scaling.py scale_recipe_endpoint   36 19 0   47%
apps / ai / api_scaling.py (no function)   24 0 0   100%
apps / ai / models.py AIDiscoverySuggestion.__str__   1 1 0   0%
apps / ai / models.py AIPrompt.__str__   1 1 0   0%
apps / ai / models.py AIPrompt.format_user_prompt   1 0 0   100%
apps / ai / models.py AIPrompt.get_prompt   1 0 0   100%
apps / ai / models.py (no function)   35 0 0   100%
apps / ai / services / __init__.py (no function)   0 0 0   100%
apps / ai / services / cache.py _make_cache_key   4 0 0   100%
apps / ai / services / cache.py cache_ai_response   3 0 0   100%
apps / ai / services / cache.py cache_ai_response.decorator   2 0 0   100%
apps / ai / services / cache.py cache_ai_response.decorator.wrapper   15 2 0   87%
apps / ai / services / cache.py is_ai_cache_hit   2 2 0   0%
apps / ai / services / cache.py invalidate_ai_cache   2 2 0   0%
apps / ai / services / cache.py (no function)   13 0 0   100%
apps / ai / services / discover.py get_discover_suggestions   22 0 0   100%
apps / ai / services / discover.py _format_suggestions   8 0 0   100%
apps / ai / services / discover.py _generate_in_thread   5 0 0   100%
apps / ai / services / discover.py _generate_seasonal_suggestions   23 3 0   87%
apps / ai / services / discover.py _generate_recommended_suggestions   24 7 0   71%
apps / ai / services / discover.py _generate_new_suggestions   24 7 0   71%
apps / ai / services / discover.py _get_season   8 0 0   100%
apps / ai / services / discover.py (no function)   19 0 0   100%
apps / ai / services / openrouter.py OpenRouterService.__init__   6 0 0   100%
apps / ai / services / openrouter.py OpenRouterService._parse_json_response   16 0 0   100%
apps / ai / services / openrouter.py OpenRouterService.complete   18 0 0   100%
apps / ai / services / openrouter.py OpenRouterService.complete_async   18 18 0   0%
apps / ai / services / openrouter.py OpenRouterService.is_available   2 0 0   100%
apps / ai / services / openrouter.py OpenRouterService.get_available_models   12 0 0   100%
apps / ai / services / openrouter.py OpenRouterService.test_connection   10 0 0   100%
apps / ai / services / openrouter.py OpenRouterService.validate_key_cached   18 3 0   83%
apps / ai / services / openrouter.py OpenRouterService.invalidate_key_cache   1 0 0   100%
apps / ai / services / openrouter.py (no function)   30 0 0   100%
apps / ai / services / quota.py _cache_key   2 0 0   100%
apps / ai / services / quota.py _seconds_until_midnight_utc   3 0 0   100%
apps / ai / services / quota.py _next_midnight_utc_iso   3 0 0   100%
apps / ai / services / quota.py check_quota   16 1 0   94%
apps / ai / services / quota.py reserve_quota   25 3 0   88%
apps / ai / services / quota.py release_quota   11 3 0   73%
apps / ai / services / quota.py increment_quota   6 0 0   100%
apps / ai / services / quota.py get_usage   1 0 0   100%
apps / ai / services / quota.py (no function)   14 0 0   100%
apps / ai / services / ranking.py _filter_valid   1 0 0   100%
apps / ai / services / ranking.py _score_result   10 0 0   100%
apps / ai / services / ranking.py rank_results   5 0 0   100%
apps / ai / services / ranking.py (no function)   3 0 0   100%
apps / ai / services / remix.py get_remix_suggestions   9 0 0   100%
apps / ai / services / remix.py create_remix   29 3 0   90%
apps / ai / services / remix.py estimate_nutrition   15 0 0   100%
apps / ai / services / remix.py _parse_time   13 0 0   100%
apps / ai / services / remix.py _parse_servings   7 0 0   100%
apps / ai / services / remix.py _generate_tips_background   13 13 0   0%
apps / ai / services / remix.py (no function)   17 0 0   100%
apps / ai / services / scaling.py _parse_time   12 0 0   100%
apps / ai / services / scaling.py _format_time   9 0 0   100%
apps / ai / services / scaling.py _build_result   1 0 0   100%
apps / ai / services / scaling.py _get_cached   5 0 0   100%
apps / ai / services / scaling.py _get_instructions_list   5 3 0   40%
apps / ai / services / scaling.py _format_recipe_data   6 1 0   83%
apps / ai / services / scaling.py _call_ai_and_validate   7 0 0   100%
apps / ai / services / scaling.py scale_recipe   14 0 0   100%
apps / ai / services / scaling.py calculate_nutrition   20 2 0   90%
apps / ai / services / scaling.py (no function)   18 0 0   100%
apps / ai / services / selector.py repair_selector   21 0 0   100%
apps / ai / services / selector.py get_sources_needing_attention   1 0 0   100%
apps / ai / services / selector.py repair_all_broken_selectors   21 21 0   0%
apps / ai / services / selector.py (no function)   11 0 0   100%
apps / ai / services / timer.py generate_timer_name   18 0 0   100%
apps / ai / services / timer.py (no function)   8 0 0   100%
apps / ai / services / tips.py generate_tips   18 0 0   100%
apps / ai / services / tips.py clear_tips   7 0 0   100%
apps / ai / services / tips.py (no function)   8 0 0   100%
apps / ai / services / validator.py ValidationError.__init__   2 0 0   100%
apps / ai / services / validator.py AIResponseValidator.validate   9 0 0   100%
apps / ai / services / validator.py AIResponseValidator._format_error   6 1 0   83%
apps / ai / services / validator.py AIResponseValidator._format_required   7 4 0   43%
apps / ai / services / validator.py AIResponseValidator._format_type   5 1 0   80%
apps / ai / services / validator.py AIResponseValidator._format_min_items   1 0 0   100%
apps / ai / services / validator.py AIResponseValidator._format_max_items   1 0 0   100%
apps / ai / services / validator.py AIResponseValidator.get_schema   1 0 0   100%
apps / ai / services / validator.py (no function)   18 0 0   100%
apps / core / __init__.py (no function)   0 0 0   100%
apps / core / api.py get_mode   6 1 0   83%
apps / core / api.py health_check   3 0 0   100%
apps / core / api.py readiness_check   7 2 0   71%
apps / core / api.py get_reset_preview   3 0 0   100%
apps / core / api.py reset_database   51 13 0   75%
apps / core / api.py (no function)   34 0 0   100%
apps / core / apps.py (no function)   4 0 0   100%
apps / core / auth.py SessionAuth.authenticate   3 0 0   100%
apps / core / auth.py SessionAuth._authenticate_home   9 0 0   100%
apps / core / auth.py SessionAuth._authenticate_passkey   20 9 0   55%
apps / core / auth.py AdminAuth.authenticate   10 1 0   90%
apps / core / auth.py (no function)   15 0 0   100%
apps / core / auth_api.py _require_auth_mode   2 0 0   100%
apps / core / auth_api.py logout_view   6 0 0   100%
apps / core / auth_api.py get_me   9 3 0   67%
apps / core / auth_api.py (no function)   15 0 0   100%
apps / core / auth_helpers.py require_passkey_mode   2 0 0   100%
apps / core / auth_helpers.py passkey_user_profile_response   1 0 0   100%
apps / core / auth_helpers.py (no function)   4 0 0   100%
apps / core / cache.py PostgreSafeDatabaseCache._base_set   5 2 0   60%
apps / core / cache.py (no function)   4 0 0   100%
apps / core / context_processors.py app_context   1 0 0   100%
apps / core / context_processors.py (no function)   2 0 0   100%
apps / core / device_code_api.py request_code   21 2 0   90%
apps / core / device_code_api.py poll_status   28 1 0   96%
apps / core / device_code_api.py authorize_code   30 2 0   93%
apps / core / device_code_api.py (no function)   26 0 0   100%
apps / core / encryption.py _get_encryption_key   3 0 0   100%
apps / core / encryption.py encrypt_value   8 2 0   75%
apps / core / encryption.py decrypt_value   14 4 0   71%
apps / core / encryption.py is_encrypted   1 0 0   100%
apps / core / encryption.py (no function)   14 4 0   71%
apps / core / logging.py JSONFormatter.format   9 1 0   89%
apps / core / logging.py (no function)   5 0 0   100%
apps / core / management / __init__.py (no function)   0 0 0   100%
apps / core / management / commands / __init__.py (no function)   0 0 0   100%
apps / core / management / commands / cleanup_device_codes.py Command.add_arguments   1 1 0   0%
apps / core / management / commands / cleanup_device_codes.py Command.handle   26 26 0   0%
apps / core / management / commands / cleanup_device_codes.py (no function)   9 0 0   100%
apps / core / management / commands / cleanup_sessions.py Command.handle   9 9 0   0%
apps / core / management / commands / cleanup_sessions.py (no function)   8 0 0   100%
apps / core / management / commands / cookie_admin.py Command.add_arguments   46 0 0   100%
apps / core / management / commands / cookie_admin.py Command.handle   9 2 0   78%
apps / core / management / commands / cookie_admin.py Command._error   4 0 0   100%
apps / core / management / commands / cookie_admin.py Command._success   6 0 0   100%
apps / core / management / commands / cookie_admin.py Command._get_user   4 0 0   100%
apps / core / management / commands / cookie_admin.py Command._user_dict   3 0 0   100%
apps / core / management / commands / cookie_admin.py Command._handle_status   5 0 0   100%
apps / core / management / commands / cookie_admin.py Command._collect_status   33 4 0   88%
apps / core / management / commands / cookie_admin.py Command._print_status   17 1 0   94%
apps / core / management / commands / cookie_admin.py Command._handle_audit   17 2 0   88%
apps / core / management / commands / cookie_admin.py Command._collect_registration_events   2 0 0   100%
apps / core / management / commands / cookie_admin.py Command._collect_login_events   3 0 0   100%
apps / core / management / commands / cookie_admin.py Command._collect_device_code_events   3 0 0   100%
apps / core / management / commands / cookie_admin.py Command._format_audit_event   9 2 0   78%
apps / core / management / commands / cookie_admin.py Command._handle_list_users   17 2 0   88%
apps / core / management / commands / cookie_admin.py Command._handle_create_user   12 0 0   100%
apps / core / management / commands / cookie_admin.py Command._handle_delete_user   5 0 0   100%
apps / core / management / commands / cookie_admin.py Command._handle_promote   7 2 0   71%
apps / core / management / commands / cookie_admin.py Command._handle_demote   9 2 0   78%
apps / core / management / commands / cookie_admin.py Command._handle_activate   4 0 0   100%
apps / core / management / commands / cookie_admin.py Command._handle_deactivate   13 4 0   69%
apps / core / management / commands / cookie_admin.py Command._handle_set_unlimited   5 0 0   100%
apps / core / management / commands / cookie_admin.py Command._handle_remove_unlimited   5 0 0   100%
apps / core / management / commands / cookie_admin.py Command._handle_usage   14 2 0   86%
apps / core / management / commands / cookie_admin.py Command._collect_usage_data   5 0 0   100%
apps / core / management / commands / cookie_admin.py Command._print_user_usage   12 12 0   0%
apps / core / management / commands / cookie_admin.py Command._handle_create_session   24 1 0   96%
apps / core / management / commands / cookie_admin.py Command._handle_reset   51 7 0   86%
apps / core / management / commands / cookie_admin.py (no function)   40 0 0   100%
apps / core / management / commands / createsuperuser.py Command.handle   1 0 0   100%
apps / core / management / commands / createsuperuser.py (no function)   4 0 0   100%
apps / core / middleware.py get_client_ip   9 0 0   100%
apps / core / middleware.py RequestIDMiddleware.__init__   1 0 0   100%
apps / core / middleware.py RequestIDMiddleware.__call__   4 0 0   100%
apps / core / middleware.py DeviceDetectionMiddleware.__init__   1 0 0   100%
apps / core / middleware.py DeviceDetectionMiddleware.__call__   2 0 0   100%
apps / core / middleware.py DeviceDetectionMiddleware._is_legacy_device   5 0 0   100%
apps / core / middleware.py DeviceDetectionMiddleware._is_legacy_ios   2 0 0   100%
apps / core / middleware.py DeviceDetectionMiddleware._is_internet_explorer   1 0 0   100%
apps / core / middleware.py DeviceDetectionMiddleware._is_edge_legacy   1 0 0   100%
apps / core / middleware.py DeviceDetectionMiddleware._is_old_chrome   4 0 0   100%
apps / core / middleware.py DeviceDetectionMiddleware._is_old_firefox   2 0 0   100%
apps / core / middleware.py (no function)   19 0 0   100%
apps / core / models.py AppSettings.save   4 1 0   75%
apps / core / models.py AppSettings.get   2 0 0   100%
apps / core / models.py AppSettings.openrouter_api_key   4 1 0   75%
apps / core / models.py AppSettings.openrouter_api_key   3 1 0   67%
apps / core / models.py WebAuthnCredential.__str__   1 1 0   0%
apps / core / models.py generate_device_code   1 0 0   100%
apps / core / models.py DeviceCode.__str__   1 1 0   0%
apps / core / models.py DeviceCode.save   3 1 0   67%
apps / core / models.py DeviceCode.is_expired   1 0 0   100%
apps / core / models.py (no function)   53 0 0   100%
apps / core / passkey_api.py _get_rp_id   3 0 0   100%
apps / core / passkey_api.py _get_origin   2 0 0   100%
apps / core / passkey_api.py register_options   10 0 0   100%
apps / core / passkey_api.py register_verify   25 0 0   100%
apps / core / passkey_api.py _create_passkey_user_and_profile   8 0 0   100%
apps / core / passkey_api.py login_options   10 0 0   100%
apps / core / passkey_api.py login_verify   42 2 0   95%
apps / core / passkey_api.py list_credentials   4 0 0   100%
apps / core / passkey_api.py add_credential_options   7 0 0   100%
apps / core / passkey_api.py add_credential_verify   19 1 0   95%
apps / core / passkey_api.py delete_credential   11 0 0   100%
apps / core / passkey_api.py (no function)   45 0 0   100%
apps / core / validators.py is_blocked_ip   5 0 0   100%
apps / core / validators.py resolve_hostname   7 0 0   100%
apps / core / validators.py ResolvedURL.__str__   1 1 0   0%
apps / core / validators.py ResolvedURL.curl_resolve   1 0 0   100%
apps / core / validators.py validate_url   10 0 0   100%
apps / core / validators.py validate_redirect_url   5 0 0   100%
apps / core / validators.py check_response_size   8 2 0   75%
apps / core / validators.py check_content_size   2 0 0   100%
apps / core / validators.py (no function)   21 0 0   100%
apps / core / views.py csrf_failure   1 0 0   100%
apps / core / views.py (no function)   5 0 0   100%
apps / legacy / __init__.py (no function)   0 0 0   100%
apps / legacy / apps.py (no function)   4 0 0   100%
apps / legacy / templatetags / __init__.py (no function)   0 0 0   100%
apps / legacy / templatetags / legacy_tags.py format_time   10 0 0   100%
apps / legacy / templatetags / legacy_tags.py in_list   1 0 0   100%
apps / legacy / templatetags / legacy_tags.py format_nutrition_key   7 0 0   100%
apps / legacy / templatetags / legacy_tags.py (no function)   9 0 0   100%
apps / legacy / urls.py (no function)   4 0 0   100%
apps / legacy / views.py require_profile   3 0 0   100%
apps / legacy / views.py require_profile.wrapper   18 0 0   100%
apps / legacy / views.py require_admin   3 0 0   100%
apps / legacy / views.py require_admin.wrapper   3 0 0   100%
apps / legacy / views.py _is_ai_available   5 0 0   100%
apps / legacy / views.py device_pair   3 0 0   100%
apps / legacy / views.py profile_selector   4 0 0   100%
apps / legacy / views.py home   10 0 0   100%
apps / legacy / views.py search   3 0 0   100%
apps / legacy / views.py recipe_detail   22 0 0   100%
apps / legacy / views.py play_mode   7 0 0   100%
apps / legacy / views.py all_recipes   4 0 0   100%
apps / legacy / views.py favorites   3 0 0   100%
apps / legacy / views.py collections   3 0 0   100%
apps / legacy / views.py collection_detail   5 0 0   100%
apps / legacy / views.py settings   16 0 0   100%
apps / legacy / views.py (no function)   31 0 0   100%
apps / profiles / __init__.py (no function)   0 0 0   100%
apps / profiles / api.py _resolve_authenticated_user   15 5 0   67%
apps / profiles / api.py _check_profile_ownership   10 1 0   90%
apps / profiles / api.py list_profiles   13 1 0   92%
apps / profiles / api.py create_profile   9 2 0   78%
apps / profiles / api.py get_profile   7 3 0   57%
apps / profiles / api.py update_profile   11 3 0   73%
apps / profiles / api.py get_deletion_preview   18 0 0   100%
apps / profiles / api.py delete_profile   24 8 0   67%
apps / profiles / api.py select_profile   9 3 0   67%
apps / profiles / api.py set_unlimited   7 0 0   100%
apps / profiles / api.py rename_profile   10 0 0   100%
apps / profiles / api.py (no function)   46 0 0   100%
apps / profiles / apps.py (no function)   4 0 0   100%
apps / profiles / models.py Profile.__str__   1 0 0   100%
apps / profiles / models.py Profile.next_avatar_color   5 1 0   80%
apps / profiles / models.py (no function)   17 0 0   100%
apps / profiles / utils.py get_current_profile   7 0 0   100%
apps / profiles / utils.py get_current_profile_or_none   7 0 0   100%
apps / profiles / utils.py aget_current_profile_or_none   3 0 0   100%
apps / profiles / utils.py aget_current_profile_or_none._get_profile   7 0 0   100%
apps / profiles / utils.py (no function)   6 0 0   100%
apps / recipes / __init__.py (no function)   0 0 0   100%
apps / recipes / api.py RecipeOut.resolve_image   3 1 0   67%
apps / recipes / api.py RecipeOut.resolve_scraped_at   1 0 0   100%
apps / recipes / api.py RecipeOut.resolve_updated_at   1 0 0   100%
apps / recipes / api.py RecipeOut.resolve_remixed_from_id   1 0 0   100%
apps / recipes / api.py RecipeOut.resolve_linked_recipes   1 0 0   100%
apps / recipes / api.py RecipeListOut.resolve_image   3 1 0   67%
apps / recipes / api.py RecipeListOut.resolve_scraped_at   1 0 0   100%
apps / recipes / api.py list_recipes   11 1 0   91%
apps / recipes / api.py scrape_recipe   28 4 0   86%
apps / recipes / api.py _get_or_fetch_results   11 0 0   100%
apps / recipes / api.py _aggregate_sites   4 0 0   100%
apps / recipes / api.py _paginate_results   7 0 0   100%
apps / recipes / api.py _cache_and_map_images   11 0 0   100%
apps / recipes / api.py search_recipes   11 1 0   91%
apps / recipes / api.py cache_health   6 6 0   0%
apps / recipes / api.py get_recipe   17 8 0   53%
apps / recipes / api.py delete_recipe   6 1 0   83%
apps / recipes / api.py (no function)   58 0 0   100%
apps / recipes / api_user.py FavoriteOut.resolve_created_at   1 0 0   100%
apps / recipes / api_user.py list_favorites   2 0 0   100%
apps / recipes / api_user.py add_favorite   9 1 0   89%
apps / recipes / api_user.py remove_favorite   4 0 0   100%
apps / recipes / api_user.py CollectionItemOut.resolve_added_at   1 0 0   100%
apps / recipes / api_user.py CollectionOut.resolve_recipe_count   1 0 0   100%
apps / recipes / api_user.py CollectionOut.resolve_cover_image   8 5 0   38%
apps / recipes / api_user.py CollectionOut.resolve_created_at   1 0 0   100%
apps / recipes / api_user.py CollectionOut.resolve_updated_at   1 0 0   100%
apps / recipes / api_user.py CollectionDetailOut.resolve_recipes   1 0 0   100%
apps / recipes / api_user.py CollectionDetailOut.resolve_created_at   1 0 0   100%
apps / recipes / api_user.py CollectionDetailOut.resolve_updated_at   1 0 0   100%
apps / recipes / api_user.py list_collections   2 0 0   100%
apps / recipes / api_user.py create_collection   8 1 0   88%
apps / recipes / api_user.py get_collection   3 0 0   100%
apps / recipes / api_user.py update_collection   9 2 0   78%
apps / recipes / api_user.py delete_collection   4 0 0   100%
apps / recipes / api_user.py add_recipe_to_collection   10 0 0   100%
apps / recipes / api_user.py remove_recipe_from_collection   5 0 0   100%
apps / recipes / api_user.py HistoryOut.resolve_viewed_at   1 0 0   100%
apps / recipes / api_user.py list_history   3 0 0   100%
apps / recipes / api_user.py record_view   7 1 0   86%
apps / recipes / api_user.py clear_history   3 0 0   100%
apps / recipes / api_user.py (no function)   73 0 0   100%
apps / recipes / management / __init__.py (no function)   0 0 0   100%
apps / recipes / management / commands / __init__.py (no function)   0 0 0   100%
apps / recipes / management / commands / cleanup_search_images.py Command.add_arguments   2 0 0   100%
apps / recipes / management / commands / cleanup_search_images.py Command.handle   34 1 0   97%
apps / recipes / management / commands / cleanup_search_images.py Command._record_run   1 0 0   100%
apps / recipes / management / commands / cleanup_search_images.py (no function)   14 0 0   100%
apps / recipes / models.py Recipe.__str__   1 0 0   100%
apps / recipes / models.py SearchSource.__str__   1 0 0   100%
apps / recipes / models.py RecipeFavorite.__str__   1 1 0   0%
apps / recipes / models.py RecipeCollection.__str__   1 1 0   0%
apps / recipes / models.py RecipeCollectionItem.__str__   1 1 0   0%
apps / recipes / models.py RecipeViewHistory.__str__   1 1 0   0%
apps / recipes / models.py CachedSearchImage.__str__   1 0 0   100%
apps / recipes / models.py ServingAdjustment.__str__   1 1 0   0%
apps / recipes / models.py (no function)   119 0 0   100%
apps / recipes / services / __init__.py (no function)   2 0 0   100%
apps / recipes / services / fingerprint.py get_random_profile   2 0 0   100%
apps / recipes / services / fingerprint.py get_random_delay   1 0 0   100%
apps / recipes / services / fingerprint.py get_fallback_profiles   4 1 0   75%
apps / recipes / services / fingerprint.py (no function)   8 0 0   100%
apps / recipes / services / image_cache.py SearchImageCache.cache_images   6 0 0   100%
apps / recipes / services / image_cache.py SearchImageCache._download_and_save   32 13 0   59%
apps / recipes / services / image_cache.py SearchImageCache._fetch_image   14 3 0   79%
apps / recipes / services / image_cache.py SearchImageCache._fetch_image_safe   34 16 0   53%
apps / recipes / services / image_cache.py SearchImageCache._looks_like_image   3 0 0   100%
apps / recipes / services / image_cache.py SearchImageCache.get_cached_urls_batch   9 0 0   100%
apps / recipes / services / image_cache.py SearchImageCache._generate_filename   2 0 0   100%
apps / recipes / services / image_cache.py SearchImageCache._convert_to_jpeg   19 2 0   89%
apps / recipes / services / image_cache.py (no function)   24 0 0   100%
apps / recipes / services / sanitizer.py sanitize_recipe_data   14 3 0   79%
apps / recipes / services / sanitizer.py (no function)   2 0 0   100%
apps / recipes / services / scraper.py RecipeScraper.__init__   1 0 0   100%
apps / recipes / services / scraper.py RecipeScraper.scrape_url   30 8 0   73%
apps / recipes / services / scraper.py RecipeScraper._generate_tips_background   13 4 0   69%
apps / recipes / services / scraper.py RecipeScraper._fetch_html   15 2 0   87%
apps / recipes / services / scraper.py RecipeScraper._fetch_with_redirects   23 9 0   61%
apps / recipes / services / scraper.py RecipeScraper._parse_recipe   11 0 0   100%
apps / recipes / services / scraper.py RecipeScraper._safe_get   9 0 0   100%
apps / recipes / services / scraper.py RecipeScraper._safe_get_ingredient_groups   7 2 0   71%
apps / recipes / services / scraper.py RecipeScraper._parse_time   9 0 0   100%
apps / recipes / services / scraper.py RecipeScraper._parse_servings   6 1 0   83%
apps / recipes / services / scraper.py RecipeScraper._parse_rating   6 0 0   100%
apps / recipes / services / scraper.py RecipeScraper._parse_rating_count   6 2 0   67%
apps / recipes / services / scraper.py RecipeScraper._download_image   17 1 0   94%
apps / recipes / services / scraper.py RecipeScraper._fetch_image_with_redirects   33 17 0   48%
apps / recipes / services / scraper.py RecipeScraper._convert_webp_to_jpeg   20 14 0   30%
apps / recipes / services / scraper.py RecipeScraper._is_image_url   3 0 0   100%
apps / recipes / services / scraper.py RecipeScraper._generate_image_filename   2 0 0   100%
apps / recipes / services / scraper.py (no function)   42 0 0   100%
apps / recipes / services / search.py RecipeSearch.__init__   1 0 0   100%
apps / recipes / services / search.py RecipeSearch.search   10 0 0   100%
apps / recipes / services / search.py RecipeSearch._get_enabled_sources   6 0 0   100%
apps / recipes / services / search.py RecipeSearch._empty_response   1 0 0   100%
apps / recipes / services / search.py RecipeSearch._fetch_all_sources   5 0 0   100%
apps / recipes / services / search.py RecipeSearch._aggregate_results   11 0 0   100%
apps / recipes / services / search.py RecipeSearch._deduplicate_and_convert   7 0 0   100%
apps / recipes / services / search.py RecipeSearch._paginate   4 0 0   100%
apps / recipes / services / search.py RecipeSearch._filter_relevant   9 1 0   89%
apps / recipes / services / search.py RecipeSearch._apply_ai_ranking   2 0 0   100%
apps / recipes / services / search.py RecipeSearch._search_source   13 0 0   100%
apps / recipes / services / search.py RecipeSearch._try_fetch_and_parse   14 7 0   50%
apps / recipes / services / search.py RecipeSearch._build_profile_list   4 0 0   100%
apps / recipes / services / search.py RecipeSearch._fetch_with_profile   4 0 0   100%
apps / recipes / services / search.py RecipeSearch._should_retry_status   1 0 0   100%
apps / recipes / services / search.py RecipeSearch._should_retry_error   4 4 0   0%
apps / recipes / services / search.py RecipeSearch._fetch_url   21 9 0   57%
apps / recipes / services / search.py RecipeSearch._parse_search_results   13 0 0   100%
apps / recipes / services / search.py RecipeSearch._record_failure   3 0 0   100%
apps / recipes / services / search.py RecipeSearch._record_failure.update   4 0 0   100%
apps / recipes / services / search.py RecipeSearch._record_success   3 0 0   100%
apps / recipes / services / search.py RecipeSearch._record_success.update   4 0 0   100%
apps / recipes / services / search.py (no function)   48 0 0   100%
apps / recipes / services / search_parsers.py find_link   9 1 0   89%
apps / recipes / services / search_parsers.py extract_title   9 4 0   56%
apps / recipes / services / search_parsers.py extract_rating   10 2 0   80%
apps / recipes / services / search_parsers.py extract_description   4 0 0   100%
apps / recipes / services / search_parsers.py parse_srcset   6 6 0   0%
apps / recipes / services / search_parsers.py _collect_srcset_strings   11 5 0   55%
apps / recipes / services / search_parsers.py best_url_from_srcset   5 2 0   60%
apps / recipes / services / search_parsers.py extract_image   10 2 0   80%
apps / recipes / services / search_parsers.py extract_result_from_element   23 7 0   70%
apps / recipes / services / search_parsers.py _parse_articles   2 0 0   100%
apps / recipes / services / search_parsers.py _parse_cards   6 1 0   83%
apps / recipes / services / search_parsers.py _parse_links   10 7 0   30%
apps / recipes / services / search_parsers.py fallback_parse   5 0 0   100%
apps / recipes / services / search_parsers.py _check_exclusion_patterns   1 0 0   100%
apps / recipes / services / search_parsers.py _check_recipe_patterns   1 0 0   100%
apps / recipes / services / search_parsers.py _check_site_rules   4 0 0   100%
apps / recipes / services / search_parsers.py _check_path_heuristics   6 0 0   100%
apps / recipes / services / search_parsers.py get_url_signal   12 1 0   92%
apps / recipes / services / search_parsers.py looks_like_recipe_url   2 0 0   100%
apps / recipes / services / search_parsers.py looks_like_recipe_title   14 0 0   100%
apps / recipes / services / search_parsers.py (no function)   33 0 0   100%
apps / recipes / sources_api.py SourceOut.resolve_last_validated_at   3 0 0   100%
apps / recipes / sources_api.py list_sources   2 0 0   100%
apps / recipes / sources_api.py enabled_count   3 0 0   100%
apps / recipes / sources_api.py get_source   5 0 0   100%
apps / recipes / sources_api.py toggle_source   7 0 0   100%
apps / recipes / sources_api.py bulk_toggle_sources   2 2 0   0%
apps / recipes / sources_api.py update_selector   7 0 0   100%
apps / recipes / sources_api.py test_source   28 0 0   100%
apps / recipes / sources_api.py test_all_sources   31 31 0   0%
apps / recipes / sources_api.py (no function)   35 0 0   100%
apps / recipes / utils.py _split_whole_and_fraction   7 0 0   100%
apps / recipes / utils.py _find_closest_fraction   11 7 0   36%
apps / recipes / utils.py _format_fraction_result   3 1 0   67%
apps / recipes / utils.py decimal_to_fraction   9 0 0   100%
apps / recipes / utils.py tidy_ingredient   20 2 0   90%
apps / recipes / utils.py tidy_quantities   1 0 0   100%
apps / recipes / utils.py (no function)   11 0 0   100%
cookie / __init__.py (no function)   0 0 0   100%
cookie / settings.py get_secret_key   7 2 0   71%
cookie / settings.py (no function)   76 2 0   97%
cookie / urls.py (no function)   36 0 0   100%
cookie / wsgi.py (no function)   4 4 0   0%
Total     4484 611 0   86%

No items found using the specified filter.

← Back to Dashboard