Projet

Général

Profil

0001-misc-move-duplicated-soap-utility-functions-to-main-.patch

Frédéric Péters, 10 octobre 2018 10:01

Télécharger (12,9 ko)

Voir les différences:

Subject: [PATCH] misc: move duplicated soap utility functions to main soap.py
 (#27140)

 passerelle/contrib/greco/models.py          | 17 +--------
 passerelle/contrib/maarch/soap.py           | 40 +--------------------
 passerelle/contrib/maarch/views.py          |  7 ++--
 passerelle/contrib/seisin_by_email/soap.py  | 38 --------------------
 passerelle/contrib/seisin_by_email/views.py |  7 ++--
 passerelle/contrib/teamnet_axel/models.py   |  3 +-
 passerelle/contrib/teamnet_axel/soap.py     | 40 ---------------------
 passerelle/soap.py                          | 39 ++++++++++++++++++++
 8 files changed, 51 insertions(+), 140 deletions(-)
passerelle/contrib/greco/models.py
34 34

  
35 35
from passerelle.base.models import BaseResource
36 36
from passerelle.utils.api import endpoint, APIError
37
from passerelle.soap import sudsobject_to_dict
37 38

  
38 39
from .formdata import FormData, CREATION_SCHEMA, list_schema_fields
39 40

  
......
56 57
                # sudsobject.foo.bar <- fields['foo_bar']
57 58
                setattr(sudsobject, key, fields[attr])
58 59

  
59
def sudsobject_to_dict(sudsobject):
60
    out = {}
61
    for key, value in suds.sudsobject.asdict(sudsobject).iteritems():
62
        if hasattr(value, '__keylist__'):
63
            out[key] = sudsobject_to_dict(value)
64
        elif isinstance(value, list):
65
            out[key] = []
66
            for item in value:
67
                if hasattr(item, '__keylist__'):
68
                    out[key].append(sudsobject_to_dict(item))
69
                else:
70
                    out[key].append(item)
71
        else:
72
            out[key] = value
73
    return out
74

  
75 60

  
76 61
class Greco(BaseResource):
77 62
    application = models.CharField(_('Application identifier'), max_length=200)
passerelle/contrib/maarch/soap.py
28 28
from suds.transport.http import HttpAuthenticated
29 29
from suds.transport import Reply
30 30
from suds.client import Client
31
from suds.sudsobject import asdict
31

  
32 32

  
33 33
class Transport(HttpAuthenticated):
34 34
    def __init__(self, model, **kwargs):
......
63 63
def get_client(model):
64 64
    transport = Transport(model)
65 65
    return Client(model.wsdl_url, transport=transport, cache=None)
66

  
67
def client_to_jsondict(client):
68
    """return description of the client, as dict (for json export)"""
69
    res = {}
70
    for i, sd in enumerate(client.sd):
71
        d = {}
72
        d['tns'] = sd.wsdl.tns[1]
73
        d['prefixes'] = dict(p for p in sd.prefixes)
74
        d['ports'] = {}
75
        for p in sd.ports:
76
            d['ports'][p[0].name] = {}
77
            for m in p[1]:
78
                d['ports'][p[0].name][m[0]] = dict(
79
                        (mp[0], sd.xlate(mp[1])) for mp in m[1])
80
        d['types'] = {}
81
        for t in sd.types:
82
            ft = client.factory.create(sd.xlate(t[0]))
83
            d['types'][sd.xlate(t[0])] = unicode(ft)
84
        res[sd.service.name] = d
85
    return res
86

  
87
def recursive_asdict(d):
88
    """Convert Suds object into serializable format."""
89
    out = {}
90
    for k, v in asdict(d).iteritems():
91
        if hasattr(v, '__keylist__'):
92
            out[k] = recursive_asdict(v)
93
        elif isinstance(v, list):
94
            out[k] = []
95
            for item in v:
96
                if hasattr(item, '__keylist__'):
97
                    out[k].append(recursive_asdict(item))
98
                else:
99
                    out[k].append(item)
100
        else:
101
            out[k] = v
102
    return out
103

  
passerelle/contrib/maarch/views.py
25 25
from django.views.decorators.csrf import csrf_exempt
26 26

  
27 27
from passerelle import utils
28
from passerelle.soap import sudsobject_to_dict, sudsclient_to_jsondict
28 29

  
29
from .soap import get_client, client_to_jsondict, recursive_asdict
30
from .soap import get_client
30 31
from .models import Maarch
31 32

  
32 33
logger = logging.getLogger('passerelle.contrib.maarch')
......
59 60
        client = self.get_client()
60 61
        res = {'ping': 'pong'}
61 62
        if 'debug' in request.GET:
62
            res['client'] = client_to_jsondict(client)
63
            res['client'] = sudsclient_to_jsondict(client)
63 64
        return res
64 65

  
65 66

  
......
223 224
            results = client.service.storeResource(
224 225
                    encodedFile, metadata, collId,
225 226
                    table, fileFormat, status)
226
        data = recursive_asdict(results)
227
        data = sudsobject_to_dict(results)
227 228
        logger.debug('storeResource result: %r', data)
228 229

  
229 230
        resId = data.get('resId')
passerelle/contrib/seisin_by_email/soap.py
28 28
from suds.transport.http import HttpAuthenticated
29 29
from suds.transport import Reply
30 30
from suds.client import Client
31
from suds.sudsobject import asdict
32 31

  
33 32

  
34 33
class Transport(HttpAuthenticated):
......
64 63
def get_client(model):
65 64
    transport = Transport(model)
66 65
    return Client(model.wsdl_url, transport=transport, cache=None)
67

  
68
def client_to_jsondict(client):
69
    """return description of the client, as dict (for json export)"""
70
    res = {}
71
    for i, sd in enumerate(client.sd):
72
        d = {}
73
        d['tns'] = sd.wsdl.tns[1]
74
        d['prefixes'] = dict(p for p in sd.prefixes)
75
        d['ports'] = {}
76
        for p in sd.ports:
77
            d['ports'][p[0].name] = {}
78
            for m in p[1]:
79
                d['ports'][p[0].name][m[0]] = dict(
80
                        (mp[0], sd.xlate(mp[1])) for mp in m[1])
81
        d['types'] = {}
82
        for t in sd.types:
83
            ft = client.factory.create(sd.xlate(t[0]))
84
            d['types'][sd.xlate(t[0])] = unicode(ft)
85
        res[sd.service.name] = d
86
    return res
87

  
88
def recursive_asdict(d):
89
    """Convert Suds object into serializable format."""
90
    out = {}
91
    for k, v in asdict(d).iteritems():
92
        if hasattr(v, '__keylist__'):
93
            out[k] = recursive_asdict(v)
94
        elif isinstance(v, list):
95
            out[k] = []
96
            for item in v:
97
                if hasattr(item, '__keylist__'):
98
                    out[k].append(recursive_asdict(item))
99
                else:
100
                    out[k].append(item)
101
        else:
102
            out[k] = v
103
    return out
passerelle/contrib/seisin_by_email/views.py
21 21
from django.views.decorators.csrf import csrf_exempt
22 22

  
23 23
from passerelle import utils
24
from passerelle.soap import sudsobject_to_dict, sudsclient_to_jsondict
24 25

  
25
from .soap import get_client, client_to_jsondict, recursive_asdict
26
from .soap import get_client
26 27
from .models import SeisinByEmailManagement
27 28

  
28 29

  
......
51 52
        client = self.get_client()
52 53
        res = {'ping': 'pong'}
53 54
        if 'debug' in request.GET:
54
            res['client'] = client_to_jsondict(client)
55
            res['client'] = sudsclient_to_jsondict(client)
55 56
        return res
56 57

  
57 58

  
......
120 121
                                                   request_object,
121 122
                                                   data,
122 123
                                                   attachmentData)
