Django 4.x: Replace removed features

force_text(), ugettext_lazy(), ungettext_lazy(), urlquote_plus()
and is_ajax() are removed in 4.0.
https: //docs.djangoproject.com/en/4.0/releases/4.0/

Co-Authored-By: manchandavishal <manchandavishal143@gmail.com>

Change-Id: I9e43926cc3011b8b7321bbec59bebe915502eb4a
This commit is contained in:
Corey Bryant 2022-07-19 13:41:16 -04:00 committed by manchandavishal
parent 5a36a31de6
commit d956d059f9
42 changed files with 88 additions and 83 deletions

View File

@ -16,10 +16,11 @@ import contextlib
from django.conf import settings
from django.contrib.messages import api as msg_api
from django.utils.encoding import force_text
from django.utils.translation import ugettext_lazy as _
from django.utils.encoding import force_str
from django.utils.translation import gettext_lazy as _
from glanceclient.common import exceptions as glance_exc
from horizon import exceptions
from horizon.utils import http as http_utils
import muranoclient.client as client
from muranoclient.common import exceptions as exc
from muranoclient.glance import client as art_client
@ -34,8 +35,8 @@ LOG = logging.getLogger(__name__)
def _handle_message(request, message):
def horizon_message_already_queued(_message):
_message = force_text(_message)
if request.is_ajax():
_message = force_str(_message)
if http_utils.is_ajax(request):
for tag, msg, extra in request.horizon['async_messages']:
if _message == msg:
return True

View File

@ -12,7 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
import horizon

View File

@ -14,7 +14,7 @@
from horizon import tabs
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from oslo_log import log as logging
from muranodashboard.dynamic_ui import services

View File

