summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Young <ayoung@redhat.com>2011-10-06 16:38:01 -0400
committerAdam Young <ayoung@redhat.com>2011-10-07 14:43:28 -0400
commitf7812fa68c7a2ee232e2053399e0ba9ccef5e6c3 (patch)
tree32a278de7c7b6aac6e19f6e2534c5d3d7bcac3c9
parentc5384f2f25503026fedf498733e9ab2d00e43073 (diff)
downloadfreeipa-f7812fa68c7a2ee232e2053399e0ba9ccef5e6c3.tar.gz
freeipa-f7812fa68c7a2ee232e2053399e0ba9ccef5e6c3.tar.xz
freeipa-f7812fa68c7a2ee232e2053399e0ba9ccef5e6c3.zip
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.
-rw-r--r--ipalib/plugins/internal.py32
1 files changed, 18 insertions, 14 deletions
diff --git a/ipalib/plugins/internal.py b/ipalib/plugins/internal.py
index ce6f25489..8c5b0955b 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()
)