67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
import re
|
|
import urllib
|
|
import urllib2
|
|
import logging
|
|
import json
|
|
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from django.db import models
|
|
from django.core.urlresolvers import reverse
|
|
|
|
from passerelle.base.models import BaseResource
|
|
from passerelle.sms import SMSGatewayMixin
|
|
|
|
|
|
logger = logging.getLogger('passerelle.apps.mobyt')
|
|
|
|
|
|
class MobytError(Exception):
|
|
pass
|
|
|
|
|
|
class MobytSMSGateway(BaseResource, SMSGatewayMixin):
|
|
URL = 'http://multilevel.mobyt.fr/sms/batch.php'
|
|
MESSAGES_QUALITIES = (
|
|
('l', _('sms direct')),
|
|
('ll', _('sms low-cost')),
|
|
('n', _('sms top')),
|
|
)
|
|
username = models.CharField(max_length=64)
|
|
password = models.CharField(max_length=64)
|
|
quality = models.CharField(max_length=4, choices=MESSAGES_QUALITIES,
|
|
default='l', verbose_name=_('message quality'))
|
|
default_country_code = models.CharField(max_length=3, default=u'33')
|
|
# FIXME: add regexp field, to check destination and from format
|
|
|
|
class Meta:
|
|
verbose_name = 'Mobyt'
|
|
db_table = 'sms_mobyt'
|
|
|
|
@classmethod
|
|
def get_icon_class(cls):
|
|
return 'phone'
|
|
|
|
def send_msg(self, text, sender, destinations):
|
|
"""Send a SMS using the Mobyt provider"""
|
|
# unfortunately it lacks a batch API...
|
|
destinations = self.clean_numbers(destinations, self.default_country_code)
|
|
rcpt = ','.join(destinations)
|
|
params = urllib.urlencode({
|
|
'user': self.username,
|
|
'pass': self.password,
|
|
'rcpt': rcpt,
|
|
'data': text,
|
|
'sender': sender,
|
|
'qty': self.quality
|
|
})
|
|
try:
|
|
r = urllib2.urlopen(self.URL, params)
|
|
except Exception, e:
|
|
logger.error('unable to urlopen %s: %s', self.URL, e)
|
|
raise MobytError('unable to urlopen %s: %s' % (self.URL, e))
|
|
answer = r.read()
|
|
r.close()
|
|
if answer[:2] != "OK":
|
|
raise MobytError('MobyT error: %r' % answer)
|
|
return { 'message': 'OK' }
|