Fix deprecated Django 3.0 function usage (#1054)

* Replace force_text -> force_str

* Replace smart_text -> smart_str

* Add Django 3 to Travis CI pipeline
This commit is contained in:
MuslimBeibytuly 2019-12-31 01:17:48 +06:00 committed by Andrew Graham-Yooll
parent b76c0940a1
commit aa9284fac6
9 changed files with 35 additions and 19 deletions

View File

@ -25,6 +25,9 @@ env:
- DJANGO="Django==2.2.*" IMPORT_EXPORT_TEST_TYPE=postgres
- DJANGO="Django==2.2.*" IMPORT_EXPORT_TEST_TYPE=mysql-innodb
- DJANGO="Django==2.2.*" IMPORT_EXPORT_TEST_TYPE=sqlite
- DJANGO="Django==3.0.*" IMPORT_EXPORT_TEST_TYPE=postgres
- DJANGO="Django==3.0.*" IMPORT_EXPORT_TEST_TYPE=mysql-innodb
- DJANGO="Django==3.0.*" IMPORT_EXPORT_TEST_TYPE=sqlite
- DJANGO="https://github.com/django/django/archive/master.tar.gz" IMPORT_EXPORT_TEST_TYPE=postgres
- DJANGO="https://github.com/django/django/archive/master.tar.gz" IMPORT_EXPORT_TEST_TYPE=mysql-innodb
- DJANGO="https://github.com/django/django/archive/master.tar.gz" IMPORT_EXPORT_TEST_TYPE=sqlite
@ -36,6 +39,12 @@ matrix:
env: DJANGO="https://github.com/django/django/archive/master.tar.gz" IMPORT_EXPORT_TEST_TYPE=sqlite
- python: "3.5"
env: DJANGO="https://github.com/django/django/archive/master.tar.gz" IMPORT_EXPORT_TEST_TYPE=mysql-innodb
- python: "3.5"
env: DJANGO="Django==3.0.*" IMPORT_EXPORT_TEST_TYPE=postgres
- python: "3.5"
env: DJANGO="Django==3.0.*" IMPORT_EXPORT_TEST_TYPE=sqlite
- python: "3.5"
env: DJANGO="Django==3.0.*" IMPORT_EXPORT_TEST_TYPE=mysql-innodb
install:
- pip install -q $DJANGO
- pip install tablib==0.12.1

View File

@ -13,7 +13,7 @@ from django.http import HttpResponse, HttpResponseRedirect
from django.template.response import TemplateResponse
from django.urls import reverse
from django.utils.decorators import method_decorator
from django.utils.encoding import force_text
from django.utils.encoding import force_str
from django.utils.module_loading import import_string
from django.utils.translation import gettext_lazy as _
from django.views.decorators.http import require_POST
@ -143,7 +143,7 @@ class ImportMixin(ImportExportMixinBase):
tmp_storage = self.get_tmp_storage_class()(name=confirm_form.cleaned_data['import_file_name'])
data = tmp_storage.read(input_format.get_read_mode())
if not input_format.is_binary() and self.from_encoding:
data = force_text(data, self.from_encoding)
data = force_str(data, self.from_encoding)
dataset = input_format.create_dataset(data)
result = self.process_dataset(dataset, confirm_form, request, *args, **kwargs)
@ -292,7 +292,7 @@ class ImportMixin(ImportExportMixinBase):
try:
data = tmp_storage.read(input_format.get_read_mode())
if not input_format.is_binary() and self.from_encoding:
data = force_text(data, self.from_encoding)
data = force_str(data, self.from_encoding)
dataset = input_format.create_dataset(data)
except UnicodeDecodeError as e:
return HttpResponse(_(u"<h1>Imported file has a wrong encoding: %s</h1>" % e))

View File

@ -21,7 +21,7 @@ from django.db.transaction import (
savepoint_commit,
savepoint_rollback
)
from django.utils.encoding import force_text
from django.utils.encoding import force_str
from django.utils.safestring import mark_safe
from . import widgets
@ -177,7 +177,7 @@ class Diff:
for v1, v2 in zip(self.left, self.right):
if v1 != v2 and self.new:
v1 = ""
diff = dmp.diff_main(force_text(v1), force_text(v2))
diff = dmp.diff_main(force_str(v1), force_str(v2))
dmp.diff_cleanupSemantic(diff)
html = dmp.diff_prettyHtml(diff)
html = mark_safe(html)
@ -382,7 +382,7 @@ class Resource(metaclass=DeclarativeMetaclass):
self.import_field(field, obj, data)
except ValueError as e:
errors[field.attribute] = ValidationError(
force_text(e), code="invalid")
force_str(e), code="invalid")
if errors:
raise ValidationError(errors)
@ -528,7 +528,7 @@ class Resource(metaclass=DeclarativeMetaclass):
self.save_m2m(instance, row, using_transactions, dry_run)
# Add object info to RowResult for LogEntry
row_result.object_id = instance.pk
row_result.object_repr = force_text(instance)
row_result.object_repr = force_str(instance)
diff.compare_with(self, instance, dry_run)
row_result.diff = diff.as_html()
@ -685,7 +685,7 @@ class Resource(metaclass=DeclarativeMetaclass):
def get_export_headers(self):
headers = [
force_text(field.column_name) for field in self.get_export_fields()]
force_str(field.column_name) for field in self.get_export_fields()]
return headers
def get_user_visible_fields(self):

