jruzicka pushed to python-openstackclient (master). "Give up nuking pbr (..more)"

notifications at fedoraproject.org notifications at fedoraproject.org
Wed Apr 29 18:01:49 UTC 2015


>From 97574a72b6e717f53e7781bf35248a0b63a01445 Mon Sep 17 00:00:00 2001
From: Jakub Ruzicka <jruzicka at redhat.com>
Date: Wed, 29 Apr 2015 19:00:56 +0200
Subject: Give up nuking pbr

Changelog:
- Give up nuking pbr
- Add the ability to set and unset flavor properties
- Use %license

diff --git a/0001-Add-the-ability-to-set-and-unset-flavor-properties.patch b/0001-Add-the-ability-to-set-and-unset-flavor-properties.patch
new file mode 100644
index 0000000..c6f3bde
--- /dev/null
+++ b/0001-Add-the-ability-to-set-and-unset-flavor-properties.patch
@@ -0,0 +1,269 @@
+From 4aa10e818a323056cc8679384da36827af313f9d Mon Sep 17 00:00:00 2001
+From: Marek Aufart <maufart at redhat.com>
+Date: Tue, 17 Mar 2015 15:38:24 +0100
+Subject: [PATCH] Add the ability to set and unset flavor properties
+
+Added flavor set and unset command which allow manage flavor
+properties called extra_specs.
+
+Command flavor show output was extended with these properties.
+
+Closes-Bug: 1434137
+Change-Id: Ie469bade802de18aab9d58eda3fff46064008163
+(cherry picked from commit 621434451f561e7ef7c549a134f3bfadcf10520f)
+---
+ doc/source/command-objects/flavor.rst           | 40 +++++++++++++
+ openstackclient/compute/v2/flavor.py            | 78 ++++++++++++++++++++++++-
+ openstackclient/tests/compute/v2/test_flavor.py | 77 +++++++++++++++++++++++-
+ setup.cfg                                       |  2 +
+ 4 files changed, 193 insertions(+), 4 deletions(-)
+
+diff --git a/doc/source/command-objects/flavor.rst b/doc/source/command-objects/flavor.rst
+index fa9fd80..5254b12 100644
+--- a/doc/source/command-objects/flavor.rst
++++ b/doc/source/command-objects/flavor.rst
+@@ -123,3 +123,43 @@ Display flavor details
+ .. describe:: <flavor>
+ 
+     Flavor to display (name or ID)
++
++flavor set
++----------
++
++Set flavor properties
++
++.. program:: flavor set
++.. code:: bash
++
++    os flavor set
++        [--property <key=value> [...] ]
++        <flavor>
++
++.. option:: --property <key=value>
++
++    Property to add or modify for this flavor (repeat option to set multiple properties)
++
++.. describe:: <flavor>
++
++    Flavor to modify (name or ID)
++
++flavor unset
++------------
++
++Unset flavor properties
++
++.. program:: flavor unset
++.. code:: bash
++
++    os flavor unset
++        [--property <key> [...] ]
++        <flavor>
++
++.. option:: --property <key>
++
++    Property to remove from flavor (repeat option to remove multiple properties)
++
++.. describe:: <flavor>
++
++    Flavor to modify (name or ID)
+diff --git a/openstackclient/compute/v2/flavor.py b/openstackclient/compute/v2/flavor.py
+index 195c9a0..eb18a43 100644
+--- a/openstackclient/compute/v2/flavor.py
++++ b/openstackclient/compute/v2/flavor.py
+@@ -22,6 +22,7 @@ from cliff import command
+ from cliff import lister
+ from cliff import show
+ 
++from openstackclient.common import parseractions
+ from openstackclient.common import utils
+ 
+ 
+@@ -237,8 +238,79 @@ class ShowFlavor(show.ShowOne):
+     def take_action(self, parsed_args):
+         self.log.debug("take_action(%s)", parsed_args)
+         compute_client = self.app.client_manager.compute
+-        flavor = utils.find_resource(compute_client.flavors,
+-                                     parsed_args.flavor)._info.copy()
+-        flavor.pop("links")
++        resource_flavor = utils.find_resource(compute_client.flavors,
++                                              parsed_args.flavor)
++        flavor = resource_flavor._info.copy()
++        flavor.pop("links", None)
++
++        flavor['properties'] = utils.format_dict(resource_flavor.get_keys())
++
++        return zip(*sorted(six.iteritems(flavor)))
++
++
++class SetFlavor(show.ShowOne):
++    """Set flavor properties"""
++
++    log = logging.getLogger(__name__ + ".SetFlavor")
++
++    def get_parser(self, prog_name):
++        parser = super(SetFlavor, self).get_parser(prog_name)
++        parser.add_argument(
++            "--property",
++            metavar="<key=value>",
++            action=parseractions.KeyValueAction,
++            help='Property to add or modify for this flavor '
++                 '(repeat option to set multiple properties)',
++        )
++        parser.add_argument(
++            "flavor",
++            metavar="<flavor>",
++            help="Flavor to modify (name or ID)",
++        )
++        return parser
++
++    def take_action(self, parsed_args):
++        self.log.debug("take_action(%s)", parsed_args)
++        compute_client = self.app.client_manager.compute
++        resource_flavor = compute_client.flavors.find(name=parsed_args.flavor)
++
++        resource_flavor.set_keys(parsed_args.property)
++
++        flavor = resource_flavor._info.copy()
++        flavor['properties'] = utils.format_dict(resource_flavor.get_keys())
++        flavor.pop("links", None)
++        return zip(*sorted(six.iteritems(flavor)))
++
++
++class UnsetFlavor(show.ShowOne):
++    """Unset flavor properties"""
++
++    log = logging.getLogger(__name__ + ".UnsetFlavor")
++
++    def get_parser(self, prog_name):
++        parser = super(UnsetFlavor, self).get_parser(prog_name)
++        parser.add_argument(
++            "--property",
++            metavar="<key>",
++            action='append',
++            help='Property to remove from flavor '
++                 '(repeat option to unset multiple properties)',
++        )
++        parser.add_argument(
++            "flavor",
++            metavar="<flavor>",
++            help="Flavor to modify (name or ID)",
++        )
++        return parser
++
++    def take_action(self, parsed_args):
++        self.log.debug("take_action(%s)", parsed_args)
++        compute_client = self.app.client_manager.compute
++        resource_flavor = compute_client.flavors.find(name=parsed_args.flavor)
++
++        resource_flavor.unset_keys(parsed_args.property)
+ 
++        flavor = resource_flavor._info.copy()
++        flavor['properties'] = utils.format_dict(resource_flavor.get_keys())
++        flavor.pop("links", None)
+         return zip(*sorted(six.iteritems(flavor)))
+diff --git a/openstackclient/tests/compute/v2/test_flavor.py b/openstackclient/tests/compute/v2/test_flavor.py
+index 8f33ccf..19be812 100644
+--- a/openstackclient/tests/compute/v2/test_flavor.py
++++ b/openstackclient/tests/compute/v2/test_flavor.py
+@@ -22,8 +22,17 @@ from openstackclient.tests import fakes
+ 
+ class FakeFlavorResource(fakes.FakeResource):
+ 
++    _keys = {'property': 'value'}
++
++    def set_keys(self, args):
++        self._keys.update(args)
++
++    def unset_keys(self, keys):
++        for key in keys:
++            self._keys.pop(key, None)
++
+     def get_keys(self):
+-        return {'property': 'value'}
++        return self._keys
+ 
+ 
+ class TestFlavor(compute_fakes.TestComputev2):
+@@ -272,3 +281,69 @@ class TestFlavorList(TestFlavor):
+             'property=\'value\''
+         ), )
+         self.assertEqual(datalist, tuple(data))
++
++
++class TestFlavorSet(TestFlavor):
++
++    def setUp(self):
++        super(TestFlavorSet, self).setUp()
++
++        self.flavors_mock.find.return_value = FakeFlavorResource(
++            None,
++            copy.deepcopy(compute_fakes.FLAVOR),
++            loaded=True,
++        )
++
++        self.cmd = flavor.SetFlavor(self.app, None)
++
++    def test_flavor_set(self):
++        arglist = [
++            '--property', 'FOO="B A R"',
++            'baremetal'
++        ]
++        verifylist = [
++            ('property', {'FOO': '"B A R"'}),
++            ('flavor', 'baremetal')
++        ]
++
++        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
++
++        columns, data = self.cmd.take_action(parsed_args)
++
++        self.flavors_mock.find.assert_called_with(name='baremetal')
++
++        self.assertEqual('properties', columns[2])
++        self.assertIn('FOO=\'"B A R"\'', data[2])
++
++
++class TestFlavorUnset(TestFlavor):
++
++    def setUp(self):
++        super(TestFlavorUnset, self).setUp()
++
++        self.flavors_mock.find.return_value = FakeFlavorResource(
++            None,
++            copy.deepcopy(compute_fakes.FLAVOR),
++            loaded=True,
++        )
++
++        self.cmd = flavor.UnsetFlavor(self.app, None)
++
++    def test_flavor_unset(self):
++        arglist = [
++            '--property', 'property',
++            'baremetal'
++        ]
++        verifylist = [
++            ('property', ['property']),
++            ('flavor', 'baremetal'),
++        ]
++
++        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
++
++        columns, data = self.cmd.take_action(parsed_args)
++
++        self.flavors_mock.find.assert_called_with(name='baremetal')
++
++        self.assertEqual('properties', columns[2])
++        self.assertNotIn('property', data[2])
+diff --git a/setup.cfg b/setup.cfg
+index 444981d..91effc9 100644
+--- a/setup.cfg
++++ b/setup.cfg
+@@ -65,6 +65,8 @@ openstack.compute.v2 =
+ 	flavor_delete = openstackclient.compute.v2.flavor:DeleteFlavor
+ 	flavor_list = openstackclient.compute.v2.flavor:ListFlavor
+ 	flavor_show = openstackclient.compute.v2.flavor:ShowFlavor
++	flavor_set = openstackclient.compute.v2.flavor:SetFlavor
++	flavor_unset = openstackclient.compute.v2.flavor:UnsetFlavor
+ 	host_list = openstackclient.compute.v2.host:ListHost
+ 	host_show = openstackclient.compute.v2.host:ShowHost
+ 	hypervisor_list = openstackclient.compute.v2.hypervisor:ListHypervisor
diff --git a/0001-Remove-runtime-dependency-on-python-pbr.patch b/0001-Remove-runtime-dependency-on-python-pbr.patch
deleted file mode 100644
index 6d37def..0000000
--- a/0001-Remove-runtime-dependency-on-python-pbr.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From a45ab368b57891aaa6d6152ec296021dc8aa3e52 Mon Sep 17 00:00:00 2001
-From: Jakub Ruzicka <jruzicka at redhat.com>
-Date: Tue, 8 Apr 2014 15:50:33 +0200
-Subject: [PATCH] Remove runtime dependency on python-pbr
-
-Also remove pbr/pkg_resources requirements handling.
-
-ERROR: openstackclient.shell Exception raised: \
-  (pycrypto 2.0.1 (/usr/lib64/python2.6/site-packages), Requirement.parse('pycrypto>=2.6'))
-
-DO NOT WANT
----
- openstackclient/__init__.py | 8 +-------
- setup.py                    | 1 -
- 2 files changed, 1 insertion(+), 8 deletions(-)
-
-diff --git a/openstackclient/__init__.py b/openstackclient/__init__.py
-index 89deee3..b55482b 100644
---- a/openstackclient/__init__.py
-+++ b/openstackclient/__init__.py
-@@ -13,10 +13,4 @@
- 
- __all__ = ['__version__']
- 
--import pbr.version
--
--version_info = pbr.version.VersionInfo('python-openstackclient')
--try:
--    __version__ = version_info.version_string()
--except AttributeError:
--    __version__ = None
-+__version__ = 'REDHATOPENSTACKCLIENTVERSION'
-diff --git a/setup.py b/setup.py
-index 7363757..09230a0 100644
---- a/setup.py
-+++ b/setup.py
-@@ -26,5 +26,4 @@ except ImportError:
-     pass
- 
- setuptools.setup(
--    setup_requires=['pbr'],
-     pbr=True)
diff --git a/python-openstackclient.spec b/python-openstackclient.spec
index 16b4929..efbaf61 100644
--- a/python-openstackclient.spec
+++ b/python-openstackclient.spec
@@ -1,14 +1,17 @@
 Name:             python-openstackclient
 Version:          1.0.3
