[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 13/26] qapi: ordereddict, add to_json() method
From: |
Michael Roth |
Subject: |
[Qemu-devel] [PATCH 13/26] qapi: ordereddict, add to_json() method |
Date: |
Thu, 18 Oct 2012 21:42:07 -0500 |
This allows OrderedDict() instances to be [pretty-]printed to
QAPI-compatible JSON structures with field ordering preserved. This is
useful for QIDL, which generates schemas programatically and exposes
them to users in various ways.
Signed-off-by: Michael Roth <address@hidden>
---
scripts/ordereddict.py | 51 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/scripts/ordereddict.py b/scripts/ordereddict.py
index 7242b50..f1f8c71 100644
--- a/scripts/ordereddict.py
+++ b/scripts/ordereddict.py
@@ -23,6 +23,21 @@
from UserDict import DictMixin
class OrderedDict(dict, DictMixin):
+ class Indent(object):
+ def __init__(self, enable=True, initial_spacing=4, initial_level=0):
+ self.enable = enable
+ self.level = initial_level
+ self.spacing = initial_spacing
+ def inc(self, n=1):
+ self.level += n
+ return self.level
+ def dec(self, n=1):
+ self.level -= n
+ return self.level
+ def prefix(self):
+ if self.enable:
+ return " " * (self.spacing * self.level)
+ return ""
def __init__(self, *args, **kwds):
if len(args) > 1:
@@ -125,3 +140,39 @@ class OrderedDict(dict, DictMixin):
def __ne__(self, other):
return not self == other
+
+ def __obj_to_json(self, node, pretty=True, indent_spacing=4,
indent_level=0):
+ i = self.Indent(pretty, indent_spacing, indent_level)
+ text = ""
+
+ if isinstance(node, OrderedDict):
+ if indent_level == 0:
+ text += "%s{\n" % i.prefix()
+ else:
+ text += "{\n"
+ i.inc()
+ for (k, v) in node.items():
+ text += "%s'%s': %s" % (i.prefix(), k,
+ self.__obj_to_json(v, pretty, i.spacing, i.level))
+ i.dec()
+ text += "%s}" % i.prefix()
+ elif isinstance(node, list):
+ text += "[\n"
+ i.inc()
+ for e in node:
+ text += "%s%s" % (i.prefix(),
+ self.__obj_to_json(e, pretty, i.spacing, i.level))
+ i.dec()
+ text += "%s]" % i.prefix()
+ else:
+ text += repr(node)
+
+ if indent_level > 0:
+ text += ",\n"
+
+ if not pretty:
+ return text.replace("\n", " ")
+ return text
+
+ def to_json(self, pretty=True, indent_spacing=4, indent_level=0):
+ return self.__obj_to_json(self)
--
1.7.9.5
- [Qemu-devel] [PATCH 03/26] qapi: qapi-commands.py -> qapi_commands.py, (continued)
- [Qemu-devel] [PATCH 03/26] qapi: qapi-commands.py -> qapi_commands.py, Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 04/26] qapi: qapi_visit.py, make code useable as module, Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 05/26] qapi: qapi_visit.py, support arrays and complex qapi definitions, Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 06/26] qapi: qapi_visit.py, support generating static functions, Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 07/26] qapi: qapi_visit.py, support for visiting non-pointer/embedded structs, Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 08/26] qapi: add visitor interfaces for C arrays, Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 09/26] qapi: QmpOutputVisitor, implement array handling, Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 10/26] qapi: QmpInputVisitor, implement array handling, Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 11/26] qapi: QmpInputVisitor, don't re-allocate memory in start_struct, Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 12/26] qapi: fix potential segfault for visit_type_size(), Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 13/26] qapi: ordereddict, add to_json() method,
Michael Roth <=
- [Qemu-devel] [PATCH 15/26] qapi: add open-coded visitor for struct tm types, Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 14/26] qapi: qapi.py, make json parser more robust, Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 17/26] qom-fuse: force single-threaded mode to avoid QMP races, Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 19/26] module additions for schema registration, Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 18/26] qom-fuse: workaround for truncated properties > 4096, Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 16/26] qapi: Improve existing docs and document annotated QAPI types, Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 21/26] qidl: add documentation, Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 23/26] qidl: add C parser (based on QC parser), Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 22/26] qidl: add lexer library (based on QC parser), Michael Roth, 2012/10/18
- [Qemu-devel] [PATCH 20/26] qdev: move Property-related declarations to qdev-properties.h, Michael Roth, 2012/10/18