milad / patch_gradio.py
Vgjkmhf's picture
Update patch_gradio.py
42f52cb verified
#!/usr/bin/env python3
"""
پچ خودکار برای رفع باگ gradio_client
رفع خطای: TypeError: argument of type 'bool' is not iterable
"""
import os
import sys
import glob
def apply_gradio_client_patch():
"""
اعمال پچ کامل برای رفع باگ gradio_client
رفع خطای: TypeError: argument of type 'bool' is not iterable
"""
try:
print("🔍 جستجوی فایل gradio_client/utils.py...")
# جستجوی فایل utils.py در تمام مسیرهای ممکن
possible_paths = [
"/usr/local/lib/python*/site-packages/gradio_client/utils.py",
"/opt/conda/lib/python*/site-packages/gradio_client/utils.py",
"/home/user/.local/lib/python*/site-packages/gradio_client/utils.py",
f"{sys.prefix}/lib/python*/site-packages/gradio_client/utils.py",
"/app/.local/lib/python*/site-packages/gradio_client/utils.py"
]
utils_file = None
for pattern in possible_paths:
matches = glob.glob(pattern)
if matches:
utils_file = matches[0]
print(f"📁 فایل پیدا شد: {utils_file}")
break
if not utils_file or not os.path.exists(utils_file):
print("⚠️ فایل gradio_client/utils.py پیدا نشد")
print("💡 احتمالاً gradio_client نصب نشده یا در مسیر متفاوتی قرار دارد")
return False
# خواندن محتوای فایل
print("📖 خواندن محتوای فایل...")
with open(utils_file, 'r', encoding='utf-8') as f:
content = f.read()
# بررسی اینکه آیا پچ کامل قبلاً اعمال شده یا نه
if 'if not isinstance(schema, dict):' in content and 'return "any"' in content:
print("✅ پچ کامل gradio_client قبلاً اعمال شده است")
return True
# بک‌آپ فایل اصلی
backup_file = utils_file + '.backup'
if not os.path.exists(backup_file):
with open(backup_file, 'w', encoding='utf-8') as f:
f.write(content)
print(f"💾 بک‌آپ ایجاد شد: {backup_file}")
# اعمال پچ کامل
print("🔧 اعمال پچ کامل...")
# پچ کامل - جایگزینی تابع get_type
import re
old_function_pattern = r'def get_type\(schema\):\s*if isinstance\(schema, dict\) and "const" in schema:'
new_function = '''def get_type(schema):
# پچ کامل برای رفع باگ TypeError
if not isinstance(schema, dict):
return "any" # مقدار پیش‌فرض برای schema های غیر dict
if "const" in schema:'''
if re.search(old_function_pattern, content):
content = re.sub(old_function_pattern, new_function, content)
print("✅ پچ کامل با regex اعمال شد")
else:
# پچ مرحله‌ای اگر الگوی کامل پیدا نشد
simple_patches = [
# مرحله 1: پچ ساده
('if "const" in schema:', 'if isinstance(schema, dict) and "const" in schema:'),
# مرحله 2: پچ کامل
('if isinstance(schema, dict) and "const" in schema:',
'if not isinstance(schema, dict):\n return "any"\n if "const" in schema:')
]
patched = False
for i, (old_line, new_line) in enumerate(simple_patches, 1):
if old_line in content and new_line not in content:
content = content.replace(old_line, new_line)
print(f"✅ پچ مرحله {i} اعمال شد")
patched = True
break
if not patched:
print("⚠️ هیچ الگوی قابل پچ پیدا نشد")
print("💡 احتمالاً نسخه gradio_client متفاوت است")
return False
# نوشتن فایل اصلاح شده
with open(utils_file, 'w', encoding='utf-8') as f:
f.write(content)
print(f"✅ پچ کامل gradio_client با موفقیت اعمال شد!")
print(f"📍 مسیر فایل: {utils_file}")
return True
except PermissionError:
print("❌ خطای دسترسی: برای اعمال پچ به دسترسی نوشتن نیاز است")
print("💡 در Hugging Face Space این مشکل معمولاً خودکار حل می‌شود")
return False
except Exception as e:
print(f"❌ خطا در اعمال پچ: {str(e)}")
return False
if __name__ == "__main__":
print("🚀 شروع اعمال پچ gradio_client...")
success = apply_gradio_client_patch()
if success:
print("\n🎉 پچ با موفقیت اعمال شد!")
print("✨ حالا می‌توانید app.py را اجرا کنید")
else:
print("\n⚠️ پچ اعمال نشد")
print("💡 در صورت بروز خطا، از نسخه‌های جدیدتر gradio استفاده کنید")