Backend Complexity Report

Cyclomatic Complexity and Maintainability Index Analysis

2.79
Avg Cyclomatic Complexity
86.14
Avg Maintainability Index
466
Functions Analyzed
74
Files Analyzed

Functions by Complexity

FileFunctionTypeComplexityRating
apps/ai/services/validator.py _validate_value method 40 E
apps/recipes/services/search.py _extract_result_from_element method 20 C
apps/ai/services/validator.py AIResponseValidator class 16 C
apps/recipes/services/search.py _looks_like_recipe_url method 15 C
apps/recipes/utils.py decimal_to_fraction function 14 C
apps/core/middleware.py _is_legacy_device method 14 C
apps/ai/services/ranking.py rank_results function 12 C
apps/ai/services/openrouter.py complete method 12 C
apps/ai/services/openrouter.py complete_async method 12 C
apps/ai/services/scaling.py scale_recipe function 12 C
apps/recipes/services/search.py _fallback_parse method 12 C
apps/ai/api.py update_prompt function 11 C
apps/recipes/services/search.py search method 11 C
apps/ai/api.py scale_recipe_endpoint function 10 B
apps/ai/services/remix.py create_remix function 10 B
apps/recipes/api.py search_recipes function 10 B
apps/ai/tests.py test_sources_needing_attention_endpoint method 9 B
apps/ai/services/remix.py estimate_nutrition function 9 B
apps/recipes/management/commands/cleanup_search_images.py handle method 9 B
apps/ai/api.py create_remix_endpoint function 8 B
apps/ai/api.py tips_endpoint function 8 B
apps/ai/tests.py test_ai_status_endpoint method 8 B
apps/ai/tests.py test_repair_selector_success method 8 B
apps/ai/services/timer.py generate_timer_name function 8 B
apps/ai/services/openrouter.py get_available_models method 8 B
apps/ai/services/openrouter.py validate_key_cached method 8 B
apps/ai/services/discover.py _generate_recommended_suggestions function 8 B
apps/ai/services/discover.py _generate_new_suggestions function 8 B
apps/recipes/services/search.py RecipeSearch class 8 B
apps/ai/api.py remix_suggestions function 7 B
apps/ai/api.py repair_selector_endpoint function 7 B
apps/ai/tests.py test_ai_status_no_api_key method 7 B
apps/ai/tests.py test_ai_status_valid_api_key method 7 B
apps/ai/tests.py test_validate_key_cached_caches_result method 7 B
apps/ai/services/tips.py generate_tips function 7 B
apps/ai/services/ranking.py _apply_ranking function 7 B
apps/ai/services/openrouter.py OpenRouterService class 7 B
apps/ai/services/scaling.py calculate_nutrition function 7 B
apps/recipes/utils.py tidy_ingredient function 7 B
apps/recipes/services/image_cache.py _download_and_save method 7 B
apps/recipes/services/scraper.py _download_image method 7 B
apps/recipes/services/scraper.py _convert_webp_to_jpeg method 7 B
apps/legacy/views.py recipe_detail function 7 B
apps/legacy/views.py play_mode function 7 B
apps/core/api.py reset_database function 7 B
apps/ai/api.py timer_name_endpoint function 6 B
apps/ai/tests.py test_ai_status_invalid_api_key method 6 B
apps/ai/tests.py test_validate_key_cached_caches_invalid_result method 6 B
apps/ai/tests.py test_repair_selector_low_confidence_no_update method 6 B
apps/ai/tests.py test_get_sources_needing_attention method 6 B
apps/ai/tests.py test_repair_selector_endpoint_success method 6 B
apps/ai/services/scaling.py _format_time function 6 B
apps/recipes/services/image_cache.py _fetch_image method 6 B
apps/recipes/services/image_cache.py _convert_to_jpeg method 6 B
apps/recipes/services/scraper.py scrape_url method 6 B
apps/recipes/management/commands/cleanup_search_images.py Command class 6 B
apps/core/middleware.py DeviceDetectionMiddleware class 6 B
apps/profiles/api.py delete_profile function 6 B
apps/ai/tests.py AIAPITests class 5 A
apps/ai/tests.py SelectorRepairServiceTests class 5 A
apps/ai/tests.py test_repair_selector_auto_update_disabled method 5 A
apps/ai/tests.py SelectorRepairAPITests class 5 A
apps/ai/tests.py test_repair_selector_endpoint_with_options method 5 A
apps/ai/tests.py test_ai_status_shows_available_with_key method 5 A
apps/ai/tests.py test_tips_returns_503_with_action_field_when_ai_unavailable method 5 A
apps/ai/services/remix.py _parse_time function 5 A
apps/ai/services/selector.py repair_selector function 5 A
apps/ai/services/selector.py repair_all_broken_selectors function 5 A
apps/ai/services/scaling.py _parse_time function 5 A
apps/ai/services/discover.py _format_suggestions function 5 A
apps/recipes/sources_api.py test_source function 5 A
apps/recipes/sources_api.py test_all_sources function 5 A
apps/recipes/services/image_cache.py SearchImageCache class 5 A
apps/recipes/services/scraper.py _parse_time method 5 A
apps/recipes/services/search.py _parse_search_results method 5 A
apps/ai/api.py get_ai_status function 4 A
apps/ai/api.py discover_endpoint function 4 A
apps/ai/tests.py test_models_endpoint_with_api_key method 4 A
apps/ai/tests.py test_get_prompt_endpoint method 4 A
apps/ai/tests.py test_update_prompt_endpoint method 4 A
apps/ai/tests.py test_update_prompt_invalid_model method 4 A
apps/ai/tests.py OpenRouterServiceTests class 4 A
apps/ai/tests.py test_get_available_models_success method 4 A
apps/ai/tests.py TimerNamingAPITests class 4 A
apps/ai/tests.py AIFeatureFallbackTests class 4 A
apps/ai/tests.py test_ai_status_shows_unavailable_without_key method 4 A
apps/ai/services/remix.py get_remix_suggestions function 4 A
apps/ai/services/openrouter.py test_connection method 4 A
apps/ai/services/discover.py get_discover_suggestions function 4 A
apps/ai/services/discover.py _generate_seasonal_suggestions function 4 A
apps/ai/services/discover.py _get_season function 4 A
apps/recipes/api.py list_recipes function 4 A
apps/recipes/api.py scrape_recipe function 4 A
apps/recipes/services/image_cache.py cache_images method 4 A
apps/recipes/services/image_cache.py get_cached_urls_batch method 4 A
apps/recipes/services/scraper.py RecipeScraper class 4 A
apps/recipes/services/scraper.py _fetch_html method 4 A
apps/recipes/services/scraper.py _safe_get method 4 A
apps/recipes/services/scraper.py _safe_get_ingredient_groups method 4 A
apps/legacy/views.py home function 4 A

