import sys from django.apps import AppConfig def make_std_streams_unicode_safe(): """استریم‌های استاندارد را در برابر متن غیر-ASCII مقاوم می‌کند. کنسول ویندوز با کدپیج cp1252 کار می‌کند و نوشتن متن فارسی روی آن ``UnicodeEncodeError`` می‌دهد (پیام خطا: ``'charmap' codec can't encode ...``). رخداد واقعی که این تابع برایش نوشته شد: ``print`` متن فارسی داخل provider کنسولِ پیامک استثنا می‌داد، worker آن را به‌عنوان «ارسال ناموفق» ثبت می‌کرد و پیامک در صف ``failed`` می‌ماند — در حالی که ارسال هیچ مشکلی نداشت. یک استثنای صرفاً نمایشی نباید هرگز نتیجهٔ یک عملیات کسب‌وکار را عوض کند. پس اینجا یک‌بار برای همیشه استریم‌ها به UTF-8 با ``errors='replace'`` تنظیم می‌شوند: هیچ چاپ فارسی‌ای پروسه را نمی‌شکند و فایل‌های لاگ هم فارسی را درست نگه می‌دارند. """ for stream in (sys.stdout, sys.stderr): reconfigure = getattr(stream, "reconfigure", None) if reconfigure is None: continue try: reconfigure(encoding="utf-8", errors="replace") except Exception: # جریان‌های جایگزین (مثلاً test runner یا jupyter) ممکن است پشتیبانی نکنند. pass class AdminPanelConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'admin_panel' def ready(self): # پیش از هر کامند/سیگنال: چاپ امن متن فارسی روی کنسول ویندوز. make_std_streams_unicode_safe() # ثبت سیگنال‌ها (busy_timeout برای SQLite). from . import signals # noqa: F401