From e5a3c403e5982df8ab6a29d84c45aa2f8f3a10dc Mon Sep 17 00:00:00 2001
From: Huanxuan Ao <huanxuan.ao@easystack.cn>
Date: Wed, 13 Jul 2016 19:28:11 +0800
Subject: [PATCH] Make set/unset commands pass normally when nothing specified
 in identityv3

Change-Id: I554b41969f96b62a2c6d37024caa56b1441d5ed1
Partial-bug: #1588588
---
 openstackclient/identity/v3/consumer.py             |  6 ------
 openstackclient/identity/v3/domain.py               |  4 ----
 openstackclient/identity/v3/endpoint.py             |  8 --------
 openstackclient/identity/v3/federation_protocol.py  |  4 ----
 openstackclient/identity/v3/group.py                |  3 ---
 openstackclient/identity/v3/identity_provider.py    |  8 --------
 openstackclient/identity/v3/mapping.py              |  4 ----
 openstackclient/identity/v3/policy.py               |  5 -----
 openstackclient/identity/v3/project.py              |  7 -------
 openstackclient/identity/v3/region.py               |  2 --
 openstackclient/identity/v3/role.py                 |  4 ----
 openstackclient/identity/v3/service.py              | 10 ----------
 openstackclient/identity/v3/service_provider.py     |  9 ---------
 openstackclient/identity/v3/user.py                 | 13 -------------
 openstackclient/tests/identity/v3/test_domain.py    |  6 +++++-
 openstackclient/tests/identity/v3/test_endpoint.py  | 12 +++++++++++-
 .../tests/identity/v3/test_identity_provider.py     |  4 ++--
 openstackclient/tests/identity/v3/test_region.py    |  6 +++++-
 .../tests/identity/v3/test_service_provider.py      | 11 +++++++++--
 19 files changed, 32 insertions(+), 94 deletions(-)

diff --git a/openstackclient/identity/v3/consumer.py b/openstackclient/identity/v3/consumer.py
index a4620bf9ef..65bf657feb 100644
--- a/openstackclient/identity/v3/consumer.py
+++ b/openstackclient/identity/v3/consumer.py
@@ -15,8 +15,6 @@
 
 """Identity v3 Consumer action implementations"""
 
-import sys
-
 from osc_lib.command import command
 from osc_lib import utils
 import six
@@ -102,10 +100,6 @@ class SetConsumer(command.Command):
         if parsed_args.description:
             kwargs['description'] = parsed_args.description
 
-        if not len(kwargs):
-            sys.stdout.write(_('Consumer not updated, no arguments present\n'))
-            return
-
         consumer = identity_client.oauth1.consumers.update(
             consumer.id, **kwargs)
 
diff --git a/openstackclient/identity/v3/domain.py b/openstackclient/identity/v3/domain.py
index 0546ac5217..3e9bcf6344 100755
--- a/openstackclient/identity/v3/domain.py
+++ b/openstackclient/identity/v3/domain.py
@@ -16,7 +16,6 @@
 """Identity v3 Domain action implementations"""
 
 import logging
-import sys
 
 from keystoneauth1 import exceptions as ks_exc
 from osc_lib.command import command
@@ -168,9 +167,6 @@ class SetDomain(command.Command):
         if parsed_args.disable:
             kwargs['enabled'] = False
 
-        if not kwargs:
-            sys.stdout.write(_("Domain not updated, no arguments present\n"))
-            return
         identity_client.domains.update(domain.id, **kwargs)
 
 
diff --git a/openstackclient/identity/v3/endpoint.py b/openstackclient/identity/v3/endpoint.py
index 2f1cc9f3ce..bd2df361d1 100644
--- a/openstackclient/identity/v3/endpoint.py
+++ b/openstackclient/identity/v3/endpoint.py
@@ -15,8 +15,6 @@
 
 """Identity v3 Endpoint action implementations"""
 
-import sys
-
 from osc_lib.command import command
 from osc_lib import utils
 import six
@@ -212,12 +210,6 @@ class SetEndpoint(command.Command):
         endpoint = utils.find_resource(identity_client.endpoints,
                                        parsed_args.endpoint)
 
