From 1fef592892ab7e086ad8930f9fad1c9f671323c7 Mon Sep 17 00:00:00 2001 From: Adam Young Date: Thu, 6 Oct 2011 16:38:01 -0400 Subject: split metadata call The JSON metadata call has grown large enough that parsing it requires too much stack space on some browsers. TO avoid breaking the API, this change reuses some testing parameters that we established for the metadata call in the past. To fetch just the objects call it like this: {"method":"json_metadata","params":[["all",""],{}],"id":0} And just the methods call it like this: {"method":"json_metadata","params":[["","all"],{}],"id":0} Note the difference in the positional parameters. To get a specific object, pass the object name as the first parameter. To get a specific method, pass a blank first parameter and the method name in the second parameter. THis is not ideal, but we are constrained by the existing API. --- ipalib/plugins/internal.py | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) (limited to 'ipalib/plugins') diff --git a/ipalib/plugins/internal.py b/ipalib/plugins/internal.py index 76a123dc..8da38ee4 100644 --- a/ipalib/plugins/internal.py +++ b/ipalib/plugins/internal.py @@ -54,25 +54,29 @@ class json_metadata(Command): ) def execute(self, objname, methodname): + objects = dict() + methods = dict() - if objname and objname in self.api.Object: - - objects = dict( - (objname, json_serialize(self.api.Object[objname])) - ) - + if objname : + if objname in self.api.Object: + o = self.api.Object[objname] + objects = dict([(o.name, json_serialize(o))]) + elif objname == "all": + objects = dict( + (o.name, json_serialize(o)) for o in self.api.Object() + ) + elif methodname: + if methodname in self.api.Method: + m = self.api.Method[methodname] + methods = dict([(m.name, json_serialize(m))]) + elif methodname == "all": + methods = dict( + (m.name, json_serialize(m)) for m in self.api.Method() + ) else: objects = dict( (o.name, json_serialize(o)) for o in self.api.Object() ) - - if methodname and methodname in self.api.Method: - - methods = dict( - (methodname, json_serialize(self.api.Method[methodname])) - ) - - else: methods = dict( (m.name, json_serialize(m)) for m in self.api.Method() ) -- cgit