add choosit newletters gateway (via register)
This commit is contained in:
parent
30afd0a35d
commit
d8c316bfba
|
@ -1,11 +1,19 @@
|
|||
from django.contrib import admin
|
||||
|
||||
from .models import ChoositSMSGateway
|
||||
from .models import ChoositSMSGateway, ChoositRegisterGateway, ChoositRegisterNewsletter
|
||||
|
||||
class ChoositSMSGatewayAdmin(admin.ModelAdmin):
|
||||
prepopulated_fields = {'slug': ('title',)}
|
||||
list_display = ['title', 'slug', 'description', 'key',
|
||||
'default_country_code']
|
||||
|
||||
|
||||
admin.site.register(ChoositSMSGateway, ChoositSMSGatewayAdmin)
|
||||
|
||||
|
||||
|
||||
class ChoositRegisterGatewayAdmin(admin.ModelAdmin):
|
||||
prepopulated_fields = {'slug': ('title',)}
|
||||
|
||||
admin.site.register(ChoositRegisterGateway, ChoositRegisterGatewayAdmin)
|
||||
admin.site.register(ChoositRegisterNewsletter)
|
||||
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
import requests
|
||||
import json
|
||||
import hashlib
|
||||
|
||||
class ChoositRegisterWS(object):
|
||||
def __init__(self, url, key):
|
||||
self.url = url
|
||||
self.key = key
|
||||
|
||||
def categories(self):
|
||||
return requests.post(self.url, data={'action': 'read'}).json()
|
||||
|
||||
def create(self, newsletter, email):
|
||||
return requests.post(self.url, data={'action': 'create', 'email': email,
|
||||
'newsletter': newsletter, 'hash': hashlib.sha1(self.key+email).hexdigest()
|
||||
}).json()
|
||||
|
||||
def delete(self, newsletter, email):
|
||||
return requests.post(self.url, data={'action': 'delete', 'email': email,
|
||||
'newsletter': newsletter, 'hash': hashlib.sha1(self.key+email).hexdigest()
|
||||
}).json()
|
||||
|
||||
def update(self, subscriptions, email):
|
||||
'''Returns { 'email': 'bdauvergne@entrouvert.com',
|
||||
'hash': 'ab60e5e1b226561092c082ca73a2ad9ee4527c7b',
|
||||
'status': 'ok'}
|
||||
or
|
||||
|
||||
{ 'email': 'bdauvergne@entrouvert.com',
|
||||
'hash': 'ab60e5dgd34543543',
|
||||
'status': 'nok',
|
||||
'error': 'error message'}
|
||||
'''
|
||||
if isinstance(subscriptions, basestring):
|
||||
subscriptions = subscriptions.split(',')
|
||||
params = {
|
||||
'action': 'update',
|
||||
'email': email,
|
||||
'hash': hashlib.sha1(self.key+email).hexdigest()
|
||||
}
|
||||
for i, subscription in enumerate(subscriptions):
|
||||
params['subscriptions[%d]'% i] = subscription
|
||||
res = requests.post(self.url, data=params)
|
||||
print res.request.body
|
||||
return res.json()
|
||||
|
||||
def subscriptions(self, email):
|
||||
'''Returns { 'email': 'johndoe@example.com',
|
||||
'hash': 'ef787...',
|
||||
'newsletters': { '1': 'newsletter 1', ... },
|
||||
'subscriptions': [ '1' ] }
|
||||
'''
|
||||
return requests.post(self.url, data={'action': 'read', 'email': email,
|
||||
'hash': hashlib.sha1(self.key+email).hexdigest()}).json()
|
||||
|
||||
def newsletters(self, categories):
|
||||
params = {'action': 'read_newsletters'}
|
||||
for i, categorie in enumerate(categories):
|
||||
params['categories[%d]' % i] = categorie
|
||||
return requests.post(self.url, data=params).json()
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
# ne fonctionne que depuis lantana
|
||||
# examples:
|
||||
# python choosit.py 'https://emailingeco.montpellier-agglo.com/ws/index.php' mykey subscriptions 'bdauvergne@entrouvert.com'
|
||||
# python choosit.py 'https://emailingeco.montpellier-agglo.com/ws/index.php' mykey update '315,316' 'bdauvergne@entrouvert.com'
|
||||
|
||||
ws = ChoositRegisterWS(sys.argv[1], sys.argv[2])
|
||||
func = getattr(ws, sys.argv[3])
|
||||
import pprint
|
||||
pprint.pprint(func(*sys.argv[4:]))
|
|
@ -6,6 +6,10 @@ import json
|
|||
|
||||
from django.db import models
|
||||
from passerelle.messages.models import MessageGateway
|
||||
from passerelle.register.models import RegisterGateway
|
||||
|
||||
from .choosit import ChoositRegisterWS
|
||||
|
||||
|
||||
class ChoositError(Exception):
|
||||
pass
|
||||
|
@ -50,3 +54,48 @@ class ChoositSMSGateway(MessageGateway):
|
|||
raise ChoositError(output['error'].encode('utf-8'))
|
||||
return { 'message': output.get('result') }
|
||||
|
||||
|
||||
class ChoositRegisterNewsletter(models.Model):
|
||||
name = models.CharField(max_length=16)
|
||||
description = models.CharField(max_length=128, blank=True)
|
||||
|
||||
def __unicode__(self):
|
||||
return u'%s: %s' % (self.name, self.description or u'<unnamed>')
|
||||
|
||||
class ChoositRegisterGateway(RegisterGateway):
|
||||
url = models.CharField(max_length=200)
|
||||
key = models.CharField(max_length=64)
|
||||
newsletters = models.ManyToManyField(ChoositRegisterNewsletter,
|
||||
blank=True)
|
||||
|
||||
def get_list(self, user):
|
||||
reg = ChoositRegisterWS(self.url, self.key)
|
||||
|
||||
ws = reg.subscriptions(email=user or '')
|
||||
newsletters = ws['newsletter']
|
||||
subscriptions = ws['subscriptions']
|
||||
|
||||
filters = dict([(n.name, n.description) for n in self.newsletters.all()])
|
||||
if filters:
|
||||
for name in newsletters.copy():
|
||||
if name not in filters:
|
||||
del newsletters[name]
|
||||
elif filters[name]:
|
||||
newsletters[name] = filters[name]
|
||||
|
||||
ret = []
|
||||
for id, name in newsletters.items():
|
||||
newsletter = {
|
||||
'name': id,
|
||||
'description': name,
|
||||
'transports': { 'available': ['mail'] }
|
||||
}
|
||||
if id in subscriptions:
|
||||
newsletter['transports']['defined'] = ['mail']
|
||||
ret.append(newsletter)
|
||||
|
||||
return ret
|
||||
|
||||
def post(self, user, data):
|
||||
pass
|
||||
|
||||
|
|
|
@ -5,3 +5,4 @@ django-model-utils
|
|||
SOAPpy
|
||||
phpserialize
|
||||
mako
|
||||
requests
|
||||
|
|
Loading…
Reference in New Issue