django4: replaced *_text with *_str equivalent (#68576)

This commit is contained in:
Agate 2022-08-31 10:21:14 +02:00
parent c53c6162ed
commit 1a17d3efa6
36 changed files with 104 additions and 105 deletions

View File

@ -21,7 +21,7 @@ import urllib
import lxml.etree import lxml.etree
from django.db import models from django.db import models
from django.utils import dateformat, dateparse 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 django.utils.translation import gettext_lazy as _
from zeep import helpers from zeep import helpers
from zeep.exceptions import Fault from zeep.exceptions import Fault
@ -61,7 +61,7 @@ class ATALConnector(BaseResource):
try: try:
return getattr(client.service, method)(**kwargs) return getattr(client.service, method)(**kwargs)
except Fault as e: except Fault as e:
raise APIError(force_text(e)) raise APIError(force_str(e))
def _basic_ref(self, wsdl, method): def _basic_ref(self, wsdl, method):
soap_res = self._soap_call(wsdl=wsdl, method=method) soap_res = self._soap_call(wsdl=wsdl, method=method)

View File

@ -38,7 +38,7 @@ from django.core.signing import Signer
from django.db import models from django.db import models
from django.http import HttpResponse from django.http import HttpResponse
from django.urls import reverse 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.timezone import now
from django.utils.translation import gettext_lazy as _ 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 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()) 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()) 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): def check_status(self):
self.soap_client().service.GetCommunes(self.get_token(), {}) self.soap_client().service.GetCommunes(self.get_token(), {})
@ -701,14 +701,14 @@ class AbstractCartaDSCS(BaseResource):
try: try:
pdf = pdfrw.PdfReader(request.FILES['files[]']) pdf = pdfrw.PdfReader(request.FILES['files[]'])
if not any(pdfrw.findobjs.find_objects(pdf, valid_subtypes=(pdfrw.PdfName.Form,))): 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): 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: else:
if request.FILES['files[]'].content_type not in ('application/pdf', 'image/jpeg'): 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: 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( file_upload = CartaDSFile(
tracking_code=tracking_code, id_piece=id_piece, uploaded_file=request.FILES['files[]'] tracking_code=tracking_code, id_piece=id_piece, uploaded_file=request.FILES['files[]']
) )

View File

@ -31,7 +31,7 @@ from django.core.exceptions import ValidationError
from django.core.files.base import ContentFile from django.core.files.base import ContentFile
from django.db import models, transaction from django.db import models, transaction
from django.urls import reverse 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.timezone import make_aware, now
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -286,7 +286,7 @@ class CsvDataSource(BaseResource):
if self.skip_header: if self.skip_header:
rows = rows[1:] 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(',')] titles = [t.strip() for t in self.columns_keynames.split(',')]
indexes = [titles.index(t) for t in titles if t] indexes = [titles.index(t) for t in titles if t]
captions = [titles[i] for i in indexes] captions = [titles[i] for i in indexes]
@ -317,7 +317,7 @@ class CsvDataSource(BaseResource):
@property @property
def titles(self): 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') @endpoint(perm='can_access', methods=['get'], name='data')
def data(self, request, **kwargs): def data(self, request, **kwargs):
@ -388,7 +388,7 @@ class CsvDataSource(BaseResource):
except (TypeError, SyntaxError) as e: except (TypeError, SyntaxError) as e:
data = { data = {
'expr': expr, 'expr': expr,
'error': smart_text(e), 'error': smart_str(e),
} }
if titles: if titles:
data['name'] = titles[i] data['name'] = titles[i]
@ -407,7 +407,7 @@ class CsvDataSource(BaseResource):
data = { data = {
'expr': expr, 'expr': expr,
'row': repr(row), 'row': repr(row),
'error': smart_text(e), 'error': smart_str(e),
} }
if titles: if titles:
data['name'] = titles[i] data['name'] = titles[i]
@ -463,7 +463,7 @@ class CsvDataSource(BaseResource):
if 'id' in request.GET and not model_filters_id: if 'id' in request.GET and not model_filters_id:
# always provide a ?id= filter. # 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]] data = [row for new_row, row in stream_expressions(filters, data, kind='filters') if new_row[0]]
# allow jsonp queries by select2 # allow jsonp queries by select2