-        if (not parsed_args.interface and not parsed_args.url
-                and not parsed_args.service and not parsed_args.region
-                and not parsed_args.enabled and not parsed_args.disabled):
-            sys.stdout.write(_("Endpoint not updated, no arguments present\n"))
-            return
-
         service_id = None
         if parsed_args.service:
             service = common.find_service(identity_client, parsed_args.service)
diff --git a/openstackclient/identity/v3/federation_protocol.py b/openstackclient/identity/v3/federation_protocol.py
index 094802455a..0369bc3d06 100644
--- a/openstackclient/identity/v3/federation_protocol.py
+++ b/openstackclient/identity/v3/federation_protocol.py
@@ -149,10 +149,6 @@ class SetProtocol(command.Command):
     def take_action(self, parsed_args):
         identity_client = self.app.client_manager.identity
 
-        if not parsed_args.mapping:
-            LOG.error(_("No changes requested"))
-            return
-
         protocol = identity_client.federation.protocols.update(
             parsed_args.identity_provider, parsed_args.federation_protocol,
             parsed_args.mapping)
diff --git a/openstackclient/identity/v3/group.py b/openstackclient/identity/v3/group.py
index c79a64e782..f780810afa 100755
--- a/openstackclient/identity/v3/group.py
+++ b/openstackclient/identity/v3/group.py
@@ -343,9 +343,6 @@ class SetGroup(command.Command):
         if parsed_args.description:
             kwargs['description'] = parsed_args.description
 
-        if not len(kwargs):
-            sys.stderr.write("Group not updated, no arguments present\n")
-            return
         identity_client.groups.update(group.id, **kwargs)
 
 
diff --git a/openstackclient/identity/v3/identity_provider.py b/openstackclient/identity/v3/identity_provider.py
index 5c638f9b6b..6fc9b13ce2 100644
--- a/openstackclient/identity/v3/identity_provider.py
+++ b/openstackclient/identity/v3/identity_provider.py
@@ -169,14 +169,6 @@ class SetIdentityProvider(command.Command):
     def take_action(self, parsed_args):
         federation_client = self.app.client_manager.identity.federation
 
