New_ai / app.py
Lavlu118557's picture
Update app.py
90396bb verified
Raw
History Blame
7.08 kB
import sqlite3
import yaml
import pandas as pd
import gradio as gr
import os
DB_FILE = "mydb.sqlite"
YAML_FILE = "data.yaml"
# 🔹 DB init
def init_db():
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name_en TEXT,
name_bn TEXT,
description_en TEXT,
description_bn TEXT,
photo_path TEXT,
voice_path TEXT
)
""")
conn.commit()
conn.close()
init_db()
# 🔹 Load YAML into DB
def load_yaml_to_db():
if not os.path.exists(YAML_FILE):
return "❌ data.yaml not found!"
with open(YAML_FILE, 'r', encoding='utf-8') as f:
data = yaml.safe_load(f)
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()
for item in data:
cursor.execute("""
INSERT INTO items (name_en, name_bn, description_en, description_bn, photo_path, voice_path)
VALUES (?, ?, ?, ?, ?, ?)
""", (
item['name_en'], item['name_bn'],
item['description_en'], item['description_bn'],
item['photo'], item['voice']
))
conn.commit()
conn.close()
return f"✅ YAML loaded: {len(data)} items"
# 🔹 Add Item
def add_item(name_en, name_bn, desc_en, desc_bn, photo, voice):
if not all([name_en, name_bn, desc_en, desc_bn]):
return "❌ All text fields are required"
# Save media files
photo_path, voice_path = None, None
if photo:
photo_path = f"media/photo/{os.path.basename(photo.name)}"
photo.save(photo_path)
if voice:
voice_path = f"media/voice/{os.path.basename(voice.name)}"
voice.save(voice_path)
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()
cursor.execute("""
INSERT INTO items (name_en, name_bn, description_en, description_bn, photo_path, voice_path)
VALUES (?, ?, ?, ?, ?, ?)
""", (name_en, name_bn, desc_en, desc_bn, photo_path, voice_path))
conn.commit()
conn.close()
return f"✅ Item '{name_en}' added!"
# 🔹 View All Items
def view_items():
conn = sqlite3.connect(DB_FILE)
df = pd.read_sql_query("SELECT * FROM items", conn)
conn.close()
return df
# 🔹 Search Items
def search_items(keyword):
conn = sqlite3.connect(DB_FILE)
query = """
SELECT * FROM items
WHERE name_en LIKE ? OR name_bn LIKE ? OR description_en LIKE ? OR description_bn LIKE ?
"""
df = pd.read_sql_query(query, conn, params=(f"%{keyword}%", f"%{keyword}%", f"%{keyword}%", f"%{keyword}%"))
conn.close()
return df
# 🔹 Get Item by ID
def get_item(item_id):
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()
cursor.execute("SELECT * FROM items WHERE id=?", (item_id,))
row = cursor.fetchone()
conn.close()
if row:
return [row[1], row[2], row[3], row[4], row[5], row[6]]
else:
return ["","","","","",None,None]
# 🔹 Update Item
def update_item(item_id, name_en, name_bn, desc_en, desc_bn, photo, voice):
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()
# Existing media paths
cursor.execute("SELECT photo_path, voice_path FROM items WHERE id=?", (item_id,))
row = cursor.fetchone()
if not row:
return "❌ Item not found"
photo_path, voice_path = row
# Update media if new uploaded
if photo:
photo_path = f"media/photo/{os.path.basename(photo.name)}"
photo.save(photo_path)
if voice:
voice_path = f"media/voice/{os.path.basename(voice.name)}"
voice.save(voice_path)
cursor.execute("""
UPDATE items SET name_en=?, name_bn=?, description_en=?, description_bn=?, photo_path=?, voice_path=?
WHERE id=?
""", (name_en, name_bn, desc_en, desc_bn, photo_path, voice_path, item_id))
conn.commit()
conn.close()
return f"✅ Item ID {item_id} updated!"
# 🔹 Delete Item
def delete_item(item_id):
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()
cursor.execute("DELETE FROM items WHERE id=?", (item_id,))
conn.commit()
conn.close()
return f"❌ Item ID {item_id} deleted!"
# 🔹 Export CSV
def export_csv():
df = view_items()
df.to_csv("export_items.csv", index=False)
return "✅ Exported to export_items.csv"
# 🔹 Gradio UI
with gr.Blocks() as demo:
gr.Markdown("## 🐄 Advanced Multi-language Media Database (বাংলা + English)")
with gr.Tab("Load YAML"):
load_btn = gr.Button("Load YAML")
load_output = gr.Textbox(label="Status")
load_btn.click(load_yaml_to_db, inputs=[], outputs=load_output)
with gr.Tab("View / Search"):
search_input = gr.Textbox(label="Search (বাংলা/English)")
search_btn = gr.Button("Search")
search_output = gr.Dataframe()
view_btn = gr.Button("View All Items")
view_output = gr.Dataframe()
search_btn.click(search_items, inputs=search_input, outputs=search_output)
view_btn.click(view_items, inputs=[], outputs=view_output)
with gr.Tab("Media Gallery / CRUD"):
item_id_input = gr.Number(label="Item ID")
name_en_input = gr.Textbox(label="Name (EN)")
name_bn_input = gr.Textbox(label="Name (BN)")
desc_en_input = gr.Textbox(label="Description (EN)")
desc_bn_input = gr.Textbox(label="Description (BN)")
photo_input = gr.File(label="Photo", file_types=[".png",".jpg",".jpeg"])
voice_input = gr.File(label="Voice", file_types=[".mp3",".wav"])
# Display
display_btn = gr.Button("Load Item")
display_name_en = gr.Textbox(label="Name (EN)")
display_name_bn = gr.Textbox(label="Name (BN)")
display_desc_en = gr.Textbox(label="Description (EN)")
display_desc_bn = gr.Textbox(label="Description (BN)")
display_photo = gr.Image(label="Photo")
display_voice = gr.Audio(label="Voice")
display_btn.click(get_item, inputs=item_id_input, outputs=[display_name_en, display_name_bn, display_desc_en, display_desc_bn, display_photo, display_voice])
# CRUD buttons
add_btn = gr.Button("Add / Save New Item")
add_output = gr.Textbox(label="Status")
add_btn.click(add_item, inputs=[name_en_input,name_bn_input,desc_en_input,desc_bn_input,photo_input,voice_input], outputs=add_output)
update_btn = gr.Button("Update Item")
update_output = gr.Textbox(label="Status")
update_btn.click(update_item, inputs=[item_id_input,name_en_input,name_bn_input,desc_en_input,desc_bn_input,photo_input,voice_input], outputs=update_output)
delete_btn = gr.Button("Delete Item")
delete_output = gr.Textbox(label="Status")
delete_btn.click(delete_item, inputs=item_id_input, outputs=delete_output)
export_btn = gr.Button("Export CSV")
export_output = gr.Textbox(label="Status")
export_btn.click(export_csv, inputs=[], outputs=export_output)
demo.launch()