-Release:          1%{?dist}
+Release:          2%{?dist}
 Summary:          OpenStack Command-line Client
 
 Group:            Development/Languages
 License:          ASL 2.0
-URL:              http://github.com/openstack/python-openstackclient
+URL:              http://github.com/openstack/%{name}
 Source0:          http://pypi.python.org/packages/source/p/%{name}/%{name}-%{version}.tar.gz
 
-Patch0001: 0001-Remove-runtime-dependency-on-python-pbr.patch
+#
+# patches_base=+1
+#
+Patch0001: 0001-Add-the-ability-to-set-and-unset-flavor-properties.patch
 
 BuildArch:        noarch
 
@@ -19,6 +22,7 @@ BuildRequires:    python-d2to1
 BuildRequires:    python-oslo-sphinx
 BuildRequires:    git
 
+Requires:         python-pbr
 Requires:         python-babel
 Requires:         python-cliff
 Requires:         python-crypto
@@ -67,9 +71,6 @@ git add .
 git commit -a -q -m "%{version} baseline"
 git am %{patches}
 
-# We provide version like this in order to remove runtime dep on pbr
-sed -i s/REDHATOPENSTACKCLIENTVERSION/%{version}/ openstackclient/__init__.py
-
 # We handle requirements ourselves, pkg_resources only bring pain
 rm -rf requirements.txt test-requirements.txt
 
@@ -97,16 +98,23 @@ install -p -D -m 644 man/openstack.1 %{buildroot}%{_mandir}/man1/openstack.1
 rm -fr html/.doctrees html/.buildinfo
 
 %files
-%doc LICENSE README.rst
+%license LICENSE
+%doc README.rst
 %{_bindir}/openstack
 %{python_sitelib}/openstackclient
 %{python_sitelib}/*.egg-info
 %{_mandir}/man1/openstack.1*
 
 %files doc
+%license LICENSE
 %doc html
 
 %changelog
+* Wed Apr 29 2015 Jakub Ruzicka <jruzicka at redhat.com> 1.0.3-2
+- Give up nuking pbr
+- Add the ability to set and unset flavor properties
+- Use %license
+
 * Tue Mar 31 2015 Jakub Ruzicka <jruzicka at redhat.com> 1.0.3-1
 - Update to upstream 1.0.3
 
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/python-openstackclient.git/commit/?h=master&id=97574a72b6e717f53e7781bf35248a0b63a01445


More information about the scm-commits mailing list