View File

@ -20,14 +20,14 @@ import io
from decimal import Decimal from decimal import Decimal
from django.core.exceptions import ValidationError 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 django.utils.translation import gettext_lazy as _
from ..models import Invoice from ..models import Invoice
def u(s): def u(s):
return force_text(s, 'iso-8859-15') return force_str(s, 'iso-8859-15')
class Loader: class Loader:

View File

@ -22,7 +22,7 @@ from decimal import Decimal
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.core.files.storage import DefaultStorage from django.core.files.storage import DefaultStorage
from django.utils import timezone 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 django.utils.translation import gettext_lazy as _
from ..models import Adult, Child, Family, Invoice, dict_cherry_pick, get_date, get_datetime 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 # pylint: disable=stop-iteration-return
titles = [x.lower() for x in next(reader)] titles = [x.lower() for x in next(reader)]
for row in 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)) yield dict(zip(titles, row))
def build_families(self): def build_families(self):

View File

@ -20,14 +20,14 @@ import io
from decimal import Decimal from decimal import Decimal
from django.core.exceptions import ValidationError 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 django.utils.translation import gettext_lazy as _
from ..models import Invoice from ..models import Invoice
def u(s): def u(s):
return force_text(s, 'iso-8859-15') return force_str(s, 'iso-8859-15')
class Loader: class Loader:

View File

@ -22,7 +22,7 @@ except ImportError:
phpserialize = None phpserialize = None
from django.db import models 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 django.utils.translation import gettext_lazy as _
from passerelle.base.models import BaseResource from passerelle.base.models import BaseResource
@ -43,7 +43,7 @@ def deep_bytes2str(obj):
if isinstance(obj, dict): if isinstance(obj, dict):
new_d = {} new_d = {}
for k, v in obj.items(): 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 new_d
return obj return obj
@ -68,7 +68,7 @@ class Gdc(BaseResource):
def call_soap(self, action, *args, **kwargs): def call_soap(self, action, *args, **kwargs):
def escape(s): def escape(s):
return force_text(s).replace('&', '&amp;').replace('>', '&gt;').replace('<', '&lt;') return force_str(s).replace('&', '&amp;').replace('>', '&gt;').replace('<', '&lt;')
params = [] params = []
for i, arg in enumerate(args): for i, arg in enumerate(args):
@ -116,7 +116,7 @@ class Gdc(BaseResource):
soap_result = phpserialize_loads(resp.findall('.//listeCommune')[0].text) soap_result = phpserialize_loads(resp.findall('.//listeCommune')[0].text)
result = [] result = []
for k, v in soap_result.items(): 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']) result.sort(key=lambda x: x['id'])
return result return result
@ -126,6 +126,6 @@ class Gdc(BaseResource):
soap_result = phpserialize_loads(resp.findall('.//listeObjet')[0].text) soap_result = phpserialize_loads(resp.findall('.//listeObjet')[0].text)
result = [] result = []
for k, v in soap_result.items(): 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']) result.sort(key=lambda x: x['id'])
return result return result

View File

@ -17,7 +17,7 @@
import json 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.base import View
from django.views.generic.detail import DetailView, SingleObjectMixin from django.views.generic.detail import DetailView, SingleObjectMixin
@ -177,7 +177,7 @@ class PostDemandeView(View, SingleObjectMixin):
except IOError: except IOError:
result = {'result': 'gdc soap crash'} result = {'result': 'gdc soap crash'}
else: 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 = phpserialize_loads(resp.findall('.//listeInfo')[0].text)
result = { result = {
'result': code_retour, 'result': code_retour,

View File

@ -12,7 +12,7 @@ from django.core.mail import send_mail
from django.db import models from django.db import models
from django.template.loader import render_to_string from django.template.loader import render_to_string
from django.utils import timezone 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 django.utils.translation import gettext_lazy as _
from passerelle.base.models import SkipJob from passerelle.base.models import SkipJob
@ -235,7 +235,7 @@ class OVHSMSGateway(SMSResource):
if not self.password: if not self.password:
raise APIError('Improperly configured, empty keys or password fields.') 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) to = ','.join(destinations)
params = { params = {
'account': self.account.encode('utf-8'), 'account': self.account.encode('utf-8'),

View File

@ -1,6 +1,6 @@
import requests import requests
from django.db import models 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 django.utils.translation import gettext_lazy as _
from passerelle.sms.models import SMSResource from passerelle.sms.models import SMSResource
@ -61,7 +61,7 @@ class OxydSMSGateway(SMSResource):
results.append('OXYD error: POST failed, %s' % e) results.append('OXYD error: POST failed, %s' % e)
else: else:
code = r.content and r.content.split()[0] 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') results.append('OXYD error: response is not 200')
else: else:
results.append(0) results.append(0)

View File

@ -25,7 +25,7 @@ from django.core.files.base import ContentFile
from django.db import models, transaction from django.db import models, transaction
from django.db.models import Q from django.db.models import Q
from django.http import HttpResponse 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.timezone import now
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -166,7 +166,7 @@ class SectorResource(BaseResource):
for row in reader: for row in reader:
if not row: if not row:
continue # do not consider empty lines 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)} row = {caption: get_cell(row, index) for caption, index in zip(captions, indexes)}
if row['sector_id']: if row['sector_id']:

View File

@ -20,7 +20,7 @@ import json
from django.db import models from django.db import models
from django.template.loader import get_template 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.http import urlencode
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -502,7 +502,7 @@ class Solis(BaseResource):
try: try:
value = self.request(endpoint) value = self.request(endpoint)
except APIError as e: # do not raise on linked informations 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 link['content'] = value
def rsa_get_links(self, information, links): def rsa_get_links(self, information, links):

View File

@ -27,7 +27,7 @@ from django.forms.widgets import ClearableFileInput
from django.test import override_settings from django.test import override_settings
from django.urls import reverse from django.urls import reverse
from django.utils import timezone 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.log import AdminEmailHandler
from django.utils.text import slugify from django.utils.text import slugify
from django.utils.timezone import now from django.utils.timezone import now
@ -373,7 +373,7 @@ class BaseResource(models.Model):
if value: if value:
d[field.name] = { d[field.name] = {
'name': os.path.basename(value.name), 'name': os.path.basename(value.name),
'content': force_text(base64.b64encode(value.read())), 'content': force_str(base64.b64encode(value.read())),
} }
else: else:
d[field.name] = None d[field.name] = None

View File

@ -1,7 +1,7 @@
import csv import csv
from django.db import models 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 django.utils.translation import gettext_lazy as _
from passerelle.base.models import BaseResource from passerelle.base.models import BaseResource
@ -14,7 +14,7 @@ COLUMN_NAMES = (
def to_unicode(value): def to_unicode(value):
return force_text(value, 'utf-8') return force_str(value, 'utf-8')
def upload_to(instance, filename): def upload_to(instance, filename):
@ -50,7 +50,7 @@ class NancyPoll(BaseResource):
content = self.csv_file.read() content = self.csv_file.read()
if not content: if not content:
raise APIError('No content found') raise APIError('No content found')
content = force_text(content) content = force_str(content)
reader = csv.reader(content.splitlines()) reader = csv.reader(content.splitlines())
next(reader) next(reader)

View File

@ -19,7 +19,7 @@ import json
from urllib import parse as urlparse from urllib import parse as urlparse
from django.db import models 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 django.utils.translation import gettext_lazy as _
from requests import RequestException from requests import RequestException
@ -114,7 +114,7 @@ class StrasbourgEu(BaseResource):
notification['parsedPublicationDate'] = None notification['parsedPublicationDate'] = None
for date_format in ('%Y-%m-%d %H:%M:%S', '%a %b %d %H:%M:%S %Z %Y'): for date_format in ('%Y-%m-%d %H:%M:%S', '%a %b %d %H:%M:%S %Z %Y'):
try: try:
notification['parsedPublicationDate'] = force_text( notification['parsedPublicationDate'] = force_str(
datetime.datetime.strptime(notification['publicationDate'], date_format) datetime.datetime.strptime(notification['publicationDate'], date_format)
) )
break break

View File

@ -23,7 +23,7 @@ from datetime import datetime
from django.contrib.postgres.fields import JSONField from django.contrib.postgres.fields import JSONField
from django.db import models from django.db import models
from django.http import HttpResponse, HttpResponseNotFound 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 django.utils.translation import gettext_lazy as _
from passerelle.base.models import BaseResource from passerelle.base.models import BaseResource
@ -86,11 +86,11 @@ class TeamnetAxel(BaseResource):
portail = ET.Element('PORTAIL') portail = ET.Element('PORTAIL')
portail.append(args) portail.append(args)
streamId = operation streamId = operation
xmlParams = smart_text(ET.tostring(portail, encoding='UTF-8')) xmlParams = smart_str(ET.tostring(portail, encoding='UTF-8'))
user = '' user = ''
logger.debug('getData(streamId=%s, xmlParams=%s, user=%s)', streamId, xmlParams, 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) result = soap.get_client(self).service.getData(streamId, smart_str(xmlParams), user)
logger.debug('getData(%s) result: %s', streamId, smart_text(result)) logger.debug('getData(%s) result: %s', streamId, smart_str(result))
xml_result = ET.fromstring(result) xml_result = ET.fromstring(result)
if xml_result.find('RESULTAT/STATUS').text != 'OK': if xml_result.find('RESULTAT/STATUS').text != 'OK':
msg = xml_result.find('RESULTAT/COMMENTAIRES').text msg = xml_result.find('RESULTAT/COMMENTAIRES').text

View File

@ -24,7 +24,7 @@ from collections import namedtuple
import pytz import pytz
import xmlschema import xmlschema
from django.utils.encoding import force_text from django.utils.encoding import force_str
from passerelle.utils.xml import JSONSchemaFromXMLSchema from passerelle.utils.xml import JSONSchemaFromXMLSchema
@ -234,7 +234,7 @@ class Operation:
except xmlschema.XMLSchemaValidationError as e: except xmlschema.XMLSchemaValidationError as e:
raise AxelError('invalid request %s' % str(e)) raise AxelError('invalid request %s' % str(e))
indent(serialized_request) indent(serialized_request)
serialized_request = force_text(ET.tostring(serialized_request)) serialized_request = force_str(ET.tostring(serialized_request))
try: try:
self.request_converter.xml_schema.validate(serialized_request) self.request_converter.xml_schema.validate(serialized_request)
except xmlschema.XMLSchemaValidationError as e: except xmlschema.XMLSchemaValidationError as e:
@ -246,7 +246,7 @@ class Operation:
xml_result = ET.fromstring(result.encode('utf-8')) xml_result = ET.fromstring(result.encode('utf-8'))
indent(xml_result) 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': if xml_result.find('RESULTAT/STATUS').text != 'OK':
msg = xml_result.find('RESULTAT/COMMENTAIRES').text msg = xml_result.find('RESULTAT/COMMENTAIRES').text
raise AxelError(msg, xml_request=serialized_request, xml_response=pretty_result) raise AxelError(msg, xml_request=serialized_request, xml_response=pretty_result)

View File

@ -1,5 +1,5 @@
import suds.sudsobject import suds.sudsobject
from django.utils.encoding import force_text from django.utils.encoding import force_str
def client_to_jsondict(client): def client_to_jsondict(client):
@ -17,7 +17,7 @@ def client_to_jsondict(client):
d['types'] = {} d['types'] = {}
for t in sd.types: for t in sd.types:
ft = client.factory.create(sd.xlate(t[0])) 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 res[sd.service.name] = d
return res return res

View File

@ -31,7 +31,7 @@ from django.core.cache import cache
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.db import transaction from django.db import transaction
from django.http import HttpResponse, HttpResponseBadRequest 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.functional import lazy
from django.utils.html import mark_safe from django.utils.html import mark_safe
from django.utils.translation import ngettext_lazy from django.utils.translation import ngettext_lazy
@ -98,7 +98,7 @@ def get_request_users(request):
if scheme == 'basic' and len(http_authorization) > 1: if scheme == 'basic' and len(http_authorization) > 1:
param = http_authorization[1] param = http_authorization[1]
try: try:
decoded = force_text(base64.b64decode(force_bytes(param.strip()))) decoded = force_str(base64.b64decode(force_bytes(param.strip())))
username, password = decoded.split(':', 1) username, password = decoded.split(':', 1)
except (TypeError, ValueError): except (TypeError, ValueError):
pass pass
@ -190,8 +190,7 @@ def content_type_match(ctype):
def make_headers_safe(headers): def make_headers_safe(headers):
"""Convert dict of HTTP headers to text safely, as some services returns 8-bits encoding in headers.""" """Convert dict of HTTP headers to text safely, as some services returns 8-bits encoding in headers."""
return { return {
force_text(key, errors='replace'): force_text(value, errors='replace') force_str(key, errors='replace'): force_str(value, errors='replace') for key, value in headers.items()
for key, value in headers.items()
} }

View File

@ -22,7 +22,7 @@ import warnings
from io import BytesIO from io import BytesIO
import unidecode import unidecode
from django.utils.encoding import force_text from django.utils.encoding import force_str
from PIL import Image from PIL import Image
@ -68,7 +68,7 @@ def ensure_encoding(s, encoding):
def to_ascii(s): def to_ascii(s):
return force_text(unidecode.unidecode(s), 'ascii') return force_str(unidecode.unidecode(s), 'ascii')
def exception_to_text(e): def exception_to_text(e):
@ -105,7 +105,7 @@ def simplify(s):
""" """
if not s: if not s:
return '' return ''
s = force_text(s, 'utf-8', 'ignore') s = force_str(s, 'utf-8', 'ignore')
s = normalize(s) s = normalize(s)
s = re.sub(r'[^\w\s\'-]', '', s) s = re.sub(r'[^\w\s\'-]', '', s)
s = re.sub(r'[\s\'_-]+', ' ', s) s = re.sub(r'[\s\'_-]+', ' ', s)

View File

@ -21,7 +21,7 @@ import time
from urllib import parse as urlparse from urllib import parse as urlparse
from uuid import uuid4 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 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.headers.get('Content-Type', '') + '\n'))
p_hash.update(force_bytes(req.body or '')) p_hash.update(force_bytes(req.body or ''))
p_hash.update(force_bytes('\n')) 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): def get_authorization_header(self, req):
url_parts = urlparse.urlparse(req.url) url_parts = urlparse.urlparse(req.url)
@ -67,9 +67,9 @@ class HawkAuth(AuthBase):
] ]
digestmod = getattr(hashlib, self.algorithm) digestmod = getattr(hashlib, self.algorithm)
result = hmac.new(force_bytes(self.key), force_bytes('\n'.join(data)), digestmod) 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"' % ( authorization = 'Hawk id="%s", ts="%s", nonce="%s", hash="%s", mac="%s"' % (
force_text(self.id), force_str(self.id),
self.timestamp, self.timestamp,
self.nonce, self.nonce,
hash, hash,

