From f012209e191e39bb09b959d8d8e0f4445842fdf0 Mon Sep 17 00:00:00 2001 From: Roopa Prabhu Date: Thu, 24 Sep 2015 13:00:38 -0700 Subject: [PATCH] Fix ifquery json output for --running and other options Ticket: CM-7635 Reviewed By: CCR-3575 Testing Done: Tested failing ifquery output in json format This patch fixes a bug introduced by 0dea0cfeeec8b342ee2e2b767daa4071ac760f31 ("Add support to display status (pass, fail) in ifquery --check json output"). This patch separates the json encoders for iface objects with and without status (ifaceJsonEncoder and ifaceJsonEncoderWithStatus) so that they dont interfere with each other. --- ifupdown/iface.py | 21 +++++++++++++++++++-- ifupdown/ifupdownmain.py | 2 +- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/ifupdown/iface.py b/ifupdown/iface.py index 272a480..e6a1807 100644 --- a/ifupdown/iface.py +++ b/ifupdown/iface.py @@ -180,11 +180,28 @@ class ifaceState(): return cls.QUERY_RUNNING class ifaceJsonEncoder(json.JSONEncoder): - def default(self, o, with_status=False): + def default(self, o): + retconfig = {} + retifacedict = OrderedDict([]) + if o.config: + retconfig = dict((k, (v[0] if len(v) == 1 else v)) + for k,v in o.config.items()) + retifacedict['name'] = o.name + if o.addr_method: + retifacedict['addr_method'] = o.addr_method + if o.addr_family: + retifacedict['addr_family'] = o.addr_family + retifacedict['auto'] = o.auto + retifacedict['config'] = retconfig + + return retifacedict + +class ifaceJsonEncoderWithStatus(json.JSONEncoder): + def default(self, o): retconfig = {} retconfig_status = {} retifacedict = OrderedDict([]) - if o.config: + if o.config: for k,v in o.config.items(): idx = 0 vitem_status = [] diff --git a/ifupdown/ifupdownmain.py b/ifupdown/ifupdownmain.py index 3adf075..f723f64 100644 --- a/ifupdown/ifupdownmain.py +++ b/ifupdown/ifupdownmain.py @@ -1409,7 +1409,7 @@ class ifupdownMain(ifupdownBase): ifaceStatusStrs.UNKNOWN = self.config.get('ifquery_check_unknown_str', '') if format == 'json': - print json.dumps(ifaceobjs, cls=ifaceJsonEncoder, indent=2, + print json.dumps(ifaceobjs, cls=ifaceJsonEncoderWithStatus, indent=2, separators=(',', ': ')) else: map(lambda i: i.dump_pretty(with_status=True), ifaceobjs)