Source code for ejpiaj.variable_extractor

import re

import json

from .decorators import variable_extractor


@variable_extractor('json')
[docs]def json_variables_extractor(response, variables): """Extracts variables from json response.content. Variables path are written using 'dot' access and index access to lists f.i.: some.path.to.list.[0] [1].dict.access.later """ result = {} re_list = re.compile('^\[\d+\]$') # use 'dot' access to dictionary data = json.loads(response.content) for path, name in variables.items(): try: subdata = data for attr in path.split('.'): # support for list access [0] if re_list.match(attr): ind = int(attr[1:-1]) subdata = subdata[ind] else: subdata = subdata.get(attr) result[name] = subdata except: result[name] = None return result
@variable_extractor('response')
[docs]def response_variables_extractor(response, variables): result = {} re_list = re.compile('^\[\d+\]$') for path, name in variables.items(): try: subdata = response for attr in path.split('.'): # support for list access [0] if re_list.match(attr): ind = int(attr[1:-1]) subdata = subdata[ind] else: if isinstance(subdata, dict): subdata = subdata.get(attr) else: subdata = getattr(subdata, attr) result[name] = subdata except: result[name] = None return result