On 06/14/2013 10:52 AM, Amos Kong wrote: >>From 2b39fe0f380eea6a96de3589b3d148673d28c1ff Mon Sep 17 00:00:00 2001 > From: Amos Kong > Date: Fri, 7 Jun 2013 18:02:21 +0800 > Subject: [PATCH] full introspection support for QMP > > Signed-off-by: Amos Kong > --- > qapi-schema.json | 6 ++++++ > qmp-commands.hx | 23 +++++++++++++++++++++++ > qmp.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ > scripts/qapi-commands.py | 2 +- > scripts/qapi-types.py | 42 +++++++++++++++++++++++++++++++++++++++++- > scripts/qapi-visit.py | 2 +- > scripts/qapi.py | 13 ++++++++++++- > 7 files changed, 130 insertions(+), 4 deletions(-) > > diff --git a/qapi-schema.json b/qapi-schema.json > index ef1f657..128cc58 100644 > --- a/qapi-schema.json > +++ b/qapi-schema.json > @@ -3618,3 +3618,9 @@ > '*cpuid-input-ecx': 'int', > 'cpuid-register': 'X86CPURegister32', > 'features': 'int' } } > + > +{ 'type': 'SchemaData', > + 'data': { 'type': 'str', 'name': 'str', '*data': 'str', '*returns': 'str' } } > + > +{ 'command': 'query-qmp-schema', 'data': { '*type': 'str', '*name': 'str' }, > + 'returns': ['SchemaData'] } Needs documentation, and a since 1.6 notation in the docs (assuming that we still make it in time for 1.6). Also, see my other mail complaining that this is not structured enough, yet. > diff --git a/qmp-commands.hx b/qmp-commands.hx > index ffd130e..fc56fba 100644 > --- a/qmp-commands.hx > +++ b/qmp-commands.hx > @@ -2932,3 +2932,26 @@ Example: > + > +EQMP > \ No newline at end of file Fix that. > } > > +SchemaDataList * qmp_query_qmp_schema(bool has_type, const char * type, No space after '*' when declaring a pointer return or pointer argument. Should be: SchemaDataList *qmp_query_qmp_schema(bool has_type, const char *type, > +++ b/scripts/qapi-types.py > + > +struct qmp_schem { Aren't structs supposed to be named in CamelCase? > +const char *type; > +const char *name; > +const char *data; > +const char *returns; > +} qmp_schema_table[] = { > +""" > + > +for i in exprs_all[1]: > + print i > + > + data = returns = "" > + type = i.keys()[0] > + name = i[type] > + for k in i.keys(): > + if isinstance(i[k], OrderedDict): > + ret = {} > + for key in i[k]: > + ret[key] = i[k][key] > + i[k] = ret > + > + if i.has_key('data'): > + data = i['data'] I think this is where you'd need to do more processing of data to spit it out in a more structured format, but my python is too weak to actually write that conversion. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org