def __parse_body()

in src/ab/controllers/doc.py [0:0]


def __parse_body(q, parse_type):
    """
    parse any body with level
    :param segments_count: the count of segments
    :param q: a dequeue to hold the contents
    :return:
    """
    ret = []

    last_request_object = None
    while len(q) > 0:
        current_line = q.popleft()
        current_request_object = __parse_request_object(current_line, 5 if parse_type == "req" else 4)

        if last_request_object is not None:
            level_diff = current_request_object['__level'] - last_request_object['__level']
            # diff == 0 means in the same level
            if level_diff == 1:
                q.appendleft(current_line)
                last_request_object['children'] = __parse_request(q) if parse_type == "req" else __parse_response(q)
                continue
            if level_diff > 1:
                raise AlgorithmException(
                    data="The next two lines of requests should not differ by more than 1 level")
            if level_diff < 0:
                q.appendleft(current_line)
                return ret

        # next line
        ret.append(current_request_object)
        last_request_object = current_request_object
    return ret