File Maintainability

FileMaintainability IndexRating
apps/ai/tests.py 0.0 C
apps/ai/api.py 35.2 A
apps/recipes/services/search.py 44.6 A
apps/recipes/sources_api.py 47.7 A
apps/recipes/services/scraper.py 50.0 A
apps/ai/services/validator.py 50.4 A
apps/legacy/views.py 50.5 A
apps/ai/services/openrouter.py 55.1 A
apps/recipes/api.py 55.5 A
apps/recipes/api_user.py 57.7 A
apps/ai/services/discover.py 57.9 A
apps/ai/services/scaling.py 62.8 A
apps/ai/services/remix.py 63.2 A
apps/recipes/services/image_cache.py 63.4 A
apps/profiles/api.py 63.9 A
apps/recipes/utils.py 68.1 A
apps/core/api.py 69.3 A
cookie/settings.py 70.6 A
apps/ai/services/ranking.py 71.5 A
apps/recipes/management/commands/cleanup_search_images.py 73.4 A
apps/ai/services/selector.py 76.0 A
apps/recipes/services/fingerprint.py 76.4 A
apps/core/middleware.py 77.8 A
apps/legacy/templatetags/legacy_tags.py 80.3 A
apps/ai/services/timer.py 81.1 A
apps/ai/services/tips.py 85.1 A
apps/profiles/utils.py 87.0 A
apps/__init__.py 100.0 A
apps/ai/__init__.py 100.0 A
apps/ai/models.py 100.0 A
apps/ai/services/__init__.py 100.0 A
apps/ai/migrations/0008_update_serving_adjustment_indivisible.py 100.0 A
apps/ai/migrations/0009_fix_discover_prompts.py 100.0 A
apps/ai/migrations/0001_initial.py 100.0 A
apps/ai/migrations/0005_update_serving_adjustment_v2.py 100.0 A
apps/ai/migrations/0007_update_search_ranking_prompt.py 100.0 A
apps/ai/migrations/0003_nutrition_estimate_prompt.py 100.0 A
apps/ai/migrations/0006_add_ai_discovery_suggestion.py 100.0 A
apps/ai/migrations/0002_seed_prompts.py 100.0 A
apps/ai/migrations/0004_update_serving_adjustment_prompt.py 100.0 A
apps/ai/migrations/__init__.py 100.0 A
apps/recipes/__init__.py 100.0 A
apps/recipes/tests.py 100.0 A
apps/recipes/models.py 100.0 A
apps/recipes/services/__init__.py 100.0 A
apps/recipes/migrations/0001_initial.py 100.0 A
apps/recipes/migrations/0003_recipecollection_recipecollectionitem_recipefavorite_and_more.py 100.0 A
apps/recipes/migrations/0006_serving_adjustment_instructions_times.py 100.0 A
apps/recipes/migrations/0007_recipe_profile.py 100.0 A
apps/recipes/migrations/0004_cachedsearchimage.py 100.0 A
apps/recipes/migrations/0002_populate_search_sources.py 100.0 A
apps/recipes/migrations/0009_add_default_selectors.py 100.0 A
apps/recipes/migrations/0005_serving_adjustment.py 100.0 A
apps/recipes/migrations/0008_rename_recipes_rec_profile_idx_recipes_rec_profile_7945b8_idx.py 100.0 A
apps/recipes/migrations/__init__.py 100.0 A
apps/recipes/management/__init__.py 100.0 A
apps/recipes/management/commands/__init__.py 100.0 A
apps/legacy/urls.py 100.0 A
apps/legacy/apps.py 100.0 A
apps/legacy/__init__.py 100.0 A
apps/legacy/templatetags/__init__.py 100.0 A
apps/core/apps.py 100.0 A
apps/core/__init__.py 100.0 A
apps/core/models.py 100.0 A
apps/core/migrations/0001_initial.py 100.0 A
apps/core/migrations/__init__.py 100.0 A
apps/profiles/apps.py 100.0 A
apps/profiles/__init__.py 100.0 A
apps/profiles/models.py 100.0 A
apps/profiles/migrations/0001_initial.py 100.0 A
apps/profiles/migrations/__init__.py 100.0 A
cookie/wsgi.py 100.0 A
cookie/urls.py 100.0 A
cookie/__init__.py 100.0 A
← Back to Dashboard