40 lines
2.0 KiB
Python
40 lines
2.0 KiB
Python
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
|