Projet

Général

Profil

0001-cityweb-do-not-compress-demand-files-32091.patch

Serghei Mihai (congés, retour 15/05), 18 avril 2019 09:22

Télécharger (5,95 ko)

Voir les différences:

Subject: [PATCH] cityweb: do not compress demand files (#32091)

 passerelle/apps/cityweb/cityweb.py | 13 +++++-------
 passerelle/apps/cityweb/models.py  |  1 +
 tests/test_cityweb.py              | 34 +++++++++++++++---------------
 3 files changed, 23 insertions(+), 25 deletions(-)
passerelle/apps/cityweb/cityweb.py
15 15
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 16

  
17 17
import os
18
import zipfile
19 18
from lxml import etree, objectify as xobject
20 19

  
21 20
from django.core.files.storage import default_storage
......
23 22
from django.utils.dateparse import parse_date
24 23

  
25 24
from passerelle.utils.jsonresponse import APIError
25
from passerelle.utils.files import atomic_write
26 26

  
27 27

  
28 28
CERTIFICATE_TYPES = [
......
376 376

  
377 377
    def save(self, path):
378 378
        basename = os.path.join(path, self.identifiant)
379
        archname = basename + '.zip'
380
        filepath = basename + '.xml'
379
        filename = basename + '.xml'
381 380
        content = etree.tostring(self.xml, pretty_print=True)
382
        default_storage.save(filepath, ContentFile(content))
383
        with zipfile.ZipFile(archname, 'w', zipfile.ZIP_DEFLATED) as zipf:
384
            zipf.write(filepath, os.path.basename(filepath))
385
        os.remove(filepath)
386
        return archname
381
        with atomic_write(default_storage.path(filename)) as fd:
382
            fd.write(content)
383
        return filename
passerelle/apps/cityweb/models.py
19 19

  
20 20
from django.utils.translation import ugettext_lazy as _
21 21
from django.core.files.storage import default_storage
22
from django.db import models
22 23

  
23 24
from passerelle.base.models import BaseResource
24 25
from passerelle.utils.api import endpoint
tests/test_cityweb.py
65 65
    return request.param
66 66

  
67 67

  
68
def assert_xml_doc(archive, assertions):
68
def assert_xml_doc(filename, assertions):
69 69
    schema = etree.XMLSchema(
70 70
        etree.parse(open(os.path.join(get_test_base_dir('cityweb'), 'cityweb.xsd'))))
71
    with zipfile.ZipFile(archive) as zfd:
72
        content = zfd.read(zfd.filelist[0].filename)
73
        xml_content = etree.fromstring(content)
74
        assert len(xml_content.nsmap) == 1
75
        assert xml_content.nsmap['xs'] == "http://tempuri.org/XMLSchema.xsd"
76
        schema.assertValid(xml_content)
77
        root = xobject.fromstring(content)
78
        for epath, value in assertions.items():
79
            path = xobject.ObjectPath('demandeEtatCivil.%s' % epath)
80
            assert path.find(root) == value
71

  
72
    content = file(filename).read()
73
    xml_content = etree.fromstring(content)
74
    assert len(xml_content.nsmap) == 1
75
    assert xml_content.nsmap['xs'] == "http://tempuri.org/XMLSchema.xsd"
76
    schema.assertValid(xml_content)
77
    root = xobject.fromstring(content)
78
    for epath, value in assertions.items():
79
        path = xobject.ObjectPath('demandeEtatCivil.%s' % epath)
80
        assert path.find(root) == value
81 81

  
82 82

  
83 83
@mock.patch('passerelle.apps.cityweb.models.default_storage.path', get_test_base_dir)
......
86 86
    if 'birth' in payload:
87 87
        response = app.post_json(url, params=payload['birth'])
88 88
        assert response.json['data']['demand_id'] == 'N201610154'
89
        archive = os.path.join(get_test_base_dir('cityweb'), 'test', 'N201610154.zip')
89
        filename = os.path.join(get_test_base_dir('cityweb'), 'test', 'N201610154.xml')
90 90
        assertions = {
91 91
            'identifiant': 'N201610154',
92 92
            'demandeur.qualiteDemandeur': 'concerne',
......
107 107
            'evenement.interesse.mere.noms.nomDeFamille': 'Smith',
108 108
            'evenement.interesse.mere.prenoms': 'Kim',
109 109
        }
110
        assert_xml_doc(archive, assertions)
110
        assert_xml_doc(filename, assertions)
111 111

  
112 112
    elif 'mariage' in payload:
113 113
        response = app.post_json(url, params=payload['mariage'])
114 114
        assert response.json['data']['demand_id'] == 'M201610161'
115
        archive = os.path.join(get_test_base_dir('cityweb'), 'test', 'M201610161.zip')
115
        filename = os.path.join(get_test_base_dir('cityweb'), 'test', 'M201610161.xml')
116 116
        assertions = {
117 117
            'identifiant': 'M201610161',
118 118
            'demandeur.qualiteDemandeur': 'concerne',
......
138 138
            'evenement.conjoint.mere.noms.nomDeFamille': 'Scaramucci',
139 139
            'evenement.conjoint.mere.prenoms': 'Marguerite',
140 140
        }
141
        assert_xml_doc(archive, assertions)
141
        assert_xml_doc(filename, assertions)
142 142
    else:
143 143
        response = app.post_json(url, params=payload['death'])
144 144
        assert response.json['data']['demand_id'] == 'D201610171'
145
        archive = os.path.join(get_test_base_dir('cityweb'), 'test', 'D201610171.zip')
145
        filename = os.path.join(get_test_base_dir('cityweb'), 'test', 'D201610171.xml')
146 146
        assertions = {
147 147
            'identifiant': 'D201610171',
148 148
            'demandeur.qualiteDemandeur': 'concerne',
......
159 159
            'evenement.dateEvenement.dateDebut': '2012-07-14',
160 160
            'evenement.lieuEvenement.ville': 'Nancy',
161 161
        }
162
        assert_xml_doc(archive, assertions)
162
        assert_xml_doc(filename, assertions)
163 163

  
164 164

  
165 165
def test_date_type_parsing():
166
-