@ -17,6 +17,7 @@ import copy
import functools
import json
import re
from urllib import parse
import uuid
from castellan.common import exception as castellan_exception
@ -37,7 +38,7 @@ from django import shortcuts
from django.utils import decorators as django_dec
from django.utils import html
from django.utils import http as http_utils
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from django.views.generic import list as list_view
from horizon import exceptions
from horizon.forms import views
@ -126,7 +127,9 @@ def get_categories_list(request):
def switch(request, environment_id,
redirect_field_name=auth.REDIRECT_FIELD_NAME):
redirect_to = request.GET.get(redirect_field_name, '')
if not http_utils.is_safe_url(url=redirect_to, host=request.get_host()):
if (not http_utils.url_has_allowed_host_and_scheme(
url=redirect_to,
host=request.get_host())):
redirect_to = settings.LOGIN_REDIRECT_URL
for env in get_available_environments(request):
@ -622,7 +625,7 @@ class IndexView(generic_views.PageTitleMixin, list_view.ListView):
"""
data = self.object_list
if data:
return http_utils.urlquote_plus(self.get_object_id(data[index]))
return parse.quote_plus(self.get_object_id(data[index]))
else:
return ''

View File

@ -13,7 +13,7 @@
# under the License.
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from horizon import forms as horizon_forms
from horizon import messages

View File

@ -12,7 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
import horizon

View File

@ -14,8 +14,8 @@
from django.conf import settings
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ungettext_lazy
from django.utils.translation import gettext_lazy as _
from django.utils.translation import ngettext_lazy
from horizon import exceptions
from horizon import tables
from muranoclient.common import exceptions as exc
@ -42,7 +42,7 @@ class DeleteCategory(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
return ngettext_lazy(
u"Delete Category",
u"Delete Categories",
count
@ -50,7 +50,7 @@ class DeleteCategory(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_past(count):
return ungettext_lazy(
return ngettext_lazy(
u"Deleted Category",
u"Deleted Categories",
count

View File

@ -15,7 +15,7 @@
import itertools
from django.urls import reverse_lazy
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from horizon.forms import views
from horizon import tables as horizon_tables
from horizon.utils import functions as utils

View File

@ -17,7 +17,7 @@ from muranodashboard.common import widgets
from django.core.exceptions import ValidationError
from django.core import validators
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
class TriStateMultipleChoiceField(forms.ChoiceField):

View File

@ -17,7 +17,7 @@ import re
import uuid
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from horizon import exceptions
from neutronclient.common import exceptions as exc
from openstack_dashboard.api import keystone

View File

@ -16,7 +16,7 @@ import itertools as it
from django import forms
from django.template import loader
from django.utils.encoding import force_text
from django.utils.encoding import force_str
from django.utils import formats
from muranodashboard.common import utils
@ -64,7 +64,7 @@ class Input(Widget):
def _format_value(self, value):
if self.is_localized:
value = formats.localize_input(value)
return force_text(value)
return force_str(value)
def get_context(self, name, value, attrs=None):
context = {

View File

@ -13,7 +13,7 @@
# under the License.
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
import horizon
# Load the api rest services into Horizon

View File

@ -22,9 +22,9 @@ from django import forms
from django.forms import widgets
from django.template import defaultfilters
from django.urls import reverse
from django.utils.encoding import force_text
from django.utils.encoding import force_str
from django.utils import html
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from horizon import exceptions
from horizon import forms as hz_forms
from horizon import messages
@ -175,11 +175,11 @@ class CustomPropertiesField(forms.Field):
*args, **kwargs):
self.description = description
self.description_title = (description_title or
force_text(kwargs.get('label', '')))
force_str(kwargs.get('label', '')))
for arg in FIELD_ARGS_TO_ESCAPE:
if kwargs.get(arg):
kwargs[arg] = html.escape(force_text(kwargs[arg]))
kwargs[arg] = html.escape(force_str(kwargs[arg]))
validators = []
validators_js = []
@ -191,11 +191,11 @@ class CustomPropertiesField(forms.Field):
error_messages = kwargs.get('error_messages', {})
if hasattr(validator, 'code') and \
validator.code in error_messages:
regex_message = force_text(
regex_message = force_str(
error_messages[validator.code]
)
validators_js. \
append({'regex': force_text(validator.regex.pattern),
append({'regex': force_str(validator.regex.pattern),
'message': regex_message})
else: # mixed list of regexpValidator and YAQL validators
expr = validator.get('expr')

View File

@ -15,7 +15,7 @@
from collections import defaultdict
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from oslo_log import log as logging
from yaql import legacy

View File

@ -16,8 +16,8 @@ import os
import re
import semantic_version
from django.utils.encoding import force_text
from django.utils.translation import ugettext_lazy as _
from django.utils.encoding import force_str
from django.utils.translation import gettext_lazy as _
from oslo_log import log as logging
from yaql import legacy
@ -242,7 +242,7 @@ def condition_getter(request, kwargs):
return True
app = import_app(request, kwargs['app_id'])
key = force_text(_get_form_name(len(app.forms) - 1, app.forms[-1]()))
key = force_str(_get_form_name(len(app.forms) - 1, app.forms[-1]()))
return {key: _func}

View File

@ -12,7 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from horizon import exceptions
from oslo_log import log as logging

View File

@ -16,7 +16,7 @@ import os
import tempfile
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
# ---- Metadata Consts ---- #

View File

@ -15,7 +15,7 @@ import ast
from django.conf import settings
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from horizon import exceptions
from horizon import forms as horizon_forms
from horizon import messages

View File

@ -12,7 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
import horizon

View File

@ -18,8 +18,8 @@ from django import http as django_http
from django import template
from django.template import defaultfilters
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ungettext_lazy
from django.utils.translation import gettext_lazy as _
from django.utils.translation import ngettext_lazy
from horizon import exceptions
from horizon import forms
@ -126,7 +126,7 @@ class DeleteEnvironment(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
return ngettext_lazy(
u"Delete Environment",
u"Delete Environments",
count
@ -134,7 +134,7 @@ class DeleteEnvironment(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_past(count):
return ungettext_lazy(
return ngettext_lazy(
u"Started Deleting Environment",
u"Started Deleting Environments",
count
@ -172,7 +172,7 @@ class AbandonEnvironment(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
return ngettext_lazy(
u"Abandon Environment",
u"Abandon Environments",
count
@ -180,7 +180,7 @@ class AbandonEnvironment(tables.DeleteAction):
@staticmethod
def action_past(count):
return ungettext_lazy(
return ngettext_lazy(
u"Abandoned Environment",
u"Abandoned Environments",
count
@ -218,7 +218,7 @@ class DeleteService(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
return ngettext_lazy(
u"Delete Component",
u"Delete Components",
count
@ -226,7 +226,7 @@ class DeleteService(tables.DeleteAction):
@staticmethod
def action_past(count):
return ungettext_lazy(
return ngettext_lazy(
u"Started Deleting Component",
u"Started Deleting Components",
count
@ -258,7 +258,7 @@ class DeployEnvironment(tables.BatchAction):
@staticmethod
def action_present_deploy(count):
return ungettext_lazy(
return ngettext_lazy(
u"Deploy Environment",
u"Deploy Environments",
count
@ -266,7 +266,7 @@ class DeployEnvironment(tables.BatchAction):
@staticmethod
def action_past_deploy(count):
return ungettext_lazy(
return ngettext_lazy(
u"Started deploying Environment",
u"Started deploying Environments",
count
@ -274,7 +274,7 @@ class DeployEnvironment(tables.BatchAction):
@staticmethod
def action_present_update(count):
return ungettext_lazy(
return ngettext_lazy(
u"Update Environment",
# there can be cases when some of the envs are new and some are not
# so it is better to just leave "Deploy" for multiple envs
@ -284,7 +284,7 @@ class DeployEnvironment(tables.BatchAction):
@staticmethod
def action_past_update(count):
return ungettext_lazy(
return ngettext_lazy(
u"Updated Environment",
u"Deployed Environments",
count

View File

@ -17,7 +17,7 @@ import json
from django.conf import settings
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from heat_dashboard.api import heat as heat_api

View File

@ -18,7 +18,7 @@ import json
from django import http
from django.urls import reverse
from django.urls import reverse_lazy
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from django.views import generic
from horizon import conf
from horizon import exceptions

View File

@ -17,7 +17,7 @@ import json
from django.conf import settings
from django import forms
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from horizon import exceptions
from horizon import forms as horizon_forms
from horizon import messages

View File

@ -12,7 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
import horizon

View File

@ -13,8 +13,8 @@
# under the License.
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ungettext_lazy
from django.utils.translation import gettext_lazy as _
from django.utils.translation import ngettext_lazy
from horizon import exceptions
from horizon import tables
from openstack_dashboard.api import glance
@ -37,7 +37,7 @@ class RemoveImageMetadata(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
return ngettext_lazy(
u"Delete Metadata",
u"Delete Metadata",
count
@ -45,7 +45,7 @@ class RemoveImageMetadata(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_past(count):
return ungettext_lazy(
return ngettext_lazy(
u"Deleted Metadata",
u"Deleted Metadata",
count

View File

@ -16,7 +16,7 @@ import itertools
from django.urls import reverse
from django.urls import reverse_lazy
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from horizon import exceptions
from horizon.forms import views

View File

@ -1,4 +1,4 @@
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
# The name of the panel group to be added to HORIZON_CONFIG. Required.
PANEL_GROUP = 'app-catalog_browse_group'

View File

@ -1,4 +1,4 @@
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
# The name of the panel group to be added to HORIZON_CONFIG. Required.
PANEL_GROUP = 'app-catalog_manage_group'

View File

@ -1,4 +1,4 @@
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
# The name of the panel group to be added to HORIZON_CONFIG. Required.
PANEL_GROUP = 'app-catalog_applications_group'

View File

@ -15,7 +15,7 @@
from django.core import validators
from django import forms
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from horizon import exceptions
from horizon import forms as horizon_forms
from horizon import messages

View File

@ -12,7 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
import horizon

View File

@ -14,8 +14,8 @@
from django.template import defaultfilters
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ungettext_lazy
from django.utils.translation import gettext_lazy as _
from django.utils.translation import ngettext_lazy
from horizon import exceptions
from horizon import messages
from horizon import tables
@ -86,7 +86,7 @@ class ToggleEnabled(tables.BatchAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
return ngettext_lazy(
u"Toggle Active",
u"Toggle Active",
count
@ -94,7 +94,7 @@ class ToggleEnabled(tables.BatchAction):
@staticmethod
def action_past(count):
return ungettext_lazy(
return ngettext_lazy(
u"Toggled Active",
u"Toggled Active",
count
@ -122,7 +122,7 @@ class TogglePublicEnabled(tables.BatchAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
return ngettext_lazy(
u"Toggle Public",
u"Toggle Public",
count
@ -130,7 +130,7 @@ class TogglePublicEnabled(tables.BatchAction):
@staticmethod
def action_past(count):
return ungettext_lazy(
return ngettext_lazy(
u"Toggled Public",
u"Toggled Public",
count
@ -165,7 +165,7 @@ class DeletePackage(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
return ngettext_lazy(
u"Delete Package",
u"Delete Packages",
count
@ -173,7 +173,7 @@ class DeletePackage(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_past(count):
return ungettext_lazy(
return ngettext_lazy(
u"Deleted Package",
u"Deleted Packages",
count

View File

@ -19,7 +19,7 @@ from django.core.files import storage
from django import http
from django.urls import reverse
from django.urls import reverse_lazy
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
# django.contrib.formtools migration to django 1.8
# https://docs.djangoproject.com/en/1.8/ref/contrib/formtools/
try:

View File

@ -19,7 +19,7 @@ from unittest import mock
from django.conf import settings
from django.forms import formsets
from django import http
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from horizon.forms import views as horizon_views
@ -125,7 +125,7 @@ class TestCatalogViews(unittest.TestCase):
mock_shortcuts.redirect.assert_called_once_with('redirect_to_foo')
mock_shortcuts.redirect.reset_mock()
mock_http_utls.is_safe_url.return_value = False
mock_http_utls.url_has_allowed_host_and_scheme.return_value = False
result = views.switch(self.mock_request, 'foo_env_id',
redirect_field_name='redirect')
self.assertEqual('foo_redirect', result)

View File

@ -15,7 +15,7 @@
from django.core import exceptions
from django.core import validators as django_validator
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from unittest import mock
import unittest
@ -29,8 +29,8 @@ class TestFields(unittest.TestCase):
super(TestFields, self).setUp()
self.request = mock.Mock()
self.request.user.service_region = None
self.request.is_ajax = mock.Mock(side_effect=False)
self.addCleanup(mock.patch.stopall)
mock.patch('horizon.utils.http.is_ajax', return_value=True).start()
@mock.patch.object(fields, 'LOG')
def test_fields_with_initial_request(self, mock_log):

View File

@ -15,7 +15,7 @@
import unittest
from unittest import mock
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from muranoclient.common import exceptions as exc
from muranodashboard.environments import forms as env_forms

View File

@ -17,7 +17,7 @@ import unittest
from unittest import mock
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from muranoclient.common import exceptions as exc
from muranodashboard.environments import tables

View File

@ -15,7 +15,7 @@
import base64
from django.conf import settings
from django import http
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
import sys
import unittest
from unittest import mock
@ -171,10 +171,10 @@ class TestDetailServiceView(unittest.TestCase):
}
self.mock_request = mock.Mock(GET={})
self.mock_request.user.service_catalog = None
self.mock_request.is_ajax.return_value = True
self.mock_request.horizon = {
'async_messages': [('tag', 'msg', 'extra')]
}
mock.patch('horizon.utils.http.is_ajax', return_value=True).start()
self.detail_service_view.request = self.mock_request
self.assertEqual(env_tabs.ServicesTabs,

View File

@ -15,7 +15,7 @@
import unittest
from unittest import mock
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from muranodashboard.images import forms

View File

@ -15,7 +15,7 @@
import unittest
from unittest import mock
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from muranoclient.common import exceptions as exc
from muranodashboard.packages import tables

View File

@ -14,7 +14,7 @@
from django.core.files import storage
from django import http
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from unittest import mock

View File

@ -107,8 +107,9 @@ class TestApi(helpers.APITestCase):
'Unable to communicate to murano-api server.',
'test_extra')]
mock_request = mock.MagicMock()
mock_request.is_ajax.return_value = True
mock_request.horizon.__getitem__.return_value = async_messages
mock_is_ajax = mock.patch(
'horizon.utils.http.is_ajax', return_value=True).start()
try:
with api.handled_exceptions(mock_request):
raise api.exc.CommunicationError()
@ -116,7 +117,7 @@ class TestApi(helpers.APITestCase):
pass
mock_exc.handle.assert_called_once_with(mock_request, ignore=True)
self.assertTrue(mock_request.is_ajax.called)
self.assertTrue(mock_is_ajax.called)
self.assertTrue(mock_request.horizon.__getitem__.called)
def test_muranoclient(self):