Ejemplo n.º 1
0
def test_trace_tree_list_deserialization():
    raw_trace_tree_list = [
        {
            "traceElement": {
                "fragments": [{
                    "class": TEXT_FRAGMENT,
                    "text": "aaa"
                }]
            }
        },
        {
            "traceElement": {
                "fragments": [{
                    "class": TEXT_FRAGMENT,
                    "text": "bbb"
                }]
            }
        },
    ]
    trace_tree_list = _parse_json_with_schema("List<TraceTree>",
                                              raw_trace_tree_list)
    assert len(trace_tree_list) == 2
    assert trace_tree_list[0] == TraceTree(TraceElement([TextFragment("aaa")]),
                                           [])
    assert trace_tree_list[1] == TraceTree(TraceElement([TextFragment("bbb")]),
                                           [])
Ejemplo n.º 2
0
def test_trace_tree_with_children():
    trace_tree_dict = {
        "traceElement": {
            "fragments": [{
                "class": TEXT_FRAGMENT,
                "text": "aaa"
            }]
        },
        "children": [
            {
                "traceElement": {
                    "fragments": [{
                        "class": TEXT_FRAGMENT,
                        "text": "bbb"
                    }],
                },
            },
            {
                "traceElement": {
                    "fragments": [{
                        "class": TEXT_FRAGMENT,
                        "text": "ccc"
                    }],
                },
            },
        ],
    }
    trace_tree = TraceTree.from_dict(trace_tree_dict)
    assert len(trace_tree.children) == 2
    assert str(trace_tree) == "\n".join(["aaa", "  - bbb", "  - ccc"])
    html_text = trace_tree._repr_html_()
    assert "aaa" in html_text
    assert "<li>bbb</li>" in html_text
    assert "<li>ccc</li>" in html_text
Ejemplo n.º 3
0
def test_trace_tree_no_children():
    trace_tree_dict = {
        "traceElement": {"fragments": [{"class": TEXT_FRAGMENT, "text": "aaa"}]}
    }
    trace_tree = TraceTree.from_dict(trace_tree_dict)
    assert len(trace_tree.children) == 0
    assert str(trace_tree) == "aaa"
    assert trace_tree._repr_html_() == "aaa"
Ejemplo n.º 4
0
def _parse_json_with_schema(schema, json_object):
    # type: (str, Any) -> Any
    """Process JSON object according to its schema."""
    if json_object is None:
        # Honor null/None values
        return None

    # See if it's an iterable and we need to process it
    if _is_iterable_schema(schema):
        if not isinstance(json_object, list):
            raise ValueError(
                "Got non-list value for list/set schema {schema}. Value: {value}".format(
                    schema=schema, value=json_object
                )
            )
        base_schema = _get_base_schema(schema)

        # Handle special iterable schemas that has a custom container class
        if base_schema == "TraceTree":
            return TraceTreeList(
                [TraceTree.from_dict(element) for element in json_object]
            )

        return ListWrapper(
            [_parse_json_with_schema(base_schema, element) for element in json_object]
        )

    # Handle "primitive" schemas
    if schema == "AclTrace":
        return AclTrace.from_dict(json_object)
    if schema == "FileLines":
        return FileLines.from_dict(json_object)
    if schema == "Flow":
        return Flow.from_dict(json_object)
    if schema == "FlowTrace":
        return FlowTrace.from_dict(json_object)
    if schema == "Integer" or schema == "Long":
        return int(json_object)
    if schema == "Interface":
        return Interface.from_dict(json_object)
    if schema == "Ip":
        return str(json_object)
    if schema == "Issue":
        return Issue.from_dict(json_object)
    if schema == "Node":
        return json_object["name"]
    if schema == "BgpRoute":
        return BgpRoute.from_dict(json_object)
    if schema == "BgpRouteDiffs":
        return BgpRouteDiffs.from_dict(json_object)
    if schema == "Prefix":
        return str(json_object)
    if schema == "SelfDescribing":
        return _parse_json_with_schema(json_object["schema"], json_object.get("value"))
    if schema == "String":
        return str(json_object)
    if schema == "Trace":
        return Trace.from_dict(json_object)
    if schema == "TraceTree":
        return TraceTree.from_dict(json_object)
    return json_object