diff --git a/manilaclient/base.py b/manilaclient/base.py index 491096137..67544ec80 100644 --- a/manilaclient/base.py +++ b/manilaclient/base.py @@ -96,14 +96,14 @@ class Manager(utils.HookableMixin): """ base_dir = cliutils.env('manilaclient_UUID_CACHE_DIR', 'MANILACLIENT_UUID_CACHE_DIR', - default="~/.manilaclient") + default="~/.cache/manilaclient") # NOTE(sirp): Keep separate UUID caches for each username + endpoint # pair username = cliutils.env('OS_USERNAME', 'MANILA_USERNAME') url = cliutils.env('OS_URL', 'MANILA_URL') - uniqifier = hashlib.md5(username.encode('utf-8') + - url.encode('utf-8')).hexdigest() + uniqifier = hashlib.sha1(username.encode('utf-8') + + url.encode('utf-8')).hexdigest() cache_dir = os.path.expanduser(os.path.join(base_dir, uniqifier)) @@ -139,7 +139,10 @@ class Manager(utils.HookableMixin): def write_to_completion_cache(self, cache_type, val): cache = getattr(self, "_%s_cache" % cache_type, None) if cache: - cache.write("%s\n" % val) + try: + cache.write("%s\n" % val) + except UnicodeEncodeError: + pass def _get(self, url, response_key=None): resp, body = self.api.client.get(url) diff --git a/manilaclient/tests/unit/utils.py b/manilaclient/tests/unit/utils.py index 48c92952c..0b642d438 100644 --- a/manilaclient/tests/unit/utils.py +++ b/manilaclient/tests/unit/utils.py @@ -48,6 +48,16 @@ class TestCase(testtools.TestCase): self.addCleanup(patcher.stop) return new_attr + def mock_completion(self): + patcher = mock.patch( + 'manilaclient.base.Manager.write_to_completion_cache') + patcher.start() + self.addCleanup(patcher.stop) + + patcher = mock.patch('manilaclient.base.Manager.completion_cache') + patcher.start() + self.addCleanup(patcher.stop) + class TestResponse(requests.Response): """Class used to wrap requests.Response. diff --git a/manilaclient/tests/unit/v2/fakes.py b/manilaclient/tests/unit/v2/fakes.py index 091be8a80..5f9817d5c 100644 --- a/manilaclient/tests/unit/v2/fakes.py +++ b/manilaclient/tests/unit/v2/fakes.py @@ -225,6 +225,7 @@ class FakeHTTPClient(fakes.FakeHTTPClient): def get_shares_detail(self, **kw): endpoint = "http://127.0.0.1:8786/v2" share_id = '1234' + shares = { 'shares': [ { @@ -241,8 +242,11 @@ class FakeHTTPClient(fakes.FakeHTTPClient): ], }, ], - 'count': 2, } + + if kw.get('with_count'): + shares.update({'count': 2}) + return (200, {}, shares) def get_snapshots_1234(self, **kw): diff --git a/manilaclient/tests/unit/v2/test_shell.py b/manilaclient/tests/unit/v2/test_shell.py index 3839986d8..6b3786bb2 100644 --- a/manilaclient/tests/unit/v2/test_shell.py +++ b/manilaclient/tests/unit/v2/test_shell.py @@ -62,6 +62,7 @@ class ShellTest(test_utils.TestCase): for var in self.FAKE_ENV: self.useFixture(fixtures.EnvironmentVariable(var, self.FAKE_ENV[var])) + self.mock_completion() self.shell = shell.OpenStackManilaShell() diff --git a/manilaclient/v2/shell.py b/manilaclient/v2/shell.py index de1aba636..23197b1a1 100644 --- a/manilaclient/v2/shell.py +++ b/manilaclient/v2/shell.py @@ -28,6 +28,7 @@ from manilaclient.common.apiclient import utils as apiclient_utils from manilaclient.common import cliutils from manilaclient.common import constants from manilaclient import exceptions +import manilaclient.v2.shares def _wait_for_resource_status(cs, @@ -2305,6 +2306,19 @@ def do_list(cs, args): if args.count: print("Shares in total: %s" % total_count) + with cs.shares.completion_cache('uuid', + manilaclient.v2.shares.Share, + mode="w"): + for share in shares: + cs.shares.write_to_completion_cache('uuid', share.id) + + with cs.shares.completion_cache('name', + manilaclient.v2.shares.Share, + mode="w"): + for share in shares: + if share.name is not None: + cs.shares.write_to_completion_cache('name', share.name) + @cliutils.arg( '--share-id', diff --git a/tools/manila.bash_completion b/tools/manila.bash_completion index 717681b7c..8491e8ab4 100644 --- a/tools/manila.bash_completion +++ b/tools/manila.bash_completion @@ -7,7 +7,7 @@ _manila() opts="$(manila bash_completion)" - COMPLETION_CACHE=~/.manilaclient/*/*-cache + COMPLETION_CACHE=~/.cache/manilaclient/*/*-cache opts+=" "$(cat $COMPLETION_CACHE 2> /dev/null | tr '\n' ' ') COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )