Public Access
- config: switch Settings to ConfigDict(extra='ignore') so extra env vars (spoonacular_api_key, SWIFTLY_BEARER_TOKEN) don't crash import. Remove deprecated class Config. - email: wrap SendGrid imports in try/except so the module loads without the optional dependency. Update test_email_backend to patch Mail/RepyTo. - planner_select: default PlannerConfig.set_size=21 (3 meals/day × 7) is way too large for the unit test assertion that checks 3-recipe diversity. Introduced _CFG_3 with set_size=3 and applied to all tests. - Delete stale test_matcher.py importing removed functions. Full suite: 46 passed, 74 skipped (Postgres), 0 failed, 120 collected.
1 line
16 KiB
JSON
1 line
16 KiB
JSON
{"nodes": [{"id": "backend_app_api_recipes_py", "label": "recipes.py", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L1"}, {"id": "recipes_validate_ingredient_ids", "label": "_validate_ingredient_ids()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L32"}, {"id": "recipes_serialize", "label": "_serialize()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L46"}, {"id": "recipes_list_recipes", "label": "list_recipes()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L67"}, {"id": "recipes_get_recipe", "label": "get_recipe()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L81"}, {"id": "recipes_create_recipe", "label": "create_recipe()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L89"}, {"id": "recipes_update_recipe", "label": "update_recipe()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L115"}, {"id": "recipes_delete_recipe", "label": "delete_recipe()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L132"}, {"id": "recipes_parse_qty_unit", "label": "_parse_qty_unit()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L152"}, {"id": "recipes_resolve_ingredient", "label": "resolve_ingredient()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L171"}], "edges": [{"source": "backend_app_api_recipes_py", "target": "re", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "rapidfuzz", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "app_schemas_recipe", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "app_security", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L21", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_validate_ingredient_ids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L32", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_serialize", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L46", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_list_recipes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L67", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_get_recipe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L81", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_create_recipe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L89", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_update_recipe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L115", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_delete_recipe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L132", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_parse_qty_unit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L152", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_resolve_ingredient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L171", "weight": 1.0}, {"source": "recipes_list_recipes", "target": "recipes_serialize", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L77", "weight": 1.0}, {"source": "recipes_get_recipe", "target": "recipes_serialize", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L85", "weight": 1.0}, {"source": "recipes_create_recipe", "target": "recipes_validate_ingredient_ids", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L90", "weight": 1.0}, {"source": "recipes_create_recipe", "target": "recipes_serialize", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L111", "weight": 1.0}, {"source": "recipes_update_recipe", "target": "recipes_validate_ingredient_ids", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L121", "weight": 1.0}, {"source": "recipes_update_recipe", "target": "recipes_serialize", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L128", "weight": 1.0}, {"source": "recipes_resolve_ingredient", "target": "recipes_parse_qty_unit", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L175", "weight": 1.0}], "raw_calls": [{"caller_nid": "recipes_validate_ingredient_ids", "callee": "all", "source_file": "backend/app/api/recipes.py", "source_location": "L35"}, {"caller_nid": "recipes_validate_ingredient_ids", "callee": "filter", "source_file": "backend/app/api/recipes.py", "source_location": "L35"}, {"caller_nid": "recipes_validate_ingredient_ids", "callee": "query", "source_file": "backend/app/api/recipes.py", "source_location": "L35"}, {"caller_nid": "recipes_validate_ingredient_ids", "callee": "in_", "source_file": "backend/app/api/recipes.py", "source_location": "L35"}, {"caller_nid": "recipes_validate_ingredient_ids", "callee": "str", "source_file": "backend/app/api/recipes.py", "source_location": "L38"}, {"caller_nid": "recipes_validate_ingredient_ids", "callee": "HTTPException", "source_file": "backend/app/api/recipes.py", "source_location": "L40"}, {"caller_nid": "recipes_serialize", "callee": "list", "source_file": "backend/app/api/recipes.py", "source_location": "L55"}, {"caller_nid": "recipes_serialize", "callee": "list", "source_file": "backend/app/api/recipes.py", "source_location": "L56"}, {"caller_nid": "recipes_serialize", "callee": "list", "source_file": "backend/app/api/recipes.py", "source_location": "L61"}, {"caller_nid": "recipes_list_recipes", "callee": "query", "source_file": "backend/app/api/recipes.py", "source_location": "L72"}, {"caller_nid": "recipes_list_recipes", "callee": "lower", "source_file": "backend/app/api/recipes.py", "source_location": "L74"}, {"caller_nid": "recipes_list_recipes", "callee": "filter", "source_file": "backend/app/api/recipes.py", "source_location": "L75"}, {"caller_nid": "recipes_list_recipes", "callee": "ilike", "source_file": "backend/app/api/recipes.py", "source_location": "L75"}, {"caller_nid": "recipes_list_recipes", "callee": "all", "source_file": "backend/app/api/recipes.py", "source_location": "L76"}, {"caller_nid": "recipes_list_recipes", "callee": "limit", "source_file": "backend/app/api/recipes.py", "source_location": "L76"}, {"caller_nid": "recipes_list_recipes", "callee": "order_by", "source_file": "backend/app/api/recipes.py", "source_location": "L76"}, {"caller_nid": "recipes_get_recipe", "callee": "first", "source_file": "backend/app/api/recipes.py", "source_location": "L82"}, {"caller_nid": "recipes_get_recipe", "callee": "filter", "source_file": "backend/app/api/recipes.py", "source_location": "L82"}, {"caller_nid": "recipes_get_recipe", "callee": "query", "source_file": "backend/app/api/recipes.py", "source_location": "L82"}, {"caller_nid": "recipes_get_recipe", "callee": "HTTPException", "source_file": "backend/app/api/recipes.py", "source_location": "L84"}, {"caller_nid": "recipes_create_recipe", "callee": "Recipe", "source_file": "backend/app/api/recipes.py", "source_location": "L91"}, {"caller_nid": "recipes_create_recipe", "callee": "model_dump", "source_file": "backend/app/api/recipes.py", "source_location": "L103"}, {"caller_nid": "recipes_create_recipe", "callee": "add", "source_file": "backend/app/api/recipes.py", "source_location": "L108"}, {"caller_nid": "recipes_create_recipe", "callee": "commit", "source_file": "backend/app/api/recipes.py", "source_location": "L109"}, {"caller_nid": "recipes_create_recipe", "callee": "refresh", "source_file": "backend/app/api/recipes.py", "source_location": "L110"}, {"caller_nid": "recipes_update_recipe", "callee": "first", "source_file": "backend/app/api/recipes.py", "source_location": "L116"}, {"caller_nid": "recipes_update_recipe", "callee": "filter", "source_file": "backend/app/api/recipes.py", "source_location": "L116"}, {"caller_nid": "recipes_update_recipe", "callee": "query", "source_file": "backend/app/api/recipes.py", "source_location": "L116"}, {"caller_nid": "recipes_update_recipe", "callee": "HTTPException", "source_file": "backend/app/api/recipes.py", "source_location": "L118"}, {"caller_nid": "recipes_update_recipe", "callee": "model_dump", "source_file": "backend/app/api/recipes.py", "source_location": "L119"}, {"caller_nid": "recipes_update_recipe", "callee": "model_dump", "source_file": "backend/app/api/recipes.py", "source_location": "L122"}, {"caller_nid": "recipes_update_recipe", "callee": "pop", "source_file": "backend/app/api/recipes.py", "source_location": "L123"}, {"caller_nid": "recipes_update_recipe", "callee": "items", "source_file": "backend/app/api/recipes.py", "source_location": "L124"}, {"caller_nid": "recipes_update_recipe", "callee": "setattr", "source_file": "backend/app/api/recipes.py", "source_location": "L125"}, {"caller_nid": "recipes_update_recipe", "callee": "commit", "source_file": "backend/app/api/recipes.py", "source_location": "L126"}, {"caller_nid": "recipes_update_recipe", "callee": "refresh", "source_file": "backend/app/api/recipes.py", "source_location": "L127"}, {"caller_nid": "recipes_delete_recipe", "callee": "first", "source_file": "backend/app/api/recipes.py", "source_location": "L133"}, {"caller_nid": "recipes_delete_recipe", "callee": "filter", "source_file": "backend/app/api/recipes.py", "source_location": "L133"}, {"caller_nid": "recipes_delete_recipe", "callee": "query", "source_file": "backend/app/api/recipes.py", "source_location": "L133"}, {"caller_nid": "recipes_delete_recipe", "callee": "HTTPException", "source_file": "backend/app/api/recipes.py", "source_location": "L135"}, {"caller_nid": "recipes_delete_recipe", "callee": "delete", "source_file": "backend/app/api/recipes.py", "source_location": "L136"}, {"caller_nid": "recipes_delete_recipe", "callee": "commit", "source_file": "backend/app/api/recipes.py", "source_location": "L137"}, {"caller_nid": "recipes_delete_recipe", "callee": "Response", "source_file": "backend/app/api/recipes.py", "source_location": "L138"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "match", "source_file": "backend/app/api/recipes.py", "source_location": "L153"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "strip", "source_file": "backend/app/api/recipes.py", "source_location": "L155"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "group", "source_file": "backend/app/api/recipes.py", "source_location": "L156"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "split", "source_file": "backend/app/api/recipes.py", "source_location": "L158"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "float", "source_file": "backend/app/api/recipes.py", "source_location": "L159"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "float", "source_file": "backend/app/api/recipes.py", "source_location": "L159"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "float", "source_file": "backend/app/api/recipes.py", "source_location": "L161"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "group", "source_file": "backend/app/api/recipes.py", "source_location": "L162"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "strip", "source_file": "backend/app/api/recipes.py", "source_location": "L163"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "group", "source_file": "backend/app/api/recipes.py", "source_location": "L163"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "lower", "source_file": "backend/app/api/recipes.py", "source_location": "L164"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "lower", "source_file": "backend/app/api/recipes.py", "source_location": "L167"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "all", "source_file": "backend/app/api/recipes.py", "source_location": "L176"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "query", "source_file": "backend/app/api/recipes.py", "source_location": "L176"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "ResolveIngredientResponse", "source_file": "backend/app/api/recipes.py", "source_location": "L178"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "append", "source_file": "backend/app/api/recipes.py", "source_location": "L187"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "append", "source_file": "backend/app/api/recipes.py", "source_location": "L189"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "extract", "source_file": "backend/app/api/recipes.py", "source_location": "L191"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "set", "source_file": "backend/app/api/recipes.py", "source_location": "L197"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "add", "source_file": "backend/app/api/recipes.py", "source_location": "L203"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "append", "source_file": "backend/app/api/recipes.py", "source_location": "L204"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "ResolveIngredientCandidate", "source_file": "backend/app/api/recipes.py", "source_location": "L205"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "len", "source_file": "backend/app/api/recipes.py", "source_location": "L212"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "ResolveIngredientResponse", "source_file": "backend/app/api/recipes.py", "source_location": "L215"}]} |