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