@cryptotaxi247 / netdata-1 / commits / e621007e5

python.d.plugin: YAML output is ordered now

Ilya committed Feb 7, 2017 at 10:31 UTC e621007e591fb71bbec6c41fbd26caba61d58e6f
1 file changed +25 -2
plugins.d/python.d.plugin
+25 -2
@@ -67,6 +67,26 @@ try:
67 except ImportError:
68 msg.fatal('Cannot find yaml library')
69
70 +try:
71 + from collections import OrderedDict
72 + ORDERED = True
73 + DICT = OrderedDict
74 + msg.info('YAML output is ordered')
75 +except ImportError:
76 + ORDERED = False
77 + DICT = dict
78 + msg.info('YAML output is unordered')
79 +else:
80 + def ordered_load(stream, Loader=yaml.Loader, object_pairs_hook=OrderedDict):
81 + class OrderedLoader(Loader):
82 + pass
83 + def construct_mapping(loader, node):
84 + loader.flatten_mapping(node)
85 + return object_pairs_hook(loader.construct_pairs(node))
86 + OrderedLoader.add_constructor(
87 + yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
88 + construct_mapping)
89 + return yaml.load(stream, OrderedLoader)
90
91 class PythonCharts(object):
92 """
@@ -235,7 +255,7 @@ class PythonCharts(object):
255 # check if there are dict in config dict
256 many_jobs = False
257 for name in config:
238 - if type(config[name]) is dict:
258 + if isinstance(config[name], DICT):
259 many_jobs = True
260 break
261
@@ -420,7 +440,10 @@ def read_config(path):
440 """
441 try:
442 with open(path, 'r') as stream:
423 - config = yaml.load(stream)
443 + if ORDERED:
444 + config = ordered_load(stream, yaml.SafeLoader)
445 + else:
446 + config = yaml.load(stream)
447 except (OSError, IOError):
448 msg.error(str(path), "is not a valid configuration file")
449 return None