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:
parent
df042cc1e2
commit
70caf11530
|
@ -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)
|
|
@ -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
|
|
@ -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'),
|
||||
)
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue