39 lines
1.6 KiB
Python
39 lines
1.6 KiB
Python
"""انتخاب 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
|