Backend Complexity Report

Cyclomatic Complexity and Maintainability Index Analysis

2.62
Avg Cyclomatic Complexity
85.55
Avg Maintainability Index
570
Functions Analyzed
79
Files Analyzed

Functions by Complexity

FileFunctionTypeComplexityRating
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/recipes/services/search.py _fallback_parse method 12 C
apps/ai/services/scaling.py scale_recipe function 12 C
apps/ai/services/ranking.py rank_results function 12 C
apps/recipes/services/search.py search method 11 C
apps/ai/api.py update_prompt function 11 C
apps/ai/services/validator.py _format_error method 11 C
apps/recipes/api.py search_recipes function 10 B
apps/ai/services/remix.py create_remix function 10 B
apps/legacy/views.py recipe_detail function 9 B
apps/recipes/management/commands/cleanup_search_images.py handle method 9 B
apps/ai/tests.py test_sources_needing_attention_endpoint method 9 B
apps/ai/services/remix.py estimate_nutrition function 9 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/discover.py _generate_recommended_suggestions function 8 B
apps/ai/services/discover.py _generate_new_suggestions function 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/recipes/utils.py tidy_ingredient function 7 B
apps/recipes/api.py get_recipe 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/ai/api.py scale_recipe_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/tests.py test_cache_decorator_caches_result method 7 B
apps/ai/tests.py test_parse_time_remix method 7 B
apps/ai/tests.py test_parse_servings method 7 B
apps/ai/services/tips.py generate_tips function 7 B
apps/ai/services/scaling.py calculate_nutrition function 7 B
apps/ai/services/ranking.py _apply_ranking function 7 B
apps/ai/services/openrouter.py complete method 7 B
apps/ai/services/openrouter.py complete_async method 7 B
apps/core/api.py reset_database function 7 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/search.py RecipeSearch class 6 B
apps/recipes/services/search.py _find_link 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/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/ai/services/validator.py AIResponseValidator class 6 B
apps/ai/services/openrouter.py OpenRouterService class 6 B
apps/ai/services/openrouter.py _parse_json_response method 6 B
apps/core/middleware.py DeviceDetectionMiddleware class 6 B
apps/profiles/api.py delete_profile function 6 B
apps/legacy/views.py play_mode 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/search.py _parse_search_results method 5 A
apps/recipes/services/search.py _extract_title method 5 A
apps/recipes/services/search.py _extract_image method 5 A
apps/recipes/services/search.py _extract_result_from_element method 5 A
apps/recipes/services/scraper.py _parse_time method 5 A
apps/ai/api.py create_remix_endpoint function 5 A
apps/ai/api.py tips_endpoint function 5 A
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/tests.py AICacheTests class 5 A
apps/ai/tests.py RemixServiceTests class 5 A
apps/ai/tests.py DiscoverServiceTests class 5 A
apps/ai/tests.py test_format_suggestions_from_list method 5 A
apps/ai/tests.py test_apply_ranking_adds_missing method 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/ai/services/remix.py _parse_time function 5 A
apps/core/encryption.py decrypt_value function 5 A
apps/legacy/templatetags/legacy_tags.py format_time function 4 A
apps/legacy/templatetags/legacy_tags.py format_nutrition_key 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/ai/api.py get_ai_status function 4 A
apps/ai/api.py remix_suggestions function 4 A
apps/ai/api.py repair_selector_endpoint function 4 A
apps/ai/tests.py test_models_endpoint_with_api_key method 4 A

File Maintainability

FileMaintainability IndexRating
apps/ai/tests.py 0.0 C
apps/ai/api.py 40.3 A
apps/recipes/services/search.py 43.2 A
apps/recipes/sources_api.py 47.7 A
apps/recipes/services/scraper.py 50.4 A
apps/recipes/api.py 51.8 A
apps/ai/services/openrouter.py 57.4 A
apps/ai/services/discover.py 58.0 A
apps/recipes/api_user.py 58.4 A
apps/legacy/views.py 58.5 A
apps/core/tests.py 59.9 A
apps/ai/services/scaling.py 62.8 A
apps/ai/fixtures.py 63.1 A
apps/recipes/services/image_cache.py 63.2 A
apps/ai/services/remix.py 63.2 A
apps/profiles/api.py 64.2 A
apps/ai/services/validator.py 66.5 A
apps/recipes/utils.py 67.1 A
apps/core/api.py 69.4 A
cookie/settings.py 69.6 A
apps/ai/services/ranking.py 71.5 A
apps/recipes/management/commands/cleanup_search_images.py 74.8 A
apps/core/models.py 75.1 A
apps/ai/services/selector.py 76.0 A
apps/recipes/services/fingerprint.py 76.4 A
apps/ai/services/cache.py 77.7 A
apps/core/middleware.py 77.8 A
apps/legacy/templatetags/legacy_tags.py 80.3 A
apps/ai/services/timer.py 80.3 A
apps/core/encryption.py 81.9 A
apps/ai/services/tips.py 85.1 A
apps/profiles/utils.py 87.0 A
apps/__init__.py 100.0 A
apps/legacy/__init__.py 100.0 A
apps/legacy/urls.py 100.0 A
apps/legacy/apps.py 100.0 A
apps/legacy/templatetags/__init__.py 100.0 A
apps/recipes/models.py 100.0 A
apps/recipes/__init__.py 100.0 A
apps/recipes/tests.py 100.0 A
apps/recipes/services/__init__.py 100.0 A
apps/recipes/management/__init__.py 100.0 A
apps/recipes/management/commands/__init__.py 100.0 A
apps/recipes/migrations/0005_serving_adjustment.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/0002_populate_search_sources.py 100.0 A
apps/recipes/migrations/0009_add_default_selectors.py 100.0 A
apps/recipes/migrations/__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/0004_cachedsearchimage.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/0010_add_remixed_from_field.py 100.0 A
apps/ai/models.py 100.0 A
apps/ai/__init__.py 100.0 A
apps/ai/services/__init__.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/0009_fix_discover_prompts.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/__init__.py 100.0 A
apps/ai/migrations/0001_initial.py 100.0 A
apps/ai/migrations/0004_update_serving_adjustment_prompt.py 100.0 A
apps/ai/migrations/0008_update_serving_adjustment_indivisible.py 100.0 A
apps/ai/migrations/0002_seed_prompts.py 100.0 A
apps/core/__init__.py 100.0 A
apps/core/apps.py 100.0 A
apps/core/migrations/__init__.py 100.0 A
apps/core/migrations/0001_initial.py 100.0 A
apps/profiles/models.py 100.0 A
apps/profiles/__init__.py 100.0 A
apps/profiles/apps.py 100.0 A
apps/profiles/migrations/__init__.py 100.0 A
apps/profiles/migrations/0001_initial.py 100.0 A
cookie/__init__.py 100.0 A
cookie/urls.py 100.0 A
cookie/wsgi.py 100.0 A
← Back to Dashboard