123
        data = recursive_asdict(results)
124
        data = sudsobject_to_dict(results)
124 125

  
125 126
        if debug:
126 127
            data['debug'] = debug_output
passerelle/contrib/teamnet_axel/models.py
29 29
from jsonfield import JSONField
30 30

  
31 31
from passerelle.base.models import BaseResource
32
from passerelle.soap import sudsclient_to_jsondict
32 33
from passerelle.utils.api import endpoint
33 34
from passerelle.utils.jsonresponse import APIError
34 35
from passerelle.views import WrongParameter
......
172 173
            raise APIError('Client Error: %s' % exc.message)
173 174
        res = {'ping': 'pong'}
174 175
        if 'debug' in request.GET:
175
            res['client'] = soap.client_to_jsondict(client)
176
            res['client'] = sudsclient_to_jsondict(client)
176 177
        return {'data': res}
177 178

  
178 179
    @endpoint(perm='can_access')
passerelle/contrib/teamnet_axel/soap.py
25 25
from suds.transport.http import HttpAuthenticated
26 26
from suds.transport import Reply
27 27
from suds.client import Client
28
from suds.sudsobject import asdict
29 28

  
30 29

  
31 30
class Transport(HttpAuthenticated):
......
64 63
    return Client(model.wsdl_url, transport=transport, cache=None)
