Hello,
This renames --permissions to --right. The old name is kept as a deprecated alias.
FreeIPA didn't have a mechanism for doing this, so I added one.
Also, while I was digging around in this part, I made the new IntEnum (and all future Enums) act like StrEnum in --help output.


https://fedorahosted.org/freeipa/ticket/4231

--
Petr³
From 57014e7d53a825be585159f16a8fe8f02238b4c7 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <[email protected]>
Date: Tue, 18 Mar 2014 10:33:42 +0100
Subject: [PATCH] cli: Clean up imports

---
 ipalib/cli.py | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/ipalib/cli.py b/ipalib/cli.py
index 4cf007d31b1f4cf1c3a33527dc30cd0c8f9c1774..a9acde3bd1657bc09f830162b53ad773063a4b60 100644
--- a/ipalib/cli.py
+++ b/ipalib/cli.py
@@ -21,13 +21,11 @@
 Functionality for Command Line Interface.
 """
 
-import re
 import textwrap
 import sys
 import getpass
 import code
 import optparse
-import socket
 import fcntl
 import termios
 import struct
@@ -45,12 +43,11 @@
 import frontend
 import backend
 import plugable
-import util
 from errors import (PublicError, CommandError, HelpError, InternalError,
-        NoSuchNamespaceError, ValidationError, NotFound, NotConfiguredError,
-        PromptFailed, ConversionError)
+                    NoSuchNamespaceError, ValidationError, NotFound,
+                    NotConfiguredError, PromptFailed)
 from constants import CLI_TAB
-from parameters import Password, Bytes, File, Str, StrEnum, Any
+from parameters import File, Str, StrEnum, Any
 from text import _
 from ipapython.version import API_VERSION
 
-- 
1.8.5.3

From 5bf5b82d43df4d3d80b0c22fa81dd7244e8399e3 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <[email protected]>
Date: Tue, 18 Mar 2014 10:22:17 +0100
Subject: [PATCH] cli: Show list of values in --help for all Enums

Previously only the StrEnum param type had the list of values
listed in the help.
Extend the functionality to any kind of Enum.
---
 ipalib/cli.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/ipalib/cli.py b/ipalib/cli.py
index a9acde3bd1657bc09f830162b53ad773063a4b60..19f27b17aa9732af0dcb1dd216ef0eb964d85f19 100644
--- a/ipalib/cli.py
+++ b/ipalib/cli.py
@@ -47,7 +47,7 @@
                     NoSuchNamespaceError, ValidationError, NotFound,
                     NotConfiguredError, PromptFailed)
 from constants import CLI_TAB
-from parameters import File, Str, StrEnum, Any
+from parameters import File, Str, Enum, Any
 from text import _
 from ipapython.version import API_VERSION
 
@@ -1117,10 +1117,10 @@ def build_parser(self, cmd):
                     kw['action'] = 'store_false'
                 else:
                     kw['action'] = 'store_true'
-            elif isinstance(option, StrEnum):
-                kw['metavar'] = metavar=map(lambda x: str(x), option.values)
+            elif isinstance(option, Enum):
+                kw['metavar'] = list(str(x) for x in option.values)
             else:
-                kw['metavar'] = metavar=option.__class__.__name__.upper()
+                kw['metavar'] = option.__class__.__name__.upper()
 
             if option.cli_short_name:
                 o = optparse.make_option('-%s' % option.cli_short_name, '--%s' % to_cli(option.cli_name), **kw)
-- 
1.8.5.3

From aac76fbea51654880f4c6d556f7dadb9d5f98406 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <[email protected]>
Date: Tue, 18 Mar 2014 10:11:19 +0100
Subject: [PATCH] cli: Add mechanism for deprecated option name aliases

Add a new Param kwarg, deprecated_cli_aliases, that lists
deprecated aliases.
The aliases will appear in a "Deprecated options" in the help,
and otherwise act as the normal variant.

Preparation for: https://fedorahosted.org/freeipa/ticket/4231
---
 ipalib/cli.py        | 40 +++++++++++++++++++++++++++-------------
 ipalib/parameters.py |  2 ++
 2 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/ipalib/cli.py b/ipalib/cli.py
index 19f27b17aa9732af0dcb1dd216ef0eb964d85f19..067d78089ab2e58ac93a4ed745cc1f69c42ffc33 100644
--- a/ipalib/cli.py
+++ b/ipalib/cli.py
@@ -1102,7 +1102,18 @@ def build_parser(self, cmd):
             description=unicode(cmd.doc),
             formatter=IPAHelpFormatter(),
         )
+
         option_groups = {}
+
+        def _get_option_group(group_name):
+            """Get or create an option group for the given name"""
+            option_group = option_groups.get(group_name)
+            if option_group is None:
+                option_group = optparse.OptionGroup(parser, group_name)
+                parser.add_option_group(option_group)
+                option_groups[group_name] = option_group
+            return option_group
+
         for option in cmd.options():
             kw = dict(
                 dest=option.name,
@@ -1122,22 +1133,25 @@ def build_parser(self, cmd):
             else:
                 kw['metavar'] = option.__class__.__name__.upper()
 
+            cli_name = to_cli(option.cli_name)
+            option_names = ['--%s' % cli_name]
             if option.cli_short_name:
-                o = optparse.make_option('-%s' % option.cli_short_name, '--%s' % to_cli(option.cli_name), **kw)
+                option_names.append('-%s' % option.cli_short_name)
+            opt = optparse.make_option(*option_names, **kw)
+            if option.option_group is None:
+                parser.add_option(opt)
             else:
-                o = optparse.make_option('--%s' % to_cli(option.cli_name), **kw)
+                _get_option_group(option.option_group).add_option(opt)
 
-            if option.option_group is not None:
-                option_group = option_groups.get(option.option_group)
-                if option_group is None:
-                    option_group = optparse.OptionGroup(parser,
-                                                        option.option_group)
-                    parser.add_option_group(option_group)
-                    option_groups[option.option_group] = option_group
-
-                option_group.add_option(o)
-            else:
-                parser.add_option(o)
+            if option.deprecated_cli_aliases:
+                new_kw = dict(kw)
+                new_kw['help'] = _('Same as --%s') % cli_name
+                if isinstance(option, Enum):
+                    new_kw['metavar'] = 'VAL'
+                group = _get_option_group(unicode(_('Deprecated options')))
+                for alias in option.deprecated_cli_aliases:
+                    name = '--%s' % alias
+                    group.add_option(optparse.make_option(name, **new_kw))
 
         for arg in cmd.args():
             name = self.__get_arg_name(arg, format_name=False)
diff --git a/ipalib/parameters.py b/ipalib/parameters.py
index 0b354969dc2d50ce10e0d09eb19cc6cefdeb39f3..fc5e649815a71ea4a0f5f7a3f34ba9b7b846cfeb 100644
--- a/ipalib/parameters.py
+++ b/ipalib/parameters.py
@@ -300,6 +300,7 @@ class Param(ReadOnly):
 
       - cli_name: option name in CLI
       - cli_short_name: one character version of cli_name
+      - deprecated_cli_aliases: deprecated CLI aliases
       - label: very short description of the parameter. This value is used in
         when the Command output is printed to CLI or in a Command help
       - doc: parameter long description used in help
@@ -384,6 +385,7 @@ class Param(ReadOnly):
     kwargs = (
         ('cli_name', str, None),
         ('cli_short_name', str, None),
+        ('deprecated_cli_aliases', frozenset, frozenset()),
         ('label', (basestring, Gettext), None),
         ('doc', (basestring, Gettext), None),
         ('required', bool, True),
-- 
1.8.5.3

From 6a58a30333e60d33c11f07017f8acc221c21caec Mon Sep 17 00:00:00 2001
From: Petr Viktorin <[email protected]>
Date: Tue, 18 Mar 2014 10:15:55 +0100
Subject: [PATCH] permission CLI: rename --permissions to --right

The old name is kept as a deprecated alias.

https://fedorahosted.org/freeipa/ticket/4231
---
 API.txt                      | 6 +++---
 ipalib/plugins/permission.py | 5 +++--
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/API.txt b/API.txt
index 8e1f7713ade2b3dc046e9db82fdd6be2d85eec56..ca9a73e510e6426309ac6c47dab3be763a0d0490 100644
--- a/API.txt
+++ b/API.txt
@@ -2333,7 +2333,7 @@ command: permission_add
 option: Str('filter', attribute=False, cli_name='filter', multivalue=True, required=False)
 option: StrEnum('ipapermbindruletype', attribute=True, autofill=True, cli_name='bindtype', default=u'permission', multivalue=False, required=True, values=(u'permission', u'all', u'anonymous'))
 option: DNOrURL('ipapermlocation', alwaysask=True, attribute=True, autofill=False, cli_name='subtree', multivalue=False, query=False, required=False)
-option: StrEnum('ipapermright', attribute=True, cli_name='permissions', multivalue=True, required=False, values=(u'read', u'search', u'compare', u'write', u'add', u'delete', u'all'))
+option: StrEnum('ipapermright', attribute=True, cli_name='right', deprecated_cli_aliases=set(['permissions']), multivalue=True, required=False, values=(u'read', u'search', u'compare', u'write', u'add', u'delete', u'all'))
 option: DNParam('ipapermtarget', attribute=True, cli_name='target', multivalue=False, required=False)
 option: Str('ipapermtargetfilter', attribute=True, cli_name='rawfilter', multivalue=True, required=False)
 option: Str('memberof', alwaysask=True, attribute=False, autofill=False, cli_name='memberof', multivalue=True, query=False, required=False)
@@ -2392,7 +2392,7 @@ command: permission_find
 option: Str('ipapermexcludedattr', attribute=True, autofill=False, cli_name='excludedattrs', multivalue=True, query=True, required=False)
 option: Str('ipapermincludedattr', attribute=True, autofill=False, cli_name='includedattrs', multivalue=True, query=True, required=False)
 option: DNOrURL('ipapermlocation', attribute=True, autofill=False, cli_name='subtree', multivalue=False, query=True, required=False)
-option: StrEnum('ipapermright', attribute=True, autofill=False, cli_name='permissions', multivalue=True, query=True, required=False, values=(u'read', u'search', u'compare', u'write', u'add', u'delete', u'all'))
+option: StrEnum('ipapermright', attribute=True, autofill=False, cli_name='right', deprecated_cli_aliases=set(['permissions']), multivalue=True, query=True, required=False, values=(u'read', u'search', u'compare', u'write', u'add', u'delete', u'all'))
 option: DNParam('ipapermtarget', attribute=True, autofill=False, cli_name='target', multivalue=False, query=True, required=False)
 option: Str('ipapermtargetfilter', attribute=True, autofill=False, cli_name='rawfilter', multivalue=True, query=True, required=False)
 option: Str('memberof', attribute=False, autofill=False, cli_name='memberof', multivalue=True, query=True, required=False)
@@ -2423,7 +2423,7 @@ command: permission_mod
 option: Str('ipapermexcludedattr', attribute=True, autofill=False, cli_name='excludedattrs', multivalue=True, required=False)
 option: Str('ipapermincludedattr', attribute=True, autofill=False, cli_name='includedattrs', multivalue=True, required=False)
 option: DNOrURL('ipapermlocation', attribute=True, autofill=False, cli_name='subtree', multivalue=False, required=False)
-option: StrEnum('ipapermright', attribute=True, autofill=False, cli_name='permissions', multivalue=True, required=False, values=(u'read', u'search', u'compare', u'write', u'add', u'delete', u'all'))
+option: StrEnum('ipapermright', attribute=True, autofill=False, cli_name='right', deprecated_cli_aliases=set(['permissions']), multivalue=True, required=False, values=(u'read', u'search', u'compare', u'write', u'add', u'delete', u'all'))
 option: DNParam('ipapermtarget', attribute=True, autofill=False, cli_name='target', multivalue=False, required=False)
 option: Str('ipapermtargetfilter', attribute=True, autofill=False, cli_name='rawfilter', multivalue=True, required=False)
 option: Str('memberof', attribute=False, autofill=False, cli_name='memberof', multivalue=True, required=False)
diff --git a/ipalib/plugins/permission.py b/ipalib/plugins/permission.py
index 65220b6e058aadd635d032748e8eb8ce11b860ea..cc842a68b85816431ce573d6bb45b2b13997f4f7 100644
--- a/ipalib/plugins/permission.py
+++ b/ipalib/plugins/permission.py
@@ -181,8 +181,9 @@ class permission(baseldap.LDAPObject):
         ),
         StrEnum(
             'ipapermright*',
-            cli_name='permissions',
-            label=_('Permissions'),
+            cli_name='right',
+            deprecated_cli_aliases={'permissions'},
+            label=_('Granted rights'),
             doc=_('Rights to grant '
                   '(read, search, compare, write, add, delete, all)'),
             values=(u'read', u'search', u'compare',
-- 
1.8.5.3

_______________________________________________
Freeipa-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to