ll5tut015l_bh / src /components /supabase_information_fetch.py
ishworrsubedii's picture
add: prodctpage batch cto, mto, nto, video and static file
21ba534
import logging
import os
from dataclasses import dataclass
from typing import List
from supabase import create_client
@dataclass
class NecklaceData:
necklace_id: str
necklace_url: str
x_lean_offset: float
y_lean_offset: float
x_broad_offset: float
y_broad_offset: float
category: str
supabase_url = os.getenv("SUPABASE_URL")
supabase_key = os.getenv("SUPABASE_KEY")
supabase = create_client(supabase_url, supabase_key)
def fetch_necklace_offset_each_store(storename: str) -> List[NecklaceData]:
response = supabase.table("MagicMirror").select("*").eq("StoreName", storename).execute()
necklace_data_list = []
for item in response.data:
jewellery_url = (
f"https://lvuhhlrkcuexzqtsbqyu.supabase.co/storage/v1/object/public/Stores/"
f"{storename}/{item['Category']}/image/{item['Id']}.png"
)
necklace_data = NecklaceData(
necklace_id=item['Id'],
necklace_url=jewellery_url,
x_lean_offset=item['x_lean'],
y_lean_offset=item['y_lean'],
x_broad_offset=item['x_chubby'],
y_broad_offset=item['y_chubby'],
category=item['Category']
)
necklace_data_list.append(necklace_data)
return necklace_data_list
def fetch_model_body_type(image_url: str):
try:
response = supabase.table("JewelMirror_ModelImages").select("*").eq("image_url", image_url).execute()
for item in response.data:
print(item)
return item['image_url'], item['body_structure']
except Exception as e:
print(f"The image url is not found in the table", {e})
return None
def upload_information_to_new_table(necklace_id, nto_images_urls, cto_images_urls, mto_urls, video_urls, model_name):
try:
response_check = supabase.table("JM_Productpage").select("*").eq("Id", necklace_id).execute()
if response_check.data:
existing_record = response_check.data[0]
updated_nto = f"{existing_record['nto_images_urls']},{nto_images_urls}" if existing_record[
'nto_images_urls'] else nto_images_urls
updated_cto = f"{existing_record['cto_images_urls']},{cto_images_urls}" if existing_record[
'cto_images_urls'] else cto_images_urls
updated_mto = f"{existing_record['mto_images_urls']},{mto_urls}" if existing_record[
'mto_images_urls'] else mto_urls
updated_video = f"{existing_record['video_urls']},{video_urls}" if existing_record[
'video_urls'] else video_urls
updated_model = f"{existing_record['model_name']},{model_name}" if existing_record[
'model_name'] else model_name
current_approve = existing_record.get('approve', {})
if not isinstance(current_approve, dict):
current_approve = {}
if model_name not in current_approve:
current_approve[model_name] = False
logging.info(f"Updated model name: {updated_model}")
logging.info(f"Updated approve status: {current_approve}")
response = supabase.table("JM_Productpage").update({
"nto_images_urls": updated_nto,
"cto_images_urls": updated_cto,
"mto_images_urls": updated_mto,
"video_urls": updated_video,
"model_name": updated_model,
"approve": current_approve
}).eq("Id", necklace_id).execute()
print("Updated existing record")
else:
response = supabase.table("JM_Productpage").insert({
"Id": necklace_id,
"nto_images_urls": nto_images_urls,
"cto_images_urls": cto_images_urls,
"mto_images_urls": mto_urls,
"video_urls": video_urls,
"model_name": model_name,
"approve": {
model_name: False
}
}).execute()
print("Inserted new record")
return response
except Exception as e:
print(f"Error in uploading the data to the table: {str(e)}")
logging.error(f"Error in uploading the data to the table: {str(e)}")
return None
def supabase_image_fetch_product_page(necklace_id, model_name):
try:
response = supabase.table("JM_Productpage").select("*").eq("Id", necklace_id).execute()
if not response.data:
print(f"No data found for necklace_id: {necklace_id}")
return None
# Get the first item from response
item = response.data[0]
def process_url_list(url_string):
if not url_string:
return []
url_groups = url_string.replace("[", "").replace("]", "").split("],[")
filtered_urls = []
for group in url_groups:
urls = [url.strip().strip('"\'') for url in group.split(",")]
matching_urls = [url for url in urls if model_name in url]
filtered_urls.extend(matching_urls)
return filtered_urls
try:
nto_images = process_url_list(item.get('nto_images_urls', ''))
cto_images = process_url_list(item.get('cto_images_urls', ''))
mto_images = process_url_list(item.get('mto_images_urls', ''))
print(f"nto_images: {nto_images}")
print(f"cto_images: {cto_images}")
print(f"mto_images: {mto_images}")
video_urls = []
if item.get('video_urls'):
video_list = item['video_urls'].split(',')
video_urls = [url.strip() for url in video_list if model_name in url]
print(f"video_urls: {video_urls}")
except AttributeError as e:
print(f"Error parsing URLs: {e}")
return None
response = {
'nto': nto_images,
'cto': cto_images,
'mto': mto_images,
'video': video_urls,
"status": "success"
}
return response
except Exception as e:
print(f"Error in fetching the data from the table: {e}")
return None
def supabase_product_page_approval(necklace_id, nto_images_urls, cto_images_urls, mto_images_urls, video_urls,
model_name):
try:
existing_record = supabase.table("MagicMirror").select("*").eq("Id", necklace_id).execute()
def append_urls(existing_urls, new_urls):
existing = convert_to_string(existing_urls) if existing_urls else ""
new = convert_to_string(new_urls) if new_urls else ""
if existing and new:
return f"{existing},{new}"
return new or existing
if existing_record.data:
record = existing_record.data[0]
update_data = {
"nto_images_urls": append_urls(record.get("nto_images_urls"), nto_images_urls),
"cto_images_urls": append_urls(record.get("cto_images_urls"), cto_images_urls),
"mto_images_urls": append_urls(record.get("mto_images_urls"), mto_images_urls),
"video_urls": append_urls(record.get("video_urls"), video_urls)
}
else:
update_data = {
"nto_images_urls": convert_to_string(nto_images_urls),
"cto_images_urls": convert_to_string(cto_images_urls),
"mto_images_urls": convert_to_string(mto_images_urls),
"video_urls": convert_to_string(video_urls)
}
result = supabase.table("MagicMirror") \
.update(update_data) \
.eq("Id", necklace_id) \
.execute()
res = supabase_jmproductpage_approval_flag(necklace_id, model_name, True)
print(f"Successfully updated URLs for necklace ID: {necklace_id}")
return result.data
except Exception as e:
error_msg = f"Error updating URLs in MagicMirror table: {str(e)}"
print(error_msg)
raise Exception(error_msg)
def convert_to_string(value):
if value is None:
return ""
if isinstance(value, list):
return ",".join(str(item) for item in value if item)
if isinstance(value, str):
# If it's already a string, clean it up
items = [item.strip() for item in value.split(",") if item.strip()]
return ",".join(items)
return str(value)
def supabase_fetch_not_approved_necklaces():
try:
response = supabase.table("JM_Productpage").select("*").execute()
unapproved_necklaces = []
for record in response.data:
approve_dict = record.get('approve', {})
if not isinstance(approve_dict, dict):
continue
false_approvals = {
model: status
for model, status in approve_dict.items()
if status is False
}
if false_approvals:
filtered_record = {
'Id': record['Id'],
'approve': false_approvals
}
unapproved_necklaces.append(filtered_record)
print(f"Unapproved necklaces: {unapproved_necklaces}")
return unapproved_necklaces
except Exception as e:
print(f"Error fetching not approved necklaces: {str(e)}")
raise e
def supabase_jmproductpage_approval_flag(necklace_id, model_name, flag_value):
try:
current_data = supabase.table("JM_Productpage").select("approve").eq("Id", necklace_id).execute()
current_approve = current_data.data[0].get("approve", {}) if current_data.data else {}
if model_name in current_approve and current_approve[model_name] is True:
print(f"Skipping update for {model_name} as it's already approved")
return current_data.data
if isinstance(current_approve, dict):
current_approve[model_name] = flag_value
else:
current_approve = {model_name: flag_value}
response = supabase.table("JM_Productpage").update(
{"approve": current_approve}
).eq("Id", necklace_id).execute()
return response.data
except Exception as e:
print(f"Error updating approval flag for necklace ID {necklace_id}: {str(e)}")
raise e
def upload_productpage_logs(necklace_id: str, status: bool, model_name: str) -> dict:
try:
existing_record = supabase.table("JM_productpagelog").select("*").eq("id", necklace_id).execute()
if not existing_record.data:
response = supabase.table("JM_productpagelog").insert([{
"id": necklace_id,
"status": bool(status),
"model_name": model_name
}]).execute()
print("Inserted new record")
return {
"status": "success",
"message": "Record inserted successfully"
}
else:
existing_models = existing_record.data[0].get('model_name', '').split(',')
existing_models = [model.strip() for model in existing_models]
if model_name in existing_models:
return {
"status": "error",
"message": f"Record already exists with model {model_name} and {necklace_id}"
}
else:
updated_models = ','.join(existing_models + [model_name])
response = supabase.table("JM_productpagelog").update({
"model_name": updated_models
}).eq("id", necklace_id).execute()
print(f"Updated record with new model {model_name}")
return {
"status": "success",
"message": f"Added new model {model_name} to existing record"
}
except Exception as e:
error_msg = f"Error updating product page log for necklace {necklace_id}: {str(e)}"
logging.error(error_msg)
raise Exception(f"Failed to update product page log: {str(e)}")
def fetch_productpage_logs(necklace_id):
try:
response = supabase.table("JM_productpagelog").select("*").eq("id", necklace_id).execute()
for item in response.data:
return item['status']
except Exception as e:
print(f"Error in fetching the data from the table", {e})
return None
if __name__ == "__main__":
# store_name = "ChamundiJewelsMandir"
# necklaces = fetch_necklace_offset_each_store(store_name)
#
# count = 0
# for necklace in necklaces:
# print(f"Necklace ID: {necklace.necklace_id}")
# print(f"URL: {necklace.necklace_url}")
# print(f"Lean offsets (x, y): ({necklace.x_lean_offset}, {necklace.y_lean_offset})")
# print(f"Broad offsets (x, y): ({necklace.x_broad_offset}, {necklace.y_broad_offset})")
# print(f"Category: {necklace.category}")
# print("-" * 50)
# count += 1
#
# print(f"Total necklaces fetched: {count}")
# image_url = "https://lvuhhlrkcuexzqtsbqyu.supabase.co/storage/v1/object/public/JewelmirrorModelImages/M0X9e22b54f110493113feb79e3J.png"
# url,type=fetch_model_body_type(image_url)
# print(url,type)
# ---------------------------------
#
# upload_information_to_new_table(necklace_id="CJM0025",
# nto_images_urls="https://lvuhhlrkcuexzqtsbqyu.supabase.co/storage/v1/object/public/ProductPageOutputs/CJM0025-M0X0f16ad748dd979a48d3f79b4J-nto-Gold_Necklaces.png",
# cto_images_urls="https://lvuhhlrkcuexzqtsbqyu.supabase.co/storage/v1/object/public/ProductPageOutputs/CJM0025-cto-Blue Lehenga.png,https://lvuhhlrkcuexzqtsbqyu.supabase.co/storage/v1/object/public/ProductPageOutputs/CJM0025-cto-Blue Kurti.png",
# mto_urls="https://lvuhhlrkcuexzqtsbqyu.supabase.co/storage/v1/object/public/ProductPageOutputs/CJM0025-M0X0f16ad748dd979a48d3f79b4J-mto-Blue_Kurti-lip_Carmine_Red_eye_Black_shadow_Maroon.png",
# video_urls="https://lvuhhlrkcuexzqtsbqyu.supabase.co/storage/v1/object/public/JewelmirrorVideoGeneration/video_bd48d59bc8f358c3.mp4")
# --------------------------------
# nto, cto, mto, video = supabase_image_fetch_product_page("CJM0025")
#
# print("nto", nto)
# print("cto", cto)
# print("mto", mto)
# print("video", video)
# # --------------------------------
# res = supabase_product_page_approval(necklace_id="CJM0025",
# nto_images_urls="https://lvuhhlrkcuexzqtsbqyu.supabase.co/storage/v1/object/public/ProductPageOutputs/CJM0025-M0X0f16ad748dd979a48d3f79b4J-nto-Gold_Necklaces.png",
# cto_images_urls="https://lvuhhlrkcuexzqtsbqyu.supabase.co/storage/v1/object/public/ProductPageOutputs/CJM0025-cto-Blue Lehenga.png,https://lvuhhlrkcuexzqtsbqyu.supabase.co/storage/v1/object/public/ProductPageOutputs/CJM0025-cto-Blue Kurti.png",
# mto_images_urls="https://lvuhhlrkcuexzqtsbqyu.supabase.co/storage/v1/object/public/ProductPageOutputs/CJM0025-M0X0f16ad748dd979a48d3f79b4J-mto-Blue_Kurti-lip_Carmine_Red_eye_Black_shadow_Maroon.png",
# video_urls="https://lvuhhlrkcuexzqtsbqyu.supabase.co/storage/v1/object/public/JewelmirrorVideoGeneration/video_bd48d59bc8f358c3.mp4")
# print(res)
# res = supabase_fetch_not_approved_necklaces()
# print(res)
# --------------------------------
# res = supabase_jmproductpage_approval_flag("CJM001")
# print(res)
response = upload_productpage_logs("CJM0025", "True")
# -------------------------------
response = fetch_productpage_logs("CJM0025")
print(response)