Projet

Général

Profil

0001-sms-add-backend-for-passerelle-6860.patch

Benjamin Dauvergne, 31 mars 2015 16:00

Télécharger (3,48 ko)

Voir les différences:

Subject: [PATCH] sms: add backend for passerelle (#6860)

 wcs/qommon/sms.py | 44 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 43 insertions(+), 1 deletion(-)
wcs/qommon/sms.py
10 10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 12
# GNU General Public License for more details.
13 13
#
14 14
# You should have received a copy of the GNU General Public License
15 15
# along with this program; if not, see <http://www.gnu.org/licenses/>.
16 16

  
17 17
import re
18
import json
18 19
import urllib2
19 20
import urllib
20 21

  
22
from quixote import get_publisher
21 23
from qommon import errors
22
from qommon import get_cfg
24
from qommon import get_cfg, get_logger
23 25
from qommon.form import StringWidget, PasswordWidget
26
from qommon.misc import http_post_request
24 27

  
25 28

  
26 29
class MobytSMS(object):
27 30
    """This class allows to send a SMS using Mobyt provider"""
28 31
    parameters = [
29 32
         (StringWidget, 'sender', N_('Sender (number or name)')),
30 33
         (StringWidget, 'mobyt_username', N_('Username')),
31 34
         (PasswordWidget, 'mobyt_password', N_('Password')),
......
191 194
            r.close()
192 195

  
193 196
    def get_sms_left(self, type='standard'):
194 197
        raise NotImplementedError
195 198

  
196 199
    def get_money_left(self):
197 200
        raise NotImplementedError
198 201

  
202
class PasserelleSMS(object):
203
    """This class allows to send a SMS using Passerelle
204
    """
205
    parameters = [
206
         (StringWidget, 'sender', N_('Sender (number or name)')),
207
         (StringWidget, 'passerelle_url', N_('URL')),
208
         (StringWidget, 'passerelle_apikey', N_('Key')),
209
    ]
210

  
211
    TIMEOUT = 10
212

  
213
    def __init__(self):
214
        sms_cfg = get_cfg('sms', {})
215
        self.sender = sms_cfg.get('sender', '')
216
        self.key = sms_cfg.get('passerelle_apikey', '')
217
        self.url = sms_cfg.get('passerelle_url', '')
218

  
219
    def send(self, sender, destinations, text, quality=None):
220
        """Send a SMS using the Choosit provider"""
221
        sender = sender or self.sender
222
        payload = {
223
              'from': sender,
224
              'message': text,
225
              'to': destinations,
226
        }
227
        url = self.url
228
        url += '?%s' % urllib.ulrencode({'apikey': self.key})
229
        body = json.dumps(payload, encoding=get_publisher().site_charset)
230
        response, status, data, auth_header = http_post_request(
231
                url, body, timeout=self.TIMEOUT)
232
        get_logger().debug('sms %r sent using passerelle to %r, result: %r',
233
                text, destinations, response)
234

  
235
    def get_sms_left(self, type='standard'):
236
        raise NotImplementedError
237

  
238
    def get_money_left(self):
239
        raise NotImplementedError
199 240

  
200 241
class SMS(object):
201 242
    providers = {
202 243
        'mobyt': (N_('Mobyt provider'), MobytSMS),
203 244
        'oxyd': (N_('Oxyd provider'), OxydSMS),
204 245
        'choosit': (N_('Choosit provider'), ChoositSMS),
246
        'passerelle': (N_('Passerelle provider'), PasserelleSMS),
205 247
    }
206 248

  
207 249
    def get_sms_class(cls, provider_id):
208 250
        if not provider_id:
209 251
            sms_cfg = get_cfg('sms', {})
210 252
            provider_id = sms_cfg.get('mode', '')
211 253
        if provider_id in cls.providers:
212 254
            return cls.providers.get(provider_id)[1]()
213
-