gdc: add connector to the gdc app

This adds a few query views but also the possibility to POST data
to the service.
This commit is contained in:
Frédéric Péters 2013-03-18 14:47:39 +01:00
parent df042cc1e2
commit 70caf11530
7 changed files with 135 additions and 3 deletions

View File

View File

@ -0,0 +1,28 @@
from django.contrib import admin
from models import GdcDemandeExterneParticulier, GdcListeObjets, \
GdcListeCommunes, GdcListeVoies
class GdcDemandeExterneParticulierAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug': ('title',)}
admin.site.register(GdcDemandeExterneParticulier, GdcDemandeExterneParticulierAdmin)
class GdcListeObjetsAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug': ('title',)}
admin.site.register(GdcListeObjets, GdcListeObjetsAdmin)
class GdcListeCommunesAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug': ('title',)}
admin.site.register(GdcListeCommunes, GdcListeCommunesAdmin)
class GdcListeVoiesAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug': ('title',)}
admin.site.register(GdcListeVoies, GdcListeVoiesAdmin)

View File

@ -0,0 +1,87 @@
import base64
import datetime
import json
import urllib2
import SOAPpy
import phpserialize
from django.conf import settings
from django.db import models
from passerelle.datasources.models import BaseDataSource
class GdcDemandeExterneParticulier(BaseDataSource):
def get_data(self):
return []
def post_data(self, data):
# <wsdl:message name='addDemandeExterneParticulierRequest'>
# <wsdl:part name='nom' type='xsd:string'></wsdl:part>
# <wsdl:part name='prenom' type='xsd:string'></wsdl:part>
# <wsdl:part name='telephone' type='xsd:string'></wsdl:part>
# <wsdl:part name='mail' type='xsd:string'></wsdl:part>
# <wsdl:part name='objet_externe' type='xsd:int'></wsdl:part>
# <wsdl:part name='commentaire' type='xsd:string'></wsdl:part>
# <wsdl:part name='insee_commune' type='xsd:int'></wsdl:part>
# <wsdl:part name='voie_id' type='xsd:string'></wsdl:part>
# <wsdl:part name='voie_num' type='xsd:string'></wsdl:part>
# </wsdl:message>
server = SOAPpy.SOAPProxy(settings.GDC_WEBSERVICE_URL)
soap_result = server.addDemandeExterneParticulier(
nom=data['fields'].get('nom'),
prenom=data['fields'].get('prenom'),
mail=data['fields'].get('mail'),
telephone=data['fields'].get('telephone'),
objet_externe=data['fields'].get('objet_raw'),
commentaire=data['fields'].get('commentaire'),
insee_commune=data['fields'].get('commune_raw'),
voie_id=data['fields'].get('voie_raw'),
voie_num=data['fields'].get('voie_num')
)
if soap_result['code_retour'] == 'OK':
# XXX: transform to something that will be considered standard for
# all passerelle calls?
# at the moment: {'IDENTIFIANT': 128412, 'MAIL_ENVOYE': 'OK'}
return phpserialize.loads(soap_result['listeInfo'])
else:
raise Exception(' / '.join(phpserialize.loads(soap_result['listeInfo'])))
class GdcListeObjets(BaseDataSource):
def get_data(self):
server = SOAPpy.SOAPProxy(settings.GDC_WEBSERVICE_URL)
soap_result = phpserialize.loads(server.getListeObjet()['listeObjet'])
result = []
for k, v in soap_result.items():
result.append({'id': k, 'text': v})
result.sort(lambda x,y: cmp(x['id'], y['id']))
return result
class GdcListeCommunes(BaseDataSource):
def get_data(self):
server = SOAPpy.SOAPProxy(settings.GDC_WEBSERVICE_URL)
soap_result = phpserialize.loads(server.getListeCommune()['listeCommune'])
result = []
for k, v in soap_result.items():
result.append({'id': k, 'text': v})
result.sort(lambda x,y: cmp(x['id'], y['id']))
return result
class GdcListeVoies(BaseDataSource):
parameters = ('insee',)
def get_data(self, insee):
server = SOAPpy.SOAPProxy(settings.GDC_WEBSERVICE_URL)
soap_result = phpserialize.loads(server.getListeVoieCommune(insee)['listeVoie'])
result = []
for k, v in soap_result.items():
result.append({'id': k, 'text': v})
result.sort(lambda x,y: cmp(x['id'], y['id']))
return result

View File

@ -3,6 +3,6 @@ from django.conf.urls import patterns, url, include
urlpatterns = patterns('passerelle.datasources.views',
url(r'^$', 'index'),
url(r'(?P<datasource>[\w-]+)/$', 'view'),
url(r'(?P<datasource>[\w-]+)/json$', 'json'),
url(r'(?P<datasource>[\w-]+)/json$', 'json_view'),
url(r'(?P<datasource>[\w-]+)/jsonp$', 'jsonp'),
)

View File

@ -1,4 +1,7 @@
import json
from django.views.generic.base import TemplateView
from django.views.decorators.csrf import csrf_exempt
from jsonresponse import to_json
@ -46,9 +49,18 @@ def get_data(request, datasource):
else:
return sorted(ds.get_data(**kwargs))
def post_data(request, datasource):
ds = BaseDataSource.objects.get_subclass(slug=datasource)
data = json.loads(request.raw_post_data)
return ds.post_data(data)
@csrf_exempt
@to_json('api')
def json(request, datasource):
return get_data(request, datasource)
def json_view(request, datasource):
if request.method == 'GET':
return get_data(request, datasource)
if request.method == 'POST':
return post_data(request, datasource)
@to_json('api')
def jsonp(request, datasource):

View File

@ -129,6 +129,7 @@ INSTALLED_APPS = (
# 'django.contrib.admindocs',
'passerelle.datasources',
'clicrdv',
'gdc',
)
# A sample logging configuration. The only tangible logging
@ -167,6 +168,8 @@ CLICRDV_API_KEY = None
CLICRDV_API_USERNAME = None
CLICRDV_API_PASSWORD = None
GDC_WEBSERVICE_URL = None
try:
from local_settings import *
except ImportError:

View File

@ -1,3 +1,5 @@
django == 1.4
http://pypi.python.org/packages/source/d/django-jsonresponse/django-jsonresponse-0.5.tar.gz
django-model-utils
SOAPpy
phpserialize