diff --git a/manila_ui/dashboards/utils.py b/manila_ui/dashboards/utils.py index a1281c40..486b9dce 100644 --- a/manila_ui/dashboards/utils.py +++ b/manila_ui/dashboards/utils.py @@ -11,6 +11,9 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. +import base64 +import binascii +import re from django.forms import ValidationError from django.utils.safestring import mark_safe @@ -117,8 +120,12 @@ def transform_dashed_name(name): """Add or remove unicode text separators & transformations for hyphens.""" if not name: return - if '-' in name: - name = '__ಠ__' + name.replace('-', '__u2010') + '__ಠ__' - elif '__u2010' in name: - name = name.replace('__u2010', '-').strip('__ಠ__') - return name + try: + return base64.b32decode( + name.replace('_', '=').upper().encode()).decode() + except binascii.Error: + if re.search(r'^[a-z_\d]+$', name): + return name # leave as-is names without dashes and capitals + else: + return base64.b32encode(name.encode()).decode().lower().replace( + '=', '_') diff --git a/manila_ui/tests/utils/__init__.py b/manila_ui/tests/utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/manila_ui/tests/utils/tests.py b/manila_ui/tests/utils/tests.py new file mode 100644 index 00000000..39bae086 --- /dev/null +++ b/manila_ui/tests/utils/tests.py @@ -0,0 +1,45 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from manila_ui.dashboards.utils import transform_dashed_name as tdn +from manila_ui.tests import helpers as test + + +class UtilsTests(test.TestCase): + + def test_no_transform(self): + inputs = ['foo', + 'bar01', + 'baz_01'] + res = [tdn(x) for x in inputs] + self.assertEqual(inputs, res) + + def test_transform(self): + inputs = ['Foo', + 'Bar01', + 'baz-01'] + exp_res = ['izxw6___', + 'ijqxembr', + 'mjqxuljqge______'] + res = [tdn(x) for x in inputs] + self.assertEqual(res, exp_res) + + def test_undo_transform(self): + inputs = ['izxw6___', + 'ijqxembr', + 'mjqxuljqge______'] + exp_res = ['Foo', + 'Bar01', + 'baz-01'] + res = [tdn(x) for x in inputs] + self.assertEqual(res, exp_res) diff --git a/releasenotes/notes/field-encoder-update-7141766f0b5f8ecb.yaml b/releasenotes/notes/field-encoder-update-7141766f0b5f8ecb.yaml new file mode 100644 index 00000000..eecbf2f8 --- /dev/null +++ b/releasenotes/notes/field-encoder-update-7141766f0b5f8ecb.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Fixed an issue when share type with 'dhss=True' option and dash in the + type name doesn't enable 'Share Network' widget at 'Create Share' form. +