passerelle/passerelle/apps/mobyt/models.py

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' }