From 1a17d3efa6e299864ab1259d2df099ceb907f258 Mon Sep 17 00:00:00 2001 From: Agate Berriot Date: Wed, 31 Aug 2022 10:21:14 +0200 Subject: [PATCH] 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(-) diff --git a/passerelle/apps/atal/models.py b/passerelle/apps/atal/models.py index 55e1ee65..91dca7f6 100644 --- a/passerelle/apps/atal/models.py +++ b/passerelle/apps/atal/models.py @@ -21,7 +21,7 @@ import urllib import lxml.etree from django.db import models from django.utils import dateformat, dateparse -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.translation import gettext_lazy as _ from zeep import helpers from zeep.exceptions import Fault @@ -61,7 +61,7 @@ class ATALConnector(BaseResource): try: return getattr(client.service, method)(**kwargs) except Fault as e: - raise APIError(force_text(e)) + raise APIError(force_str(e)) def _basic_ref(self, wsdl, method): soap_res = self._soap_call(wsdl=wsdl, method=method) diff --git a/passerelle/apps/cartads_cs/models.py b/passerelle/apps/cartads_cs/models.py index f86a0773..8fd9b652 100644 --- a/passerelle/apps/cartads_cs/models.py +++ b/passerelle/apps/cartads_cs/models.py @@ -38,7 +38,7 @@ from django.core.signing import Signer from django.db import models from django.http import HttpResponse from django.urls import reverse -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.timezone import now from django.utils.translation import gettext_lazy as _ @@ -162,7 +162,7 @@ class AbstractCartaDSCS(BaseResource): data_pad = AES.block_size - len(token_data_str) % AES.block_size aes = AES.new(self.secret_key.encode(), AES.MODE_CBC, self.iv.encode()) token = aes.encrypt((token_data_str + (chr(data_pad) * data_pad)).encode()) - return force_text(base64.encodebytes(token)).replace('\n', '').rstrip('=') + return force_str(base64.encodebytes(token)).replace('\n', '').rstrip('=') def check_status(self): self.soap_client().service.GetCommunes(self.get_token(), {}) @@ -701,14 +701,14 @@ class AbstractCartaDSCS(BaseResource): try: pdf = pdfrw.PdfReader(request.FILES['files[]']) if not any(pdfrw.findobjs.find_objects(pdf, valid_subtypes=(pdfrw.PdfName.Form,))): - return [{'error': force_text(_('The CERFA should not be a scanned document.'))}] + return [{'error': force_str(_('The CERFA should not be a scanned document.'))}] except (pdfrw.PdfParseError, ValueError): - return [{'error': force_text(_('The CERFA should be a PDF file.'))}] + return [{'error': force_str(_('The CERFA should be a PDF file.'))}] else: if request.FILES['files[]'].content_type not in ('application/pdf', 'image/jpeg'): - return [{'error': force_text(_('The file should be a PDF document or a JPEG image.'))}] + return [{'error': force_str(_('The file should be a PDF document or a JPEG image.'))}] if request.FILES['files[]'].size > 25 * 1024 * 1024: - return [{'error': force_text(_('The file should not exceed 25MB.'))}] + return [{'error': force_str(_('The file should not exceed 25MB.'))}] file_upload = CartaDSFile( tracking_code=tracking_code, id_piece=id_piece, uploaded_file=request.FILES['files[]'] ) diff --git a/passerelle/apps/csvdatasource/models.py b/passerelle/apps/csvdatasource/models.py index 3a75018c..8cb01ac0 100644 --- a/passerelle/apps/csvdatasource/models.py +++ b/passerelle/apps/csvdatasource/models.py @@ -31,7 +31,7 @@ from django.core.exceptions import ValidationError from django.core.files.base import ContentFile from django.db import models, transaction from django.urls import reverse -from django.utils.encoding import force_str, force_text, smart_text +from django.utils.encoding import force_str, smart_str from django.utils.timezone import make_aware, now from django.utils.translation import gettext_lazy as _ @@ -286,7 +286,7 @@ class CsvDataSource(BaseResource): if self.skip_header: rows = rows[1:] - rows = [[smart_text(x) for x in y] for y in rows if y] + rows = [[smart_str(x) for x in y] for y in rows if y] titles = [t.strip() for t in self.columns_keynames.split(',')] indexes = [titles.index(t) for t in titles if t] captions = [titles[i] for i in indexes] @@ -317,7 +317,7 @@ class CsvDataSource(BaseResource): @property def titles(self): - return [smart_text(t.strip()) for t in self.columns_keynames.split(',')] + return [smart_str(t.strip()) for t in self.columns_keynames.split(',')] @endpoint(perm='can_access', methods=['get'], name='data') def data(self, request, **kwargs): @@ -388,7 +388,7 @@ class CsvDataSource(BaseResource): except (TypeError, SyntaxError) as e: data = { 'expr': expr, - 'error': smart_text(e), + 'error': smart_str(e), } if titles: data['name'] = titles[i] @@ -407,7 +407,7 @@ class CsvDataSource(BaseResource): data = { 'expr': expr, 'row': repr(row), - 'error': smart_text(e), + 'error': smart_str(e), } if titles: data['name'] = titles[i] @@ -463,7 +463,7 @@ class CsvDataSource(BaseResource): if 'id' in request.GET and not model_filters_id: # always provide a ?id= filter. - filters = ["id == %r" % force_text(request.GET['id'])] + filters = ["id == %r" % force_str(request.GET['id'])] data = [row for new_row, row in stream_expressions(filters, data, kind='filters') if new_row[0]] # allow jsonp queries by select2 diff --git a/passerelle/apps/family/loaders/concerto_fondettes.py b/passerelle/apps/family/loaders/concerto_fondettes.py index 09f05473..eeb9c607 100644 --- a/passerelle/apps/family/loaders/concerto_fondettes.py +++ b/passerelle/apps/family/loaders/concerto_fondettes.py @@ -20,14 +20,14 @@ import io from decimal import Decimal from django.core.exceptions import ValidationError -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.translation import gettext_lazy as _ from ..models import Invoice def u(s): - return force_text(s, 'iso-8859-15') + return force_str(s, 'iso-8859-15') class Loader: diff --git a/passerelle/apps/family/loaders/concerto_orleans.py b/passerelle/apps/family/loaders/concerto_orleans.py index 7a789cf2..31e681e1 100644 --- a/passerelle/apps/family/loaders/concerto_orleans.py +++ b/passerelle/apps/family/loaders/concerto_orleans.py @@ -22,7 +22,7 @@ from decimal import Decimal from django.core.exceptions import ValidationError from django.core.files.storage import DefaultStorage from django.utils import timezone -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.translation import gettext_lazy as _ from ..models import Adult, Child, Family, Invoice, dict_cherry_pick, get_date, get_datetime @@ -130,7 +130,7 @@ class Loader: # pylint: disable=stop-iteration-return titles = [x.lower() for x in next(reader)] for row in reader: - row = [force_text(x, 'iso-8859-15') for x in row] + row = [force_str(x, 'iso-8859-15') for x in row] yield dict(zip(titles, row)) def build_families(self): diff --git a/passerelle/apps/family/loaders/opus_fondettes.py b/passerelle/apps/family/loaders/opus_fondettes.py index ca15890c..75e3ed0d 100644 --- a/passerelle/apps/family/loaders/opus_fondettes.py +++ b/passerelle/apps/family/loaders/opus_fondettes.py @@ -20,14 +20,14 @@ import io from decimal import Decimal from django.core.exceptions import ValidationError -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.translation import gettext_lazy as _ from ..models import Invoice def u(s): - return force_text(s, 'iso-8859-15') + return force_str(s, 'iso-8859-15') class Loader: diff --git a/passerelle/apps/gdc/models.py b/passerelle/apps/gdc/models.py index 537d41b6..12bb289c 100644 --- a/passerelle/apps/gdc/models.py +++ b/passerelle/apps/gdc/models.py @@ -22,7 +22,7 @@ except ImportError: phpserialize = None from django.db import models -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.translation import gettext_lazy as _ from passerelle.base.models import BaseResource @@ -43,7 +43,7 @@ def deep_bytes2str(obj): if isinstance(obj, dict): new_d = {} for k, v in obj.items(): - new_d[force_text(k)] = deep_bytes2str(v) + new_d[force_str(k)] = deep_bytes2str(v) return new_d return obj @@ -68,7 +68,7 @@ class Gdc(BaseResource): def call_soap(self, action, *args, **kwargs): def escape(s): - return force_text(s).replace('&', '&').replace('>', '>').replace('<', '<') + return force_str(s).replace('&', '&').replace('>', '>').replace('<', '<') params = [] for i, arg in enumerate(args): @@ -116,7 +116,7 @@ class Gdc(BaseResource): soap_result = phpserialize_loads(resp.findall('.//listeCommune')[0].text) result = [] for k, v in soap_result.items(): - result.append({'id': k, 'text': force_text(v, 'utf-8')}) + result.append({'id': k, 'text': force_str(v, 'utf-8')}) result.sort(key=lambda x: x['id']) return result @@ -126,6 +126,6 @@ class Gdc(BaseResource): soap_result = phpserialize_loads(resp.findall('.//listeObjet')[0].text) result = [] for k, v in soap_result.items(): - result.append({'id': k, 'text': force_text(v, 'utf-8')}) + result.append({'id': k, 'text': force_str(v, 'utf-8')}) result.sort(key=lambda x: x['id']) return result diff --git a/passerelle/apps/gdc/views.py b/passerelle/apps/gdc/views.py index bf74fb3d..39909385 100644 --- a/passerelle/apps/gdc/views.py +++ b/passerelle/apps/gdc/views.py @@ -17,7 +17,7 @@ import json -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.views.generic.base import View from django.views.generic.detail import DetailView, SingleObjectMixin @@ -177,7 +177,7 @@ class PostDemandeView(View, SingleObjectMixin): except IOError: result = {'result': 'gdc soap crash'} else: - code_retour = force_text(resp.findall('.//code_retour')[0].text) + code_retour = force_str(resp.findall('.//code_retour')[0].text) result = phpserialize_loads(resp.findall('.//listeInfo')[0].text) result = { 'result': code_retour, diff --git a/passerelle/apps/ovh/models.py b/passerelle/apps/ovh/models.py index 13f4fd55..25ff1808 100644 --- a/passerelle/apps/ovh/models.py +++ b/passerelle/apps/ovh/models.py @@ -12,7 +12,7 @@ from django.core.mail import send_mail from django.db import models from django.template.loader import render_to_string from django.utils import timezone -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.translation import gettext_lazy as _ from passerelle.base.models import SkipJob @@ -235,7 +235,7 @@ class OVHSMSGateway(SMSResource): if not self.password: raise APIError('Improperly configured, empty keys or password fields.') - text = force_text(text).encode('utf-8') + text = force_str(text).encode('utf-8') to = ','.join(destinations) params = { 'account': self.account.encode('utf-8'), diff --git a/passerelle/apps/oxyd/models.py b/passerelle/apps/oxyd/models.py index e46bb58e..759f29f4 100644 --- a/passerelle/apps/oxyd/models.py +++ b/passerelle/apps/oxyd/models.py @@ -1,6 +1,6 @@ import requests from django.db import models -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.translation import gettext_lazy as _ from passerelle.sms.models import SMSResource @@ -61,7 +61,7 @@ class OxydSMSGateway(SMSResource): results.append('OXYD error: POST failed, %s' % e) else: code = r.content and r.content.split()[0] - if force_text(code) != '200': + if force_str(code) != '200': results.append('OXYD error: response is not 200') else: results.append(0) diff --git a/passerelle/apps/sector/models.py b/passerelle/apps/sector/models.py index 7ee2254d..8bf80458 100644 --- a/passerelle/apps/sector/models.py +++ b/passerelle/apps/sector/models.py @@ -25,7 +25,7 @@ from django.core.files.base import ContentFile from django.db import models, transaction from django.db.models import Q from django.http import HttpResponse -from django.utils.encoding import force_bytes, force_str, smart_text +from django.utils.encoding import force_bytes, force_str, smart_str from django.utils.timezone import now from django.utils.translation import gettext_lazy as _ @@ -166,7 +166,7 @@ class SectorResource(BaseResource): for row in reader: if not row: continue # do not consider empty lines - row = [smart_text(x).strip() for x in row] + row = [smart_str(x).strip() for x in row] row = {caption: get_cell(row, index) for caption, index in zip(captions, indexes)} if row['sector_id']: diff --git a/passerelle/apps/solis/models.py b/passerelle/apps/solis/models.py index f91abf30..71eb84e1 100644 --- a/passerelle/apps/solis/models.py +++ b/passerelle/apps/solis/models.py @@ -20,7 +20,7 @@ import json from django.db import models from django.template.loader import get_template -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.http import urlencode from django.utils.translation import gettext_lazy as _ @@ -502,7 +502,7 @@ class Solis(BaseResource): try: value = self.request(endpoint) except APIError as e: # do not raise on linked informations - value = {'err': 1, 'err_class': e.__class__.__name__, 'err_desc': force_text(e)} + value = {'err': 1, 'err_class': e.__class__.__name__, 'err_desc': force_str(e)} link['content'] = value def rsa_get_links(self, information, links): diff --git a/passerelle/base/models.py b/passerelle/base/models.py index cfff2826..e77007f3 100644 --- a/passerelle/base/models.py +++ b/passerelle/base/models.py @@ -27,7 +27,7 @@ from django.forms.widgets import ClearableFileInput from django.test import override_settings from django.urls import reverse from django.utils import timezone -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.log import AdminEmailHandler from django.utils.text import slugify from django.utils.timezone import now @@ -373,7 +373,7 @@ class BaseResource(models.Model): if value: d[field.name] = { 'name': os.path.basename(value.name), - 'content': force_text(base64.b64encode(value.read())), + 'content': force_str(base64.b64encode(value.read())), } else: d[field.name] = None diff --git a/passerelle/contrib/nancypoll/models.py b/passerelle/contrib/nancypoll/models.py index 8e0b0d72..39977235 100644 --- a/passerelle/contrib/nancypoll/models.py +++ b/passerelle/contrib/nancypoll/models.py @@ -1,7 +1,7 @@ import csv from django.db import models -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.translation import gettext_lazy as _ from passerelle.base.models import BaseResource @@ -14,7 +14,7 @@ COLUMN_NAMES = ( def to_unicode(value): - return force_text(value, 'utf-8') + return force_str(value, 'utf-8') def upload_to(instance, filename): @@ -50,7 +50,7 @@ class NancyPoll(BaseResource): content = self.csv_file.read() if not content: raise APIError('No content found') - content = force_text(content) + content = force_str(content) reader = csv.reader(content.splitlines()) next(reader) diff --git a/passerelle/contrib/strasbourg_eu/models.py b/passerelle/contrib/strasbourg_eu/models.py index 8e96532b..f9add07e 100644 --- a/passerelle/contrib/strasbourg_eu/models.py +++ b/passerelle/contrib/strasbourg_eu/models.py @@ -19,7 +19,7 @@ import json from urllib import parse as urlparse from django.db import models -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.translation import gettext_lazy as _ from requests import RequestException @@ -114,7 +114,7 @@ class StrasbourgEu(BaseResource): notification['parsedPublicationDate'] = None for date_format in ('%Y-%m-%d %H:%M:%S', '%a %b %d %H:%M:%S %Z %Y'): try: - notification['parsedPublicationDate'] = force_text( + notification['parsedPublicationDate'] = force_str( datetime.datetime.strptime(notification['publicationDate'], date_format) ) break diff --git a/passerelle/contrib/teamnet_axel/models.py b/passerelle/contrib/teamnet_axel/models.py index 0098a212..d5900ee3 100644 --- a/passerelle/contrib/teamnet_axel/models.py +++ b/passerelle/contrib/teamnet_axel/models.py @@ -23,7 +23,7 @@ from datetime import datetime from django.contrib.postgres.fields import JSONField from django.db import models from django.http import HttpResponse, HttpResponseNotFound -from django.utils.encoding import smart_text +from django.utils.encoding import smart_str from django.utils.translation import gettext_lazy as _ from passerelle.base.models import BaseResource @@ -86,11 +86,11 @@ class TeamnetAxel(BaseResource): portail = ET.Element('PORTAIL') portail.append(args) streamId = operation - xmlParams = smart_text(ET.tostring(portail, encoding='UTF-8')) + xmlParams = smart_str(ET.tostring(portail, encoding='UTF-8')) user = '' logger.debug('getData(streamId=%s, xmlParams=%s, user=%s)', streamId, xmlParams, user) - result = soap.get_client(self).service.getData(streamId, smart_text(xmlParams), user) - logger.debug('getData(%s) result: %s', streamId, smart_text(result)) + result = soap.get_client(self).service.getData(streamId, smart_str(xmlParams), user) + logger.debug('getData(%s) result: %s', streamId, smart_str(result)) xml_result = ET.fromstring(result) if xml_result.find('RESULTAT/STATUS').text != 'OK': msg = xml_result.find('RESULTAT/COMMENTAIRES').text diff --git a/passerelle/contrib/utils/axel.py b/passerelle/contrib/utils/axel.py index cd4e2e3e..1d4e6286 100644 --- a/passerelle/contrib/utils/axel.py +++ b/passerelle/contrib/utils/axel.py @@ -24,7 +24,7 @@ from collections import namedtuple import pytz import xmlschema -from django.utils.encoding import force_text +from django.utils.encoding import force_str from passerelle.utils.xml import JSONSchemaFromXMLSchema @@ -234,7 +234,7 @@ class Operation: except xmlschema.XMLSchemaValidationError as e: raise AxelError('invalid request %s' % str(e)) indent(serialized_request) - serialized_request = force_text(ET.tostring(serialized_request)) + serialized_request = force_str(ET.tostring(serialized_request)) try: self.request_converter.xml_schema.validate(serialized_request) except xmlschema.XMLSchemaValidationError as e: @@ -246,7 +246,7 @@ class Operation: xml_result = ET.fromstring(result.encode('utf-8')) indent(xml_result) - pretty_result = force_text(ET.tostring(xml_result)) + pretty_result = force_str(ET.tostring(xml_result)) if xml_result.find('RESULTAT/STATUS').text != 'OK': msg = xml_result.find('RESULTAT/COMMENTAIRES').text raise AxelError(msg, xml_request=serialized_request, xml_response=pretty_result) diff --git a/passerelle/soap.py b/passerelle/soap.py index dbf76aea..827da4ad 100644 --- a/passerelle/soap.py +++ b/passerelle/soap.py @@ -1,5 +1,5 @@ import suds.sudsobject -from django.utils.encoding import force_text +from django.utils.encoding import force_str def client_to_jsondict(client): @@ -17,7 +17,7 @@ def client_to_jsondict(client): d['types'] = {} for t in sd.types: ft = client.factory.create(sd.xlate(t[0])) - d['types'][sd.xlate(t[0])] = force_text(ft) + d['types'][sd.xlate(t[0])] = force_str(ft) res[sd.service.name] = d return res diff --git a/passerelle/utils/__init__.py b/passerelle/utils/__init__.py index f4a64ab8..36324e77 100644 --- a/passerelle/utils/__init__.py +++ b/passerelle/utils/__init__.py @@ -31,7 +31,7 @@ from django.core.cache import cache from django.core.exceptions import PermissionDenied from django.db import transaction from django.http import HttpResponse, HttpResponseBadRequest -from django.utils.encoding import force_bytes, force_text +from django.utils.encoding import force_bytes, force_str from django.utils.functional import lazy from django.utils.html import mark_safe from django.utils.translation import ngettext_lazy @@ -98,7 +98,7 @@ def get_request_users(request): if scheme == 'basic' and len(http_authorization) > 1: param = http_authorization[1] try: - decoded = force_text(base64.b64decode(force_bytes(param.strip()))) + decoded = force_str(base64.b64decode(force_bytes(param.strip()))) username, password = decoded.split(':', 1) except (TypeError, ValueError): pass @@ -190,8 +190,7 @@ def content_type_match(ctype): def make_headers_safe(headers): """Convert dict of HTTP headers to text safely, as some services returns 8-bits encoding in headers.""" return { - force_text(key, errors='replace'): force_text(value, errors='replace') - for key, value in headers.items() + force_str(key, errors='replace'): force_str(value, errors='replace') for key, value in headers.items() } diff --git a/passerelle/utils/conversion.py b/passerelle/utils/conversion.py index 2a9625e2..c7bad236 100644 --- a/passerelle/utils/conversion.py +++ b/passerelle/utils/conversion.py @@ -22,7 +22,7 @@ import warnings from io import BytesIO import unidecode -from django.utils.encoding import force_text +from django.utils.encoding import force_str from PIL import Image @@ -68,7 +68,7 @@ def ensure_encoding(s, encoding): def to_ascii(s): - return force_text(unidecode.unidecode(s), 'ascii') + return force_str(unidecode.unidecode(s), 'ascii') def exception_to_text(e): @@ -105,7 +105,7 @@ def simplify(s): """ if not s: return '' - s = force_text(s, 'utf-8', 'ignore') + s = force_str(s, 'utf-8', 'ignore') s = normalize(s) s = re.sub(r'[^\w\s\'-]', '', s) s = re.sub(r'[\s\'_-]+', ' ', s) diff --git a/passerelle/utils/http_authenticators.py b/passerelle/utils/http_authenticators.py index 3905bd01..8c624cb5 100644 --- a/passerelle/utils/http_authenticators.py +++ b/passerelle/utils/http_authenticators.py @@ -21,7 +21,7 @@ import time from urllib import parse as urlparse from uuid import uuid4 -from django.utils.encoding import force_bytes, force_text +from django.utils.encoding import force_bytes, force_str from requests.auth import AuthBase @@ -40,7 +40,7 @@ class HawkAuth(AuthBase): p_hash.update(force_bytes(req.headers.get('Content-Type', '') + '\n')) p_hash.update(force_bytes(req.body or '')) p_hash.update(force_bytes('\n')) - return force_text(base64.b64encode(p_hash.digest())) + return force_str(base64.b64encode(p_hash.digest())) def get_authorization_header(self, req): url_parts = urlparse.urlparse(req.url) @@ -67,9 +67,9 @@ class HawkAuth(AuthBase): ] digestmod = getattr(hashlib, self.algorithm) result = hmac.new(force_bytes(self.key), force_bytes('\n'.join(data)), digestmod) - mac = force_text(base64.b64encode(result.digest())) + mac = force_str(base64.b64encode(result.digest())) authorization = 'Hawk id="%s", ts="%s", nonce="%s", hash="%s", mac="%s"' % ( - force_text(self.id), + force_str(self.id), self.timestamp, self.nonce, hash, diff --git a/passerelle/utils/jsonresponse.py b/passerelle/utils/jsonresponse.py index dbefb183..8ea7005c 100644 --- a/passerelle/utils/jsonresponse.py +++ b/passerelle/utils/jsonresponse.py @@ -16,7 +16,7 @@ from django.core.exceptions import ObjectDoesNotExist, PermissionDenied from django.core.serializers.json import DjangoJSONEncoder from django.http import Http404, HttpResponse, HttpResponseBadRequest from django.http.response import HttpResponseBase -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.log import log_response from requests import HTTPError, RequestException @@ -78,7 +78,7 @@ class to_json: err_class = err_module + err.__class__.__name__ - err_desc = force_text(err) + err_desc = force_str(err) response = { "err": 1, diff --git a/passerelle/utils/sftp.py b/passerelle/utils/sftp.py index 707252b8..c781ff08 100644 --- a/passerelle/utils/sftp.py +++ b/passerelle/utils/sftp.py @@ -27,7 +27,7 @@ import paramiko from django import forms from django.core import validators from django.db import models -from django.utils.encoding import force_bytes, force_text +from django.utils.encoding import force_bytes, force_str from django.utils.translation import gettext_lazy as _ from paramiko.dsskey import DSSKey from paramiko.ecdsakey import ECDSAKey @@ -71,7 +71,7 @@ class SFTP: self.hostname = parsed.hostname self.port = parsed.port or 22 self.path = parsed.path.strip('/') - self.private_key_content = force_text(private_key_content) + self.private_key_content = force_str(private_key_content) self.private_key_password = private_key_password if private_key_content: self.private_key = _load_private_key(private_key_content, private_key_password) diff --git a/passerelle/views.py b/passerelle/views.py index 64355ca8..f8f551f1 100644 --- a/passerelle/views.py +++ b/passerelle/views.py @@ -35,7 +35,7 @@ from django.db.models import Q from django.http import Http404, HttpResponse, HttpResponseRedirect from django.shortcuts import get_object_or_404, resolve_url from django.urls import reverse -from django.utils.encoding import force_bytes, force_text +from django.utils.encoding import force_bytes, force_str from django.utils.timezone import is_naive, make_aware from django.utils.translation import gettext_lazy as _ from django.views.decorators.csrf import csrf_exempt @@ -103,7 +103,7 @@ def menu_json(request): json_str = json.dumps( [ { - 'label': force_text(label), + 'label': force_str(label), 'slug': 'passerelle', 'url': request.build_absolute_uri(reverse('manage-home')), } diff --git a/tests/test_astregs.py b/tests/test_astregs.py index 6a52d6fb..32318c24 100644 --- a/tests/test_astregs.py +++ b/tests/test_astregs.py @@ -6,7 +6,7 @@ import re import mock import pytest -from django.utils.encoding import force_bytes, force_str, force_text +from django.utils.encoding import force_bytes, force_str from django.utils.http import urlencode from requests import Request from requests.exceptions import ConnectionError @@ -327,7 +327,7 @@ def test_association_creation( assert data['StatutTiers'] == 'PROPOSE' assert data['Type'] == '*' assert data['AdresseTitre'] == 'AdressePrincipale' - assert data['AdresseLibelleRue'] == force_text('169, rue du Château') + assert data['AdresseLibelleRue'] == force_str('169, rue du Château') assert data['Sigle'] == 'EO' assert data['AdresseIsAdresseDeCommande'] == 'false' assert data['AdresseIsAdresseDeFacturation'] == 'false' diff --git a/tests/test_cmis.py b/tests/test_cmis.py index 9e8a03fc..bf9a687e 100644 --- a/tests/test_cmis.py +++ b/tests/test_cmis.py @@ -18,7 +18,7 @@ from cmislib.exceptions import ( ) from django.contrib.contenttypes.models import ContentType from django.urls import reverse -from django.utils.encoding import force_bytes, force_text +from django.utils.encoding import force_bytes, force_str from mock import Mock, call from passerelle.apps.cmis.models import CmisConnector @@ -27,7 +27,7 @@ from tests.test_manager import login def b64encode(content): - return force_text(base64.b64encode(force_bytes(content))) + return force_str(base64.b64encode(force_bytes(content))) @pytest.fixture() diff --git a/tests/test_cryptor.py b/tests/test_cryptor.py index 38444c7e..b3cad29c 100644 --- a/tests/test_cryptor.py +++ b/tests/test_cryptor.py @@ -5,7 +5,7 @@ import base64 import pytest from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ValidationError -from django.utils.encoding import force_text +from django.utils.encoding import force_str import tests.utils from passerelle.apps.cryptor.models import CryptedFile, Cryptor @@ -132,7 +132,7 @@ def test_cryptor_encrypt_decrypt(app, cryptor): # encrypt endpoint = tests.utils.generic_endpoint_url('cryptor', 'file-encrypt', slug=cryptor.slug) - content = force_text(base64.b64encode(b'this is foo and bar')) + content = force_str(base64.b64encode(b'this is foo and bar')) payload = {"file": {"filename": "foo.txt", "content_type": "text/plain", "content": content}} resp = app.post_json(endpoint, params=payload, status=200) diff --git a/tests/test_csv_datasource.py b/tests/test_csv_datasource.py index 0f4bda06..402ecafc 100644 --- a/tests/test_csv_datasource.py +++ b/tests/test_csv_datasource.py @@ -35,7 +35,7 @@ from django.core.files.storage import default_storage from django.core.management import call_command from django.test import Client, override_settings from django.urls import reverse -from django.utils.encoding import force_bytes, force_str, force_text +from django.utils.encoding import force_bytes, force_str from django.utils.timezone import now from passerelle.apps.csvdatasource.models import CsvDataSource, Query, TableRow, upload_to @@ -64,7 +64,7 @@ data = """121;69981;DELANOUE;Eliot;H 216352;38;Dupont;Benoît;H """ -data_bom = force_str(force_text(data, 'utf-8').encode('utf-8-sig')) +data_bom = force_str(force_str(data, 'utf-8').encode('utf-8-sig')) pytestmark = pytest.mark.django_db diff --git a/tests/test_dpark.py b/tests/test_dpark.py index 20978d17..13af96e3 100644 --- a/tests/test_dpark.py +++ b/tests/test_dpark.py @@ -6,7 +6,7 @@ import xml.etree.ElementTree as ET import httmock import mock import pytest -from django.utils.encoding import force_text +from django.utils.encoding import force_str from zeep.exceptions import Fault as WebFault from zeep.exceptions import TransportError @@ -653,7 +653,7 @@ def test_registration(dpark, app, application_thirdparty_subscription): """ ) resp = app.post_json(url, params=params) - assert demande_abonnementtiers in force_text(dpark.mock_requests[1].body) + assert demande_abonnementtiers in force_str(dpark.mock_requests[1].body) assert resp.json['data']['numerodossier'] == 22334 assert resp.json['data']['numerodemande'] == 59492 @@ -677,22 +677,22 @@ def test_send_files(dpark, app, settings, freezer): params['justif_domicile'] = { 'filename': 'address_proof.pDf', 'content_type': 'application/pdf', - 'content': force_text(base64.b64encode(b'%PDF this is my proof of address')), + 'content': force_str(base64.b64encode(b'%PDF this is my proof of address')), } params['cartegrise,1'] = { 'filename': 'cartegrise.pdf', 'content_type': 'application/pdf', - 'content': force_text(base64.b64encode(b'%PDF carte grise 1')), + 'content': force_str(base64.b64encode(b'%PDF carte grise 1')), } params['toto,6'] = { 'filename': 'cartegrisetoto.jpg', 'content_type': 'application/pdf', - 'content': force_text(base64.b64encode(JPEG_CONTENT)), + 'content': force_str(base64.b64encode(JPEG_CONTENT)), } params['cartegrise,6'] = { 'filename': 'cartegrise2.pdf', 'content_type': 'application/pdf', - 'content': force_text(base64.b64encode(b'%PDF carte grise 2')), + 'content': force_str(base64.b64encode(b'%PDF carte grise 2')), } params['taxe_habitat'] = { 'filename': 'cartegrise2.pdf', @@ -746,17 +746,17 @@ def test_send_files(dpark, app, settings, freezer): assert len(pj_node.findall('Bloc_Fichiers')) == 4 assert pj_node.findall('Bloc_Fichiers')[0].find('TypeDocument').text == '6' assert pj_node.findall('Bloc_Fichiers')[0].find('NomFichier').text == 'cartegrise.pdf' - assert pj_node.findall('Bloc_Fichiers')[0].find('Fichier').text == force_text( + assert pj_node.findall('Bloc_Fichiers')[0].find('Fichier').text == force_str( base64.b64encode(b'%PDF carte grise 1') ) assert pj_node.findall('Bloc_Fichiers')[1].find('TypeDocument').text == '6' assert pj_node.findall('Bloc_Fichiers')[1].find('NomFichier').text == 'cartegrise2.pdf' - assert pj_node.findall('Bloc_Fichiers')[1].find('Fichier').text == force_text( + assert pj_node.findall('Bloc_Fichiers')[1].find('Fichier').text == force_str( base64.b64encode(b'%PDF carte grise 2') ) assert pj_node.findall('Bloc_Fichiers')[2].find('TypeDocument').text == '2' assert pj_node.findall('Bloc_Fichiers')[2].find('NomFichier').text == 'address_proof.pDf' - assert pj_node.findall('Bloc_Fichiers')[2].find('Fichier').text == force_text( + assert pj_node.findall('Bloc_Fichiers')[2].find('Fichier').text == force_str( base64.b64encode(b'%PDF this is my proof of address') ) @@ -764,7 +764,7 @@ def test_send_files(dpark, app, settings, freezer): from passerelle.utils.conversion import to_pdf assert pj_node.findall('Bloc_Fichiers')[3].find('NomFichier').text == 'cartegrisetoto.jpg.pdf' - assert pj_node.findall('Bloc_Fichiers')[3].find('Fichier').text == force_text( + assert pj_node.findall('Bloc_Fichiers')[3].find('Fichier').text == force_str( base64.b64encode(to_pdf(JPEG_CONTENT)) ) assert base64.b64decode(pj_node.findall('Bloc_Fichiers')[3].find('Fichier').text).startswith(b'%PDF') diff --git a/tests/test_gesbac.py b/tests/test_gesbac.py index eac41623..d78b87fa 100644 --- a/tests/test_gesbac.py +++ b/tests/test_gesbac.py @@ -17,7 +17,7 @@ # along with this program. If not, see . import pytest -from django.utils.encoding import force_bytes, force_text +from django.utils.encoding import force_bytes, force_str from django.utils.timezone import now from passerelle.apps.gesbac.models import Gesbac @@ -175,8 +175,8 @@ def test_get_demand_response(app, resource, freezer, sftpserver): assert resource.form_set.filter(form_id='42-43', filename=response_filename, status='closed').count() == 0 # files are encoded in latin-1 - comment = force_text('propriétaire') - content = force_bytes(force_text('CARTE;%s;3;2;1234;;;;;;;;%s' % (gesbac_id, comment)), 'latin-1') + comment = force_str('propriétaire') + content = force_bytes(force_str('CARTE;%s;3;2;1234;;;;;;;;%s' % (gesbac_id, comment)), 'latin-1') with sftpserver.serve_content({'input': {response_filename: content}}): resource.hourly() diff --git a/tests/test_import_export.py b/tests/test_import_export.py index 22b45626..d88a3e85 100644 --- a/tests/test_import_export.py +++ b/tests/test_import_export.py @@ -12,7 +12,7 @@ from django.core.management import call_command from django.test import Client from django.urls import reverse from django.utils import timezone -from django.utils.encoding import force_bytes, force_text +from django.utils.encoding import force_bytes, force_str from passerelle.apps.base_adresse.models import BaseAdresse from passerelle.apps.bdp.models import Bdp @@ -44,7 +44,7 @@ data = """121;69981;DELANOUE;Eliot;H 216352;38;Dupont;Benoît;H """ -data_bom = force_text(data, 'utf-8').encode('utf-8-sig') +data_bom = force_str(data, 'utf-8').encode('utf-8-sig') SECTOR_CSV = """street_id,street_name,parity,min_housenumber,max_housenumber,sector_id,sector_name 75114_1912,rue du Château,P,,, gs-moulin, Groupe Scolaire Moulin""" diff --git a/tests/test_orange.py b/tests/test_orange.py index fce6217b..178f96cd 100644 --- a/tests/test_orange.py +++ b/tests/test_orange.py @@ -20,7 +20,7 @@ import json import httmock import pytest from django.contrib.contenttypes.models import ContentType -from django.utils.encoding import force_text +from django.utils.encoding import force_str from passerelle.apps.orange.models import OrangeError, OrangeSMSGateway from passerelle.base.models import AccessRight, ApiUser, Job @@ -57,7 +57,7 @@ def response_group_ok(url, request): @httmock.urlmatch(netloc=NETLOC, path='/api/v1.2/groups/gid2/diffusion-requests', method='POST') def response_diffusion_ok(url, request): assert request.headers['authorization'] == 'Bearer my_token' - request_body = json.loads(force_text(request.body)) + request_body = json.loads(force_str(request.body)) assert request_body['smsParam']['body'] == PAYLOAD['message'] assert 'senderName' not in request_body['smsParam'].keys() assert '33688888888' in request_body['msisdns'][0] @@ -168,7 +168,7 @@ def test_diffusion(app, connector): # sender name not allowed @httmock.urlmatch(netloc=NETLOC) def mocked_response2(url, request): - request_body = json.loads(force_text(request.body)) + request_body = json.loads(force_str(request.body)) assert request_body['smsParam']['senderName'] == 'john' error_response = [ { diff --git a/tests/test_sector.py b/tests/test_sector.py index 8a12c675..fee04f86 100644 --- a/tests/test_sector.py +++ b/tests/test_sector.py @@ -26,7 +26,7 @@ from django.core.exceptions import ValidationError from django.core.files import File from django.core.management import call_command from django.urls import reverse -from django.utils.encoding import force_str, force_text +from django.utils.encoding import force_str from django.utils.timezone import now import tests.utils @@ -44,7 +44,7 @@ CSV = """street_id,street_name,parity,min_housenumber,max_housenumber,sector_id, 75114_1915, ,,,,ecole-hugo2 , École Hugo 2 """ -CSV_BOM = force_str(force_text(CSV, 'utf-8').encode('utf-8-sig')) +CSV_BOM = force_str(force_str(CSV, 'utf-8').encode('utf-8-sig')) CSV_NO_FIRST_LINE = """75114_1912,rue du Château,P,,, gs-moulin, Groupe Scolaire Moulin 75114_1912,rue du Château,I,0,999999,gs-zola,Groupe Scolaire Zola diff --git a/tests/test_solis_afi_mss.py b/tests/test_solis_afi_mss.py index ba00bd00..d15354f6 100644 --- a/tests/test_solis_afi_mss.py +++ b/tests/test_solis_afi_mss.py @@ -20,7 +20,7 @@ import os import mock import pytest -from django.utils.encoding import force_text +from django.utils.encoding import force_str import tests.utils from passerelle.contrib.solis_afi_mss.models import SolisAfiMss @@ -708,7 +708,7 @@ def test_add_document(mocked_post, mocked_get, app, connector): 'document': { 'filename': '201x201.jpg', 'content_type': 'image/jpeg', - 'content': force_text(base64.b64encode(get_media_file('201x201.jpg'))), + 'content': force_str(base64.b64encode(get_media_file('201x201.jpg'))), }, } @@ -790,7 +790,7 @@ def test_add_document_wrong_code_ged(mocked_post, mocked_get, app, connector): 'document': { 'filename': '201x201.jpg', 'content_type': 'image/jpeg', - 'content': force_text(base64.b64encode(get_media_file('201x201.jpg'))), + 'content': force_str(base64.b64encode(get_media_file('201x201.jpg'))), }, } resp = app.post_json(endpoint + '?email=foo@dummy.org', params=payload) diff --git a/tests/test_toulouse_smart.py b/tests/test_toulouse_smart.py index e6a22884..386318eb 100644 --- a/tests/test_toulouse_smart.py +++ b/tests/test_toulouse_smart.py @@ -30,7 +30,7 @@ import mock import pytest from django.db import connection from django.db.migrations.executor import MigrationExecutor -from django.utils.encoding import force_text +from django.utils.encoding import force_str from requests.exceptions import ReadTimeout import tests.utils @@ -871,7 +871,7 @@ ADD_MEDIA_PAYLOAD = { 'files/0': { 'filename': '201x201.jpg', 'content_type': 'image/jpeg', - 'content': force_text(base64.b64encode(get_media_file('201x201.jpg'))), + 'content': force_str(base64.b64encode(get_media_file('201x201.jpg'))), }, 'files/1': None, } diff --git a/tests/test_utils_sftp.py b/tests/test_utils_sftp.py index 2e860b4f..b4a123e4 100644 --- a/tests/test_utils_sftp.py +++ b/tests/test_utils_sftp.py @@ -19,7 +19,7 @@ import os import pytest from django.core.files.uploadedfile import SimpleUploadedFile from django.db import models -from django.utils.encoding import force_text +from django.utils.encoding import force_str from passerelle.utils.sftp import SFTP, SFTPField, SFTPFormField @@ -94,7 +94,7 @@ def test_form_field(sftpserver, ssh_key, ssh_key_with_password): with form.cleaned_data['sftp'].client() as sftp: assert sftp.listdir() == ['a.zip'] - form = Form(data={'sftp_0': url, 'sftp_2': force_text(ssh_key, 'ascii')}) + form = Form(data={'sftp_0': url, 'sftp_2': force_str(ssh_key, 'ascii')}) assert form.is_valid() sftp = form.cleaned_data['sftp'] assert isinstance(sftp, SFTP) @@ -125,14 +125,14 @@ def test_form_field(sftpserver, ssh_key, ssh_key_with_password): with form.cleaned_data['sftp'].client() as sftp: assert sftp.listdir() == ['a.zip'] - form = Form(data={'sftp_0': url, 'sftp_2': force_text(ssh_key_with_password, 'ascii')}) + form = Form(data={'sftp_0': url, 'sftp_2': force_str(ssh_key_with_password, 'ascii')}) assert not form.is_valid() assert 'key invalid' in str(form.errors) form = Form( data={ 'sftp_0': url, - 'sftp_2': force_text(ssh_key_with_password, 'ascii'), + 'sftp_2': force_str(ssh_key_with_password, 'ascii'), 'sftp_3': 'coucou', } )