Address RemovedInDjango40Warning (1)
force_text() is deprecated in favor of force_str() smart_text() is deprecated in favor of smart_str() https://docs.djangoproject.com/en/4.0/releases/3.0/#django-utils-encoding-force-text-and-smart-text Change-Id: Ic462fa8c3dfa26e8196df19fef5044036a9e97b4
This commit is contained in:
parent
047b81e979
commit
a9d5273f3c
@ -263,8 +263,8 @@ HANDLE_EXC_METHODS = [
|
||||
|
||||
|
||||
def _append_detail(message, details):
|
||||
return encoding.force_text(message) + SEPARATOR + \
|
||||
encoding.force_text(details)
|
||||
return encoding.force_str(message) + SEPARATOR + \
|
||||
encoding.force_str(details)
|
||||
|
||||
|
||||
def handle(request, message=None, redirect=None, ignore=False,
|
||||
@ -315,7 +315,7 @@ def handle(request, message=None, redirect=None, ignore=False,
|
||||
exc_type, exc_value, exc_traceback = exc_value.wrapped
|
||||
wrap = True
|
||||
|
||||
log_entry = encoding.force_text(exc_value)
|
||||
log_entry = encoding.force_str(exc_value)
|
||||
|
||||
user_message = ""
|
||||
# We trust messages from our own exceptions
|
||||
@ -323,9 +323,9 @@ def handle(request, message=None, redirect=None, ignore=False,
|
||||
user_message = log_entry
|
||||
# If the message has a placeholder for the exception, fill it in
|
||||
elif message and "%(exc)s" in message:
|
||||
user_message = encoding.force_text(message) % {"exc": log_entry}
|
||||
user_message = encoding.force_str(message) % {"exc": log_entry}
|
||||
elif message:
|
||||
user_message = encoding.force_text(message)
|
||||
user_message = encoding.force_str(message)
|
||||
if details is None:
|
||||
user_message = _append_detail(user_message, exc_value)
|
||||
elif details:
|
||||
|
@ -27,7 +27,7 @@ from django.forms.utils import flatatt
|
||||
from django.forms import widgets
|
||||
from django.template.loader import get_template
|
||||
from django import urls
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.encoding import force_str
|
||||
from django.utils.functional import Promise
|
||||
from django.utils import html
|
||||
from django.utils.safestring import mark_safe
|
||||
@ -242,7 +242,7 @@ class SelectWidget(widgets.Widget):
|
||||
return attrs
|
||||
|
||||
def render_option(self, selected_choices, option_value, option_label):
|
||||
option_value = force_text(option_value)
|
||||
option_value = force_str(option_value)
|
||||
other_html = (' selected="selected"'
|
||||
if option_value in selected_choices else '')
|
||||
|
||||
@ -259,12 +259,12 @@ class SelectWidget(widgets.Widget):
|
||||
|
||||
def render_options(self, selected_choices):
|
||||
# Normalize to strings.
|
||||
selected_choices = set(force_text(v) for v in selected_choices)
|
||||
selected_choices = set(force_str(v) for v in selected_choices)
|
||||
output = []
|
||||
for option_value, option_label in self.choices:
|
||||
if isinstance(option_label, (list, tuple)):
|
||||
output.append(html.format_html(
|
||||
'<optgroup label="{}">', force_text(option_value)))
|
||||
'<optgroup label="{}">', force_str(option_value)))
|
||||
for option in option_label:
|
||||
output.append(
|
||||
self.render_option(selected_choices, *option))
|
||||
@ -279,8 +279,7 @@ class SelectWidget(widgets.Widget):
|
||||
if not isinstance(option_label, (str, Promise)):
|
||||
for data_attr in self.data_attrs:
|
||||
data_value = html.conditional_escape(
|
||||
force_text(getattr(option_label,
|
||||
data_attr, "")))
|
||||
force_str(getattr(option_label, data_attr, "")))
|
||||
other_html.append('data-%s="%s"' % (data_attr, data_value))
|
||||
return ' '.join(other_html)
|
||||
|
||||
@ -288,7 +287,7 @@ class SelectWidget(widgets.Widget):
|
||||
if (not isinstance(option_label, (str, Promise)) and
|
||||
callable(self.transform)):
|
||||
option_label = self.transform(option_label)
|
||||
return html.conditional_escape(force_text(option_label))
|
||||
return html.conditional_escape(force_str(option_label))
|
||||
|
||||
def transform_option_html_attrs(self, option_label):
|
||||
if not callable(self.transform_html_attrs):
|
||||
@ -473,8 +472,8 @@ class ChoiceInput(SubWidget):
|
||||
self.name = name
|
||||
self.value = value
|
||||
self.attrs = attrs
|
||||
self.choice_value = force_text(choice[0])
|
||||
self.choice_label = force_text(choice[1])
|
||||
self.choice_value = force_str(choice[0])
|
||||
self.choice_label = force_str(choice[1])
|
||||
self.index = index
|
||||
if 'id' in self.attrs:
|
||||
self.attrs['id'] += "_%d" % self.index
|
||||
@ -529,7 +528,7 @@ class ThemableCheckboxChoiceInput(ChoiceInput):
|
||||
super().__init__(*args, **kwargs)
|
||||
# NOTE(e0ne): Django sets default value to None
|
||||
if self.value:
|
||||
self.value = set(force_text(v) for v in self.value)
|
||||
self.value = set(force_str(v) for v in self.value)
|
||||
|
||||
def is_checked(self):
|
||||
if self.value:
|
||||
@ -589,7 +588,7 @@ class ThemableCheckboxSelectMultiple(widgets.CheckboxSelectMultiple):
|
||||
self.name, self.value, self.attrs.copy(), choice, i)
|
||||
output.append(html.format_html(
|
||||
self.inner_html,
|
||||
choice_value=force_text(w),
|
||||
choice_value=force_str(w),
|
||||
sub_widgets=''))
|
||||
return html.format_html(
|
||||
self.outer_html,
|
||||
|
@ -19,12 +19,12 @@ messaging needs (e.g. AJAX communication, etc.).
|
||||
|
||||
from django.contrib import messages as _messages
|
||||
from django.contrib.messages import constants
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.encoding import force_str
|
||||
from django.utils.safestring import SafeData
|
||||
|
||||
|
||||
def horizon_message_already_queued(request, message):
|
||||
_message = force_text(message)
|
||||
_message = force_str(message)
|
||||
if request.is_ajax():
|
||||
for tag, msg, extra in request.horizon['async_messages']:
|
||||
if _message == msg:
|
||||
@ -46,7 +46,7 @@ def add_message(request, level, message, extra_tags='', fail_silently=False):
|
||||
if isinstance(message, SafeData):
|
||||
extra_tags = extra_tags + ' safe'
|
||||
request.horizon['async_messages'].append([tag,
|
||||
force_text(message),
|
||||
force_str(message),
|
||||
extra_tags])
|
||||
else:
|
||||
return _messages.add_message(request, level, message,
|
||||
|
@ -730,7 +730,7 @@ class Cell(html.HTMLElement):
|
||||
# those columns where truncate is False leads to multiple errors
|
||||
# in unit tests
|
||||
data = getattr(datum, column.name, '') or ''
|
||||
data = encoding.force_text(data)
|
||||
data = encoding.force_str(data)
|
||||
if len(data) > column.truncate:
|
||||
self.attrs['data-toggle'] = 'tooltip'
|
||||
self.attrs['title'] = data
|
||||
|
@ -17,7 +17,7 @@ from collections import OrderedDict
|
||||
from django.conf import settings
|
||||
from django import template
|
||||
from django.template import Node
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.encoding import force_str
|
||||
from django.utils import translation
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
@ -34,7 +34,7 @@ class MinifiedNode(Node):
|
||||
|
||||
def render(self, context):
|
||||
return ' '.join(
|
||||
force_text(self.nodelist.render(context).strip()).split()
|
||||
force_str(self.nodelist.render(context).strip()).split()
|
||||
).replace(' > ', '>').replace(' <', '<')
|
||||
|
||||
|
||||
@ -142,9 +142,9 @@ def quota(val, units=None):
|
||||
if val == float("inf"):
|
||||
return _("(No Limit)")
|
||||
if units is not None:
|
||||
return "%s %s %s" % (val, force_text(units),
|
||||
force_text(_("Available")))
|
||||
return "%s %s" % (val, force_text(_("Available")))
|
||||
return "%s %s %s" % (val, force_str(units),
|
||||
force_str(_("Available")))
|
||||
return "%s %s" % (val, force_str(_("Available")))
|
||||
|
||||
|
||||
@register.filter
|
||||
|
@ -38,7 +38,7 @@ from django import test as django_test
|
||||
from django.test.client import RequestFactory
|
||||
from django.test import tag
|
||||
from django.test import utils as django_test_utils
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.encoding import force_str
|
||||
|
||||
from django.contrib.staticfiles.testing \
|
||||
import StaticLiveServerTestCase as LiveServerTestCase
|
||||
@ -230,7 +230,7 @@ class TestCase(django_test.TestCase):
|
||||
|
||||
# Otherwise, make sure we got the expected messages.
|
||||
for msg_type, count in kwargs.items():
|
||||
msgs = [force_text(m.message)
|
||||
msgs = [force_str(m.message)
|
||||
for m in messages if msg_type in m.tags]
|
||||
assert len(msgs) == count, \
|
||||
"%s messages not as expected: %s" % (msg_type.title(),
|
||||
|
@ -375,7 +375,7 @@ class GetUserHomeTests(test.TestCase):
|
||||
base.Horizon.get_user_home(self.test_user))
|
||||
|
||||
def test_using_module_function(self):
|
||||
module_func = 'django.utils.encoding.force_text'
|
||||
module_func = 'django.utils.encoding.force_str'
|
||||
settings.HORIZON_CONFIG['user_home'] = module_func
|
||||
conf.HORIZON_CONFIG._setup()
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.encoding import force_str
|
||||
|
||||
from horizon import exceptions
|
||||
from horizon.test import helpers as test
|
||||
@ -25,9 +25,9 @@ class HandleTests(test.TestCase):
|
||||
# Japanese translation of:
|
||||
# 'Because the container is not empty, it can not be deleted.'
|
||||
|
||||
expected = ['error', force_text(translated_unicode +
|
||||
exceptions.SEPARATOR +
|
||||
translated_unicode), '']
|
||||
expected = ['error', force_str(translated_unicode +
|
||||
exceptions.SEPARATOR +
|
||||
translated_unicode), '']
|
||||
|
||||
req = self.request
|
||||
req.META['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
|
||||
|
@ -15,7 +15,7 @@
|
||||
import json
|
||||
|
||||
from django import http
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.encoding import force_str
|
||||
from django.utils.safestring import mark_safe
|
||||
|
||||
from horizon import messages
|
||||
@ -27,7 +27,7 @@ class MessageTests(test.TestCase):
|
||||
def test_middleware_header(self):
|
||||
req = self.request
|
||||
string = "Giant ants are attacking San Francisco!"
|
||||
expected = ["error", force_text(string), ""]
|
||||
expected = ["error", force_str(string), ""]
|
||||
self.assertIn("async_messages", req.horizon)
|
||||
self.assertCountEqual(req.horizon['async_messages'], [])
|
||||
req.META['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
|
||||
@ -42,7 +42,7 @@ class MessageTests(test.TestCase):
|
||||
def test_error_message(self):
|
||||
req = self.request
|
||||
string = mark_safe("We are now safe from ants! Go <a>here</a>!")
|
||||
expected = ["error", force_text(string), " safe"]
|
||||
expected = ["error", force_str(string), " safe"]
|
||||
self.assertIn("async_messages", req.horizon)
|
||||
self.assertCountEqual(req.horizon['async_messages'], [])
|
||||
req.META['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
|
||||
|
@ -20,14 +20,13 @@ from oslo_utils import units
|
||||
from django.conf import settings
|
||||
from django.contrib.auth import logout
|
||||
from django import http
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.encoding import force_str
|
||||
from django.utils.functional import lazy
|
||||
from django.utils import translation
|
||||
|
||||
|
||||
def _lazy_join(separator, strings):
|
||||
return separator.join([force_text(s)
|
||||
for s in strings])
|
||||
return separator.join([force_str(s) for s in strings])
|
||||
|
||||
|
||||
lazy_join = lazy(_lazy_join, str)
|
||||
@ -43,7 +42,7 @@ def add_logout_reason(request, response, reason, status='success'):
|
||||
# Store the translated string in the cookie
|
||||
lang = translation.get_language_from_request(request)
|
||||
with translation.override(lang):
|
||||
reason = force_text(reason).encode('unicode_escape').decode('ascii')
|
||||
reason = force_str(reason).encode('unicode_escape').decode('ascii')
|
||||
response.set_cookie('logout_reason', reason, max_age=10)
|
||||
response.set_cookie('logout_status', status, max_age=10)
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
# under the License.
|
||||
|
||||
from django.core.serializers.json import DjangoJSONEncoder
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.encoding import force_str
|
||||
from django.utils.functional import Promise
|
||||
|
||||
|
||||
@ -21,5 +21,5 @@ class LazyTranslationEncoder(DjangoJSONEncoder):
|
||||
"""JSON encoder that resolves lazy objects like translations"""
|
||||
def default(self, obj):
|
||||
if isinstance(obj, Promise):
|
||||
return force_text(obj)
|
||||
return force_str(obj)
|
||||
return super().default(obj)
|
||||
|
@ -53,9 +53,9 @@ class PageTitleMixin(object):
|
||||
|
||||
if "page_title" not in context:
|
||||
con = template.Context(context)
|
||||
# NOTE(sambetts): Use force_text to ensure lazy translations
|
||||
# NOTE(sambetts): Use force_str to ensure lazy translations
|
||||
# are handled correctly.
|
||||
temp = template.Template(encoding.force_text(self.page_title))
|
||||
temp = template.Template(encoding.force_str(self.page_title))
|
||||
context["page_title"] = temp.render(con)
|
||||
return context
|
||||
|
||||
|
@ -26,7 +26,7 @@ from django.template.defaultfilters import linebreaks
|
||||
from django.template.defaultfilters import safe
|
||||
from django.template.defaultfilters import slugify
|
||||
from django import urls
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.encoding import force_str
|
||||
from django.utils import module_loading
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from openstack_auth import policy
|
||||
@ -163,7 +163,7 @@ class Action(forms.Form, metaclass=ActionMetaclass):
|
||||
self.required_css_class = 'required'
|
||||
|
||||
def __str__(self):
|
||||
return force_text(self.name)
|
||||
return force_str(self.name)
|
||||
|
||||
def __repr__(self):
|
||||
return "<%s: %s>" % (self.__class__.__name__, self.slug)
|
||||
@ -182,7 +182,7 @@ class Action(forms.Form, metaclass=ActionMetaclass):
|
||||
tmpl = template.loader.get_template(self.help_text_template)
|
||||
text += tmpl.render(extra_context, self.request)
|
||||
else:
|
||||
text += linebreaks(force_text(self.help_text))
|
||||
text += linebreaks(force_str(self.help_text))
|
||||
return safe(text)
|
||||
|
||||
def add_action_error(self, message):
|
||||
@ -310,7 +310,7 @@ class Step(object):
|
||||
return "<%s: %s>" % (self.__class__.__name__, self.slug)
|
||||
|
||||
def __str__(self):
|
||||
return force_text(self.name)
|
||||
return force_str(self.name)
|
||||
|
||||
def __init__(self, workflow):
|
||||
super().__init__()
|
||||
@ -453,7 +453,7 @@ class Step(object):
|
||||
|
||||
def get_help_text(self):
|
||||
"""Returns the help text for this step."""
|
||||
text = linebreaks(force_text(self.help_text))
|
||||
text = linebreaks(force_str(self.help_text))
|
||||
text += self.action.get_help_text()
|
||||
return safe(text)
|
||||
|
||||
|
@ -155,5 +155,5 @@ class ResizeInstance(workflows.Workflow):
|
||||
api.nova.server_resize(request, instance_id, flavor, disk_config)
|
||||
return True
|
||||
except Exception as e:
|
||||
self.failure_message = encoding.force_text(e)
|
||||
self.failure_message = encoding.force_str(e)
|
||||
return False
|
||||
|
@ -278,7 +278,7 @@ class CreateView(forms.ModalFormView):
|
||||
_("If \"No volume type\" is selected, the volume will be "
|
||||
"created without a volume type.")
|
||||
|
||||
no_type_description = encoding.force_text(message)
|
||||
no_type_description = encoding.force_str(message)
|
||||
|
||||
type_descriptions = [{'name': '',
|
||||
'description': no_type_description}] + \
|
||||
|
@ -120,6 +120,6 @@ class UserSettingsForm(forms.SelfHandlingForm):
|
||||
|
||||
with translation.override(lang_code):
|
||||
messages.success(request,
|
||||
encoding.force_text(_("Settings saved.")))
|
||||
encoding.force_str(_("Settings saved.")))
|
||||
|
||||
return response
|
||||
|
@ -93,7 +93,7 @@ class Translate(types.ConfigType):
|
||||
|
||||
def _formatter(self, value):
|
||||
return self.quote_trailing_and_leading_space(
|
||||
encoding.force_text(value))
|
||||
encoding.force_str(value))
|
||||
|
||||
|
||||
class Literal(types.ConfigType):
|
||||
@ -181,7 +181,7 @@ class Literal(types.ConfigType):
|
||||
return '(%s)' % ', '.join(self._format(value) for value in result)
|
||||
if isinstance(result, functional.Promise):
|
||||
# Lazy translatable string.
|
||||
return repr(encoding.force_text(result))
|
||||
return repr(encoding.force_str(result))
|
||||
return repr(result)
|
||||
|
||||
def _formatter(self, value):
|
||||
|
@ -20,7 +20,7 @@ from django.conf import settings
|
||||
from django import http
|
||||
from django import shortcuts
|
||||
from django import urls
|
||||
from django.utils.encoding import smart_text
|
||||
from django.utils.encoding import smart_str
|
||||
import django.views.decorators.vary
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
@ -96,7 +96,7 @@ class ExtensibleHeaderView(TemplateView):
|
||||
response = view.get(self.request)
|
||||
rendered_response = response.render()
|
||||
packed_response = [view_path.replace('.', '-'),
|
||||
smart_text(rendered_response.content)]
|
||||
smart_str(rendered_response.content)]
|
||||
header_sections.append(packed_response)
|
||||
|
||||
except Exception as e:
|
||||
|
Loading…
Reference in New Issue
Block a user