View File

@ -6,7 +6,7 @@ from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist
from django.utils import datetime_safe, timezone
from django.utils.dateparse import parse_duration
from django.utils.encoding import force_text, smart_text
from django.utils.encoding import force_str, smart_str
class Widget:
@ -38,7 +38,7 @@ class Widget:
:meth:`~import_export.widgets.Widget.render` takes care of converting
the object's field to a value that can be written to a spreadsheet.
"""
return force_text(value)
return force_str(value)
class NumberWidget(Widget):
@ -94,7 +94,7 @@ class CharWidget(Widget):
"""
def render(self, value, obj=None):
return force_text(value)
return force_str(value)
class BooleanWidget(Widget):
@ -416,5 +416,5 @@ class ManyToManyWidget(Widget):
})
def render(self, value, obj=None):
ids = [smart_text(getattr(obj, self.field)) for obj in value.all()]
ids = [smart_str(getattr(obj, self.field)) for obj in value.all()]
return self.separator.join(ids)

View File

@ -14,4 +14,4 @@ known_standard_library=tablib
known_first_party=import_export
multi_line_output=3
line_length=100
indent=4
indent=4

View File

@ -1,7 +1,7 @@
import os
from django.test import TestCase
from django.utils.encoding import force_text
from django.utils.encoding import force_str
from import_export.formats import base_formats
@ -65,7 +65,7 @@ class CSVTest(TestCase):
'exports',
'books-unicode.csv')
with open(filename, self.format.get_read_mode()) as in_stream:
data = force_text(in_stream.read())
data = force_str(in_stream.read())
base_formats.CSV().create_dataset(data)
@ -93,5 +93,5 @@ class TSVTest(TestCase):
'exports',
'books-unicode.tsv')
with open(filename, self.format.get_read_mode()) as in_stream:
data = force_text(in_stream.read())
data = force_str(in_stream.read())
base_formats.TSV().create_dataset(data)

View File

@ -18,7 +18,7 @@ class FieldTest(TestCase):
self.field = fields.Field(column_name='name', attribute='name')
self.row = {
'name': 'Foo',
}
}
self.obj = Obj(name='Foo', date=date(2012, 8, 13))
def test_clean(self):
@ -39,6 +39,7 @@ class FieldTest(TestCase):
class name:
class follow:
me = 'bar'
test = Test()
field = fields.Field(column_name='name', attribute='name__follow__me')
row = {'name': 'foo'}
@ -73,3 +74,8 @@ class FieldTest(TestCase):
self.field.save(self.obj, row)
self.assertIsNone(self.obj.name)
def test_repr(self):
self.assertEqual(repr(self.field), '<import_export.fields.Field: name>')
self.field.column_name = None
self.assertEqual(repr(self.field), '<import_export.fields.Field>')

View File

@ -12,7 +12,7 @@ from django.contrib.auth.models import User
from django.db import DatabaseError, IntegrityError
from django.db.models import Count
from django.test import TestCase, TransactionTestCase, skipUnlessDBFeature
from django.utils.encoding import force_text
from django.utils.encoding import force_str
from django.utils.html import strip_tags
from import_export import fields, resources, results, widgets
@ -921,7 +921,7 @@ class ModelResourceTransactionTest(TransactionTestCase):
category_field = resource.fields['categories']
categories_diff = row_diff[fields.index(category_field)]
self.assertEqual(strip_tags(categories_diff), force_text(cat1.pk))
self.assertEqual(strip_tags(categories_diff), force_str(cat1.pk))
# check that it is really rollbacked
self.assertFalse(Book.objects.filter(name='FooBook'))

View File

@ -11,4 +11,5 @@ deps=
django20: Django>=2.0,<2.1
django21: Django>=2.1,<2.2
django22: Django>=2.2,<3.0
django30: Django>=3.0
djangomaster: https://github.com/django/django/archive/master.tar.gz