-        # Basic argument checking
-        if (not parsed_args.enable and not parsed_args.disable and
-                not parsed_args.remote_id and
-                not parsed_args.remote_id_file and
-                not parsed_args.description):
-            LOG.error(_('No changes requested'))
-            return (None, None)
-
         # Always set remote_ids if either is passed in
         if parsed_args.remote_id_file:
             file_content = utils.read_blob_file_contents(
diff --git a/openstackclient/identity/v3/mapping.py b/openstackclient/identity/v3/mapping.py
index 74ead2281a..69c141b128 100644
--- a/openstackclient/identity/v3/mapping.py
+++ b/openstackclient/identity/v3/mapping.py
@@ -162,10 +162,6 @@ class SetMapping(command.Command, _RulesReader):
     def take_action(self, parsed_args):
         identity_client = self.app.client_manager.identity
 
-        if not parsed_args.rules:
-            LOG.error(_("No changes requested"))
-            return
-
         rules = self._read_rules(parsed_args.rules)
 
         mapping = identity_client.federation.mappings.update(
diff --git a/openstackclient/identity/v3/policy.py b/openstackclient/identity/v3/policy.py
index 68fb273820..79215cab42 100644
--- a/openstackclient/identity/v3/policy.py
+++ b/openstackclient/identity/v3/policy.py
@@ -15,8 +15,6 @@
 
 """Identity v3 Policy action implementations"""
 
-import sys
-
 from osc_lib.command import command
 from osc_lib import utils
 import six
@@ -136,9 +134,6 @@ class SetPolicy(command.Command):
         if parsed_args.type:
             kwargs['type'] = parsed_args.type
 
-        if not kwargs:
-            sys.stdout.write(_('Policy not updated, no arguments present\n'))
-            return
         identity_client.policies.update(parsed_args.policy, **kwargs)
 
 
diff --git a/openstackclient/identity/v3/project.py b/openstackclient/identity/v3/project.py
index 5398701704..56c4fbc8b2 100755
--- a/openstackclient/identity/v3/project.py
+++ b/openstackclient/identity/v3/project.py
@@ -263,13 +263,6 @@ class SetProject(command.Command):
     def take_action(self, parsed_args):
         identity_client = self.app.client_manager.identity
 
-        if (not parsed_args.name
-                and not parsed_args.domain
-                and not parsed_args.description
-                and not parsed_args.enable
-                and not parsed_args.property
-                and not parsed_args.disable):
-            return
         project = common.find_project(identity_client,
                                       parsed_args.project,
                                       parsed_args.domain)
diff --git a/openstackclient/identity/v3/region.py b/openstackclient/identity/v3/region.py
index b5e46a9adb..d714cd05e4 100644
--- a/openstackclient/identity/v3/region.py
+++ b/openstackclient/identity/v3/region.py
@@ -132,8 +132,6 @@ class SetRegion(command.Command):
     def take_action(self, parsed_args):
         identity_client = self.app.client_manager.identity
 
-        if not parsed_args.parent_region and not parsed_args.description:
-            return
         kwargs = {}
         if parsed_args.description:
             kwargs['description'] = parsed_args.description
diff --git a/openstackclient/identity/v3/role.py b/openstackclient/identity/v3/role.py
index d3c530a502..273801799d 100755
--- a/openstackclient/identity/v3/role.py
+++ b/openstackclient/identity/v3/role.py
@@ -357,10 +357,6 @@ class SetRole(command.Command):
     def take_action(self, parsed_args):
         identity_client = self.app.client_manager.identity
 
-        if not parsed_args.name:
-            sys.stderr.write(_("Incorrect set of arguments provided. "
-                               "See openstack --help for more details\n"))
-            return
         role = utils.find_resource(
             identity_client.roles,
             parsed_args.role,
diff --git a/openstackclient/identity/v3/service.py b/openstackclient/identity/v3/service.py
index 195b2701fb..7b23ae299c 100644
--- a/openstackclient/identity/v3/service.py
+++ b/openstackclient/identity/v3/service.py
@@ -15,8 +15,6 @@
 
 """Identity v3 Service action implementations"""
 
-import sys
-
 from osc_lib.command import command
 from osc_lib import utils
 import six
@@ -163,14 +161,6 @@ class SetService(command.Command):
     def take_action(self, parsed_args):
         identity_client = self.app.client_manager.identity
 
-        if (not parsed_args.name
-                and not parsed_args.type
-                and not parsed_args.description
-                and not parsed_args.enable
-                and not parsed_args.disable):
-            sys.stderr.write(_("Incorrect set of arguments provided. "
-                               "See openstack --help for more details\n"))
-            return
         service = common.find_service(identity_client,
                                       parsed_args.service)
         kwargs = {}
diff --git a/openstackclient/identity/v3/service_provider.py b/openstackclient/identity/v3/service_provider.py
index 0beea81379..1f95def81f 100644
--- a/openstackclient/identity/v3/service_provider.py
+++ b/openstackclient/identity/v3/service_provider.py
@@ -13,8 +13,6 @@
 
 """Service Provider action implementations"""
 
-import sys
-
 from osc_lib.command import command
 from osc_lib import utils
 import six
@@ -164,13 +162,6 @@ class SetServiceProvider(command.Command):
         elif parsed_args.disable is True:
             enabled = False
 
-        if not any((enabled is not None, parsed_args.description,
-                    parsed_args.service_provider_url,
-                    parsed_args.auth_url)):
-            sys.stdout.write(_("Service Provider not updated, no arguments "
-                               "present\n"))
-            return (None, None)
-
         service_provider = federation_client.service_providers.update(
             parsed_args.service_provider, enabled=enabled,
             description=parsed_args.description,
diff --git a/openstackclient/identity/v3/user.py b/openstackclient/identity/v3/user.py
index 3e189ac1c6..dc47ef8d54 100755
--- a/openstackclient/identity/v3/user.py
+++ b/openstackclient/identity/v3/user.py
@@ -17,7 +17,6 @@
 
 import copy
 import logging
-import sys
 
 from keystoneauth1 import exceptions as ks_exc
 from osc_lib.command import command
@@ -330,18 +329,6 @@ class SetUser(command.Command):
         if parsed_args.password_prompt:
             parsed_args.password = utils.get_password(self.app.stdin)
 
-        if (not parsed_args.name
-                and not parsed_args.name
-                and not parsed_args.password
-                and not parsed_args.email
-                and not parsed_args.project
-                and not parsed_args.description
-                and not parsed_args.enable
-                and not parsed_args.disable):
-            sys.stderr.write(_("Incorrect set of arguments provided. "
-                               "See openstack --help for more details\n"))
-            return
-
         user = utils.find_resource(
             identity_client.users,
             parsed_args.user,
diff --git a/openstackclient/tests/identity/v3/test_domain.py b/openstackclient/tests/identity/v3/test_domain.py
index 9229ddd0a9..17bcee065d 100644
--- a/openstackclient/tests/identity/v3/test_domain.py
+++ b/openstackclient/tests/identity/v3/test_domain.py
@@ -253,7 +253,11 @@ class TestDomainSet(TestDomain):
 
         result = self.cmd.take_action(parsed_args)
 
-        self.assertNotCalled(self.domains_mock.update)
+        kwargs = {}
+        self.domains_mock.update.assert_called_with(
+            self.domain.id,
+            **kwargs
+        )
         self.assertIsNone(result)
 
     def test_domain_set_name(self):
diff --git a/openstackclient/tests/identity/v3/test_endpoint.py b/openstackclient/tests/identity/v3/test_endpoint.py
index d953459cae..184e14a4c5 100644
--- a/openstackclient/tests/identity/v3/test_endpoint.py
+++ b/openstackclient/tests/identity/v3/test_endpoint.py
@@ -485,7 +485,17 @@ class TestEndpointSet(TestEndpoint):
 
         result = self.cmd.take_action(parsed_args)
 
-        self.assertNotCalled(self.endpoints_mock.update)
+        kwargs = {
+            'enabled': None,
+            'interface': None,
+            'region': None,
+            'service': None,
+            'url': None,
+        }
+        self.endpoints_mock.update.assert_called_with(
+            identity_fakes.endpoint_id,
+            **kwargs
+        )
         self.assertIsNone(result)
 
     def test_endpoint_set_interface(self):
diff --git a/openstackclient/tests/identity/v3/test_identity_provider.py b/openstackclient/tests/identity/v3/test_identity_provider.py
index 161a1a1b0d..8561fab99b 100644
--- a/openstackclient/tests/identity/v3/test_identity_provider.py
+++ b/openstackclient/tests/identity/v3/test_identity_provider.py
@@ -585,8 +585,8 @@ class TestIdentityProviderSet(TestIdentityProvider):
 
         # expect take_action() to return (None, None) as
         # neither --enable nor --disable was specified
-        self.assertIsNone(columns)
-        self.assertIsNone(data)
+        self.assertEqual(self.columns, columns)
+        self.assertEqual(self.datalist, data)
 
 
 class TestIdentityProviderShow(TestIdentityProvider):
diff --git a/openstackclient/tests/identity/v3/test_region.py b/openstackclient/tests/identity/v3/test_region.py
index 02dec5681c..44e4814b01 100644
--- a/openstackclient/tests/identity/v3/test_region.py
+++ b/openstackclient/tests/identity/v3/test_region.py
@@ -253,7 +253,11 @@ class TestRegionSet(TestRegion):
 
         result = self.cmd.take_action(parsed_args)
 
-        self.assertNotCalled(self.regions_mock.update)
+        kwargs = {}
+        self.regions_mock.update.assert_called_with(
+            identity_fakes.region_id,
+            **kwargs
+        )
         self.assertIsNone(result)
 
     def test_region_set_description(self):
diff --git a/openstackclient/tests/identity/v3/test_service_provider.py b/openstackclient/tests/identity/v3/test_service_provider.py
index 1d82cd1532..428057949b 100644
--- a/openstackclient/tests/identity/v3/test_service_provider.py
+++ b/openstackclient/tests/identity/v3/test_service_provider.py
@@ -377,8 +377,15 @@ class TestServiceProviderSet(TestServiceProvider):
         # expect take_action() to return (None, None) as none of --disabled,
         # --enabled, --description, --service-provider-url, --auth_url option
         # was set.
-        self.assertIsNone(columns)
-        self.assertIsNone(data)
+        self.assertEqual(self.columns, columns)
+        datalist = (
+            service_fakes.sp_auth_url,
+            service_fakes.sp_description,
+            True,
+            service_fakes.sp_id,
+            service_fakes.service_provider_url
+        )
+        self.assertEqual(datalist, data)
 
 
 class TestServiceProviderShow(TestServiceProvider):