prathameshks commited on
Commit
91990bf
·
1 Parent(s): 4b82150

added data extraction

Browse files
Files changed (2) hide show
  1. routers/product.py +10 -5
  2. utils/fetch_data.py +17 -0
routers/product.py CHANGED
@@ -16,7 +16,7 @@ from typing import Generator
16
  from dotenv import load_dotenv
17
  import requests
18
  import json
19
- from services.ingredients import IngredientService
20
  from services.productAnalyzerAgent import analyze_product_ingredients
21
  from utils.fetch_data import fetch_product_data_from_api
22
 
@@ -201,11 +201,16 @@ async def find_product_by_barcode(barcode_number: str):
201
  log_info(f"Find product by barcode endpoint called for barcode: {barcode_number}")
202
  try:
203
  product_data = await fetch_product_data_from_api(barcode_number)
204
- if product_data:
205
- # dump to log file
206
- log_debug(str(product_data))
207
- return JSONResponse(product_data)
 
 
 
208
  else:
 
 
209
  raise HTTPException(status_code=404, detail=f"Product not found for barcode: {barcode_number}")
210
  except Exception as e:
211
  log_error(f"Error fetching product data for barcode {barcode_number}: {e}")
 
16
  from dotenv import load_dotenv
17
  import requests
18
  import json
19
+ from services.ingredients import IngredientService
20
  from services.productAnalyzerAgent import analyze_product_ingredients
21
  from utils.fetch_data import fetch_product_data_from_api
22
 
 
201
  log_info(f"Find product by barcode endpoint called for barcode: {barcode_number}")
202
  try:
203
  product_data = await fetch_product_data_from_api(barcode_number)
204
+
205
+ from utils.fetch_data import extract_product_info # Import here to avoid circular dependency if utils imports routers
206
+
207
+ found, product_name, ingredients = extract_product_info(product_data)
208
+
209
+ if found:
210
+ return JSONResponse({"found": found, "product_name": product_name, "ingredients": ingredients})
211
  else:
212
+ return JSONResponse({"found": found, "product_name": None, "ingredients": []}, status_code=404)
213
+ # Or raise HTTPException if you prefer
214
  raise HTTPException(status_code=404, detail=f"Product not found for barcode: {barcode_number}")
215
  except Exception as e:
216
  log_error(f"Error fetching product data for barcode {barcode_number}: {e}")
utils/fetch_data.py CHANGED
@@ -7,3 +7,20 @@ async def fetch_product_data_from_api(barcode):
7
  if response.status_code != 200:
8
  raise HTTPException(status_code=response.status_code, detail=f"Failed to fetch data for barcode {barcode}")
9
  return response.json()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  if response.status_code != 200:
8
  raise HTTPException(status_code=response.status_code, detail=f"Failed to fetch data for barcode {barcode}")
9
  return response.json()
10
+
11
+ def extract_product_info(product_data: dict):
12
+ """
13
+ Extracts product information (found status, name, ingredients) from OpenFoodFacts API response.
14
+ """
15
+ found = product_data.get('status') == 1
16
+ product = product_data.get('product')
17
+
18
+ if not found or not product:
19
+ return False, None, []
20
+
21
+ name = product.get('product_name')
22
+ ingredients = []
23
+ ingredients_list = product.get('ingredients', [])
24
+ for ingredient in ingredients_list:
25
+ ingredients.append(ingredient.get('text'))
26
+ return found, name, ingredients