DatabaseBuilder / app.py
Reza-galaxy21's picture
Update app.py
02f791b verified
raw
history blame
3.32 kB
import gradio as gr
import os
import json
from utils import parse_excel_file, save_to_json
DATA_FILE = "material_db.json"
def is_duplicate(record, all_data):
for item in all_data:
if (
item.get("project_description") == record.get("project_description")
and item.get("materials") == record.get("materials")
):
return True
return False
def process_excel(file, description):
if file is None:
return "❌ لطفاً یک فایل اکسل بارگذاری کنید.", ""
try:
# ۱. پردازش فایل اکسل
materials = parse_excel_file(file.name)
record = {
"project_description": description.strip(),
"materials": materials
}
# ۲. بارگذاری داده‌های قبلی
all_data = []
if os.path.exists(DATA_FILE):
with open(DATA_FILE, "r", encoding="utf-8") as f:
try:
existing_data = json.load(f)
if isinstance(existing_data, list):
all_data = existing_data
else:
all_data = [existing_data]
except json.JSONDecodeError:
pass # فایل خالی یا خراب
# ۳. بررسی تکراری بودن
if is_duplicate(record, all_data):
return "⚠️ پروژه‌ای با همین توصیف و مواد قبلاً ثبت شده است.", ""
# ۴. ذخیره در فایل JSON
all_data.append(record)
save_to_json(all_data, DATA_FILE)
return f"✅ اطلاعات برای «{len(materials)}» ماده با موفقیت ذخیره شد.\n📝 توصیف پروژه: {description}", json.dumps(record, indent=2, ensure_ascii=False)
except Exception as e:
return str(e), ""
with gr.Blocks(title="کتابخانه پروژه‌های برآورد") as demo:
gr.Markdown("## 📦 ابزار ساخت کتابخانه مواد پروژه")
with gr.Tabs():
with gr.TabItem("📤 ثبت پروژه جدید"):
gr.Markdown("در این بخش فایل اکسل خود را بارگذاری کنید و توصیف پروژه را بنویسید.")
with gr.Row():
excel_input = gr.File(label="فایل اکسل", file_types=[".xlsx"])
description_input = gr.Textbox(label="توصیف پروژه", lines=3, placeholder="مثلاً: برآورد نصب چراغ روشنایی با لامپ 70 وات...")
with gr.Row():
submit_btn = gr.Button("📥 ذخیره در کتابخانه")
output_msg = gr.Textbox(label="وضعیت ذخیره‌سازی", interactive=False)
output_json = gr.Code(label="📦 خروجی ذخیره‌شده", language="json")
submit_btn.click(fn=process_excel, inputs=[excel_input, description_input], outputs=[output_msg, output_json])
with gr.TabItem("📚 مشاهده توضیحات (در نسخه‌های بعدی)"):
gr.Markdown("در نسخه‌های آینده، اینجا می‌تونید پروژه‌های ثبت‌شده رو ببینید و تحلیل GPT بگیرید.")
demo.launch()