Projet

Général

Profil

0002-django4-replaced-_text-with-_str-equivalent-68576.patch

A. Berriot, 31 août 2022 11:02

Télécharger (45,2 ko)

Voir les différences:

Subject: [PATCH 2/5] django4: replaced *_text with *_str equivalent (#68576)

 passerelle/apps/atal/models.py                |  4 ++--
 passerelle/apps/cartads_cs/models.py          | 12 +++++------
 passerelle/apps/csvdatasource/models.py       | 12 +++++------
 .../apps/family/loaders/concerto_fondettes.py |  4 ++--
 .../apps/family/loaders/concerto_orleans.py   |  4 ++--
 .../apps/family/loaders/opus_fondettes.py     |  4 ++--
 passerelle/apps/gdc/models.py                 | 10 +++++-----
 passerelle/apps/gdc/views.py                  |  4 ++--
 passerelle/apps/ovh/models.py                 |  4 ++--
 passerelle/apps/oxyd/models.py                |  4 ++--
 passerelle/apps/sector/models.py              |  4 ++--
 passerelle/apps/solis/models.py               |  4 ++--
 passerelle/base/models.py                     |  4 ++--
 passerelle/contrib/nancypoll/models.py        |  6 +++---
 passerelle/contrib/strasbourg_eu/models.py    |  4 ++--
 passerelle/contrib/teamnet_axel/models.py     |  8 ++++----
 passerelle/contrib/utils/axel.py              |  6 +++---
 passerelle/soap.py                            |  4 ++--
 passerelle/utils/__init__.py                  |  7 +++----
 passerelle/utils/conversion.py                |  6 +++---
 passerelle/utils/http_authenticators.py       |  8 ++++----
 passerelle/utils/jsonresponse.py              |  4 ++--
 passerelle/utils/sftp.py                      |  4 ++--
 passerelle/views.py                           |  4 ++--
 tests/test_astregs.py                         |  4 ++--
 tests/test_cmis.py                            |  4 ++--
 tests/test_cryptor.py                         |  4 ++--
 tests/test_csv_datasource.py                  |  4 ++--
 tests/test_dpark.py                           | 20 +++++++++----------
 tests/test_gesbac.py                          |  6 +++---
 tests/test_import_export.py                   |  4 ++--
 tests/test_orange.py                          |  6 +++---
 tests/test_sector.py                          |  4 ++--
 tests/test_solis_afi_mss.py                   |  6 +++---
 tests/test_toulouse_smart.py                  |  4 ++--
 tests/test_utils_sftp.py                      |  8 ++++----
 36 files changed, 104 insertions(+), 105 deletions(-)
passerelle/apps/atal/models.py
21 21
import lxml.etree
22 22
from django.db import models
23 23
from django.utils import dateformat, dateparse
24
from django.utils.encoding import force_text
24
from django.utils.encoding import force_str
25 25
from django.utils.translation import gettext_lazy as _
26 26
from zeep import helpers
27 27
from zeep.exceptions import Fault
......
61 61
        try:
62 62
            return getattr(client.service, method)(**kwargs)
63 63
        except Fault as e:
64
            raise APIError(force_text(e))
64
            raise APIError(force_str(e))
65 65

  
66 66
    def _basic_ref(self, wsdl, method):
67 67
        soap_res = self._soap_call(wsdl=wsdl, method=method)
passerelle/apps/cartads_cs/models.py
38 38
from django.db import models
39 39
from django.http import HttpResponse
40 40
from django.urls import reverse
41
from django.utils.encoding import force_text
41
from django.utils.encoding import force_str
42 42
from django.utils.timezone import now
43 43
from django.utils.translation import gettext_lazy as _
44 44

  
......
162 162
        data_pad = AES.block_size - len(token_data_str) % AES.block_size
163 163
        aes = AES.new(self.secret_key.encode(), AES.MODE_CBC, self.iv.encode())
164 164
        token = aes.encrypt((token_data_str + (chr(data_pad) * data_pad)).encode())
165
        return force_text(base64.encodebytes(token)).replace('\n', '').rstrip('=')
165
        return force_str(base64.encodebytes(token)).replace('\n', '').rstrip('=')
166 166

  
167 167
    def check_status(self):
168 168
        self.soap_client().service.GetCommunes(self.get_token(), {})
......
701 701
            try:
702 702
                pdf = pdfrw.PdfReader(request.FILES['files[]'])
703 703
                if not any(pdfrw.findobjs.find_objects(pdf, valid_subtypes=(pdfrw.PdfName.Form,))):
704
                    return [{'error': force_text(_('The CERFA should not be a scanned document.'))}]
704
                    return [{'error': force_str(_('The CERFA should not be a scanned document.'))}]
705 705
            except (pdfrw.PdfParseError, ValueError):
706
                return [{'error': force_text(_('The CERFA should be a PDF file.'))}]
706
                return [{'error': force_str(_('The CERFA should be a PDF file.'))}]
707 707
        else:
708 708
            if request.FILES['files[]'].content_type not in ('application/pdf', 'image/jpeg'):
709
                return [{'error': force_text(_('The file should be a PDF document or a JPEG image.'))}]
709
                return [{'error': force_str(_('The file should be a PDF document or a JPEG image.'))}]
710 710
        if request.FILES['files[]'].size > 25 * 1024 * 1024:
711
            return [{'error': force_text(_('The file should not exceed 25MB.'))}]
711
            return [{'error': force_str(_('The file should not exceed 25MB.'))}]
712 712
        file_upload = CartaDSFile(
713 713
            tracking_code=tracking_code, id_piece=id_piece, uploaded_file=request.FILES['files[]']
714 714
        )
passerelle/apps/csvdatasource/models.py
31 31
from django.core.files.base import ContentFile
32 32
from django.db import models, transaction
33 33
from django.urls import reverse
34
from django.utils.encoding import force_str, force_text, smart_text
34
from django.utils.encoding import force_str, smart_str
35 35
from django.utils.timezone import make_aware, now
36 36
from django.utils.translation import gettext_lazy as _
37 37

  
......
286 286
        if self.skip_header:
287 287
            rows = rows[1:]
288 288

  
289
        rows = [[smart_text(x) for x in y] for y in rows if y]
289
        rows = [[smart_str(x) for x in y] for y in rows if y]
290 290
        titles = [t.strip() for t in self.columns_keynames.split(',')]
291 291
        indexes = [titles.index(t) for t in titles if t]
292 292
        captions = [titles[i] for i in indexes]
......
317 317

  
318 318
    @property
319 319
    def titles(self):
320
        return [smart_text(t.strip()) for t in self.columns_keynames.split(',')]
320
        return [smart_str(t.strip()) for t in self.columns_keynames.split(',')]
321 321

  
322 322
    @endpoint(perm='can_access', methods=['get'], name='data')
323 323
    def data(self, request, **kwargs):
......
388 388
                except (TypeError, SyntaxError) as e:
389 389
                    data = {
390 390
                        'expr': expr,
391
                        'error': smart_text(e),
391
                        'error': smart_str(e),
392 392
                    }
393 393
                    if titles:
394 394
                        data['name'] = titles[i]
......
407 407
                        data = {
408 408
                            'expr': expr,
409 409
                            'row': repr(row),
410
                            'error': smart_text(e),
410
                            'error': smart_str(e),
411 411
                        }
412 412
                        if titles:
413 413
                            data['name'] = titles[i]
......
463 463

  
464 464
        if 'id' in request.GET and not model_filters_id:
465 465
            # always provide a ?id= filter.
466
            filters = ["id == %r" % force_text(request.GET['id'])]
466
            filters = ["id == %r" % force_str(request.GET['id'])]
467 467
            data = [row for new_row, row in stream_expressions(filters, data, kind='filters') if new_row[0]]
468 468

  
469 469
        # allow jsonp queries by select2
passerelle/apps/family/loaders/concerto_fondettes.py
20 20
from decimal import Decimal
21 21

  
22 22
from django.core.exceptions import ValidationError
23
from django.utils.encoding import force_text
23
from django.utils.encoding import force_str
24 24
from django.utils.translation import gettext_lazy as _
25 25

  
26 26
from ..models import Invoice
27 27

  
28 28

  
29 29
def u(s):
30
    return force_text(s, 'iso-8859-15')
30
    return force_str(s, 'iso-8859-15')
31 31

  
32 32

  
33 33
class Loader:
passerelle/apps/family/loaders/concerto_orleans.py
22 22
from django.core.exceptions import ValidationError
23 23
from django.core.files.storage import DefaultStorage
24 24
from django.utils import timezone
25
from django.utils.encoding import force_text
25
from django.utils.encoding import force_str
26 26
from django.utils.translation import gettext_lazy as _
27 27

  
28 28
from ..models import Adult, Child, Family, Invoice, dict_cherry_pick, get_date, get_datetime
......
130 130
        # pylint: disable=stop-iteration-return
131 131
        titles = [x.lower() for x in next(reader)]
132 132
        for row in reader:
133
            row = [force_text(x, 'iso-8859-15') for x in row]
133
            row = [force_str(x, 'iso-8859-15') for x in row]
134 134
            yield dict(zip(titles, row))
135 135

  
136 136
    def build_families(self):
passerelle/apps/family/loaders/opus_fondettes.py
20 20
from decimal import Decimal
21 21

  
22 22
from django.core.exceptions import ValidationError
23
from django.utils.encoding import force_text
23
from django.utils.encoding import force_str
24 24
from django.utils.translation import gettext_lazy as _
25 25

  
26 26
from ..models import Invoice
27 27

  
28 28

  
29 29
def u(s):
30
    return force_text(s, 'iso-8859-15')
30
    return force_str(s, 'iso-8859-15')
31 31

  
32 32

  
33 33
class Loader:
passerelle/apps/gdc/models.py
22 22
    phpserialize = None
23 23

  
24 24
from django.db import models
25
from django.utils.encoding import force_text
25
from django.utils.encoding import force_str
26 26
from django.utils.translation import gettext_lazy as _
27 27

  
28 28
from passerelle.base.models import BaseResource
......
43 43
    if isinstance(obj, dict):
44 44
        new_d = {}
45 45
        for k, v in obj.items():
46
            new_d[force_text(k)] = deep_bytes2str(v)
46
            new_d[force_str(k)] = deep_bytes2str(v)
47 47
        return new_d
48 48
    return obj
49 49

  
......
68 68

  
69 69
    def call_soap(self, action, *args, **kwargs):
70 70
        def escape(s):
71
            return force_text(s).replace('&', '&amp;').replace('>', '&gt;').replace('<', '&lt;')
71
            return force_str(s).replace('&', '&amp;').replace('>', '&gt;').replace('<', '&lt;')
72 72

  
73 73
        params = []
74 74
        for i, arg in enumerate(args):
......
116 116
        soap_result = phpserialize_loads(resp.findall('.//listeCommune')[0].text)
117 117
        result = []
118 118
        for k, v in soap_result.items():
119
            result.append({'id': k, 'text': force_text(v, 'utf-8')})
119
            result.append({'id': k, 'text': force_str(v, 'utf-8')})
120 120
        result.sort(key=lambda x: x['id'])
121 121
        return result
122 122

  
......
126 126
        soap_result = phpserialize_loads(resp.findall('.//listeObjet')[0].text)
127 127
        result = []
128 128
        for k, v in soap_result.items():
129
            result.append({'id': k, 'text': force_text(v, 'utf-8')})
129
            result.append({'id': k, 'text': force_str(v, 'utf-8')})
130 130
        result.sort(key=lambda x: x['id'])
131 131
        return result
passerelle/apps/gdc/views.py
17 17

  
18 18
import json
19 19

  
20
from django.utils.encoding import force_text
20
from django.utils.encoding import force_str
21 21
from django.views.generic.base import View
22 22
from django.views.generic.detail import DetailView, SingleObjectMixin
23 23

  
......
177 177
        except IOError:
178 178
            result = {'result': 'gdc soap crash'}
179 179
        else:
180
            code_retour = force_text(resp.findall('.//code_retour')[0].text)
180
            code_retour = force_str(resp.findall('.//code_retour')[0].text)
181 181
            result = phpserialize_loads(resp.findall('.//listeInfo')[0].text)
182 182
            result = {
183 183
                'result': code_retour,
passerelle/apps/ovh/models.py
12 12
from django.db import models
13 13
from django.template.loader import render_to_string
14 14
from django.utils import timezone
15
from django.utils.encoding import force_text
15
from django.utils.encoding import force_str
16 16
from django.utils.translation import gettext_lazy as _
17 17

  
18 18
from passerelle.base.models import SkipJob
......
235 235
        if not self.password:
236 236
            raise APIError('Improperly configured, empty keys or password fields.')
237 237

  
238
        text = force_text(text).encode('utf-8')
238
        text = force_str(text).encode('utf-8')
239 239
        to = ','.join(destinations)
240 240
        params = {
241 241
            'account': self.account.encode('utf-8'),
passerelle/apps/oxyd/models.py
1 1
import requests
2 2
from django.db import models
3
from django.utils.encoding import force_text
3
from django.utils.encoding import force_str
4 4
from django.utils.translation import gettext_lazy as _
5 5

  
6 6
from passerelle.sms.models import SMSResource
......
61 61
                results.append('OXYD error: POST failed, %s' % e)
62 62
            else:
63 63
                code = r.content and r.content.split()[0]
64
                if force_text(code) != '200':
64
                if force_str(code) != '200':
65 65
                    results.append('OXYD error: response is not 200')
66 66
                else:
67 67
                    results.append(0)
passerelle/apps/sector/models.py
25 25
from django.db import models, transaction
26 26
from django.db.models import Q
27 27
from django.http import HttpResponse
28
from django.utils.encoding import force_bytes, force_str, smart_text
28
from django.utils.encoding import force_bytes, force_str, smart_str
29 29
from django.utils.timezone import now
30 30
from django.utils.translation import gettext_lazy as _
31 31

  
......
166 166
        for row in reader:
167 167
            if not row:
168 168
                continue  # do not consider empty lines
169
            row = [smart_text(x).strip() for x in row]
169
            row = [smart_str(x).strip() for x in row]
170 170
            row = {caption: get_cell(row, index) for caption, index in zip(captions, indexes)}
171 171

  
172 172
            if row['sector_id']:
passerelle/apps/solis/models.py
20 20

  
21 21
from django.db import models
22 22
from django.template.loader import get_template
23
from django.utils.encoding import force_text
23
from django.utils.encoding import force_str
24 24
from django.utils.http import urlencode
25 25
from django.utils.translation import gettext_lazy as _
26 26

  
......
502 502
        try:
503 503
            value = self.request(endpoint)
504 504
        except APIError as e:  # do not raise on linked informations
505
            value = {'err': 1, 'err_class': e.__class__.__name__, 'err_desc': force_text(e)}
505
            value = {'err': 1, 'err_class': e.__class__.__name__, 'err_desc': force_str(e)}
506 506
        link['content'] = value
507 507

  
508 508
    def rsa_get_links(self, information, links):
passerelle/base/models.py
27 27
from django.test import override_settings
28 28
from django.urls import reverse
29 29
from django.utils import timezone
30
from django.utils.encoding import force_text
30
from django.utils.encoding import force_str
31 31
from django.utils.log import AdminEmailHandler
32 32
from django.utils.text import slugify
33 33
from django.utils.timezone import now
......
373 373
                if value:
374 374
                    d[field.name] = {
375 375
                        'name': os.path.basename(value.name),
376
                        'content': force_text(base64.b64encode(value.read())),
376
                        'content': force_str(base64.b64encode(value.read())),
377 377
                    }
378 378
                else:
379 379
                    d[field.name] = None
passerelle/contrib/nancypoll/models.py
1 1
import csv
2 2

  
3 3
from django.db import models
4
from django.utils.encoding import force_text
4
from django.utils.encoding import force_str
5 5
from django.utils.translation import gettext_lazy as _
6 6

  
7 7
from passerelle.base.models import BaseResource
......
14 14

  
15 15

  
16 16
def to_unicode(value):
17
    return force_text(value, 'utf-8')
17
    return force_str(value, 'utf-8')
18 18

  
19 19

  
20 20
def upload_to(instance, filename):
......
50 50
        content = self.csv_file.read()
51 51
        if not content:
52 52
            raise APIError('No content found')
53
        content = force_text(content)
53
        content = force_str(content)
54 54

  
55 55
        reader = csv.reader(content.splitlines())
56 56
        next(reader)
passerelle/contrib/strasbourg_eu/models.py
19 19
from urllib import parse as urlparse
20 20

  
21 21
from django.db import models
22
from django.utils.encoding import force_text
22
from django.utils.encoding import force_str
23 23
from django.utils.translation import gettext_lazy as _
24 24
from requests import RequestException
25 25

  
......
114 114
                notification['parsedPublicationDate'] = None
115 115
                for date_format in ('%Y-%m-%d %H:%M:%S', '%a %b %d %H:%M:%S %Z %Y'):
116 116
                    try:
117
                        notification['parsedPublicationDate'] = force_text(
117
                        notification['parsedPublicationDate'] = force_str(
118 118
                            datetime.datetime.strptime(notification['publicationDate'], date_format)
119 119
                        )
120 120
                        break
passerelle/contrib/teamnet_axel/models.py
23 23
from django.contrib.postgres.fields import JSONField
24 24
from django.db import models
25 25
from django.http import HttpResponse, HttpResponseNotFound
26
from django.utils.encoding import smart_text
26
from django.utils.encoding import smart_str
27 27
from django.utils.translation import gettext_lazy as _
28 28

  
29 29
from passerelle.base.models import BaseResource
......
86 86
        portail = ET.Element('PORTAIL')
87 87
        portail.append(args)
88 88
        streamId = operation
89
        xmlParams = smart_text(ET.tostring(portail, encoding='UTF-8'))
89
        xmlParams = smart_str(ET.tostring(portail, encoding='UTF-8'))
90 90
        user = ''
91 91
        logger.debug('getData(streamId=%s, xmlParams=%s, user=%s)', streamId, xmlParams, user)
92
        result = soap.get_client(self).service.getData(streamId, smart_text(xmlParams), user)
93
        logger.debug('getData(%s) result: %s', streamId, smart_text(result))
92
        result = soap.get_client(self).service.getData(streamId, smart_str(xmlParams), user)
93
        logger.debug('getData(%s) result: %s', streamId, smart_str(result))
94 94
        xml_result = ET.fromstring(result)
95 95
        if xml_result.find('RESULTAT/STATUS').text != 'OK':
96 96
            msg = xml_result.find('RESULTAT/COMMENTAIRES').text
passerelle/contrib/utils/axel.py
24 24

  
25 25
import pytz
26 26
import xmlschema
27
from django.utils.encoding import force_text
27
from django.utils.encoding import force_str
28 28

  
29 29
from passerelle.utils.xml import JSONSchemaFromXMLSchema
30 30

  
......
234 234
            except xmlschema.XMLSchemaValidationError as e:
235 235
                raise AxelError('invalid request %s' % str(e))
236 236
            indent(serialized_request)
237
            serialized_request = force_text(ET.tostring(serialized_request))
237
            serialized_request = force_str(ET.tostring(serialized_request))
238 238
            try:
239 239
                self.request_converter.xml_schema.validate(serialized_request)
240 240
            except xmlschema.XMLSchemaValidationError as e:
......
246 246

  
247 247
        xml_result = ET.fromstring(result.encode('utf-8'))
248 248
        indent(xml_result)
249
        pretty_result = force_text(ET.tostring(xml_result))
249
        pretty_result = force_str(ET.tostring(xml_result))
250 250
        if xml_result.find('RESULTAT/STATUS').text != 'OK':
251 251
            msg = xml_result.find('RESULTAT/COMMENTAIRES').text
252 252
            raise AxelError(msg, xml_request=serialized_request, xml_response=pretty_result)
passerelle/soap.py
1 1
import suds.sudsobject
2
from django.utils.encoding import force_text
2
from django.utils.encoding import force_str
3 3

  
4 4

  
5 5
def client_to_jsondict(client):
......
17 17
        d['types'] = {}
18 18
        for t in sd.types:
19 19
            ft = client.factory.create(sd.xlate(t[0]))
20
            d['types'][sd.xlate(t[0])] = force_text(ft)
20
            d['types'][sd.xlate(t[0])] = force_str(ft)
21 21
        res[sd.service.name] = d
22 22
    return res
23 23

  
passerelle/utils/__init__.py
31 31
from django.core.exceptions import PermissionDenied
32 32
from django.db import transaction
33 33
from django.http import HttpResponse, HttpResponseBadRequest
34
from django.utils.encoding import force_bytes, force_text
34
from django.utils.encoding import force_bytes, force_str
35 35
from django.utils.functional import lazy
36 36
from django.utils.html import mark_safe
37 37
from django.utils.translation import ngettext_lazy
......
98 98
        if scheme == 'basic' and len(http_authorization) > 1:
99 99
            param = http_authorization[1]
100 100
            try:
101
                decoded = force_text(base64.b64decode(force_bytes(param.strip())))
101
                decoded = force_str(base64.b64decode(force_bytes(param.strip())))
102 102
                username, password = decoded.split(':', 1)
103 103
            except (TypeError, ValueError):
104 104
                pass
......
190 190
def make_headers_safe(headers):
191 191
    """Convert dict of HTTP headers to text safely, as some services returns 8-bits encoding in headers."""
192 192
    return {
193
        force_text(key, errors='replace'): force_text(value, errors='replace')
194
        for key, value in headers.items()
193
        force_str(key, errors='replace'): force_str(value, errors='replace') for key, value in headers.items()
195 194
    }
196 195

  
197 196

  
passerelle/utils/conversion.py
22 22
from io import BytesIO
23 23

  
24 24
import unidecode
25
from django.utils.encoding import force_text
25
from django.utils.encoding import force_str
26 26
from PIL import Image
27 27

  
28 28

  
......
68 68

  
69 69

  
70 70
def to_ascii(s):
71
    return force_text(unidecode.unidecode(s), 'ascii')
71
    return force_str(unidecode.unidecode(s), 'ascii')
72 72

  
73 73

  
74 74
def exception_to_text(e):
......
105 105
    """
106 106
    if not s:
107 107
        return ''
108
    s = force_text(s, 'utf-8', 'ignore')
108
    s = force_str(s, 'utf-8', 'ignore')
109 109
    s = normalize(s)
110 110
    s = re.sub(r'[^\w\s\'-]', '', s)
111 111
    s = re.sub(r'[\s\'_-]+', ' ', s)
passerelle/utils/http_authenticators.py
21 21
from urllib import parse as urlparse
22 22
from uuid import uuid4
23 23

  
24
from django.utils.encoding import force_bytes, force_text
24
from django.utils.encoding import force_bytes, force_str
25 25
from requests.auth import AuthBase
26 26

  
27 27

  
......
40 40
        p_hash.update(force_bytes(req.headers.get('Content-Type', '') + '\n'))
41 41
        p_hash.update(force_bytes(req.body or ''))
42 42
        p_hash.update(force_bytes('\n'))
43
        return force_text(base64.b64encode(p_hash.digest()))
43
        return force_str(base64.b64encode(p_hash.digest()))
44 44

  
45 45
    def get_authorization_header(self, req):
46 46
        url_parts = urlparse.urlparse(req.url)
......
67 67
        ]
68 68
        digestmod = getattr(hashlib, self.algorithm)
69 69
        result = hmac.new(force_bytes(self.key), force_bytes('\n'.join(data)), digestmod)
70
        mac = force_text(base64.b64encode(result.digest()))
70
        mac = force_str(base64.b64encode(result.digest()))
71 71
        authorization = 'Hawk id="%s", ts="%s", nonce="%s", hash="%s", mac="%s"' % (
72
            force_text(self.id),
72
            force_str(self.id),
73 73
            self.timestamp,
74 74
            self.nonce,
75 75
            hash,
passerelle/utils/jsonresponse.py
16 16
from django.core.serializers.json import DjangoJSONEncoder
17 17
from django.http import Http404, HttpResponse, HttpResponseBadRequest
18 18
from django.http.response import HttpResponseBase
19
from django.utils.encoding import force_text
19
from django.utils.encoding import force_str
20 20
from django.utils.log import log_response
21 21
from requests import HTTPError, RequestException
22 22

  
......
78 78

  
79 79
        err_class = err_module + err.__class__.__name__
80 80

  
81
        err_desc = force_text(err)
81
        err_desc = force_str(err)
82 82

  
83 83
        response = {
84 84
            "err": 1,
passerelle/utils/sftp.py
27 27
from django import forms
28 28
from django.core import validators
29 29
from django.db import models
30
from django.utils.encoding import force_bytes, force_text
30
from django.utils.encoding import force_bytes, force_str
31 31
from django.utils.translation import gettext_lazy as _
32 32
from paramiko.dsskey import DSSKey
33 33
from paramiko.ecdsakey import ECDSAKey
......
71 71
        self.hostname = parsed.hostname
72 72
        self.port = parsed.port or 22
73 73
        self.path = parsed.path.strip('/')
74
        self.private_key_content = force_text(private_key_content)
74
        self.private_key_content = force_str(private_key_content)
75 75
        self.private_key_password = private_key_password
76 76
        if private_key_content:
77 77
            self.private_key = _load_private_key(private_key_content, private_key_password)
passerelle/views.py
35 35
from django.http import Http404, HttpResponse, HttpResponseRedirect
36 36
from django.shortcuts import get_object_or_404, resolve_url
37 37
from django.urls import reverse
38
from django.utils.encoding import force_bytes, force_text
38
from django.utils.encoding import force_bytes, force_str
39 39
from django.utils.timezone import is_naive, make_aware
40 40
from django.utils.translation import gettext_lazy as _
41 41
from django.views.decorators.csrf import csrf_exempt
......
103 103
    json_str = json.dumps(
104 104
        [
105 105
            {
106
                'label': force_text(label),
106
                'label': force_str(label),
107 107
                'slug': 'passerelle',
108 108
                'url': request.build_absolute_uri(reverse('manage-home')),
109 109
            }
tests/test_astregs.py
6 6

  
7 7
import mock
8 8
import pytest
9
from django.utils.encoding import force_bytes, force_str, force_text
9
from django.utils.encoding import force_bytes, force_str
10 10
from django.utils.http import urlencode
11 11
from requests import Request
12 12
from requests.exceptions import ConnectionError
......
327 327
    assert data['StatutTiers'] == 'PROPOSE'
328 328
    assert data['Type'] == '*'
329 329
    assert data['AdresseTitre'] == 'AdressePrincipale'
330
    assert data['AdresseLibelleRue'] == force_text('169, rue du Château')
330
    assert data['AdresseLibelleRue'] == force_str('169, rue du Château')
331 331
    assert data['Sigle'] == 'EO'
332 332
    assert data['AdresseIsAdresseDeCommande'] == 'false'
333 333
    assert data['AdresseIsAdresseDeFacturation'] == 'false'
tests/test_cmis.py
18 18
)
19 19
from django.contrib.contenttypes.models import ContentType
20 20
from django.urls import reverse
21
from django.utils.encoding import force_bytes, force_text
21
from django.utils.encoding import force_bytes, force_str
22 22
from mock import Mock, call
23 23

  
24 24
from passerelle.apps.cmis.models import CmisConnector
......
27 27

  
28 28

  
29 29
def b64encode(content):
30
    return force_text(base64.b64encode(force_bytes(content)))
30
    return force_str(base64.b64encode(force_bytes(content)))
31 31

  
32 32

  
33 33
@pytest.fixture()
tests/test_cryptor.py
5 5
import pytest
6 6
from django.contrib.contenttypes.models import ContentType
7 7
from django.core.exceptions import ValidationError
8
from django.utils.encoding import force_text
8
from django.utils.encoding import force_str
9 9

  
10 10
import tests.utils
11 11
from passerelle.apps.cryptor.models import CryptedFile, Cryptor
......
132 132

  
133 133
    # encrypt
134 134
    endpoint = tests.utils.generic_endpoint_url('cryptor', 'file-encrypt', slug=cryptor.slug)
135
    content = force_text(base64.b64encode(b'this is foo and bar'))
135
    content = force_str(base64.b64encode(b'this is foo and bar'))
136 136
    payload = {"file": {"filename": "foo.txt", "content_type": "text/plain", "content": content}}
137 137

  
138 138
    resp = app.post_json(endpoint, params=payload, status=200)
tests/test_csv_datasource.py
35 35
from django.core.management import call_command
36 36
from django.test import Client, override_settings
37 37
from django.urls import reverse
38
from django.utils.encoding import force_bytes, force_str, force_text
38
from django.utils.encoding import force_bytes, force_str
39 39
from django.utils.timezone import now
40 40

  
41 41
from passerelle.apps.csvdatasource.models import CsvDataSource, Query, TableRow, upload_to
......
64 64
216352;38;Dupont;Benoît;H
65 65
"""
66 66

  
67
data_bom = force_str(force_text(data, 'utf-8').encode('utf-8-sig'))
67
data_bom = force_str(force_str(data, 'utf-8').encode('utf-8-sig'))
68 68

  
69 69
pytestmark = pytest.mark.django_db
70 70

  
tests/test_dpark.py
6 6
import httmock
7 7
import mock
8 8
import pytest
9
from django.utils.encoding import force_text
9
from django.utils.encoding import force_str
10 10
from zeep.exceptions import Fault as WebFault
11 11
from zeep.exceptions import TransportError
12 12

  
......
653 653
</SOAP-ENV:Envelope>"""
654 654
    )
655 655
    resp = app.post_json(url, params=params)
656
    assert demande_abonnementtiers in force_text(dpark.mock_requests[1].body)
656
    assert demande_abonnementtiers in force_str(dpark.mock_requests[1].body)
657 657
    assert resp.json['data']['numerodossier'] == 22334
658 658
    assert resp.json['data']['numerodemande'] == 59492
659 659

  
......
677 677
    params['justif_domicile'] = {
678 678
        'filename': 'address_proof.pDf',
679 679
        'content_type': 'application/pdf',
680
        'content': force_text(base64.b64encode(b'%PDF this is my proof of address')),
680
        'content': force_str(base64.b64encode(b'%PDF this is my proof of address')),
681 681
    }
682 682
    params['cartegrise,1'] = {
683 683
        'filename': 'cartegrise.pdf',
684 684
        'content_type': 'application/pdf',
685
        'content': force_text(base64.b64encode(b'%PDF carte grise 1')),
685
        'content': force_str(base64.b64encode(b'%PDF carte grise 1')),
686 686
    }
687 687
    params['toto,6'] = {
688 688
        'filename': 'cartegrisetoto.jpg',
689 689
        'content_type': 'application/pdf',
690
        'content': force_text(base64.b64encode(JPEG_CONTENT)),
690
        'content': force_str(base64.b64encode(JPEG_CONTENT)),
691 691
    }
692 692
    params['cartegrise,6'] = {
693 693
        'filename': 'cartegrise2.pdf',
694 694
        'content_type': 'application/pdf',
695
        'content': force_text(base64.b64encode(b'%PDF carte grise 2')),
695
        'content': force_str(base64.b64encode(b'%PDF carte grise 2')),
696 696
    }
697 697
    params['taxe_habitat'] = {
698 698
        'filename': 'cartegrise2.pdf',
......
746 746
    assert len(pj_node.findall('Bloc_Fichiers')) == 4
747 747
    assert pj_node.findall('Bloc_Fichiers')[0].find('TypeDocument').text == '6'
748 748
    assert pj_node.findall('Bloc_Fichiers')[0].find('NomFichier').text == 'cartegrise.pdf'
749
    assert pj_node.findall('Bloc_Fichiers')[0].find('Fichier').text == force_text(
749
    assert pj_node.findall('Bloc_Fichiers')[0].find('Fichier').text == force_str(
750 750
        base64.b64encode(b'%PDF carte grise 1')
751 751
    )
752 752
    assert pj_node.findall('Bloc_Fichiers')[1].find('TypeDocument').text == '6'
753 753
    assert pj_node.findall('Bloc_Fichiers')[1].find('NomFichier').text == 'cartegrise2.pdf'
754
    assert pj_node.findall('Bloc_Fichiers')[1].find('Fichier').text == force_text(
754
    assert pj_node.findall('Bloc_Fichiers')[1].find('Fichier').text == force_str(
755 755
        base64.b64encode(b'%PDF carte grise 2')
756 756
    )
757 757
    assert pj_node.findall('Bloc_Fichiers')[2].find('TypeDocument').text == '2'
758 758
    assert pj_node.findall('Bloc_Fichiers')[2].find('NomFichier').text == 'address_proof.pDf'
759
    assert pj_node.findall('Bloc_Fichiers')[2].find('Fichier').text == force_text(
759
    assert pj_node.findall('Bloc_Fichiers')[2].find('Fichier').text == force_str(
760 760
        base64.b64encode(b'%PDF this is my proof of address')
761 761
    )
762 762

  
......
764 764
    from passerelle.utils.conversion import to_pdf
765 765

  
766 766
    assert pj_node.findall('Bloc_Fichiers')[3].find('NomFichier').text == 'cartegrisetoto.jpg.pdf'
767
    assert pj_node.findall('Bloc_Fichiers')[3].find('Fichier').text == force_text(
767
    assert pj_node.findall('Bloc_Fichiers')[3].find('Fichier').text == force_str(
768 768
        base64.b64encode(to_pdf(JPEG_CONTENT))
769 769
    )
770 770
    assert base64.b64decode(pj_node.findall('Bloc_Fichiers')[3].find('Fichier').text).startswith(b'%PDF')
tests/test_gesbac.py
17 17
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 18

  
19 19
import pytest
20
from django.utils.encoding import force_bytes, force_text
20
from django.utils.encoding import force_bytes, force_str
21 21
from django.utils.timezone import now
22 22

  
23 23
from passerelle.apps.gesbac.models import Gesbac
......
175 175
    assert resource.form_set.filter(form_id='42-43', filename=response_filename, status='closed').count() == 0
176 176

  
177 177
    # files are encoded in latin-1
178
    comment = force_text('propriétaire')
179
    content = force_bytes(force_text('CARTE;%s;3;2;1234;;;;;;;;%s' % (gesbac_id, comment)), 'latin-1')
178
    comment = force_str('propriétaire')
179
    content = force_bytes(force_str('CARTE;%s;3;2;1234;;;;;;;;%s' % (gesbac_id, comment)), 'latin-1')
180 180
    with sftpserver.serve_content({'input': {response_filename: content}}):
181 181
        resource.hourly()
182 182

  
tests/test_import_export.py
12 12
from django.test import Client
13 13
from django.urls import reverse
14 14
from django.utils import timezone
15
from django.utils.encoding import force_bytes, force_text
15
from django.utils.encoding import force_bytes, force_str
16 16

  
17 17
from passerelle.apps.base_adresse.models import BaseAdresse
18 18
from passerelle.apps.bdp.models import Bdp
......
44 44
216352;38;Dupont;Benoît;H
45 45
"""
46 46

  
47
data_bom = force_text(data, 'utf-8').encode('utf-8-sig')
47
data_bom = force_str(data, 'utf-8').encode('utf-8-sig')
48 48

  
49 49
SECTOR_CSV = """street_id,street_name,parity,min_housenumber,max_housenumber,sector_id,sector_name
50 50
75114_1912,rue du Château,P,,, gs-moulin, Groupe Scolaire Moulin"""
tests/test_orange.py
20 20
import httmock
21 21
import pytest
22 22
from django.contrib.contenttypes.models import ContentType
23
from django.utils.encoding import force_text
23
from django.utils.encoding import force_str
24 24

  
25 25
from passerelle.apps.orange.models import OrangeError, OrangeSMSGateway
26 26
from passerelle.base.models import AccessRight, ApiUser, Job
......
57 57
@httmock.urlmatch(netloc=NETLOC, path='/api/v1.2/groups/gid2/diffusion-requests', method='POST')
58 58
def response_diffusion_ok(url, request):
59 59
    assert request.headers['authorization'] == 'Bearer my_token'
60
    request_body = json.loads(force_text(request.body))
60
    request_body = json.loads(force_str(request.body))
61 61
    assert request_body['smsParam']['body'] == PAYLOAD['message']
62 62
    assert 'senderName' not in request_body['smsParam'].keys()
63 63
    assert '33688888888' in request_body['msisdns'][0]
......
168 168
    # sender name not allowed
169 169
    @httmock.urlmatch(netloc=NETLOC)
170 170
    def mocked_response2(url, request):
171
        request_body = json.loads(force_text(request.body))
171
        request_body = json.loads(force_str(request.body))
172 172
        assert request_body['smsParam']['senderName'] == 'john'
173 173
        error_response = [
174 174
            {
tests/test_sector.py
26 26
from django.core.files import File
27 27
from django.core.management import call_command
28 28
from django.urls import reverse
29
from django.utils.encoding import force_str, force_text
29
from django.utils.encoding import force_str
30 30
from django.utils.timezone import now
31 31

  
32 32
import tests.utils
......
44 44
75114_1915,  ,,,,ecole-hugo2 , École Hugo 2
45 45
"""
46 46

  
47
CSV_BOM = force_str(force_text(CSV, 'utf-8').encode('utf-8-sig'))
47
CSV_BOM = force_str(force_str(CSV, 'utf-8').encode('utf-8-sig'))
48 48

  
49 49
CSV_NO_FIRST_LINE = """75114_1912,rue du Château,P,,, gs-moulin, Groupe Scolaire Moulin
50 50
75114_1912,rue du Château,I,0,999999,gs-zola,Groupe Scolaire Zola
tests/test_solis_afi_mss.py
20 20

  
21 21
import mock
22 22
import pytest
23
from django.utils.encoding import force_text
23
from django.utils.encoding import force_str
24 24

  
25 25
import tests.utils
26 26
from passerelle.contrib.solis_afi_mss.models import SolisAfiMss
......
708 708
        'document': {
709 709
            'filename': '201x201.jpg',
710 710
            'content_type': 'image/jpeg',
711
            'content': force_text(base64.b64encode(get_media_file('201x201.jpg'))),
711
            'content': force_str(base64.b64encode(get_media_file('201x201.jpg'))),
712 712
        },
713 713
    }
714 714

  
......
790 790
        'document': {
791 791
            'filename': '201x201.jpg',
792 792
            'content_type': 'image/jpeg',
793
            'content': force_text(base64.b64encode(get_media_file('201x201.jpg'))),
793
            'content': force_str(base64.b64encode(get_media_file('201x201.jpg'))),
794 794
        },
795 795
    }
796 796
    resp = app.post_json(endpoint + '?email=foo@dummy.org', params=payload)
tests/test_toulouse_smart.py
30 30
import pytest
31 31
from django.db import connection
32 32
from django.db.migrations.executor import MigrationExecutor
33
from django.utils.encoding import force_text
33
from django.utils.encoding import force_str
34 34
from requests.exceptions import ReadTimeout
35 35

  
36 36
import tests.utils
......
871 871
    'files/0': {
872 872
        'filename': '201x201.jpg',
873 873
        'content_type': 'image/jpeg',
874
        'content': force_text(base64.b64encode(get_media_file('201x201.jpg'))),
874
        'content': force_str(base64.b64encode(get_media_file('201x201.jpg'))),
875 875
    },
876 876
    'files/1': None,
877 877
}
tests/test_utils_sftp.py
19 19
import pytest
20 20
from django.core.files.uploadedfile import SimpleUploadedFile
21 21
from django.db import models
22
from django.utils.encoding import force_text
22
from django.utils.encoding import force_str
23 23

  
24 24
from passerelle.utils.sftp import SFTP, SFTPField, SFTPFormField
25 25

  
......
94 94
        with form.cleaned_data['sftp'].client() as sftp:
95 95
            assert sftp.listdir() == ['a.zip']
96 96

  
97
        form = Form(data={'sftp_0': url, 'sftp_2': force_text(ssh_key, 'ascii')})
97
        form = Form(data={'sftp_0': url, 'sftp_2': force_str(ssh_key, 'ascii')})
98 98
        assert form.is_valid()
99 99
        sftp = form.cleaned_data['sftp']
100 100
        assert isinstance(sftp, SFTP)
......
125 125
        with form.cleaned_data['sftp'].client() as sftp:
126 126
            assert sftp.listdir() == ['a.zip']
127 127

  
128
        form = Form(data={'sftp_0': url, 'sftp_2': force_text(ssh_key_with_password, 'ascii')})
128
        form = Form(data={'sftp_0': url, 'sftp_2': force_str(ssh_key_with_password, 'ascii')})
129 129
        assert not form.is_valid()
130 130
        assert 'key invalid' in str(form.errors)
131 131

  
132 132
        form = Form(
133 133
            data={
134 134
                'sftp_0': url,
135
                'sftp_2': force_text(ssh_key_with_password, 'ascii'),
135
                'sftp_2': force_str(ssh_key_with_password, 'ascii'),
136 136
                'sftp_3': 'coucou',
137 137
            }
138 138
        )
139
-