diff options
author | Jan Cholasta <jcholast@redhat.com> | 2016-06-03 07:31:38 +0200 |
---|---|---|
committer | Jan Cholasta <jcholast@redhat.com> | 2016-06-15 14:03:51 +0200 |
commit | e2a8290af1848ae22db27bcde8a9dc25572a1a43 (patch) | |
tree | be6048ab8d9280b5dc483a0e4c652b35cf2a6dd4 | |
parent | 3ac2215ddb9452e7ebeee43a5eaadcd589c94530 (diff) | |
download | freeipa-e2a8290af1848ae22db27bcde8a9dc25572a1a43.tar.gz freeipa-e2a8290af1848ae22db27bcde8a9dc25572a1a43.tar.xz freeipa-e2a8290af1848ae22db27bcde8a9dc25572a1a43.zip |
batch, schema: use Dict instead of Any
Add new Dict parameter class and use it in the batch and command_defaults
plugins.
https://fedorahosted.org/freeipa/ticket/4739
Reviewed-By: David Kupka <dkupka@redhat.com>
-rw-r--r-- | API.txt | 4 | ||||
-rw-r--r-- | ipaclient/remote_plugins/schema.py | 2 | ||||
-rw-r--r-- | ipalib/parameters.py | 9 | ||||
-rw-r--r-- | ipaserver/plugins/batch.py | 10 | ||||
-rw-r--r-- | ipaserver/plugins/schema.py | 8 |
5 files changed, 16 insertions, 17 deletions
@@ -446,7 +446,7 @@ output: Output('summary', type=[<type 'unicode'>, <type 'NoneType'>]) output: PrimaryKey('value') command: batch args: 1,1,2 -arg: Any('methods*') +arg: Dict('methods*') option: Str('version?') output: Output('count', type=[<type 'int'>]) output: Output('results', type=[<type 'list'>, <type 'tuple'>]) @@ -853,7 +853,7 @@ output: PrimaryKey('value') command: command_defaults args: 1,3,1 arg: Str('name') -option: Any('kw?') +option: Dict('kw?') option: Str('params*') option: Str('version?') output: Output('result') diff --git a/ipaclient/remote_plugins/schema.py b/ipaclient/remote_plugins/schema.py index 3a1394426..f355f598c 100644 --- a/ipaclient/remote_plugins/schema.py +++ b/ipaclient/remote_plugins/schema.py @@ -41,8 +41,8 @@ _PARAMS = { 'bool': parameters.Bool, 'bytes': parameters.Bytes, 'datetime': parameters.DateTime, + 'dict': parameters.Dict, 'int': parameters.Int, - 'object': parameters.Any, 'str': parameters.Str, } diff --git a/ipalib/parameters.py b/ipalib/parameters.py index 196300295..a08113460 100644 --- a/ipalib/parameters.py +++ b/ipalib/parameters.py @@ -1961,3 +1961,12 @@ class DNSNameParam(Param): def _rule_only_relative(self, _, value): if self.only_relative and value.is_absolute(): return _('must be relative') + + +class Dict(Param): + """ + A parameter for dictionary. + """ + + type = dict + type_error = _("must be dictionary") diff --git a/ipaserver/plugins/batch.py b/ipaserver/plugins/batch.py index aebdc2f72..aa4ace918 100644 --- a/ipaserver/plugins/batch.py +++ b/ipaserver/plugins/batch.py @@ -49,7 +49,7 @@ import six from ipalib import api, errors from ipalib import Command -from ipalib.parameters import Str, Any +from ipalib.parameters import Str, Dict from ipalib.output import Output from ipalib.text import _ from ipalib.request import context @@ -66,7 +66,7 @@ class batch(Command): NO_CLI = True takes_args = ( - Any('methods*', + Dict('methods*', doc=_('Nested Methods to execute'), ), ) @@ -90,12 +90,6 @@ class batch(Command): def execute(self, methods=None, **options): results = [] for arg in (methods or []): - # As take_args = Any, no check is done before - # Need to make sure that methods contain dict objects - if not isinstance(arg, dict): - raise errors.ConversionError( - name='methods', - error=_(u'must contain dict objects')) params = dict() name = None try: diff --git a/ipaserver/plugins/schema.py b/ipaserver/plugins/schema.py index 80c485dfd..ae233d205 100644 --- a/ipaserver/plugins/schema.py +++ b/ipaserver/plugins/schema.py @@ -12,7 +12,7 @@ from ipalib import errors from ipalib.crud import PKQuery, Retrieve, Search from ipalib.frontend import Command, Method, Object from ipalib.output import Entry, ListOfEntries, ListOfPrimaryKeys, PrimaryKey -from ipalib.parameters import Any, Bool, Flag, Int, Str +from ipalib.parameters import Bool, Dict, Flag, Int, Str from ipalib.plugable import Registry from ipalib.text import _ from ipapython.version import API_VERSION @@ -216,18 +216,14 @@ class command_defaults(PKQuery): takes_options = ( Str('params*'), - Any('kw?'), + Dict('kw?'), ) def execute(self, name, **options): command = self.api.Command[name] params = options.get('params', []) - kw = options.get('kw', {}) - if not isinstance(kw, dict): - raise errors.ConversionError(name=name, - error=_("must be a dictionary")) result = command.get_default(params, **kw) |