def test_trace_str(): event1 = {"description": "event1"} event2 = {} event3 = {"description": "event3"} events = [event1, event2, event3] trace = AclTrace.from_dict({"events": events}) assert str(trace) == "event1\nevent3"
def test_acl_trace_deserialization(): trace_dict = {"events": [{"description": "aa"}, {"description": "bb"}]} # check deserialization acl_trace = AclTrace.from_dict(trace_dict) assert len(acl_trace.events) == 2 # check stringification works str(acl_trace)
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) 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) return json_object
def _get_display_value(schema, json_object): # type (str, Any) -> Any if json_object is None: return None if _is_list_or_set_schema(schema): if not isinstance(json_object, list): raise ValueError("Got non-list value for list/set schema", schema, ":", json_object) output_list = [ str(_get_display_value(_get_base_schema(schema), element)) for element in json_object ] if _get_base_schema(schema) == "FlowTrace": return "\n".join(output_list) else: return output_list 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": 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 == "Prefix": return str(json_object) if schema == "SelfDescribing": return _get_display_value(json_object["schema"], json_object.get("value")) if schema == "String": return str(json_object) return json_object