summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Cholasta <jcholast@redhat.com>2016-06-03 07:31:38 +0200
committerJan Cholasta <jcholast@redhat.com>2016-06-15 14:03:51 +0200
commite2a8290af1848ae22db27bcde8a9dc25572a1a43 (patch)
treebe6048ab8d9280b5dc483a0e4c652b35cf2a6dd4
parent3ac2215ddb9452e7ebeee43a5eaadcd589c94530 (diff)
downloadfreeipa-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.txt4
-rw-r--r--ipaclient/remote_plugins/schema.py2
-rw-r--r--ipalib/parameters.py9
-rw-r--r--ipaserver/plugins/batch.py10
-rw-r--r--ipaserver/plugins/schema.py8
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=[<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)