Debian

Available patches from Ubuntu

To see Ubuntu differences wrt. to Debian, write down a grep-dctrl query identifying the packages you're interested in:
grep-dctrl -n -sPackage Sources.Debian
(e.g. -FPackage linux-ntfs or linux-ntfs)

Modified packages are listed below:

Debian ( Changelog | PTS | Bugs ) Ubuntu ( Changelog | txt | LP | Bugs ) | Diff from Ubuntu

Source: python-cinderclient

python-cinderclient (1:4.1.0-0ubuntu1) disco; urgency=medium * New upstream release for OpenStack Stein. * d/control: Align (Build-)Depends with upstream. -- Corey Bryant <corey.bryant@canonical.com> Wed, 14 Nov 2018 13:04:54 -0500 python-cinderclient (1:4.0.0-0ubuntu1) cosmic; urgency=low * Merge from Debian unstable. Remaining changes: - d/control: Enable autopkgtest-pkg-python testsuite. - d/gbp.conf: Retain for gbp and pristine-tar config. * d/p/skip-tests.patch: Updated with failing Py3.7 tests. * New upstream release for OpenStack Rocky. * d/control: Align (Build-)Depends with upstream. -- Corey Bryant <corey.bryant@canonical.com> Wed, 01 Aug 2018 09:52:49 -0400