View File

@ -16,7 +16,7 @@ from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
from django.core.serializers.json import DjangoJSONEncoder from django.core.serializers.json import DjangoJSONEncoder
from django.http import Http404, HttpResponse, HttpResponseBadRequest from django.http import Http404, HttpResponse, HttpResponseBadRequest
from django.http.response import HttpResponseBase 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 django.utils.log import log_response
from requests import HTTPError, RequestException from requests import HTTPError, RequestException
@ -78,7 +78,7 @@ class to_json:
err_class = err_module + err.__class__.__name__ err_class = err_module + err.__class__.__name__
err_desc = force_text(err) err_desc = force_str(err)
response = { response = {
"err": 1, "err": 1,

View File

@ -27,7 +27,7 @@ import paramiko
from django import forms from django import forms
from django.core import validators from django.core import validators
from django.db import models 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 django.utils.translation import gettext_lazy as _
from paramiko.dsskey import DSSKey from paramiko.dsskey import DSSKey
from paramiko.ecdsakey import ECDSAKey from paramiko.ecdsakey import ECDSAKey
@ -71,7 +71,7 @@ class SFTP:
self.hostname = parsed.hostname self.hostname = parsed.hostname
self.port = parsed.port or 22 self.port = parsed.port or 22
self.path = parsed.path.strip('/') 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 self.private_key_password = private_key_password
if private_key_content: if private_key_content:
self.private_key = _load_private_key(private_key_content, private_key_password) self.private_key = _load_private_key(private_key_content, private_key_password)

View File

@ -35,7 +35,7 @@ from django.db.models import Q
from django.http import Http404, HttpResponse, HttpResponseRedirect from django.http import Http404, HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, resolve_url from django.shortcuts import get_object_or_404, resolve_url
from django.urls import reverse 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.timezone import is_naive, make_aware
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
@ -103,7 +103,7 @@ def menu_json(request):
json_str = json.dumps( json_str = json.dumps(
[ [
{ {
'label': force_text(label), 'label': force_str(label),
'slug': 'passerelle', 'slug': 'passerelle',
'url': request.build_absolute_uri(reverse('manage-home')), 'url': request.build_absolute_uri(reverse('manage-home')),
} }

View File

@ -6,7 +6,7 @@ import re
import mock import mock
import pytest 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 django.utils.http import urlencode
from requests import Request from requests import Request
from requests.exceptions import ConnectionError from requests.exceptions import ConnectionError
@ -327,7 +327,7 @@ def test_association_creation(
assert data['StatutTiers'] == 'PROPOSE' assert data['StatutTiers'] == 'PROPOSE'
assert data['Type'] == '*' assert data['Type'] == '*'
assert data['AdresseTitre'] == 'AdressePrincipale' 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['Sigle'] == 'EO'
assert data['AdresseIsAdresseDeCommande'] == 'false' assert data['AdresseIsAdresseDeCommande'] == 'false'
assert data['AdresseIsAdresseDeFacturation'] == 'false' assert data['AdresseIsAdresseDeFacturation'] == 'false'

View File

@ -18,7 +18,7 @@ from cmislib.exceptions import (
) )
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.urls import reverse 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 mock import Mock, call
from passerelle.apps.cmis.models import CmisConnector from passerelle.apps.cmis.models import CmisConnector
@ -27,7 +27,7 @@ from tests.test_manager import login
def b64encode(content): def b64encode(content):
return force_text(base64.b64encode(force_bytes(content))) return force_str(base64.b64encode(force_bytes(content)))
@pytest.fixture() @pytest.fixture()

View File

@ -5,7 +5,7 @@ import base64
import pytest import pytest
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.utils.encoding import force_text from django.utils.encoding import force_str
import tests.utils import tests.utils
from passerelle.apps.cryptor.models import CryptedFile, Cryptor from passerelle.apps.cryptor.models import CryptedFile, Cryptor
@ -132,7 +132,7 @@ def test_cryptor_encrypt_decrypt(app, cryptor):
# encrypt # encrypt
endpoint = tests.utils.generic_endpoint_url('cryptor', 'file-encrypt', slug=cryptor.slug) 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}} payload = {"file": {"filename": "foo.txt", "content_type": "text/plain", "content": content}}
resp = app.post_json(endpoint, params=payload, status=200) resp = app.post_json(endpoint, params=payload, status=200)

View File

@ -35,7 +35,7 @@ from django.core.files.storage import default_storage
from django.core.management import call_command from django.core.management import call_command
from django.test import Client, override_settings from django.test import Client, override_settings
from django.urls import reverse 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 django.utils.timezone import now
from passerelle.apps.csvdatasource.models import CsvDataSource, Query, TableRow, upload_to 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 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 pytestmark = pytest.mark.django_db

View File

@ -6,7 +6,7 @@ import xml.etree.ElementTree as ET
import httmock import httmock
import mock import mock
import pytest 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 Fault as WebFault
from zeep.exceptions import TransportError from zeep.exceptions import TransportError
@ -653,7 +653,7 @@ def test_registration(dpark, app, application_thirdparty_subscription):
</SOAP-ENV:Envelope>""" </SOAP-ENV:Envelope>"""
) )
resp = app.post_json(url, params=params) 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']['numerodossier'] == 22334
assert resp.json['data']['numerodemande'] == 59492 assert resp.json['data']['numerodemande'] == 59492
@ -677,22 +677,22 @@ def test_send_files(dpark, app, settings, freezer):
params['justif_domicile'] = { params['justif_domicile'] = {
'filename': 'address_proof.pDf', 'filename': 'address_proof.pDf',
'content_type': 'application/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'] = { params['cartegrise,1'] = {
'filename': 'cartegrise.pdf', 'filename': 'cartegrise.pdf',
'content_type': 'application/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'] = { params['toto,6'] = {
'filename': 'cartegrisetoto.jpg', 'filename': 'cartegrisetoto.jpg',
'content_type': 'application/pdf', 'content_type': 'application/pdf',
'content': force_text(base64.b64encode(JPEG_CONTENT)), 'content': force_str(base64.b64encode(JPEG_CONTENT)),
} }
params['cartegrise,6'] = { params['cartegrise,6'] = {
'filename': 'cartegrise2.pdf', 'filename': 'cartegrise2.pdf',
'content_type': 'application/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'] = { params['taxe_habitat'] = {
'filename': 'cartegrise2.pdf', 'filename': 'cartegrise2.pdf',
@ -746,17 +746,17 @@ def test_send_files(dpark, app, settings, freezer):
assert len(pj_node.findall('Bloc_Fichiers')) == 4 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('TypeDocument').text == '6'
assert pj_node.findall('Bloc_Fichiers')[0].find('NomFichier').text == 'cartegrise.pdf' 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') 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('TypeDocument').text == '6'
assert pj_node.findall('Bloc_Fichiers')[1].find('NomFichier').text == 'cartegrise2.pdf' 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') 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('TypeDocument').text == '2'
assert pj_node.findall('Bloc_Fichiers')[2].find('NomFichier').text == 'address_proof.pDf' 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') 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 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('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)) base64.b64encode(to_pdf(JPEG_CONTENT))
) )
assert base64.b64decode(pj_node.findall('Bloc_Fichiers')[3].find('Fichier').text).startswith(b'%PDF') assert base64.b64decode(pj_node.findall('Bloc_Fichiers')[3].find('Fichier').text).startswith(b'%PDF')

View File

@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import pytest 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 django.utils.timezone import now
from passerelle.apps.gesbac.models import Gesbac 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 assert resource.form_set.filter(form_id='42-43', filename=response_filename, status='closed').count() == 0
# files are encoded in latin-1 # files are encoded in latin-1
comment = force_text('propriétaire') comment = force_str('propriétaire')
content = force_bytes(force_text('CARTE;%s;3;2;1234;;;;;;;;%s' % (gesbac_id, comment)), 'latin-1') content = force_bytes(force_str('CARTE;%s;3;2;1234;;;;;;;;%s' % (gesbac_id, comment)), 'latin-1')
with sftpserver.serve_content({'input': {response_filename: content}}): with sftpserver.serve_content({'input': {response_filename: content}}):
resource.hourly() resource.hourly()

View File

@ -12,7 +12,7 @@ from django.core.management import call_command
from django.test import Client from django.test import Client
from django.urls import reverse from django.urls import reverse
from django.utils import timezone 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.base_adresse.models import BaseAdresse
from passerelle.apps.bdp.models import Bdp from passerelle.apps.bdp.models import Bdp
@ -44,7 +44,7 @@ data = """121;69981;DELANOUE;Eliot;H
216352;38;Dupont;Benoît;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 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""" 75114_1912,rue du Château,P,,, gs-moulin, Groupe Scolaire Moulin"""

View File

@ -20,7 +20,7 @@ import json
import httmock import httmock
import pytest import pytest
from django.contrib.contenttypes.models import ContentType 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.apps.orange.models import OrangeError, OrangeSMSGateway
from passerelle.base.models import AccessRight, ApiUser, Job 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') @httmock.urlmatch(netloc=NETLOC, path='/api/v1.2/groups/gid2/diffusion-requests', method='POST')
def response_diffusion_ok(url, request): def response_diffusion_ok(url, request):
assert request.headers['authorization'] == 'Bearer my_token' 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 request_body['smsParam']['body'] == PAYLOAD['message']
assert 'senderName' not in request_body['smsParam'].keys() assert 'senderName' not in request_body['smsParam'].keys()
assert '33688888888' in request_body['msisdns'][0] assert '33688888888' in request_body['msisdns'][0]
@ -168,7 +168,7 @@ def test_diffusion(app, connector):
# sender name not allowed # sender name not allowed
@httmock.urlmatch(netloc=NETLOC) @httmock.urlmatch(netloc=NETLOC)
def mocked_response2(url, request): 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' assert request_body['smsParam']['senderName'] == 'john'
error_response = [ error_response = [
{ {

View File

@ -26,7 +26,7 @@ from django.core.exceptions import ValidationError
from django.core.files import File from django.core.files import File
from django.core.management import call_command from django.core.management import call_command
from django.urls import reverse 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 from django.utils.timezone import now
import tests.utils 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 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 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 75114_1912,rue du Château,I,0,999999,gs-zola,Groupe Scolaire Zola

View File

@ -20,7 +20,7 @@ import os
import mock import mock
import pytest import pytest
from django.utils.encoding import force_text from django.utils.encoding import force_str
import tests.utils import tests.utils
from passerelle.contrib.solis_afi_mss.models import SolisAfiMss from passerelle.contrib.solis_afi_mss.models import SolisAfiMss
@ -708,7 +708,7 @@ def test_add_document(mocked_post, mocked_get, app, connector):
'document': { 'document': {
'filename': '201x201.jpg', 'filename': '201x201.jpg',
'content_type': 'image/jpeg', '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': { 'document': {
'filename': '201x201.jpg', 'filename': '201x201.jpg',
'content_type': 'image/jpeg', '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) resp = app.post_json(endpoint + '?email=foo@dummy.org', params=payload)

View File

@ -30,7 +30,7 @@ import mock
import pytest import pytest
from django.db import connection from django.db import connection
from django.db.migrations.executor import MigrationExecutor 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 from requests.exceptions import ReadTimeout
import tests.utils import tests.utils
@ -871,7 +871,7 @@ ADD_MEDIA_PAYLOAD = {
'files/0': { 'files/0': {
'filename': '201x201.jpg', 'filename': '201x201.jpg',
'content_type': 'image/jpeg', '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, 'files/1': None,
} }

View File

@ -19,7 +19,7 @@ import os
import pytest import pytest
from django.core.files.uploadedfile import SimpleUploadedFile from django.core.files.uploadedfile import SimpleUploadedFile
from django.db import models 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 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: with form.cleaned_data['sftp'].client() as sftp:
assert sftp.listdir() == ['a.zip'] 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() assert form.is_valid()
sftp = form.cleaned_data['sftp'] sftp = form.cleaned_data['sftp']
assert isinstance(sftp, 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: with form.cleaned_data['sftp'].client() as sftp:
assert sftp.listdir() == ['a.zip'] 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 not form.is_valid()
assert 'key invalid' in str(form.errors) assert 'key invalid' in str(form.errors)
form = Form( form = Form(
data={ data={
'sftp_0': url, 'sftp_0': url,
'sftp_2': force_text(ssh_key_with_password, 'ascii'), 'sftp_2': force_str(ssh_key_with_password, 'ascii'),
'sftp_3': 'coucou', 'sftp_3': 'coucou',
} }
) )