| 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% |