"""انتخاب provider پیامک بر اساس تنظیمات ذخیره‌شده در دیتابیس (Django Admin).""" from django.utils.module_loading import import_string from .base import SMSProvider # نگاشت کلید انتخاب‌شده در Admin به مسیر کلاس provider. PROVIDER_CLASSES = { "sms0098": "integrations.sms.sms0098.ZeroZeroNinetyEightSMSProvider", "sms0098ws": "integrations.sms.sms0098ws.ZeroZeroNinetyEightWebServiceProvider", "http": "integrations.sms.http.HTTPSMSProvider", "console": "integrations.sms.console.ConsoleSMSProvider", } def get_provider_class(config): path = PROVIDER_CLASSES.get(config.provider) if not path: raise ValueError(f"provider پیامک ناشناخته است: {config.provider}") provider_class = import_string(path) if not issubclass(provider_class, SMSProvider): raise TypeError("کلاس provider باید از SMSProvider ارث‌بری کند.") return provider_class def get_sms_provider(config=None): """یک نمونه provider برای config داده‌شده (یا تنظیمات جاری) می‌سازد. import مدل به‌صورت lazy انجام می‌شود تا از حلقهٔ import در زمان بارگذاری اپ جلوگیری شود. """ if config is None: from admin_panel.models import SMSProviderConfig config = SMSProviderConfig.load() return get_provider_class(config)(config) def reset_sms_provider(): """سازگاری با فراخوانی‌های قبلی؛ provider دیگر کش نمی‌شود.""" return None