diff --git a/tests/test_nanterre.py b/tests/test_nanterre.py index 4735873..b6da781 100644 --- a/tests/test_nanterre.py +++ b/tests/test_nanterre.py @@ -11,7 +11,6 @@ import pytest import httmock from django.urls import reverse -from django.utils.encoding import force_text from django.utils.http import urlencode from django.utils.timezone import now @@ -1294,7 +1293,7 @@ def test_passage_a_la_majorite(db, settings, nanterre_classic_family, freezer): Job.redo(timestamp=now() + datetime.timedelta(seconds=20)) assert len(requests) == 1 - req_content = json.loads(force_text(requests[0].body)) + req_content = json.loads(requests[0].body) assert req_content['metadonnees']['service'] == 'passage-majorite' assert len(req_content['fragments']) == 3 assert req_content['fragments'][0]['type'] == 'maj-adresse' diff --git a/tests/test_nanterre_fragments.py b/tests/test_nanterre_fragments.py index 5296409..26988be 100644 --- a/tests/test_nanterre_fragments.py +++ b/tests/test_nanterre_fragments.py @@ -4,7 +4,6 @@ import json import httmock from django.urls import reverse -from django.utils.encoding import force_text from zoo.zoo_nanterre.fragments import Synchronization from zoo.models import Job @@ -29,7 +28,7 @@ def test_synchro_full(app, nanterre_classic_family): @httmock.urlmatch() def technocarte_ok(url, request): - request_bodies.append(json.loads(force_text(request.body))) + request_bodies.append(json.loads(request.body)) return httmock.response( 200, [ { @@ -228,7 +227,7 @@ def test_infor(app, nanterre_classic_family): @httmock.urlmatch() def infor_ok(url, request): - request_bodies.append(json.loads(force_text(request.body))) + request_bodies.append(json.loads(request.body)) return httmock.response( 200, { 'http_code': 200, @@ -277,7 +276,7 @@ def test_infor(app, nanterre_classic_family): @httmock.urlmatch() def infor_nok(url, request): - request_bodies.append(json.loads(force_text(request.body))) + request_bodies.append(json.loads(request.body)) return httmock.response( 200, { 'http_code': 500, diff --git a/zoo/utils.py b/zoo/utils.py index b49853c..3e36386 100644 --- a/zoo/utils.py +++ b/zoo/utils.py @@ -16,8 +16,6 @@ import unicodedata -from django.utils.encoding import force_text - from rest_framework.views import exception_handler from rest_framework.response import Response @@ -33,8 +31,8 @@ def rest_exception_handler(exc, context): raise response = Response({ 'err': 1, - 'exc_class': force_text(exc.__class__), - 'exc_value': force_text(exc), + 'exc_class': str(exc.__class__), + 'exc_value': str(exc), }) response.status = 400 return response diff --git a/zoo/zoo_data/models.py b/zoo/zoo_data/models.py index 7de4228..2c02446 100644 --- a/zoo/zoo_data/models.py +++ b/zoo/zoo_data/models.py @@ -27,7 +27,6 @@ from django.db.models import F, Value from django.db.models.query import QuerySet, Q from django.core.exceptions import ValidationError from django.urls import reverse -from django.utils.encoding import force_text from django.utils.translation import gettext_lazy as _ from django.utils.timezone import now from django.contrib.postgres.fields import JSONField @@ -52,7 +51,7 @@ class Transaction(models.Model): null=True) def __str__(self): - return force_text(self.id) + return str(self.id) @classmethod def get_transaction(self): @@ -100,7 +99,7 @@ class CommonData(models.Model): raise ValidationError({'content': e}) def __str__(self): - return force_text(self.id) + return str(self.id) class Meta: abstract = True @@ -330,7 +329,7 @@ class Job(models.Model): job.state = cls.STATE_UNRECOVERABLE_ERROR error = job.content.setdefault('error', {}) error['code'] = 'internal-server-error' - error['exc_detail'] = force_text(e) + error['exc_detail'] = str(e) error['exc_tb'] = traceback.format_exc() job.get_logger().exception('exception during job %s', job.admin_url) job.save() @@ -362,7 +361,7 @@ class Job(models.Model): url = self.admin_url self.get_logger().exception('exception during job %s', url) self.state = self.STATE_UNRECOVERABLE_ERROR - self.content['$exc_detail'] = force_text(e) + self.content['$exc_detail'] = str(e) self.content['$exc_tb'] = traceback.format_exc() self.content['$classpath'] = self.get_classpath(action) self.save() diff --git a/zoo/zoo_meta/management/commands/zoo-rebuild-indexes.py b/zoo/zoo_meta/management/commands/zoo-rebuild-indexes.py index e55e553..209d27f 100644 --- a/zoo/zoo_meta/management/commands/zoo-rebuild-indexes.py +++ b/zoo/zoo_meta/management/commands/zoo-rebuild-indexes.py @@ -16,7 +16,6 @@ from __future__ import print_function from django.core.management.base import BaseCommand -from django.utils.encoding import force_text from zoo.zoo_meta.models import EntitySchema @@ -25,7 +24,7 @@ class Command(BaseCommand): def handle(self, *args, **options): for schema in EntitySchema.objects.all(): if options['verbosity'] >= 1: - print('Rebuilding index for', force_text(schema), end=' ') + print('Rebuilding index for', schema, end=' ') schema.rebuild_indexes() if options['verbosity'] >= 1: print(' Done.') diff --git a/zoo/zoo_meta/models.py b/zoo/zoo_meta/models.py index a832c9f..5b88baf 100644 --- a/zoo/zoo_meta/models.py +++ b/zoo/zoo_meta/models.py @@ -18,7 +18,7 @@ from hashlib import md5 from django.apps import apps from django.db import models, connection -from django.utils.encoding import force_bytes, force_text +from django.utils.encoding import force_bytes from django.utils.translation import gettext_lazy as _ from django.contrib.postgres.fields import JSONField @@ -147,8 +147,8 @@ class CommonSchema(models.Model): try: return eval(self.caption_template, {}, value.content) except Exception as e: - return force_text(e) - return force_text(value.id) + return str(e) + return str(value.id) class Meta: abstract = True diff --git a/zoo/zoo_nanterre/api_views.py b/zoo/zoo_nanterre/api_views.py index f8eafc2..ae44090 100644 --- a/zoo/zoo_nanterre/api_views.py +++ b/zoo/zoo_nanterre/api_views.py @@ -32,7 +32,6 @@ from django.db.models.query import Q from django.db.transaction import non_atomic_requests, atomic from django.urls import reverse from django.http import Http404, HttpResponse -from django.utils.encoding import force_text from django.utils.timezone import now from django.utils.http import urlencode @@ -135,7 +134,7 @@ class TransactionalView(APIView): content = { 'request': self.request.data, 'status_code': 500, - '$exc_detail': force_text(exc), + '$exc_detail': str(exc), '$exc_tb': traceback.format_exc(), } self.transaction.content = content @@ -2055,7 +2054,7 @@ class FalsePositiveView(DoublonActionView): except AssertionError as e: return Response({ 'err': 1, - 'errors': force_text(e), + 'errors': str(e), }, status=500) @@ -2096,7 +2095,7 @@ class DedupView(DoublonActionView): except AssertionError as e: return Response({ 'err': 1, - 'errors': force_text(e), + 'errors': str(e), }, status=500) dedup = DedupView.as_view() diff --git a/zoo/zoo_nanterre/forms.py b/zoo/zoo_nanterre/forms.py index e300ea7..d0ae0c5 100644 --- a/zoo/zoo_nanterre/forms.py +++ b/zoo/zoo_nanterre/forms.py @@ -15,7 +15,6 @@ # along with this program. If not, see . from django import forms -from django.utils.encoding import force_text from django.utils.translation import gettext_lazy as _ from django.core.exceptions import ValidationError @@ -63,13 +62,15 @@ class SynchronizeFederationsForm(forms.Form): def clean_csv_uploaded(self): csv_uploaded = self.cleaned_data['csv_uploaded'] errors = [] + csv_uploaded.seek(0) for i, line in enumerate(csv_uploaded): try: - force_text(line).encode('ascii') - # works with pyhton2 and 3 - except (UnicodeEncodeError, UnicodeDecodeError) as e: + line.decode('ascii') + except UnicodeError as e: errors.append(_(u'non-ASCII character on line {0} and column {1}').format( i + 1, e.start + 1)) + # restore file state + csv_uploaded.seek(0) if errors: raise ValidationError(errors) return csv_uploaded diff --git a/zoo/zoo_nanterre/fragments.py b/zoo/zoo_nanterre/fragments.py index 795f7b4..bc228b8 100644 --- a/zoo/zoo_nanterre/fragments.py +++ b/zoo/zoo_nanterre/fragments.py @@ -5,7 +5,6 @@ import datetime import requests from requests.exceptions import RequestException -from django.utils.encoding import force_text from django.utils.timezone import now from django.conf import settings from django.db import DatabaseError @@ -204,7 +203,7 @@ class FragmentBuilder(object): error_detail = u'erreur réseau/SSL ou expiration' self.error = { 'code': 'transport-error', - 'detail': force_text(e), + 'detail': str(e), } state = self.state_on_network_error else: diff --git a/zoo/zoo_nanterre/qf.py b/zoo/zoo_nanterre/qf.py index 44f81ce..5153288 100644 --- a/zoo/zoo_nanterre/qf.py +++ b/zoo/zoo_nanterre/qf.py @@ -8,7 +8,6 @@ from zoo.models import Job import requests -from django.utils.encoding import force_text from django.utils.timezone import now from django.conf import settings @@ -64,7 +63,7 @@ class QF(object): if response: for qf in response: try: - qf['annee_imposition'] = force_text(int(re.findall(r'(\d+)', qf['libelle'])[0]) - 1) + qf['annee_imposition'] = str(int(re.findall(r'(\d+)', qf['libelle'])[0]) - 1) except Exception: qf['annee_imposition'] = 'inconnue' return response, error @@ -148,7 +147,7 @@ class QF(object): else: return response[0], None else: - return None, u'Implicit calcul-qf réponse invalide: %r' % force_text(response)[:1024] + return None, 'Implicit calcul-qf réponse invalide: %r' % str(response)[:1024] def lire_quotient_familial(self, individu, date_de_reference): federation = individu.content['cles_de_federation'].get('implicit') @@ -168,8 +167,8 @@ class QF(object): if isinstance(response, list): return response, None else: - return None, (u'Implicit lire-quotient-familial réponse invalide: %r' - % force_text(response)[:1024]) + return None, ('Implicit lire-quotient-familial réponse invalide: %r' + % str(response)[:1024]) def editer_carte(self, individu, id_qf): federation = individu.content['cles_de_federation'].get('implicit')