Projet

Général

Profil

0001-toulouse-maelis-do-not-return-key-if-not-found-into-.patch

Nicolas Roche (absent jusqu'au 3 avril), 04 novembre 2022 18:16

Télécharger (4,04 ko)

Voir les différences:

Subject: [PATCH 1/5] toulouse-maelis: do not return key if not found into
 referential (#70982)

 passerelle/contrib/toulouse_maelis/models.py | 13 ++++++++-----
 tests/test_toulouse_maelis.py                |  5 ++++-
 2 files changed, 12 insertions(+), 6 deletions(-)
passerelle/contrib/toulouse_maelis/models.py
101 101
                data = {
102 102
                    'list': [{'id': x.code, 'text': x.libelle} for x in response],
103 103
                    'dict': {x.code: x.libelle for x in response},
104 104
                }
105 105
            # put in cache for two hours
106 106
            cache.set(cache_key, data, 3600 * 2)
107 107
        return data
108 108

  
109
    def get_referential_value(self, referential_name, key):
109
    def get_referential_value(self, referential_name, key, log_warning=False):
110 110
        try:
111 111
            return self.get_referential(referential_name)['dict'][key]
112 112
        except KeyError:
113
            # Maelis DB not properly configurated
114
            self.logger.warning("No '%s' key into Maelis '%s' referential", key, referential_name)
115
            return key
113
            if log_warning:
114
                # Maelis DB not properly configurated
115
                self.logger.warning("No '%s' key into Maelis '%s' referential", key, referential_name)
116
            return None
116 117

  
117 118
    def get_link(self, NameID):
118 119
        try:
119 120
            return self.link_set.get(name_id=NameID)
120 121
        except Link.DoesNotExist:
121 122
            raise APIError('User not linked to family', err_code='not-linked')
122 123

  
123 124
    def get_family_raw(self, family_id):
......
161 162
    def add_text_value(self, referential_name, data, keys):
162 163
        '''add text from referentials'''
163 164
        last_key = keys.pop()
164 165
        for key in keys:
165 166
            if not isinstance(data, dict) or not key in data:
166 167
                return
167 168
            data = data[key]
168 169
        if isinstance(data, dict) and last_key in data and data[last_key] is not None:
169
            data[last_key + '_text'] = self.get_referential_value(referential_name, data[last_key])
170
            data[last_key + '_text'] = (
171
                self.get_referential_value(referential_name, data[last_key], log_warning=True) or last_key
172
            )
170 173

  
171 174
    def add_text_value_to_child_person(self, data):
172 175
        self.add_text_value('Civility', data, ['personInfo', 'civility'])
173 176
        self.add_text_value('Quality', data, ['personQuality', 'code'])
174 177
        self.add_text_value('Sex', data, ['personInfo', 'sexe'])
175 178
        return data
176 179

  
177 180
    def add_text_value_to_child(self, data):
tests/test_toulouse_maelis.py
288 288

  
289 289

  
290 290
@mock.patch('passerelle.utils.Request.get')
291 291
@mock.patch('passerelle.utils.Request.post')
292 292
def test_get_referential_value_not_found(mocked_post, mocked_get, con, caplog):
293 293
    mocked_get.return_value = FAMILY_SERVICE_WSDL
294 294
    mocked_post.return_value = READ_CIVILITIES
295 295

  
296
    assert con.get_referential_value('Civility', 'MR') == 'MR'
296
    assert con.get_referential_value('Civility', 'MR') is None
297
    assert len(caplog.records) == 0
298

  
299
    assert con.get_referential_value('Civility', 'MR', log_warning=True) is None
297 300
    assert len(caplog.records) == 1
298 301
    assert caplog.records[0].levelno == logging.WARNING
299 302
    assert caplog.records[0].message == "No 'MR' key into Maelis 'Civility' referential"
300 303

  
301 304

  
302 305
@mock.patch('passerelle.utils.Request.get')
303 306
@mock.patch('passerelle.utils.Request.post')
304 307
def test_read_category_list(mocked_post, mocked_get, con, app):
305
-