This commit is contained in:
javad committed 2026-10-10 14:21:04 +03:30
1 parent 250cdbab7f
commit 5c6069c3ef
87 files changed
+29209 -3697

No files matched your search

+43
View File
@@ -0,0 +1,43 @@
"""Provider کنسول برای تست/دیباگ؛ پیامک واقعی ارسال نمی‌کند."""
import logging
import sys
from django.conf import settings
from .base import SMSProvider, SMSResult, webotp_message
logger = logging.getLogger(__name__)
def console_write(text):
"""چاپ روی کنسول به‌گونه‌ای که **هرگز** استثنا پرت نکند.
وظیفهٔ provider ارسال است، نه نمایش. کنسول ویندوز (cp1252) فارسی را کدگذاری
نمی‌کند و ``print`` مستقیم باعث ``UnicodeEncodeError`` می‌شد؛ چون فراخوانی‌کننده
(worker) هر استثنا را «ارسال ناموفق» می‌فهمد، یک خطای نمایشی پیامک را در صف
``failed`` می‌گذاشت. پس اول تلاش می‌کنیم متن کامل را بنویسیم، و اگر کنسول
توانش را نداشت نسخهٔ ASCII-شده را می‌نویسیم.
"""
for payload in (text, text.encode("ascii", "replace").decode("ascii")):
try:
sys.stdout.write(payload + "\n")
sys.stdout.flush()
return
except (UnicodeEncodeError, ValueError, OSError):
continue
class ConsoleSMSProvider(SMSProvider):
def __init__(self, config=None):
self.config = config
def send_otp(self, mobile, code):
if settings.DEBUG:
console_write(f"[DEV OTP] {mobile}: {webotp_message(code)}")
return SMSResult(True, provider_code="console")
def send_message(self, mobile, message):
logger.info("[DEV SMS] destination=***%s message=%s", (mobile or "")[-4:], message)
if settings.DEBUG:
console_write(f"[DEV SMS] {mobile}: {message}")
return SMSResult(True, provider_code="console")