diff options
author | Brad Bishop <bradleyb@us.ibm.com> | 2015-12-16 17:56:12 -0500 |
---|---|---|
committer | Brad Bishop <bradleyb@us.ibm.com> | 2015-12-16 17:57:49 -0500 |
commit | 2503bd6faa30b8580547800ac1c6d8592789330f (patch) | |
tree | 534835cc1c9327e0fdcd869a0393a9db7a844f4c | |
parent | 34cae732597fb3d4b18a23b6494efdbfeca2033b (diff) | |
download | phosphor-rest-server-2503bd6faa30b8580547800ac1c6d8592789330f.tar.gz phosphor-rest-server-2503bd6faa30b8580547800ac1c6d8592789330f.zip |
Add schema endpoint
Navigate to /<obj>/schema to get a dbus introspection dump
of <obj>.
-rw-r--r-- | obmc-rest | 32 |
1 files changed, 32 insertions, 0 deletions
@@ -306,6 +306,36 @@ class PropertyHandler(RouteHandler): continue return prop, i +class SchemaHandler(RouteHandler): + verbs = ['GET'] + rules = '<path:path>/schema' + + def __init__(self, app, bus): + super(SchemaHandler, self).__init__( + app, bus, self.verbs, self.rules) + + def find(self, path): + return self.try_mapper_call( + self.mapper.get_object, + path = path) + + def setup(self, path): + request.route_data['map'] = self.find(path) + + def do_get(self, path): + schema = {} + for x in request.route_data['map'].iterkeys(): + obj = self.bus.get_object( + x, path, introspect = False) + iface = dbus.Interface(obj, dbus.INTROSPECTABLE_IFACE) + data = iface.Introspect() + parser = IntrospectionNodeParser( + ElementTree.fromstring(data)) + for x,y in parser.get_interfaces().iteritems(): + schema[x] = y + + return schema + class InstanceHandler(RouteHandler): verbs = ['GET', 'PUT', 'DELETE'] rules = '<path:path>' @@ -544,6 +574,7 @@ class RestApp(Bottle): self.list_handler = ListHandler(self, self.bus) self.method_handler = MethodHandler(self, self.bus) self.property_handler = PropertyHandler(self, self.bus) + self.schema_handler = SchemaHandler(self, self.bus) self.instance_handler = InstanceHandler(self, self.bus) def install_handlers(self): @@ -552,6 +583,7 @@ class RestApp(Bottle): self.list_handler.install() self.method_handler.install() self.property_handler.install() + self.schema_handler.install() # this has to come last, since it matches everything self.instance_handler.install() |