diff --git a/manilaclient/base.py b/manilaclient/base.py index f9856b1e9..cf8ffe8b9 100644 --- a/manilaclient/base.py +++ b/manilaclient/base.py @@ -176,9 +176,15 @@ class Manager(utils.HookableMixin): return self.resource_class(self, body) def _build_query_string(self, search_opts): - q_string = parse.urlencode( - sorted([(k, v) for (k, v) in search_opts.items() if v])) - return "?%s" % q_string if q_string else q_string + query_string = "" + if search_opts: + search_opts = utils.unicode_key_value_to_string(search_opts) + params = sorted( + [(k, v) for (k, v) in search_opts.items() if v]) + if params: + query_string = "?%s" % parse.urlencode(params) + + return query_string class ManagerWithFind(Manager): diff --git a/manilaclient/tests/unit/v2/test_shell.py b/manilaclient/tests/unit/v2/test_shell.py index 9b2abc488..19bf97ddf 100644 --- a/manilaclient/tests/unit/v2/test_shell.py +++ b/manilaclient/tests/unit/v2/test_shell.py @@ -2048,6 +2048,22 @@ class ShellTest(test_utils.TestCase): 'GET', '/share-groups/detail?description%7E=fake_description') + def test_share_group_list_filter_by_inexact_unicode_name(self): + for separator in self.separators: + self.run_command('share-group-list --name~' + separator + + u'ффф') + self.assert_called( + 'GET', + '/share-groups/detail?name%7E=%D1%84%D1%84%D1%84') + + def test_share_group_list_filter_by_inexact_unicode_description(self): + for separator in self.separators: + self.run_command('share-group-list --description~' + separator + + u'ффф') + self.assert_called( + 'GET', + '/share-groups/detail?description%7E=%D1%84%D1%84%D1%84') + def test_share_group_show(self): self.run_command('share-group-show 1234') diff --git a/manilaclient/v2/shell.py b/manilaclient/v2/shell.py index b11c6d616..1d45badd6 100644 --- a/manilaclient/v2/shell.py +++ b/manilaclient/v2/shell.py @@ -4212,13 +4212,13 @@ def do_share_group_create(cs, args): @cliutils.arg( '--name', metavar='', - type=str, + type=six.text_type, default=None, help='Filter results by name.') @cliutils.arg( '--description', metavar='', - type=str, + type=six.text_type, default=None, help='Filter results by description. ' 'Available only for microversion >= 2.36.') @@ -4308,14 +4308,14 @@ def do_share_group_create(cs, args): @cliutils.arg( '--name~', metavar='', - type=str, + type=six.text_type, default=None, help='Filter results matching a share group name pattern. ' 'Available only for microversion >= 2.36.') @cliutils.arg( '--description~', metavar='', - type=str, + type=six.text_type, default=None, help='Filter results matching a share group description pattern. ' 'Available only for microversion >= 2.36.')