From 671274d3e00c7d696036e09db0a1c91eff7a63f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Tue, 9 Oct 2018 15:19:50 +0200 Subject: [PATCH] misc: move duplicated soap utility functions to main soap.py (#27140) --- passerelle/contrib/maarch/soap.py | 40 ++------------------- passerelle/contrib/seisin_by_email/soap.py | 39 ++------------------ passerelle/contrib/teamnet_axel/soap.py | 41 ++-------------------- passerelle/soap.py | 38 ++++++++++++++++++++ 4 files changed, 45 insertions(+), 113 deletions(-) diff --git a/passerelle/contrib/maarch/soap.py b/passerelle/contrib/maarch/soap.py index 5f2e948..a977f55 100644 --- a/passerelle/contrib/maarch/soap.py +++ b/passerelle/contrib/maarch/soap.py @@ -28,7 +28,9 @@ from django.conf import settings from suds.transport.http import HttpAuthenticated from suds.transport import Reply from suds.client import Client -from suds.sudsobject import asdict + +from passerelle.soap import recursive_asdict, client_to_jsondict + class Transport(HttpAuthenticated): def __init__(self, model, **kwargs): @@ -64,40 +66,4 @@ def get_client(model): transport = Transport(model) return Client(model.wsdl_url, transport=transport, cache=None) -def client_to_jsondict(client): - """return description of the client, as dict (for json export)""" - res = {} - for i, sd in enumerate(client.sd): - d = {} - d['tns'] = sd.wsdl.tns[1] - d['prefixes'] = dict(p for p in sd.prefixes) - d['ports'] = {} - for p in sd.ports: - d['ports'][p[0].name] = {} - for m in p[1]: - d['ports'][p[0].name][m[0]] = dict( - (mp[0], sd.xlate(mp[1])) for mp in m[1]) - d['types'] = {} - for t in sd.types: - ft = client.factory.create(sd.xlate(t[0])) - d['types'][sd.xlate(t[0])] = unicode(ft) - res[sd.service.name] = d - return res - -def recursive_asdict(d): - """Convert Suds object into serializable format.""" - out = {} - for k, v in asdict(d).iteritems(): - if hasattr(v, '__keylist__'): - out[k] = recursive_asdict(v) - elif isinstance(v, list): - out[k] = [] - for item in v: - if hasattr(item, '__keylist__'): - out[k].append(recursive_asdict(item)) - else: - out[k].append(item) - else: - out[k] = v - return out diff --git a/passerelle/contrib/seisin_by_email/soap.py b/passerelle/contrib/seisin_by_email/soap.py index 5c10945..4930f3c 100644 --- a/passerelle/contrib/seisin_by_email/soap.py +++ b/passerelle/contrib/seisin_by_email/soap.py @@ -30,6 +30,8 @@ from suds.transport import Reply from suds.client import Client from suds.sudsobject import asdict +from passerelle.soap import recursive_asdict, client_to_jsondict + class Transport(HttpAuthenticated): def __init__(self, model, **kwargs): @@ -64,40 +66,3 @@ class Transport(HttpAuthenticated): def get_client(model): transport = Transport(model) return Client(model.wsdl_url, transport=transport, cache=None) - -def client_to_jsondict(client): - """return description of the client, as dict (for json export)""" - res = {} - for i, sd in enumerate(client.sd): - d = {} - d['tns'] = sd.wsdl.tns[1] - d['prefixes'] = dict(p for p in sd.prefixes) - d['ports'] = {} - for p in sd.ports: - d['ports'][p[0].name] = {} - for m in p[1]: - d['ports'][p[0].name][m[0]] = dict( - (mp[0], sd.xlate(mp[1])) for mp in m[1]) - d['types'] = {} - for t in sd.types: - ft = client.factory.create(sd.xlate(t[0])) - d['types'][sd.xlate(t[0])] = unicode(ft) - res[sd.service.name] = d - return res - -def recursive_asdict(d): - """Convert Suds object into serializable format.""" - out = {} - for k, v in asdict(d).iteritems(): - if hasattr(v, '__keylist__'): - out[k] = recursive_asdict(v) - elif isinstance(v, list): - out[k] = [] - for item in v: - if hasattr(item, '__keylist__'): - out[k].append(recursive_asdict(item)) - else: - out[k].append(item) - else: - out[k] = v - return out diff --git a/passerelle/contrib/teamnet_axel/soap.py b/passerelle/contrib/teamnet_axel/soap.py index 0ec1748..0cb57bb 100644 --- a/passerelle/contrib/teamnet_axel/soap.py +++ b/passerelle/contrib/teamnet_axel/soap.py @@ -27,6 +27,8 @@ from suds.transport import Reply from suds.client import Client from suds.sudsobject import asdict +from passerelle.soap import recursive_asdict, client_to_jsondict + class Transport(HttpAuthenticated): @@ -64,45 +66,6 @@ def get_client(model): return Client(model.wsdl_url, transport=transport, cache=None) -def client_to_jsondict(client): - """return description of the client, as dict (for json export)""" - res = {} - for i, sd in enumerate(client.sd): - d = {} - d['tns'] = sd.wsdl.tns[1] - d['prefixes'] = dict(p for p in sd.prefixes) - d['ports'] = {} - for p in sd.ports: - d['ports'][p[0].name] = {} - for m in p[1]: - d['ports'][p[0].name][m[0]] = dict( - (mp[0], sd.xlate(mp[1])) for mp in m[1]) - d['types'] = {} - for t in sd.types: - ft = client.factory.create(sd.xlate(t[0])) - d['types'][sd.xlate(t[0])] = unicode(ft) - res[sd.service.name] = d - return res - - -def recursive_asdict(d): - """Convert Suds object into serializable format.""" - out = {} - for k, v in asdict(d).iteritems(): - if hasattr(v, '__keylist__'): - out[k] = recursive_asdict(v) - elif isinstance(v, list): - out[k] = [] - for item in v: - if hasattr(item, '__keylist__'): - out[k].append(recursive_asdict(item)) - else: - out[k].append(item) - else: - out[k] = v - return out - - def xml_to_dict(result): """Converts AXEL simple XML responses into dict()""" d = {} diff --git a/passerelle/soap.py b/passerelle/soap.py index 34ef8f4..863a453 100644 --- a/passerelle/soap.py +++ b/passerelle/soap.py @@ -6,6 +6,7 @@ import requests from suds.client import Client from suds.transport.http import HttpAuthenticated from suds.transport import Reply +from suds.sudsobject import asdict class Transport(HttpAuthenticated): @@ -116,3 +117,40 @@ class Soap(object): domains=self.domains), plugins=self.plugins, cache=self.cache) + +def client_to_jsondict(client): + """return description of the client, as dict (for json export)""" + res = {} + for i, sd in enumerate(client.sd): + d = {} + d['tns'] = sd.wsdl.tns[1] + d['prefixes'] = dict(p for p in sd.prefixes) + d['ports'] = {} + for p in sd.ports: + d['ports'][p[0].name] = {} + for m in p[1]: + d['ports'][p[0].name][m[0]] = dict( + (mp[0], sd.xlate(mp[1])) for mp in m[1]) + d['types'] = {} + for t in sd.types: + ft = client.factory.create(sd.xlate(t[0])) + d['types'][sd.xlate(t[0])] = unicode(ft) + res[sd.service.name] = d + return res + +def recursive_asdict(d): + """Convert Suds object into serializable format.""" + out = {} + for k, v in asdict(d).iteritems(): + if hasattr(v, '__keylist__'): + out[k] = recursive_asdict(v) + elif isinstance(v, list): + out[k] = [] + for item in v: + if hasattr(item, '__keylist__'): + out[k].append(recursive_asdict(item)) + else: + out[k].append(item) + else: + out[k] = v + return out -- 2.19.1