#!/usr/bin/env python3 """TSU-WAVE Upload v1.0.0 - باستخدام نفس الأسلوب المجرب""" import requests import hashlib import os import glob TOKEN = "pypi-AgEIcHlwaS5vcmcCJGI3ZjdlMzkxLWViOTMtNGJkOC1hMTViLTNjMTNjOWNmNmFhNQACKlszLCJlZjQ3ZDllOS04YmU5LTQ2OWMtYWQ0OC0wODRhZTg4YzZjMTUiXQAABiBiJ7nhKmGyCQf2Btd7gnBMkHsz-JGxgjePK_Z_L2Kgbw" print("="*60) print("🌊 TSU-WAVE v1.0.0 Upload - PyPI") print("="*60) # قراءة README.md with open('README.md', 'r', encoding='utf-8') as f: readme = f.read() print(f"📄 README.md: {len(readme)} حرف") # البحث عن ملفات التوزيع wheel_files = glob.glob("dist/*.whl") tar_files = glob.glob("dist/*.tar.gz") if not wheel_files and not tar_files: print("\n❌ لا توجد ملفات توزيع. جاري بناء الحزمة...") os.system("python -m build") # البحث مرة أخرى wheel_files = glob.glob("dist/*.whl") tar_files = glob.glob("dist/*.tar.gz") print(f"\n📦 الملفات:") for f in wheel_files + tar_files: print(f" • {os.path.basename(f)}") for filepath in wheel_files + tar_files: filename = os.path.basename(filepath) print(f"\n📤 رفع: {filename}") # تحديد نوع الملف if filename.endswith('.tar.gz'): filetype = 'sdist' pyversion = 'source' else: filetype = 'bdist_wheel' pyversion = 'py3' # حساب الهاشات with open(filepath, 'rb') as f: content = f.read() md5_hash = hashlib.md5(content).hexdigest() sha256_hash = hashlib.sha256(content).hexdigest() # بيانات الرفع مع تحديد نوع المحتوى data = { ':action': 'file_upload', 'metadata_version': '2.1', 'name': 'tsu-wave', 'version': '1.0.0', 'filetype': filetype, 'pyversion': pyversion, 'md5_digest': md5_hash, 'sha256_digest': sha256_hash, 'description': readme, 'description_content_type': 'text/markdown', 'author': 'Samir Baladi', 'author_email': 'gitdeeper@gmail.com', 'license': 'MIT', 'summary': 'TSU-WAVE: Tsunami Spectral Understanding of Wave-Amplitude Variance and Energy', 'home_page': 'https://tsu-wave.netlify.app', 'requires_python': '>=3.8', 'keywords': 'tsunami, early-warning, hydrodynamics, oceanography, natural-hazards, disaster-prevention' } # رفع الملف with open(filepath, 'rb') as f: response = requests.post( 'https://upload.pypi.org/legacy/', files={'content': (filename, f, 'application/octet-stream')}, data=data, auth=('__token__', TOKEN), timeout=60, headers={'User-Agent': 'TSU-WAVE-Uploader/1.0'} ) print(f" الحالة: {response.status_code}") if response.status_code == 200: print(" ✅✅✅ نجاح!") else: print(f" ❌ خطأ: {response.text[:200]}") print("\n" + "="*60) print("🔗 https://pypi.org/project/tsu-wave/1.0.0/") print("="*60)