ochf / app.py
shasee's picture
Update app.py
9d0e55d verified
Raw
History Blame Contribute Delete
3.06 kB
# AUTO_PATCH_DONE=0
from pathlib import Path
import os
import sys
# Gradio'nun node template index.js yolu
FILE = Path("/usr/local/lib/python3.10/site-packages/gradio/templates/node/build/index.js")
def patch_gradio():
if not FILE.exists():
print("[PATCH] index.js bulunamadı! Yol doğru mu kontrol et.")
return False
text = FILE.read_text(encoding="utf-8")
# Eğer daha önce patchlendiyse tekrar dokunma
if "// ===== CUSTOM NODE PROXY =====" in text:
print("[PATCH] index.js zaten patch'lenmiş durumda.")
return False
# Arayacağımız orijinal satır (marker)
marker = """\tif (route === "python") {\t\tproxy.web(req, res, { target: pythonTarget });\t\treturn;\t}
"""
# Yerine koyacağımız proxy kurallı patch
patch = """\tif (route === "python") {\t\tproxy.web(req, res, { target: pythonTarget });\t\treturn;\t}\t// ===== CUSTOM NODE PROXY =====\tif (path === "/node" || path.startsWith("/node/")) {\t\treq.url = req.url.replace(/^\\/node/, "") || "/";\t\tproxy.web(req, res, {\t\t\ttarget: "http://127.0.0.1:8888",\t\t\tchangeOrigin: true\t\t});\t\treturn;\t}
"""
if marker not in text:
print("[PATCH] index.js içinde hedef marker bulunamadı!")
return False
# Patch'i uygula ve kaydet
FILE.write_text(text.replace(marker, patch), encoding="utf-8")
print("[PATCH] index.js başarıyla patchlendi.")
return True
# 1. AŞAMA: Dosyanın başındaki flag değerini oku
current_file = Path(__file__)
file_content = current_file.read_text(encoding="utf-8")
# Eğer henüz patch aşaması tamamlanmadıysa (AUTO_PATCH_DONE=0 ise)
if "# AUTO_PATCH_DONE=0" in file_content:
print("[SÜREÇ] İlk çalıştırma algılandı. İşlemler başlıyor...")
# Önce index.js dosyasını patch'le
patched = patch_gradio()
# Şimdi app.py'yi güncelle (AUTO_PATCH_DONE=1 yap)
updated_content = file_content.replace("# AUTO_PATCH_DONE=0", "# AUTO_PATCH_DONE=1")
current_file.write_text(updated_content, encoding="utf-8")
print("[SÜREÇ] app.py güncellendi (# AUTO_PATCH_DONE=1 yapıldı).")
# Python process'ini sıfırdan yeniden başlat
print("[SÜREÇ] Process yeniden başlatılıyor (os.execv)...")
os.execv(sys.executable, [sys.executable] + sys.argv)
else:
# Eğer AUTO_PATCH_DONE=1 ise bu blok çalışır ve patch adımları doğrudan es geçilir.
print("[SÜREÇ] İkinci aşama/Restart sonrası açılış. Patch adımları atlandı.")
# ==========================================
# 2. AŞAMA: NORMAL GRADIO + NODE ÇALIŞMASI
# ==========================================
import gradio as gr
import spaces
@spaces.GPU
def dummy():
return "ok"
with gr.Blocks(title="Patch Test") as demo:
gr.Markdown("# Patch Test")
gr.Markdown("Gradio başarıyla patch'lendi ve restart atıldı.")
gr.Markdown("Eğer bu sayfayı görüyorsan, startup sorunsuz tamamlanmış demektir!")
# Gradio'yu ayağa kaldır
demo.launch(
server_name="0.0.0.0",
server_port=7860,
)