35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
from django.db import models
|
|
from django.db.models import TextChoices
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from apps.gooyal_oauth2.settings import oauth2_settings
|
|
from utils.clients.sms.sms import BaseSMSClient
|
|
from utils.models import BaseModel
|
|
from utils.clients.sms.payam_sms.client import PayamSMSClient
|
|
from utils.clients.sms.mobin_sms.client import MobinSMSClient
|
|
from utils.clients.sms.fake.client import FakeClient
|
|
|
|
import logging
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
class SMSClienChoises(TextChoices):
|
|
FAKE = "fake", _("fake")
|
|
PAYAM_SMS = 'payam_sms', _('payam_sms')
|
|
MOBIN_SMS = 'mobin_sms', _('mobin_sms')
|
|
|
|
class SMSPolicy(BaseModel):
|
|
application = models.ForeignKey(oauth2_settings.APPLICATION_MODEL, on_delete=models.PROTECT,
|
|
related_name='+', null=True, blank=True, unique=True)
|
|
preferred = models.CharField(max_length=16, choices=SMSClienChoises.choices, default=SMSClienChoises.FAKE)
|
|
|
|
@staticmethod
|
|
def get_client() -> BaseSMSClient:
|
|
policy = SMSPolicy.objects.get_or_create(application=None)[0]
|
|
if policy.preferred == SMSClienChoises.MOBIN_SMS:
|
|
return MobinSMSClient()
|
|
elif policy.preferred == SMSClienChoises.PAYAM_SMS:
|
|
return PayamSMSClient()
|
|
else:
|
|
return FakeClient()
|