From e2a8290af1848ae22db27bcde8a9dc25572a1a43 Mon Sep 17 00:00:00 2001 From: Jan Cholasta Date: Fri, 3 Jun 2016 07:31:38 +0200 Subject: [PATCH] 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 --- API.txt | 4 ++-- ipaclient/remote_plugins/schema.py | 2 +- ipalib/parameters.py | 9 +++++++++ ipaserver/plugins/batch.py | 10 ++-------- ipaserver/plugins/schema.py | 8 ++------ 5 files changed, 16 insertions(+), 17 deletions(-) diff --git a/API.txt b/API.txt index 741c64365..e7c36c8df 100644 --- a/API.txt +++ b/API.txt @@ -446,7 +446,7 @@ output: Output('summary', type=[, ]) output: PrimaryKey('value') command: batch args: 1,1,2 -arg: Any('methods*') +arg: Dict('methods*') option: Str('version?') output: Output('count', type=[]) output: Output('results', type=[, ]) @@ -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)