| apps / __init__.py |
(no class) |
|
0 |
0 |
0 |
|
100% |
| apps / ai / __init__.py |
(no class) |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
AIStatusOut |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
TestApiKeyIn |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
TestApiKeyOut |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
SaveApiKeyIn |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
SaveApiKeyOut |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
PromptOut |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
PromptUpdateIn |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
ModelOut |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
ErrorOut |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
RemixSuggestionsIn |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
RemixSuggestionsOut |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
CreateRemixIn |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
RemixOut |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
ScaleIn |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
NutritionOut |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
ScaleOut |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
TipsIn |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
TipsOut |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
TimerNameIn |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
TimerNameOut |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
DiscoverSuggestionOut |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
DiscoverOut |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
SelectorRepairIn |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
SelectorRepairOut |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
SourceNeedingAttentionOut |
|
0 |
0 |
0 |
|
100% |
| apps / ai / api.py |
(no class) |
|
328 |
168 |
0 |
|
49% |
| apps / ai / migrations / 0001_initial.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / ai / migrations / 0001_initial.py |
(no class) |
|
5 |
0 |
0 |
|
100% |
| apps / ai / migrations / 0002_seed_prompts.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / ai / migrations / 0002_seed_prompts.py |
(no class) |
|
12 |
2 |
0 |
|
83% |
| apps / ai / migrations / 0003_nutrition_estimate_prompt.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / ai / migrations / 0003_nutrition_estimate_prompt.py |
(no class) |
|
10 |
2 |
0 |
|
80% |
| apps / ai / migrations / 0004_update_serving_adjustment_prompt.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / ai / migrations / 0004_update_serving_adjustment_prompt.py |
(no class) |
|
22 |
10 |
0 |
|
55% |
| apps / ai / migrations / 0005_update_serving_adjustment_v2.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / ai / migrations / 0005_update_serving_adjustment_v2.py |
(no class) |
|
22 |
10 |
0 |
|
55% |
| apps / ai / migrations / 0006_add_ai_discovery_suggestion.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / ai / migrations / 0006_add_ai_discovery_suggestion.py |
(no class) |
|
5 |
0 |
0 |
|
100% |
| apps / ai / migrations / 0007_update_search_ranking_prompt.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / ai / migrations / 0007_update_search_ranking_prompt.py |
(no class) |
|
20 |
9 |
0 |
|
55% |
| apps / ai / migrations / 0008_update_serving_adjustment_indivisible.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / ai / migrations / 0008_update_serving_adjustment_indivisible.py |
(no class) |
|
20 |
9 |
0 |
|
55% |
| apps / ai / migrations / 0009_fix_discover_prompts.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / ai / migrations / 0009_fix_discover_prompts.py |
(no class) |
|
27 |
11 |
3 |
|
59% |
| apps / ai / migrations / __init__.py |
(no class) |
|
0 |
0 |
0 |
|
100% |
| apps / ai / models.py |
AIDiscoverySuggestion |
|
1 |
1 |
0 |
|
0% |
| apps / ai / models.py |
AIDiscoverySuggestion.Meta |
|
0 |
0 |
0 |
|
100% |
| apps / ai / models.py |
AIPrompt |
|
3 |
3 |
0 |
|
0% |
| apps / ai / models.py |
AIPrompt.Meta |
|
0 |
0 |
0 |
|
100% |
| apps / ai / models.py |
(no class) |
|
35 |
0 |
0 |
|
100% |
| apps / ai / services / __init__.py |
(no class) |
|
0 |
0 |
0 |
|
100% |
| apps / ai / services / discover.py |
(no class) |
|
123 |
106 |
0 |
|
14% |
| apps / ai / services / openrouter.py |
AIServiceError |
|
0 |
0 |
0 |
|
100% |
| apps / ai / services / openrouter.py |
AIUnavailableError |
|
0 |
0 |
0 |
|
100% |
| apps / ai / services / openrouter.py |
AIResponseError |
|
0 |
0 |
0 |
|
100% |
| apps / ai / services / openrouter.py |
OpenRouterService |
|
113 |
113 |
0 |
|
0% |
| apps / ai / services / openrouter.py |
(no class) |
|
28 |
0 |
0 |
|
100% |
| apps / ai / services / ranking.py |
(no class) |
|
64 |
48 |
0 |
|
25% |
| apps / ai / services / remix.py |
(no class) |
|
101 |
86 |
0 |
|
15% |
| apps / ai / services / scaling.py |
(no class) |
|
87 |
74 |
0 |
|
15% |
| apps / ai / services / selector.py |
(no class) |
|
54 |
43 |
0 |
|
20% |
| apps / ai / services / timer.py |
(no class) |
|
24 |
18 |
0 |
|
25% |
| apps / ai / services / tips.py |
(no class) |
|
33 |
25 |
0 |
|
24% |
| apps / ai / services / validator.py |
ValidationError |
|
2 |
2 |
0 |
|
0% |
| apps / ai / services / validator.py |
AIResponseValidator |
|
69 |
69 |
0 |
|
0% |
| apps / ai / services / validator.py |
(no class) |
|
8 |
0 |
0 |
|
100% |
| apps / ai / tests.py |
AIPromptModelTests |
|
12 |
12 |
0 |
|
0% |
| apps / ai / tests.py |
AIResponseValidatorTests |
|
35 |
35 |
0 |
|
0% |
| apps / ai / tests.py |
AIAPITests |
|
90 |
90 |
0 |
|
0% |
| apps / ai / tests.py |
OpenRouterServiceTests |
|
120 |
120 |
0 |
|
0% |
| apps / ai / tests.py |
OpenRouterServiceAsyncTests |
|
10 |
10 |
0 |
|
0% |
| apps / ai / tests.py |
TimerNamingServiceTests |
|
22 |
22 |
0 |
|
0% |
| apps / ai / tests.py |
TimerNamingAPITests |
|
18 |
18 |
0 |
|
0% |
| apps / ai / tests.py |
SelectorRepairServiceTests |
|
56 |
56 |
0 |
|
0% |
| apps / ai / tests.py |
SelectorRepairAPITests |
|
48 |
48 |
0 |
|
0% |
| apps / ai / tests.py |
AIFeatureFallbackTests |
|
69 |
69 |
0 |
|
0% |
| apps / ai / tests.py |
AIResponseErrorTests |
|
29 |
29 |
0 |
|
0% |
| apps / ai / tests.py |
(no class) |
|
142 |
142 |
0 |
|
0% |
| apps / core / __init__.py |
(no class) |
|
0 |
0 |
0 |
|
100% |
| apps / core / api.py |
HealthSchema |
|
0 |
0 |
0 |
|
100% |
| apps / core / api.py |
DataCountsSchema |
|
0 |
0 |
0 |
|
100% |
| apps / core / api.py |
ResetPreviewSchema |
|
0 |
0 |
0 |
|
100% |
| apps / core / api.py |
ResetConfirmSchema |
|
0 |
0 |
0 |
|
100% |
| apps / core / api.py |
ErrorSchema |
|
0 |
0 |
0 |
|
100% |
| apps / core / api.py |
ResetSuccessSchema |
|
0 |
0 |
0 |
|
100% |
| apps / core / api.py |
(no class) |
|
87 |
8 |
0 |
|
91% |
| apps / core / apps.py |
CoreConfig |
|
0 |
0 |
0 |
|
100% |
| apps / core / apps.py |
(no class) |
|
4 |
0 |
0 |
|
100% |
| apps / core / middleware.py |
DeviceDetectionMiddleware |
|
21 |
0 |
0 |
|
100% |
| apps / core / middleware.py |
(no class) |
|
8 |
0 |
0 |
|
100% |
| apps / core / migrations / 0001_initial.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / core / migrations / 0001_initial.py |
(no class) |
|
5 |
0 |
0 |
|
100% |
| apps / core / migrations / __init__.py |
(no class) |
|
0 |
0 |
0 |
|
100% |
| apps / core / models.py |
AppSettings |
|
4 |
0 |
0 |
|
100% |
| apps / core / models.py |
AppSettings.Meta |
|
0 |
0 |
0 |
|
100% |
| apps / core / models.py |
(no class) |
|
10 |
0 |
0 |
|
100% |
| apps / legacy / __init__.py |
(no class) |
|
0 |
0 |
0 |
|
100% |
| apps / legacy / apps.py |
LegacyConfig |
|
0 |
0 |
0 |
|
100% |
| apps / legacy / apps.py |
(no class) |
|
4 |
0 |
0 |
|
100% |
| apps / legacy / templatetags / __init__.py |
(no class) |
|
0 |
0 |
0 |
|
100% |
| apps / legacy / templatetags / legacy_tags.py |
(no class) |
|
27 |
8 |
0 |
|
70% |
| apps / legacy / urls.py |
(no class) |
|
4 |
0 |
0 |
|
100% |
| apps / legacy / views.py |
(no class) |
|
144 |
49 |
0 |
|
66% |
| apps / profiles / __init__.py |
(no class) |
|
0 |
0 |
0 |
|
100% |
| apps / profiles / api.py |
ProfileIn |
|
0 |
0 |
0 |
|
100% |
| apps / profiles / api.py |
ProfileOut |
|
0 |
0 |
0 |
|
100% |
| apps / profiles / api.py |
ProfileStatsSchema |
|
0 |
0 |
0 |
|
100% |
| apps / profiles / api.py |
ProfileWithStatsSchema |
|
0 |
0 |
0 |
|
100% |
| apps / profiles / api.py |
DeletionDataSchema |
|
0 |
0 |
0 |
|
100% |
| apps / profiles / api.py |
ProfileSummarySchema |
|
0 |
0 |
0 |
|
100% |
| apps / profiles / api.py |
DeletionPreviewSchema |
|
0 |
0 |
0 |
|
100% |
| apps / profiles / api.py |
ErrorSchema |
|
0 |
0 |
0 |
|
100% |
| apps / profiles / api.py |
(no class) |
|
121 |
26 |
0 |
|
79% |
| apps / profiles / apps.py |
ProfilesConfig |
|
0 |
0 |
0 |
|
100% |
| apps / profiles / apps.py |
(no class) |
|
4 |
0 |
0 |
|
100% |
| apps / profiles / migrations / 0001_initial.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / profiles / migrations / 0001_initial.py |
(no class) |
|
5 |
0 |
0 |
|
100% |
| apps / profiles / migrations / __init__.py |
(no class) |
|
0 |
0 |
0 |
|
100% |
| apps / profiles / models.py |
Profile |
|
1 |
1 |
0 |
|
0% |
| apps / profiles / models.py |
(no class) |
|
11 |
0 |
0 |
|
100% |
| apps / profiles / utils.py |
(no class) |
|
30 |
8 |
0 |
|
73% |
| apps / recipes / __init__.py |
(no class) |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / api.py |
RecipeOut |
|
5 |
1 |
0 |
|
80% |
| apps / recipes / api.py |
RecipeListOut |
|
4 |
1 |
0 |
|
75% |
| apps / recipes / api.py |
ScrapeIn |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / api.py |
ErrorOut |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / api.py |
SearchResultOut |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / api.py |
SearchOut |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / api.py |
(no class) |
|
168 |
11 |
0 |
|
93% |
| apps / recipes / api_user.py |
FavoriteIn |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / api_user.py |
FavoriteOut |
|
1 |
0 |
0 |
|
100% |
| apps / recipes / api_user.py |
ErrorOut |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / api_user.py |
CollectionIn |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / api_user.py |
CollectionItemIn |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / api_user.py |
CollectionItemOut |
|
1 |
0 |
0 |
|
100% |
| apps / recipes / api_user.py |
CollectionOut |
|
3 |
0 |
0 |
|
100% |
| apps / recipes / api_user.py |
CollectionDetailOut |
|
3 |
0 |
0 |
|
100% |
| apps / recipes / api_user.py |
HistoryIn |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / api_user.py |
HistoryOut |
|
1 |
0 |
0 |
|
100% |
| apps / recipes / api_user.py |
(no class) |
|
152 |
2 |
0 |
|
99% |
| apps / recipes / management / __init__.py |
(no class) |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / management / commands / __init__.py |
(no class) |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / management / commands / cleanup_search_images.py |
Command |
|
31 |
31 |
0 |
|
0% |
| apps / recipes / management / commands / cleanup_search_images.py |
(no class) |
|
10 |
10 |
0 |
|
0% |
| apps / recipes / migrations / 0001_initial.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / migrations / 0001_initial.py |
(no class) |
|
6 |
0 |
0 |
|
100% |
| apps / recipes / migrations / 0002_populate_search_sources.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / migrations / 0002_populate_search_sources.py |
(no class) |
|
13 |
3 |
0 |
|
77% |
| apps / recipes / migrations / 0003_recipecollection_recipecollectionitem_recipefavorite_and_more.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / migrations / 0003_recipecollection_recipecollectionitem_recipefavorite_and_more.py |
(no class) |
|
5 |
0 |
0 |
|
100% |
| apps / recipes / migrations / 0004_cachedsearchimage.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / migrations / 0004_cachedsearchimage.py |
(no class) |
|
4 |
0 |
0 |
|
100% |
| apps / recipes / migrations / 0005_serving_adjustment.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / migrations / 0005_serving_adjustment.py |
(no class) |
|
5 |
0 |
0 |
|
100% |
| apps / recipes / migrations / 0006_serving_adjustment_instructions_times.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / migrations / 0006_serving_adjustment_instructions_times.py |
(no class) |
|
4 |
0 |
0 |
|
100% |
| apps / recipes / migrations / 0007_recipe_profile.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / migrations / 0007_recipe_profile.py |
(no class) |
|
10 |
1 |
0 |
|
90% |
| apps / recipes / migrations / 0008_rename_recipes_rec_profile_idx_recipes_rec_profile_7945b8_idx.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / migrations / 0008_rename_recipes_rec_profile_idx_recipes_rec_profile_7945b8_idx.py |
(no class) |
|
4 |
0 |
0 |
|
100% |
| apps / recipes / migrations / 0009_add_default_selectors.py |
Migration |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / migrations / 0009_add_default_selectors.py |
(no class) |
|
13 |
3 |
0 |
|
77% |
| apps / recipes / migrations / __init__.py |
(no class) |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / models.py |
Recipe |
|
1 |
0 |
0 |
|
100% |
| apps / recipes / models.py |
Recipe.Meta |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / models.py |
SearchSource |
|
1 |
0 |
0 |
|
100% |
| apps / recipes / models.py |
SearchSource.Meta |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / models.py |
RecipeFavorite |
|
1 |
1 |
0 |
|
0% |
| apps / recipes / models.py |
RecipeFavorite.Meta |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / models.py |
RecipeCollection |
|
1 |
1 |
0 |
|
0% |
| apps / recipes / models.py |
RecipeCollection.Meta |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / models.py |
RecipeCollectionItem |
|
1 |
1 |
0 |
|
0% |
| apps / recipes / models.py |
RecipeCollectionItem.Meta |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / models.py |
RecipeViewHistory |
|
1 |
1 |
0 |
|
0% |
| apps / recipes / models.py |
RecipeViewHistory.Meta |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / models.py |
CachedSearchImage |
|
1 |
0 |
0 |
|
100% |
| apps / recipes / models.py |
CachedSearchImage.Meta |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / models.py |
ServingAdjustment |
|
1 |
1 |
0 |
|
0% |
| apps / recipes / models.py |
ServingAdjustment.Meta |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / models.py |
(no class) |
|
118 |
0 |
0 |
|
100% |
| apps / recipes / services / __init__.py |
(no class) |
|
2 |
0 |
0 |
|
100% |
| apps / recipes / services / fingerprint.py |
(no class) |
|
16 |
6 |
0 |
|
62% |
| apps / recipes / services / image_cache.py |
SearchImageCache |
|
86 |
5 |
0 |
|
94% |
| apps / recipes / services / image_cache.py |
(no class) |
|
22 |
0 |
0 |
|
100% |
| apps / recipes / services / scraper.py |
ScraperError |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / services / scraper.py |
FetchError |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / services / scraper.py |
ParseError |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / services / scraper.py |
RecipeScraper |
|
142 |
29 |
0 |
|
80% |
| apps / recipes / services / scraper.py |
(no class) |
|
39 |
0 |
0 |
|
100% |
| apps / recipes / services / search.py |
SearchResult |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / services / search.py |
RecipeSearch |
|
166 |
28 |
0 |
|
83% |
| apps / recipes / services / search.py |
(no class) |
|
34 |
0 |
0 |
|
100% |
| apps / recipes / sources_api.py |
SourceOut |
|
3 |
3 |
0 |
|
0% |
| apps / recipes / sources_api.py |
SourceToggleOut |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / sources_api.py |
SourceUpdateIn |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / sources_api.py |
SourceUpdateOut |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / sources_api.py |
SourceTestOut |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / sources_api.py |
ErrorOut |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / sources_api.py |
BulkToggleIn |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / sources_api.py |
BulkToggleOut |
|
0 |
0 |
0 |
|
100% |
| apps / recipes / sources_api.py |
(no class) |
|
142 |
85 |
0 |
|
40% |
| apps / recipes / tests.py |
BaseTestCase |
|
7 |
7 |
0 |
|
0% |
| apps / recipes / tests.py |
CollectionTests |
|
66 |
66 |
0 |
|
0% |
| apps / recipes / tests.py |
FavoriteTests |
|
27 |
27 |
0 |
|
0% |
| apps / recipes / tests.py |
HistoryTests |
|
33 |
33 |
0 |
|
0% |
| apps / recipes / tests.py |
NoProfileTests |
|
9 |
9 |
0 |
|
0% |
| apps / recipes / tests.py |
QuantityTidyingTests |
|
53 |
53 |
0 |
|
0% |
| apps / recipes / tests.py |
(no class) |
|
59 |
59 |
0 |
|
0% |
| apps / recipes / utils.py |
(no class) |
|
58 |
50 |
0 |
|
14% |
| cookie / __init__.py |
(no class) |
|
0 |
0 |
0 |
|
100% |
| cookie / settings.py |
(no class) |
|
39 |
3 |
0 |
|
92% |
| cookie / urls.py |
(no class) |
|
21 |
0 |
0 |
|
100% |
| cookie / wsgi.py |
(no class) |
|
4 |
4 |
0 |
|
0% |