Modifications :
  1. Download patch cinderclient/v2/shell.py

    --- 1:4.0.1-2/cinderclient/v2/shell.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/v2/shell.py 2018-10-08 18:03:35.000000000 +0000 @@ -290,7 +290,9 @@ class CheckSizeArgForCreate(argparse.Act dest='scheduler_hints', action='append', default=[], - help='Scheduler hint, like in nova.') + help='Scheduler hint, similar to nova. Repeat option to set ' + 'multiple hints. Values with the same key will be stored ' + 'as a list.') @utils.arg('--allow-multiattach', dest='multiattach', action="store_true",
  2. Download patch python_cinderclient.egg-info/PKG-INFO
  3. Download patch cinderclient/utils.py

    --- 1:4.0.1-2/cinderclient/utils.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/utils.py 2018-10-08 18:03:35.000000000 +0000 @@ -206,15 +206,27 @@ def unicode_key_value_to_string(src): def build_query_param(params, sort=False): """parse list to url query parameters""" - if params is None: - params = {} + if not params: + return "" + if not sort: param_list = list(params.items()) else: param_list = list(sorted(params.items())) query_string = parse.urlencode( - [(k, v) for (k, v) in param_list if v]) + [(k, v) for (k, v) in param_list if v not in (None, '')]) + + # urllib's parse library used to adhere to RFC 2396 until + # python 3.7. The library moved from RFC 2396 to RFC 3986 + # for quoting URL strings in python 3.7 and '~' is now + # included in the set of reserved characters. [1] + # + # Below ensures "~" is never encoded. See LP 1784728 [2] for more details. + # [1] https://docs.python.org/3/library/urllib.parse.html#url-quoting + # [2] https://bugs.launchpad.net/python-cinderclient/+bug/1784728 + query_string = query_string.replace("%7E=", "~=") + if query_string: query_string = "?%s" % (query_string,)
  4. Download patch cinderclient/v3/shell.py

    --- 1:4.0.1-2/cinderclient/v3/shell.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/v3/shell.py 2018-10-08 18:03:35.000000000 +0000 @@ -481,7 +481,7 @@ def do_reset_state(cs, args): type=int, action=CheckSizeArgForCreate, help='Size of volume, in GiBs. (Required unless ' - 'snapshot-id/source-volid is specified).') + 'snapshot-id/source-volid/backup-id is specified).') @utils.arg('--consisgroup-id', metavar='<consistencygroup-id>', default=None, @@ -560,7 +560,9 @@ def do_reset_state(cs, args): dest='scheduler_hints', action='append', default=[], - help='Scheduler hint, like in nova.') + help='Scheduler hint, similar to nova. Repeat option to set ' + 'multiple hints. Values with the same key will be stored ' + 'as a list.') @utils.arg('--allow-multiattach', dest='multiattach', action="store_true",
  5. Download patch debian/patches/skip-tests.patch

    --- 1:4.0.1-2/debian/patches/skip-tests.patch 2018-09-04 20:27:38.000000000 +0000 +++ 1:4.1.0-0ubuntu1/debian/patches/skip-tests.patch 2018-11-14 18:04:54.000000000 +0000 @@ -3,11 +3,9 @@ Author: Corey Bryant <corey.bryant@canon Bug-Ubuntu: https://bugs.launchpad.net/bugs/1749244 Bug-Ubuntu: https://bugs.launchpad.net/bugs/1784728 -Index: python-cinderclient/cinderclient/tests/unit/test_shell.py -=================================================================== ---- python-cinderclient.orig/cinderclient/tests/unit/test_shell.py -+++ python-cinderclient/cinderclient/tests/unit/test_shell.py -@@ -245,6 +245,7 @@ class ShellTest(utils.TestCase): +--- a/cinderclient/tests/unit/test_shell.py ++++ b/cinderclient/tests/unit/test_shell.py +@@ -234,6 +234,7 @@ self.assertEqual(False, _shell.cs.client.verify_cert) @@ -15,11 +13,9 @@ Index: python-cinderclient/cinderclient/ @mock.patch.object(cinderclient.client.SessionClient, 'authenticate', side_effect=exceptions.Unauthorized('No')) def test_session_client_debug_logger(self, mock_session): -Index: python-cinderclient/cinderclient/tests/unit/v3/test_shell.py -=================================================================== ---- python-cinderclient.orig/cinderclient/tests/unit/v3/test_shell.py -+++ python-cinderclient/cinderclient/tests/unit/v3/test_shell.py -@@ -44,6 +44,8 @@ import mock +--- a/cinderclient/tests/unit/v3/test_shell.py ++++ b/cinderclient/tests/unit/v3/test_shell.py +@@ -44,6 +44,8 @@ from requests_mock.contrib import fixture as requests_mock_fixture import six from six.moves.urllib import parse @@ -28,7 +24,7 @@ Index: python-cinderclient/cinderclient/ import cinderclient from cinderclient import base -@@ -114,6 +116,8 @@ class ShellTest(utils.TestCase): +@@ -111,6 +113,8 @@ self.assert_called('GET', url)
  6. Download patch python_cinderclient.egg-info/pbr.json

    --- 1:4.0.1-2/python_cinderclient.egg-info/pbr.json 1970-01-01 00:00:00.000000000 +0000 +++ 1:4.1.0-0ubuntu1/python_cinderclient.egg-info/pbr.json 2018-10-08 18:04:26.000000000 +0000 @@ -0,0 +1 @@ +{"git_version": "4e17e1d", "is_release": true} \ No newline at end of file
  7. Download patch python_cinderclient.egg-info/not-zip-safe

    --- 1:4.0.1-2/python_cinderclient.egg-info/not-zip-safe 1970-01-01 00:00:00.000000000 +0000 +++ 1:4.1.0-0ubuntu1/python_cinderclient.egg-info/not-zip-safe 2018-10-08 18:04:26.000000000 +0000 @@ -0,0 +1 @@ +
  8. Download patch PKG-INFO
  9. Download patch cinderclient/tests/unit/v3/test_volume_transfers.py

    --- 1:4.0.1-2/cinderclient/tests/unit/v3/test_volume_transfers.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/tests/unit/v3/test_volume_transfers.py 2018-10-08 18:03:35.000000000 +0000 @@ -17,55 +17,93 @@ from cinderclient import api_versions from cinderclient.tests.unit import utils from cinderclient.tests.unit.v3 import fakes +TRANSFER_URL = 'os-volume-transfer' +TRANSFER_355_URL = 'volume-transfers' # Create calls need the right version of faked client -v3cs = fakes.FakeClient(api_versions.APIVersion('3.55')) -# Other calls fall back to default behavior -cs = fakes.FakeClient() +v355cs = fakes.FakeClient(api_versions.APIVersion('3.55')) +# Other calls fall back to API extension behavior +v3cs = fakes.FakeClient(api_versions.APIVersion('3.0')) class VolumeTransfersTest(utils.TestCase): def test_create(self): vol = v3cs.transfers.create('1234') - v3cs.assert_called('POST', '/volume-transfers', - body={'transfer': {'volume_id': '1234', 'name': None, - 'no_snapshots': False}}) + v3cs.assert_called('POST', '/%s' % TRANSFER_URL, + body={'transfer': {'volume_id': '1234', + 'name': None}}) + self._assert_request_id(vol) + + def test_create_355(self): + vol = v355cs.transfers.create('1234') + v355cs.assert_called('POST', '/%s' % TRANSFER_355_URL, + body={'transfer': {'volume_id': '1234', + 'name': None, + 'no_snapshots': False}}) self._assert_request_id(vol) def test_create_without_snapshots(self): - vol = v3cs.transfers.create('1234', no_snapshots=True) - v3cs.assert_called('POST', '/volume-transfers', - body={'transfer': {'volume_id': '1234', 'name': None, - 'no_snapshots': True}}) + vol = v355cs.transfers.create('1234', no_snapshots=True) + v355cs.assert_called('POST', '/%s' % TRANSFER_355_URL, + body={'transfer': {'volume_id': '1234', + 'name': None, + 'no_snapshots': True}}) self._assert_request_id(vol) - def test_get(self): + def _test_get(self, client, expected_url): transfer_id = '5678' - vol = cs.transfers.get(transfer_id) - cs.assert_called('GET', '/os-volume-transfer/%s' % transfer_id) + vol = client.transfers.get(transfer_id) + client.assert_called('GET', '/%s/%s' % (expected_url, transfer_id)) self._assert_request_id(vol) - def test_list(self): - lst = cs.transfers.list() - cs.assert_called('GET', '/os-volume-transfer/detail') + def test_get(self): + self._test_get(v3cs, TRANSFER_URL) + + def test_get_355(self): + self._test_get(v355cs, TRANSFER_355_URL) + + def _test_list(self, client, expected_url): + lst = client.transfers.list() + client.assert_called('GET', '/%s/detail' % expected_url) self._assert_request_id(lst) - def test_delete(self): - b = cs.transfers.list()[0] + def test_list(self): + self._test_list(v3cs, TRANSFER_URL) + + def test_list_355(self): + self._test_list(v355cs, TRANSFER_355_URL) + + def _test_delete(self, client, expected_url): + url = '/%s/5678' % expected_url + b = client.transfers.list()[0] vol = b.delete() - cs.assert_called('DELETE', '/os-volume-transfer/5678') + client.assert_called('DELETE', url) self._assert_request_id(vol) - vol = cs.transfers.delete('5678') + vol = client.transfers.delete('5678') self._assert_request_id(vol) - cs.assert_called('DELETE', '/os-volume-transfer/5678') - vol = cs.transfers.delete(b) - cs.assert_called('DELETE', '/os-volume-transfer/5678') + client.assert_called('DELETE', url) + vol = client.transfers.delete(b) + client.assert_called('DELETE', url) self._assert_request_id(vol) - def test_accept(self): + def test_delete(self): + self._test_delete(v3cs, TRANSFER_URL) + + def test_delete_355(self): + self._test_delete(v355cs, TRANSFER_355_URL) + + def _test_accept(self, client, expected_url): transfer_id = '5678' auth_key = '12345' - vol = cs.transfers.accept(transfer_id, auth_key) - cs.assert_called('POST', '/os-volume-transfer/%s/accept' % transfer_id) + vol = client.transfers.accept(transfer_id, auth_key) + client.assert_called( + 'POST', + '/%s/%s/accept' % (expected_url, transfer_id)) self._assert_request_id(vol) + + def test_accept(self): + self._test_accept(v3cs, TRANSFER_URL) + + def test_accept_355(self): + self._test_accept(v355cs, TRANSFER_355_URL)
  10. Download patch README.rst

    --- 1:4.0.1-2/README.rst 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/README.rst 2018-10-08 18:03:35.000000000 +0000 @@ -36,7 +36,7 @@ This code is a fork of `Jacobian's pytho for the Rackspace API solely or the BSD license, you should use that repository. python-cinderclient is licensed under the Apache License like the rest of OpenStack. -__ https://github.com/jacobian-archive/python-cloudservers +__ https://github.com/rackerlabs/python-cloudservers * License: Apache License, Version 2.0 * `PyPi`_ - package installation
  11. Download patch cinderclient/client.py

    --- 1:4.0.1-2/cinderclient/client.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/client.py 2018-10-08 18:03:35.000000000 +0000 @@ -210,7 +210,13 @@ class SessionClient(adapter.LegacyJsonAd def _get_base_url(self): endpoint = self.get_endpoint() - base_url = '/'.join(endpoint.split('/')[:3]) + '/' + m = re.search('(.+)/v[1-3].*', endpoint) + if m: + # Get everything up until the version identifier + base_url = '%s/' % m.group(1) + else: + # Fall back to the root of the URL + base_url = '/'.join(endpoint.split('/')[:3]) + '/' return base_url def get_volume_api_version_from_endpoint(self):
  12. Download patch cinderclient/tests/unit/test_utils.py

    --- 1:4.0.1-2/cinderclient/tests/unit/test_utils.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/tests/unit/test_utils.py 2018-10-08 18:03:35.000000000 +0000 @@ -162,6 +162,7 @@ class CaptureStdout(object): self.read = self.stringio.read +@ddt.ddt class BuildQueryParamTestCase(test_utils.TestCase): def test_build_param_without_sort_switch(self): @@ -187,19 +188,17 @@ class BuildQueryParamTestCase(test_utils expected = "?key1=val1&key2=val2&key3=val3" self.assertEqual(expected, result) - def test_build_param_with_none(self): - dict_param = { - 'key1': 'val1', - 'key2': None, - 'key3': False, - 'key4': '' - } - result_1 = utils.build_query_param(dict_param) - result_2 = utils.build_query_param(None) - - expected = "?key1=val1" - self.assertEqual(expected, result_1) - self.assertFalse(result_2) + @ddt.data({}, + None, + {'key1': 'val1', 'key2': None, 'key3': False, 'key4': ''}) + def test_build_param_with_nones(self, dict_param): + result = utils.build_query_param(dict_param) + + expected = ("key1=val1", "key3=False") if dict_param else () + for exp in expected: + self.assertIn(exp, result) + if not expected: + self.assertEqual("", result) @ddt.ddt
  13. Download patch cinderclient/apiclient/base.py

    --- 1:4.0.1-2/cinderclient/apiclient/base.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/apiclient/base.py 2018-10-08 18:03:35.000000000 +0000 @@ -28,9 +28,9 @@ import copy from requests import Response import six -from six.moves.urllib import parse from cinderclient.apiclient import exceptions +from cinderclient import utils from oslo_utils import encodeutils from oslo_utils import strutils @@ -41,15 +41,10 @@ def getid(obj): Abstracts the common pattern of allowing both an object or an object's ID (UUID) as a parameter when dealing with relationships. """ - try: - if obj.uuid: - return obj.uuid - except AttributeError: - pass - try: - return obj.id - except AttributeError: - return obj + if getattr(obj, 'uuid', None): + return obj.uuid + else: + return getattr(obj, 'id', obj) # TODO(aababilov): call run_hooks() in HookableMixin's child classes @@ -330,7 +325,7 @@ class CrudManager(BaseManager): return self._list( '%(base_url)s%(query)s' % { 'base_url': self.build_url(base_url=base_url, **kwargs), - 'query': '?%s' % parse.urlencode(kwargs) if kwargs else '', + 'query': utils.build_query_param(kwargs), }, self.collection_key) @@ -369,7 +364,7 @@ class CrudManager(BaseManager): rl = self._list( '%(base_url)s%(query)s' % { 'base_url': self.build_url(base_url=base_url, **kwargs), - 'query': '?%s' % parse.urlencode(kwargs) if kwargs else '', + 'query': '?%s' % utils.build_query_param(kwargs), }, self.collection_key) num = len(rl)
  14. Download patch python_cinderclient.egg-info/top_level.txt

    --- 1:4.0.1-2/python_cinderclient.egg-info/top_level.txt 1970-01-01 00:00:00.000000000 +0000 +++ 1:4.1.0-0ubuntu1/python_cinderclient.egg-info/top_level.txt 2018-10-08 18:04:26.000000000 +0000 @@ -0,0 +1 @@ +cinderclient
  15. Download patch debian/compat

    --- 1:4.0.1-2/debian/compat 2018-09-04 20:27:38.000000000 +0000 +++ 1:4.1.0-0ubuntu1/debian/compat 2018-11-14 18:04:54.000000000 +0000 @@ -1 +1 @@ -9 +10
  16. Download patch .gitreview

    --- 1:4.0.1-2/.gitreview 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/.gitreview 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -[gerrit] -host=review.openstack.org -port=29418 -project=openstack/python-cinderclient.git
  17. Download patch debian/control

    --- 1:4.0.1-2/debian/control 2018-09-04 20:27:38.000000000 +0000 +++ 1:4.1.0-0ubuntu1/debian/control 2018-11-14 18:04:54.000000000 +0000 @@ -1,14 +1,15 @@ Source: python-cinderclient Section: python Priority: optional -Maintainer: Debian OpenStack <team+openstack@tracker.debian.org> +Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> +XSBC-Original-Maintainer: PKG OpenStack <openstack-devel@lists.alioth.debian.org> Uploaders: Corey Bryant <corey.bryant@canonical.com>, Thomas Goirand <zigo@debian.org>, Build-Depends: - debhelper (>= 9), + debhelper (>= 10~), dh-python, - openstack-pkg-tools, + openstack-pkg-tools (>= 52~), python-all, python-pbr (>= 2.0.0), python-setuptools, @@ -17,58 +18,69 @@ Build-Depends: python3-setuptools, python3-sphinx (>= 1.6.2), Build-Depends-Indep: - python-babel, - python-coverage, - python-ddt, - python-fixtures, - python-hacking, + python-babel (>= 2.3.4), + python-coverage (>= 4.0), + python-ddt (>= 1.0.1), + python-fixtures (>= 3.0.0), python-keystoneauth1 (>= 3.4.0), - python-mock, + python-mock (>= 2.0.0), + python-os-testr (>= 1.0.0), python-oslo.i18n (>= 3.15.3), python-oslo.serialization (>= 2.18.0), python-oslo.utils (>= 3.33.0), - python-prettytable, + python-prettytable (>= 0.7.1), + python-requests (>= 2.10.0), python-requests-mock (>= 1.2.0), - python-simplejson, - python-six, - python-stestr (>= 2.0.0), + python-simplejson (>= 3.5.1), + python-six (>= 1.10.0), + python-stestr, python-tempest (>= 1:17.1.0), + python-testrepository (>= 0.0.18), python-testtools (>= 2.2.0), python-unittest2, - python3-babel, - python3-ddt, - python3-fixtures, + python3-babel (>= 2.3.4), + python3-coverage (>= 4.0), + python3-ddt (>= 1.0.1), + python3-fixtures (>= 3.0.0), python3-keystoneauth1 (>= 3.4.0), - python3-mock, + python3-mock (>= 2.0.0), python3-openstackdocstheme (>= 1.18.1), + python3-os-testr (>= 1.0.0), python3-oslo.i18n (>= 3.15.3), python3-oslo.serialization (>= 2.18.0), python3-oslo.utils (>= 3.33.0), - python3-prettytable, + python3-prettytable (>= 0.7.1), + python3-reno (>= 2.5.0), + python3-requests (>= 2.10.0), python3-requests-mock (>= 1.2.0), - python3-simplejson, - python3-six, - python3-stestr (>= 2.0.0), + python3-simplejson (>= 3.5.1), + python3-six (>= 1.10.0), + python3-stestr, python3-subunit, python3-tempest (>= 1:17.1.0), + python3-testrepository (>= 0.0.18), python3-testtools (>= 2.2.0), subunit, + testrepository, Standards-Version: 4.1.3 -Vcs-Browser: https://salsa.debian.org/openstack-team/clients/python-cinderclient -Vcs-Git: https://salsa.debian.org/openstack-team/clients/python-cinderclient.git +Vcs-Browser: https://git.launchpad.net/~ubuntu-server-dev/ubuntu/+source/python-cinderclient +Vcs-Git: git://git.launchpad.net/~ubuntu-server-dev/ubuntu/+source/python-cinderclient Homepage: https://github.com/openstack/python-cinderclient +Testsuite: autopkgtest-pkg-python Package: python-cinderclient Architecture: all Depends: - python-babel, + python-babel (>= 2.3.4), python-keystoneauth1 (>= 3.4.0), python-oslo.i18n (>= 3.15.3), + python-oslo.serialization (>= 1.10.0), python-oslo.utils (>= 3.33.0), python-pbr (>= 2.0.0), - python-prettytable, - python-simplejson, - python-six, + python-prettytable (>= 0.7.1), + python-requests (>= 2.10.0), + python-simplejson (>= 3.5.1), + python-six (>= 1.10.0), ${misc:Depends}, ${python:Depends}, Provides: @@ -89,14 +101,16 @@ Description: Python bindings to the Open Package: python3-cinderclient Architecture: all Depends: - python3-babel, + python3-babel (>= 2.3.4), python3-keystoneauth1 (>= 3.4.0), python3-oslo.i18n (>= 3.15.3), + python3-oslo.serialization (>= 1.10.0), python3-oslo.utils (>= 3.33.0), python3-pbr (>= 2.0.0), - python3-prettytable, - python3-simplejson, - python3-six, + python3-prettytable (>= 0.7.1), + python3-requests (>= 2.10.0), + python3-simplejson (>= 3.5.1), + python3-six (>= 1.10.0), ${misc:Depends}, ${python3:Depends}, Provides:
  18. Download patch cinderclient/tests/unit/v3/test_shell.py

    --- 1:4.0.1-2/cinderclient/tests/unit/v3/test_shell.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/tests/unit/v3/test_shell.py 2018-10-08 18:03:35.000000000 +0000 @@ -131,37 +131,37 @@ class ShellTest(utils.TestCase): {'command': 'list --filters name~=456', 'expected': - '/volumes/detail?name%7E=456'}, + '/volumes/detail?name~=456'}, {'command': u'list --filters name~=Σ', 'expected': - '/volumes/detail?name%7E=%CE%A3'}, + '/volumes/detail?name~=%CE%A3'}, # testcases for list group {'command': 'group-list --filters name=456', 'expected': - '/groups/detail?name=456'}, + '/groups/detail?all_tenants=0&name=456'}, {'command': 'group-list --filters status=available', 'expected': - '/groups/detail?status=available'}, + '/groups/detail?all_tenants=0&status=available'}, {'command': 'group-list --filters name~=456', 'expected': - '/groups/detail?name%7E=456'}, + '/groups/detail?all_tenants=0&name~=456'}, # testcases for list group-snapshot {'command': 'group-snapshot-list --status=error --filters status=available', 'expected': - '/group_snapshots/detail?status=available'}, + '/group_snapshots/detail?all_tenants=0&status=available'}, {'command': 'group-snapshot-list --filters availability_zone=123', 'expected': - '/group_snapshots/detail?availability_zone=123'}, + '/group_snapshots/detail?all_tenants=0&availability_zone=123'}, {'command': 'group-snapshot-list --filters status~=available', 'expected': - '/group_snapshots/detail?status%7E=available'}, + '/group_snapshots/detail?all_tenants=0&status~=available'}, # testcases for list message {'command': 'message-list --event_id=123 --filters event_id=456', @@ -174,7 +174,7 @@ class ShellTest(utils.TestCase): {'command': 'message-list --filters request_id~=123', 'expected': - '/messages?request_id%7E=123'}, + '/messages?request_id~=123'}, # testcases for list attachment {'command': 'attachment-list --volume-id=123 --filters volume_id=456', @@ -187,7 +187,7 @@ class ShellTest(utils.TestCase): {'command': 'attachment-list --filters volume_id~=456', 'expected': - '/attachments?volume_id%7E=456'}, + '/attachments?volume_id~=456'}, # testcases for list backup {'command': 'backup-list --volume-id=123 --filters volume_id=456', @@ -200,7 +200,7 @@ class ShellTest(utils.TestCase): {'command': 'backup-list --filters volume_id~=456', 'expected': - '/backups/detail?volume_id%7E=456'}, + '/backups/detail?volume_id~=456'}, # testcases for list snapshot {'command': 'snapshot-list --volume-id=123 --filters volume_id=456', @@ -213,7 +213,7 @@ class ShellTest(utils.TestCase): {'command': 'snapshot-list --filters volume_id~=456', 'expected': - '/snapshots/detail?volume_id%7E=456'}, + '/snapshots/detail?volume_id~=456'}, # testcases for get pools {'command': 'get-pools --filters name=456 --detail', @@ -632,7 +632,7 @@ class ShellTest(utils.TestCase): def test_group_list(self): self.run_command('--os-volume-api-version 3.13 group-list') - self.assert_called_anytime('GET', '/groups/detail') + self.assert_called_anytime('GET', '/groups/detail?all_tenants=0') def test_group_list__with_all_tenant(self): self.run_command( @@ -691,7 +691,8 @@ class ShellTest(utils.TestCase): def test_group_snapshot_list(self): self.run_command('--os-volume-api-version 3.14 group-snapshot-list') - self.assert_called_anytime('GET', '/group_snapshots/detail') + self.assert_called_anytime('GET', + '/group_snapshots/detail?all_tenants=0') def test_group_snapshot_show(self): self.run_command('--os-volume-api-version 3.14 ' @@ -1338,7 +1339,7 @@ class ShellTest(utils.TestCase): expected = {'transfer': {'volume_id': 1234, 'name': None, }} - self.assert_called('POST', '/volume-transfers', body=expected) + self.assert_called('POST', '/os-volume-transfer', body=expected) def test_create_transfer_no_snaps(self): self.run_command('--os-volume-api-version 3.55 transfer-create '
  19. Download patch ChangeLog
  20. Download patch cinderclient/v1/volume_snapshots.py

    --- 1:4.0.1-2/cinderclient/v1/volume_snapshots.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/v1/volume_snapshots.py 2018-10-08 18:03:35.000000000 +0000 @@ -107,7 +107,7 @@ class SnapshotManager(base.ManagerWithFi :rtype: list of :class:`Snapshot` """ - query_string = utils.build_query_param(search_opts, True) + query_string = utils.build_query_param(search_opts, sort=True) detail = "" if detailed:
  21. Download patch cinderclient/tests/functional/test_volume_create_cli.py

    --- 1:4.0.1-2/cinderclient/tests/functional/test_volume_create_cli.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/tests/functional/test_volume_create_cli.py 2018-10-08 18:03:35.000000000 +0000 @@ -26,8 +26,8 @@ class CinderVolumeNegativeTests(base.Cli @ddt.data( ('', (r'Size is a required parameter')), - ('-1', (r'Invalid volume size provided for create request')), - ('0', (r"Volume size '0' must be an integer and greater than 0")), + ('-1', (r'Invalid input for field/attribute size')), + ('0', (r"Invalid input for field/attribute size")), ('size', (r'invalid int value')), ('0.2', (r'invalid int value')), ('2 GB', (r'unrecognized arguments')),
  22. Download patch cinderclient/v3/group_snapshots.py

    --- 1:4.0.1-2/cinderclient/v3/group_snapshots.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/v3/group_snapshots.py 2018-10-08 18:03:35.000000000 +0000 @@ -96,7 +96,7 @@ class GroupSnapshotManager(base.ManagerW :param search_opts: search options :rtype: list of :class:`GroupSnapshot` """ - query_string = utils.build_query_param(search_opts) + query_string = utils.build_query_param(search_opts, sort=True) detail = "" if detailed:
  23. Download patch .gitignore

    --- 1:4.0.1-2/.gitignore 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/.gitignore 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -/.* -!.gitignore -!.mailmap -!.stestr.conf -.*.sw? -subunit.log -*,cover -cover -covhtml -*.pyc -AUTHORS -ChangeLog -doc/build -releasenotes/build -build -dist -cinderclient/versioninfo -python_cinderclient.egg-info - -# pylint files -tools/lintstack.head.py -tools/pylint_exceptions
  24. Download patch python_cinderclient.egg-info/entry_points.txt

    --- 1:4.0.1-2/python_cinderclient.egg-info/entry_points.txt 1970-01-01 00:00:00.000000000 +0000 +++ 1:4.1.0-0ubuntu1/python_cinderclient.egg-info/entry_points.txt 2018-10-08 18:04:26.000000000 +0000 @@ -0,0 +1,6 @@ +[console_scripts] +cinder = cinderclient.shell:main + +[keystoneauth1.plugin] +noauth = cinderclient.contrib.noauth:CinderNoAuthLoader +
  25. Download patch python_cinderclient.egg-info/requires.txt

    --- 1:4.0.1-2/python_cinderclient.egg-info/requires.txt 1970-01-01 00:00:00.000000000 +0000 +++ 1:4.1.0-0ubuntu1/python_cinderclient.egg-info/requires.txt 2018-10-08 18:04:26.000000000 +0000 @@ -0,0 +1,8 @@ +pbr!=2.1.0,>=2.0.0 +PrettyTable<0.8,>=0.7.1 +keystoneauth1>=3.4.0 +simplejson>=3.5.1 +Babel!=2.4.0,>=2.3.4 +six>=1.10.0 +oslo.i18n>=3.15.3 +oslo.utils>=3.33.0
  26. Download patch releasenotes/source/index.rst

    --- 1:4.0.1-2/releasenotes/source/index.rst 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/releasenotes/source/index.rst 2018-10-08 18:03:35.000000000 +0000 @@ -6,6 +6,7 @@ :maxdepth: 1 unreleased + rocky queens pike ocata
  27. Download patch setup.cfg

    --- 1:4.0.1-2/setup.cfg 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/setup.cfg 2018-10-08 18:04:27.000000000 +0000 @@ -1,43 +1,46 @@ [metadata] name = python-cinderclient summary = OpenStack Block Storage API Client Library -description-file = - README.rst +description-file = + README.rst author = OpenStack author-email = openstack-dev@lists.openstack.org home-page = https://docs.openstack.org/python-cinderclient/latest/ -classifier = - Development Status :: 5 - Production/Stable - Environment :: Console - Environment :: OpenStack - Intended Audience :: Information Technology - Intended Audience :: System Administrators - License :: OSI Approved :: Apache Software License - Operating System :: POSIX :: Linux - Programming Language :: Python - Programming Language :: Python :: 2 - Programming Language :: Python :: 2.7 - Programming Language :: Python :: 3 - Programming Language :: Python :: 3.5 - +classifier = + Development Status :: 5 - Production/Stable + Environment :: Console + Environment :: OpenStack + Intended Audience :: Information Technology + Intended Audience :: System Administrators + License :: OSI Approved :: Apache Software License + Operating System :: POSIX :: Linux + Programming Language :: Python + Programming Language :: Python :: 2 + Programming Language :: Python :: 2.7 + Programming Language :: Python :: 3 + Programming Language :: Python :: 3.5 [global] -setup-hooks = - pbr.hooks.setup_hook +setup-hooks = + pbr.hooks.setup_hook [files] -packages = - cinderclient +packages = + cinderclient [entry_points] -console_scripts = - cinder = cinderclient.shell:main - -keystoneauth1.plugin = - noauth = cinderclient.contrib.noauth:CinderNoAuthLoader +console_scripts = + cinder = cinderclient.shell:main +keystoneauth1.plugin = + noauth = cinderclient.contrib.noauth:CinderNoAuthLoader [upload_sphinx] upload-dir = doc/build/html [wheel] universal = 1 + +[egg_info] +tag_build = +tag_date = 0 +
  28. Download patch cinderclient/v3/groups.py

    --- 1:4.0.1-2/cinderclient/v3/groups.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/v3/groups.py 2018-10-08 18:03:35.000000000 +0000 @@ -14,8 +14,6 @@ # under the License. """Group interface (v3 extension).""" -from six.moves.urllib import parse - from cinderclient import api_versions from cinderclient.apiclient import base as common_base from cinderclient import base @@ -140,11 +138,7 @@ class GroupManager(base.ManagerWithFind) :rtype: :class:`Group` """ query_params = utils.unicode_key_value_to_string(kwargs) - - query_string = "" - if query_params: - params = sorted(query_params.items(), key=lambda x: x[0]) - query_string = "?%s" % parse.urlencode(params) + query_string = utils.build_query_param(query_params, sort=True) return self._get("/groups/%s" % group_id + query_string, "group") @@ -159,7 +153,7 @@ class GroupManager(base.ManagerWithFind) if not search_opts: search_opts = {} search_opts['list_volume'] = True - query_string = utils.build_query_param(search_opts) + query_string = utils.build_query_param(search_opts, sort=True) detail = "" if detailed:
  29. Download patch cinderclient/tests/unit/test_client.py

    --- 1:4.0.1-2/cinderclient/tests/unit/test_client.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/tests/unit/test_client.py 2018-10-08 18:03:35.000000000 +0000 @@ -32,6 +32,7 @@ from cinderclient.tests.unit import util from cinderclient.tests.unit.v3 import fakes +@ddt.ddt class ClientTest(utils.TestCase): def test_get_client_class_v1(self): @@ -99,11 +100,21 @@ class ClientTest(utils.TestCase): unknown_url) @mock.patch('cinderclient.client.SessionClient.get_endpoint') - def test_get_base_url(self, mock_get_endpoint): - url = 'http://192.168.122.104:8776/v3/de50d1f33a38415fadfd3e1dea28f4d3' + @ddt.data( + ('http://192.168.1.1:8776/v2', 'http://192.168.1.1:8776/'), + ('http://192.168.1.1:8776/v3/e5526285ebd741b1819393f772f11fc3', + 'http://192.168.1.1:8776/'), + ('https://192.168.1.1:8080/volumes/v3/' + 'e5526285ebd741b1819393f772f11fc3', + 'https://192.168.1.1:8080/volumes/'), + ('http://192.168.1.1/volumes/v3/e5526285ebd741b1819393f772f11fc3', + 'http://192.168.1.1/volumes/'), + ('https://volume.example.com/', 'https://volume.example.com/')) + @ddt.unpack + def test_get_base_url(self, url, expected_base, mock_get_endpoint): mock_get_endpoint.return_value = url cs = cinderclient.client.SessionClient(self, api_version='3.0') - self.assertEqual('http://192.168.122.104:8776/', cs._get_base_url()) + self.assertEqual(expected_base, cs._get_base_url()) @mock.patch.object(adapter.Adapter, 'request') @mock.patch.object(exceptions, 'from_response')
  30. Download patch cinderclient/tests/unit/v1/test_shell.py

    --- 1:4.0.1-2/cinderclient/tests/unit/v1/test_shell.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/tests/unit/v1/test_shell.py 2018-10-08 18:03:35.000000000 +0000 @@ -101,7 +101,7 @@ class ShellTest(utils.TestCase): def test_list(self): self.run_command('list') # NOTE(jdg): we default to detail currently - self.assert_called('GET', '/volumes/detail') + self.assert_called('GET', '/volumes/detail?all_tenants=0') def test_list_filter_tenant_with_all_tenants(self): self.run_command('list --tenant=123 --all-tenants 1') @@ -184,11 +184,13 @@ class ShellTest(utils.TestCase): def test_list_filter_status(self): self.run_command('list --status=available') - self.assert_called('GET', '/volumes/detail?status=available') + self.assert_called('GET', + '/volumes/detail?all_tenants=0&status=available') def test_list_filter_display_name(self): self.run_command('list --display-name=1234') - self.assert_called('GET', '/volumes/detail?display_name=1234') + self.assert_called('GET', + '/volumes/detail?all_tenants=0&display_name=1234') def test_list_all_tenants(self): self.run_command('list --all-tenants=1') @@ -200,7 +202,7 @@ class ShellTest(utils.TestCase): def test_list_limit(self): self.run_command('list --limit=10') - self.assert_called('GET', '/volumes/detail?limit=10') + self.assert_called('GET', '/volumes/detail?all_tenants=0&limit=10') def test_show(self): self.run_command('show 1234') @@ -231,12 +233,13 @@ class ShellTest(utils.TestCase): def test_snapshot_list_filter_volume_id(self): self.run_command('snapshot-list --volume-id=1234') - self.assert_called('GET', '/snapshots/detail?volume_id=1234') + self.assert_called('GET', + '/snapshots/detail?all_tenants=0&volume_id=1234') def test_snapshot_list_filter_status_and_volume_id(self): self.run_command('snapshot-list --status=available --volume-id=1234') self.assert_called('GET', '/snapshots/detail?' - 'status=available&volume_id=1234') + 'all_tenants=0&status=available&volume_id=1234') def test_rename(self): # basic rename with positional arguments @@ -483,7 +486,7 @@ class ShellTest(utils.TestCase): def test_list_transfer(self): self.run_command('transfer-list') - self.assert_called('GET', '/os-volume-transfer/detail') + self.assert_called('GET', '/os-volume-transfer/detail?all_tenants=0') def test_list_transfer_all_tenants(self): self.run_command('transfer-list --all-tenants=1')
  31. Download patch releasenotes/source/rocky.rst

    --- 1:4.0.1-2/releasenotes/source/rocky.rst 1970-01-01 00:00:00.000000000 +0000 +++ 1:4.1.0-0ubuntu1/releasenotes/source/rocky.rst 2018-10-08 18:03:35.000000000 +0000 @@ -0,0 +1,6 @@ +=================================== + Rocky Series Release Notes +=================================== + +.. release-notes:: + :branch: stable/rocky
  32. Download patch cinderclient/v3/volume_transfers.py

    --- 1:4.0.1-2/cinderclient/v3/volume_transfers.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/v3/volume_transfers.py 2018-10-08 18:03:35.000000000 +0000 @@ -13,10 +13,10 @@ # License for the specific language governing permissions and limitations # under the License. -""" -Volume transfer interface (v3 extension). -""" +"""Volume transfer interface (v3 extension).""" +from cinderclient import base +from cinderclient import utils from cinderclient.v2 import volume_transfers @@ -33,4 +33,63 @@ class VolumeTransferManager(volume_trans 'name': name}} if self.api_version.matches('3.55'): body['transfer']['no_snapshots'] = no_snapshots - return self._create('/volume-transfers', body, 'transfer') + return self._create('/volume-transfers', body, 'transfer') + + return self._create('/os-volume-transfer', body, 'transfer') + + def accept(self, transfer_id, auth_key): + """Accept a volume transfer. + + :param transfer_id: The ID of the transfer to accept. + :param auth_key: The auth_key of the transfer. + :rtype: :class:`VolumeTransfer` + """ + body = {'accept': {'auth_key': auth_key}} + if self.api_version.matches('3.55'): + return self._create('/volume-transfers/%s/accept' % transfer_id, + body, 'transfer') + + return self._create('/os-volume-transfer/%s/accept' % transfer_id, + body, 'transfer') + + def get(self, transfer_id): + """Show details of a volume transfer. + + :param transfer_id: The ID of the volume transfer to display. + :rtype: :class:`VolumeTransfer` + """ + if self.api_version.matches('3.55'): + return self._get("/volume-transfers/%s" % transfer_id, "transfer") + + return self._get("/os-volume-transfer/%s" % transfer_id, "transfer") + + def list(self, detailed=True, search_opts=None): + """Get a list of all volume transfer. + + :param detailed: Get detailed object information. + :param search_opts: Filtering options. + :rtype: list of :class:`VolumeTransfer` + """ + query_string = utils.build_query_param(search_opts) + + detail = "" + if detailed: + detail = "/detail" + + if self.api_version.matches('3.55'): + return self._list("/volume-transfers%s%s" % (detail, query_string), + "transfers") + + return self._list("/os-volume-transfer%s%s" % (detail, query_string), + "transfers") + + def delete(self, transfer_id): + """Delete a volume transfer. + + :param transfer_id: The :class:`VolumeTransfer` to delete. + """ + if self.api_version.matches('3.55'): + return self._delete( + "/volume-transfers/%s" % base.getid(transfer_id)) + + return self._delete("/os-volume-transfer/%s" % base.getid(transfer_id))
  33. Download patch python_cinderclient.egg-info/SOURCES.txt
  34. Download patch cinderclient/tests/unit/v2/test_capabilities.py

    --- 1:4.0.1-2/cinderclient/tests/unit/v2/test_capabilities.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/tests/unit/v2/test_capabilities.py 2018-10-08 18:03:35.000000000 +0000 @@ -53,3 +53,8 @@ class CapabilitiesTest(utils.TestCase): cap = Capabilities(None, FAKE_CAPABILITY) self.assertEqual( "<Capabilities: %s>" % FAKE_CAPABILITY['namespace'], repr(cap)) + + def test__repr__when_empty(self): + cap = Capabilities(None, {}) + self.assertEqual( + "<Capabilities: None>", repr(cap))
  35. Download patch cinderclient/shell.py

    --- 1:4.0.1-2/cinderclient/shell.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/shell.py 2018-10-08 18:03:35.000000000 +0000 @@ -51,7 +51,6 @@ from cinderclient import utils _i18n.enable_lazy() -DEFAULT_MAJOR_OS_VOLUME_API_VERSION = "3" DEFAULT_CINDER_ENDPOINT_TYPE = 'publicURL' V1_SHELL = 'cinderclient.v1.shell' V2_SHELL = 'cinderclient.v2.shell' @@ -534,7 +533,7 @@ class OpenStackCinderShell(object): if not options.os_volume_api_version: api_version = api_versions.get_api_version( - DEFAULT_MAJOR_OS_VOLUME_API_VERSION) + api_versions.MAX_VERSION) else: api_version = api_versions.get_api_version( options.os_volume_api_version)
  36. Download patch cinderclient/v2/capabilities.py

    --- 1:4.0.1-2/cinderclient/v2/capabilities.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/v2/capabilities.py 2018-10-08 18:03:35.000000000 +0000 @@ -22,7 +22,7 @@ class Capabilities(base.Resource): NAME_ATTR = 'name' def __repr__(self): - return "<Capabilities: %s>" % self._info['namespace'] + return "<Capabilities: %s>" % self._info.get('namespace') class CapabilitiesManager(base.Manager):
  37. Download patch cinderclient/base.py

    --- 1:4.0.1-2/cinderclient/base.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/base.py 2018-10-08 18:03:35.000000000 +0000 @@ -24,7 +24,6 @@ import hashlib import os import six -from six.moves.urllib import parse from cinderclient.apiclient import base as common_base from cinderclient import exceptions @@ -53,10 +52,7 @@ def getid(obj): Abstracts the common pattern of allowing both an object or an object's ID as a parameter when dealing with relationships. """ - try: - return obj.id - except AttributeError: - return obj + return getattr(obj, 'id', obj) class Manager(common_base.HookableMixin): @@ -173,10 +169,8 @@ class Manager(common_base.HookableMixin) query_params = utils.unicode_key_value_to_string(query_params) # Transform the dict to a sequence of two-element tuples in fixed # order, then the encoded string will be consistent in Python 2&3. - query_string = "" - if query_params: - params = sorted(query_params.items(), key=lambda x: x[0]) - query_string = "?%s" % parse.urlencode(params) + + query_string = utils.build_query_param(query_params, sort=True) detail = "" if detailed:
  38. Download patch AUTHORS
  39. Download patch cinderclient/v1/volumes.py

    --- 1:4.0.1-2/cinderclient/v1/volumes.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/v1/volumes.py 2018-10-08 18:03:35.000000000 +0000 @@ -203,7 +203,7 @@ class VolumeManager(base.ManagerWithFind if limit: search_opts['limit'] = limit - query_string = utils.build_query_param(search_opts, True) + query_string = utils.build_query_param(search_opts, sort=True) detail = "" if detailed:
  40. Download patch .zuul.yaml

    --- 1:4.0.1-2/.zuul.yaml 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/.zuul.yaml 2018-10-08 18:03:35.000000000 +0000 @@ -24,11 +24,20 @@ - project: + templates: + - check-requirements + - lib-forward-testing + - lib-forward-testing-python3 + - openstack-cover-jobs + - openstack-lower-constraints-jobs + - openstack-python-jobs + - openstack-python35-jobs + - openstack-python36-jobs + - publish-openstack-docs-pti + - release-notes-jobs-python3 check: jobs: - cinderclient-dsvm-functional - cinderclient-dsvm-functional-identity-v3-only - - openstack-tox-lower-constraints - gate: - jobs: - - openstack-tox-lower-constraints + - openstack-tox-pylint: + voting: false
  41. Download patch debian/gbp.conf

    --- 1:4.0.1-2/debian/gbp.conf 1970-01-01 00:00:00.000000000 +0000 +++ 1:4.1.0-0ubuntu1/debian/gbp.conf 2018-11-14 18:04:54.000000000 +0000 @@ -0,0 +1,7 @@ +[DEFAULT] +debian-branch = master +upstream-tag = %(version)s +pristine-tar = True + +[buildpackage] +export-dir = ../build-area
  42. Download patch python_cinderclient.egg-info/dependency_links.txt

    --- 1:4.0.1-2/python_cinderclient.egg-info/dependency_links.txt 1970-01-01 00:00:00.000000000 +0000 +++ 1:4.1.0-0ubuntu1/python_cinderclient.egg-info/dependency_links.txt 2018-10-08 18:04:26.000000000 +0000 @@ -0,0 +1 @@ +
  43. Download patch cinderclient/v2/limits.py

    --- 1:4.0.1-2/cinderclient/v2/limits.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/v2/limits.py 2018-10-08 18:03:35.000000000 +0000 @@ -14,9 +14,8 @@ # limitations under the License. """Limits interface (v2 extension)""" -from six.moves.urllib import parse - from cinderclient import base +from cinderclient import utils class Limits(base.Resource): @@ -95,6 +94,6 @@ class LimitsManager(base.Manager): if tenant_id: opts['tenant_id'] = tenant_id - query_string = "?%s" % parse.urlencode(opts) if opts else "" + query_string = utils.build_query_param(opts) return self._get("/limits%s" % query_string, "limits")
  44. Download patch cinderclient/tests/unit/v2/test_shell.py

    --- 1:4.0.1-2/cinderclient/tests/unit/v2/test_shell.py 2018-07-31 21:22:17.000000000 +0000 +++ 1:4.1.0-0ubuntu1/cinderclient/tests/unit/v2/test_shell.py 2018-10-08 18:03:35.000000000 +0000 @@ -1176,7 +1176,7 @@ class ShellTest(utils.TestCase): def test_list_transfer(self): self.run_command('transfer-list') - self.assert_called('GET', '/os-volume-transfer/detail') + self.assert_called('GET', '/os-volume-transfer/detail?all_tenants=0') def test_list_transfer_all_tenants(self): self.run_command('transfer-list --all-tenants=1')
  1. python-cinderclient