Spaces:
Running
Running
#!/usr/bin/env python3 | |
""" | |
Quick setup script for Hugging Face tokens | |
سكريپت إعداد سريع لرموز Hugging Face | |
This script loads tokens from environment variables only. | |
No hardcoded tokens are included for security. | |
""" | |
import os | |
import sys | |
from pathlib import Path | |
# Add src to path | |
sys.path.insert(0, str(Path(__file__).parent / "src")) | |
def setup_tokens(): | |
"""Setup tokens from environment variables""" | |
print("🔑 إعداد رموز Hugging Face") | |
print("=" * 50) | |
print("📝 ملاحظة: يجب إضافة الرموز في متغيرات البيئة:") | |
print(" - HF_TOKEN_READ: رمز القراءة") | |
print(" - HF_TOKEN_WRITE: رمز الكتابة") | |
print(" - HF_TOKEN_FINE_GRAINED: رمز مخصص") | |
print("=" * 50) | |
try: | |
from src.core.token_manager import TokenManager | |
# Initialize token manager | |
token_manager = TokenManager() | |
# Token definitions from environment variables | |
tokens = { | |
'read_token': { | |
'token': os.getenv('HF_TOKEN_READ'), | |
'type': 'read', | |
'description': 'رمز القراءة - للتطوير والتعلم والوصول للنماذج العامة', | |
'is_default': True | |
}, | |
'write_token': { | |
'token': os.getenv('HF_TOKEN_WRITE'), | |
'type': 'write', | |
'description': 'رمز الكتابة - لرفع ومشاركة النماذج مع المجتمع', | |
'is_default': False | |
}, | |
'fine_grained_token': { | |
'token': os.getenv('HF_TOKEN_FINE_GRAINED'), | |
'type': 'fine_grained', | |
'description': 'رمز مخصص - للمشاريع التجارية والبيانات الطبية الحساسة', | |
'is_default': False | |
} | |
} | |
# Save tokens | |
tokens_found = 0 | |
for name, token_info in tokens.items(): | |
token = token_info['token'] | |
if not token: | |
print(f"⚠️ تخطي {name} - لم يتم العثور على الرمز في متغيرات البيئة") | |
continue | |
success = token_manager.save_token( | |
name=name, | |
token=token, | |
token_type=token_info['type'], | |
description=token_info['description'], | |
is_default=token_info['is_default'] | |
) | |
if success: | |
tokens_found += 1 | |
print(f"✅ تم حفظ {name} ({token_info['type']})") | |
# Validate token | |
validation = token_manager.validate_token(token) | |
if validation['valid']: | |
print(f" ✓ الرمز صحيح - المستخدم: {validation.get('username', 'غير معروف')}") | |
else: | |
print(f" ⚠️ تحذير: {validation.get('message', 'فشل التحقق')}") | |
else: | |
print(f"❌ فشل في حفظ {name}") | |
if tokens_found == 0: | |
print("\n❌ لم يتم العثور على أي رموز في متغيرات البيئة!") | |
print("💡 يرجى إضافة الرموز في إعدادات Hugging Face Spaces:") | |
print(" 1. اذهب إلى Settings > Variables") | |
print(" 2. أضف HF_TOKEN_READ, HF_TOKEN_WRITE, HF_TOKEN_FINE_GRAINED") | |
print(" 3. أعد تشغيل Space") | |
return False | |
print(f"\n📊 ملخص الرموز المحفوظة: {tokens_found}/3") | |
tokens_list = token_manager.list_tokens() | |
for token in tokens_list: | |
status = "🟢 افتراضي" if token['is_default'] else "🔵 متاح" | |
print(f" {status} {token['name']} ({token['type']}) - {token['usage_count']} استخدام") | |
print("\n🎯 تخصيص الرموز للمهام:") | |
task_mappings = { | |
'read': 'قراءة النماذج العامة', | |
'download': 'تحميل النماذج', | |
'medical': 'البيانات الطبية الحساسة', | |
'private': 'النماذج الخاصة والمحدودة', | |
'write': 'رفع النماذج الجديدة', | |
'upload': 'مشاركة المحتوى', | |
'commercial': 'المشاريع التجارية', | |
'enterprise': 'الاستخدام المؤسسي' | |
} | |
for task, description in task_mappings.items(): | |
token = token_manager.get_token_for_task(task) | |
if token: | |
# Find token name | |
token_name = "غير معروف" | |
for t in tokens_list: | |
test_token = token_manager.get_token(t['name']) | |
if test_token == token: | |
token_name = t['name'] | |
break | |
print(f" 📋 {task}: {description} → {token_name}") | |
else: | |
print(f" ❌ {task}: {description} → لا يوجد رمز مناسب") | |
print("\n✅ تم إعداد جميع الرموز بنجاح!") | |
print("\n🌐 يمكنك الآن:") | |
print(" • تشغيل التطبيق: python run_optimized.py") | |
print(" • إدارة الرموز: http://localhost:8000/tokens") | |
print(" • الوصول للبيانات الطبية: http://localhost:8000/medical-datasets") | |
return True | |
except ImportError as e: | |
print(f"❌ خطأ في الاستيراد: {e}") | |
print("💡 تأكد من تثبيت التبعيات: pip install -r requirements.txt") | |
return False | |
except Exception as e: | |
print(f"❌ خطأ في إعداد الرموز: {e}") | |
return False | |
def test_tokens(): | |
"""Test token functionality""" | |
print("\n🧪 اختبار وظائف الرموز") | |
print("=" * 30) | |
try: | |
from src.core.token_manager import TokenManager | |
token_manager = TokenManager() | |
# Test different task types | |
test_tasks = ['read', 'medical', 'write', 'private'] | |
for task in test_tasks: | |
token = token_manager.get_token_for_task(task) | |
if token: | |
print(f"✅ {task}: رمز متوفر") | |
else: | |
print(f"❌ {task}: لا يوجد رمز") | |
return True | |
except Exception as e: | |
print(f"❌ خطأ في الاختبار: {e}") | |
return False | |
def show_usage_examples(): | |
"""Show usage examples""" | |
print("\n📚 أمثلة الاستخدام") | |
print("=" * 30) | |
examples = [ | |
{ | |
'task': 'تحميل نموذج عام', | |
'code': 'curl http://localhost:8000/api/tokens/for-task/read', | |
'description': 'للحصول على رمز القراءة للنماذج العامة' | |
}, | |
{ | |
'task': 'تحميل بيانات طبية', | |
'code': 'curl http://localhost:8000/api/tokens/for-task/medical', | |
'description': 'للحصول على رمز مخصص للبيانات الطبية' | |
}, | |
{ | |
'task': 'رفع نموذج جديد', | |
'code': 'curl http://localhost:8000/api/tokens/for-task/write', | |
'description': 'للحصول على رمز الكتابة لرفع النماذج' | |
} | |
] | |
for example in examples: | |
print(f"\n📋 {example['task']}:") | |
print(f" الكود: {example['code']}") | |
print(f" الوصف: {example['description']}") | |
def main(): | |
"""Main function""" | |
print("🚀 مرحباً بك في إعداد رموز Hugging Face") | |
print("Welcome to Hugging Face Tokens Setup") | |
print("=" * 60) | |
# Check if .env file exists | |
if not Path('.env').exists(): | |
print("⚠️ ملف .env غير موجود") | |
print("💡 تأكد من نسخ .env.example إلى .env أو إضافة الرموز في متغيرات البيئة") | |
# Setup tokens | |
if setup_tokens(): | |
# Test tokens | |
test_tokens() | |
# Show examples | |
show_usage_examples() | |
print("\n🎉 تم الإعداد بنجاح!") | |
return 0 | |
else: | |
print("\n❌ فشل في الإعداد") | |
print("📖 راجع SECURITY_SETUP.md للحصول على تعليمات مفصلة") | |
return 1 | |
if __name__ == "__main__": | |
sys.exit(main()) | |