65 64

  
66 65

  
67
def client_to_jsondict(client):
68
    """return description of the client, as dict (for json export)"""
69
    res = {}
70
    for i, sd in enumerate(client.sd):
71
        d = {}
72
        d['tns'] = sd.wsdl.tns[1]
73
        d['prefixes'] = dict(p for p in sd.prefixes)
74
        d['ports'] = {}
75
        for p in sd.ports:
76
            d['ports'][p[0].name] = {}
77
            for m in p[1]:
78
                d['ports'][p[0].name][m[0]] = dict(
79
                    (mp[0], sd.xlate(mp[1])) for mp in m[1])
80
        d['types'] = {}
81
        for t in sd.types:
82
            ft = client.factory.create(sd.xlate(t[0]))
83
            d['types'][sd.xlate(t[0])] = unicode(ft)
84
        res[sd.service.name] = d
85
    return res
86

  
87

  
88
def recursive_asdict(d):
89
    """Convert Suds object into serializable format."""
90
    out = {}
91
    for k, v in asdict(d).iteritems():
92
        if hasattr(v, '__keylist__'):
93
            out[k] = recursive_asdict(v)
94
        elif isinstance(v, list):
95
            out[k] = []
96
            for item in v:
97
                if hasattr(item, '__keylist__'):
98
                    out[k].append(recursive_asdict(item))
99
                else:
100
                    out[k].append(item)
101
        else:
102
            out[k] = v
103
    return out
104

  
105

  
106 66
def xml_to_dict(result):
107 67
    """Converts AXEL simple XML responses into dict()"""
108 68
    d = {}
passerelle/soap.py
6 6
from suds.client import Client
7 7
from suds.transport.http import HttpAuthenticated
8 8
from suds.transport import Reply
9
import suds.sudsobject
9 10

  
10 11

  
11 12
class Transport(HttpAuthenticated):
......
116 117
                          domains=self.domains),
117 118
                      plugins=self.plugins,
118 119
                      cache=self.cache)
120

  
121

  
122
def sudsclient_to_jsondict(client):
123
    """return description of the client, as dict (for json export)"""
124
    res = {}
125
    for i, sd in enumerate(client.sd):
126
        d = {}
127
        d['tns'] = sd.wsdl.tns[1]
128
        d['prefixes'] = dict(p for p in sd.prefixes)
129
        d['ports'] = {}
130
        for p in sd.ports:
131
            d['ports'][p[0].name] = {}
132
            for m in p[1]:
133
                d['ports'][p[0].name][m[0]] = dict(
134
                        (mp[0], sd.xlate(mp[1])) for mp in m[1])
135
        d['types'] = {}
136
        for t in sd.types:
137
            ft = client.factory.create(sd.xlate(t[0]))
138
            d['types'][sd.xlate(t[0])] = unicode(ft)
139
        res[sd.service.name] = d
140
    return res
141

  
142

  
143
def sudsobject_to_dict(sudsobject):
144
    out = {}
145
    for key, value in suds.sudsobject.asdict(sudsobject).iteritems():
146
        if hasattr(value, '__keylist__'):
147
            out[key] = sudsobject_to_dict(value)
148
        elif isinstance(value, list):
149
            out[key] = []
150
            for item in value:
151
                if hasattr(item, '__keylist__'):
152
                    out[key].append(sudsobject_to_dict(item))
153
                else:
154
                    out[key].append(item)
155
        else:
156
            out[key] = value
157
    return out
119
-