Arrays are supported as well. format: alpha.beta[2].gamma.theta[0]

Fix: Now keys that are in the middle of the expression that are not found in the data, can be checked upon, without the script throwing an error.
This commit is contained in:
Hunor Kovács 2015-05-04 18:57:22 +03:00
parent eb8c927343
commit 3b048f66c5

View File

@ -46,6 +46,27 @@ class JsonHelper:
self.data = json_data self.data = json_data
self.separator = separator self.separator = separator
def getSubElement(self, key, data):
separatorIndex = key.find(self.separator)
partialKey = key[:separatorIndex]
remainingKey = key[separatorIndex + 1:]
if partialKey in data:
return self.get(remainingKey, data[partialKey])
else:
return (None, 'not_found')
def getSubArrayElement(self, key, data):
subElemKey = key[:key.find('[')]
index = int(key[key.find('[') + 1:key.find(']')])
remainingKey = key[key.find('].') + 2:]
if subElemKey in data:
if index < len(data[subElemKey]):
return self.get(remainingKey, data[subElemKey][index])
else:
return (None, 'not_found')
else:
return (None, 'not_found')
def equals(self, key, value): return self.exists(key) and str(self.get(key)) == value def equals(self, key, value): return self.exists(key) and str(self.get(key)) == value
def lte(self, key, value): return self.exists(key) and float(self.get(key)) <= float(value) def lte(self, key, value): return self.exists(key) and float(self.get(key)) <= float(value)
def gte(self, key, value): return self.exists(key) and float(self.get(key)) >= float(value) def gte(self, key, value): return self.exists(key) and float(self.get(key)) >= float(value)
@ -57,13 +78,25 @@ class JsonHelper:
else: else:
data = self.data data = self.data
if self.separator in key: if len(key) <= 0:
return self.get(key[key.find(self.separator) + 1:], data[key[:key.find(self.separator)]]) return data
else:
if key in data: if key.find(self.separator) != -1 and key.find('[') != -1 :
return data[key] if key.find(self.separator) < key.find('[') :
return self.getSubElement(key, data)
else: else:
return (None, 'not_found') return self.getSubArrayElement(key, data)
else:
if key.find(self.separator) != -1 :
return self.getSubElement(key, data)
else:
if key.find('[') != -1 :
return self.getSubArrayElement(key, data)
else:
if key in data:
return data[key]
else:
return (None, 'not_found')
class JsonRuleProcessor: class JsonRuleProcessor:
"""Perform checks and gather values from a JSON dict given rules and metrics definitions""" """Perform checks and gather values from a JSON dict given rules and metrics definitions"""