Simplify from claude
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
"""
|
||||
Shared kitchen helpers used by both the DRF API views (views.py) and the
|
||||
HTMX views (views_htmx.py). Consolidated here to avoid cross-module
|
||||
duplication and the views_htmx -> views runtime coupling.
|
||||
"""
|
||||
from decimal import Decimal
|
||||
|
||||
from .models import Ingredient, PantryItem
|
||||
|
||||
|
||||
def find_ingredient(name):
|
||||
"""Find ingredient by name or alias (case-insensitive)."""
|
||||
# Exact name match
|
||||
try:
|
||||
return Ingredient.objects.get(name__iexact=name)
|
||||
except Ingredient.DoesNotExist:
|
||||
pass
|
||||
|
||||
# Search aliases (JSONField contains). Guard against a falsy aliases value.
|
||||
for ingredient in Ingredient.objects.all():
|
||||
if ingredient.aliases and any(a.lower() == name.lower() for a in ingredient.aliases):
|
||||
return ingredient
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def get_pantry_total(ingredient_id):
|
||||
"""Get total quantity of an ingredient across all pantry locations."""
|
||||
total = Decimal("0")
|
||||
for item in PantryItem.objects.filter(ingredient_id=ingredient_id, quantity__gt=0):
|
||||
total += item.quantity
|
||||
return total
|
||||
|
||||
|
||||
def get_section_key(ingredient):
|
||||
"""Determine the canonical (lowercase) shopping section key from an
|
||||
ingredient's tags."""
|
||||
tag_names = set(ingredient.tags.values_list("name", flat=True))
|
||||
if "protein" in tag_names:
|
||||
return "protein"
|
||||
if "veg" in tag_names:
|
||||
return "veg"
|
||||
if "carb" in tag_names:
|
||||
return "carbs"
|
||||
if "dairy" in tag_names:
|
||||
return "dairy"
|
||||
return "other"
|
||||
Reference in New Issue
Block a user