def get_value_at(all_info, current_path, key, to_string=False):
    """
    Get value located at a given path

    :param all_info:
    :param current_path:
    :param key:
    :param to_string:
    :return:
    """
    keys = key.split('.')
    if keys[-1] == 'id':
        target_obj = current_path[len(keys)-1]
    else:
        if key == 'this':
            target_path = current_path
        elif '.' in key:
            target_path = []
            for i, key in enumerate(keys):
                if key == 'id':
                    target_path.append(current_path[i])
                else:
                    target_path.append(key)
            if len(keys) > len(current_path):
                target_path = target_path + keys[len(target_path):]
        else:
            target_path = copy.deepcopy(current_path)
            target_path.append(key)
        target_obj = all_info
        for p in target_path:
          try:
            if type(target_obj) == list and type(target_obj[0]) == dict:
                target_obj = target_obj[int(p)]
            elif type(target_obj) == list:
                target_obj = p
            elif p == '':
                target_obj = target_obj
            else:
              try:
                target_obj = target_obj[p]
              except Exception as e:
                printInfo('Info: %s\n'
                          'Path: %s\n'
                          'Key: %s' % (str(all_info),
                                       str(current_path),
                                       str(key)))
                printException(e)
                raise Exception
          except Exception as e:
            printInfo('Info: %s\n'
                      'Path: %s\n'
                      'Key: %s' % (str(all_info),
                                   str(current_path),
                                   str(key)))
            printException(e)
            raise Exception
    if to_string:
        return str(target_obj)
    else:
        return target_obj
def get_value_at ( all_info , current_path , key , to_string = False ) : keys = key . split ( '.' ) if keys [ - 1 ] == 'id' : target_obj = current_path [ len ( keys ) - 1 ] else : if key == 'this' : target_path = current_path elif '.' in key : target_path = [ ] for i , key in enumerate ( keys ) : if key == 'id' : target_path . append ( current_path [ i ] ) else : target_path . append ( key ) if len ( keys ) > len ( current_path ) : target_path = target_path + keys [ len ( target_path ) : ] else : target_path = copy . deepcopy ( current_path ) target_path . append ( key ) target_obj = all_info for p in target_path : try : if type ( target_obj ) == list and type ( target_obj [ 0 ] ) == dict : target_obj = target_obj [ int ( p ) ] elif type ( target_obj ) == list : target_obj = p elif p == '' : target_obj = target_obj else : try : target_obj = target_obj [ p ] except Exception as e : printInfo ( 'Info: %s\n' 'Path: %s\n' 'Key: %s' % ( str ( all_info ) , str ( current_path ) , str ( key ) ) ) printException ( e ) raise Exception except Exception as e : printInfo ( 'Info: %s\n' 'Path: %s\n' 'Key: %s' % ( str ( all_info ) , str ( current_path ) , str ( key ) ) ) printException ( e ) raise Exception if to_string : return str ( target_obj ) else : return target_obj
Get value located at a given path

    :param all_info:
    :param current_path:
    :param key:
    :param to_string:
    :return: