def test_parse_gremlin_path_elements(gremlin_parser): # parse path with elements v = Vertex("foo") v2 = Vertex("bar") e1 = Edge("e1", "foo", "label", "bar") p = Path(labels=["vertex", "label", "vertex"], objects=[v, e1, v2]) out = gremlin_parser.gremlin_results_to_dict([p]) df = pd.DataFrame.from_records(out) row = df.iloc[0] assert df.shape == (1, 3) assert row[0] == {"id": "foo", "label": "vertex"} assert row[1] == {"id": "e1", "label": "label", "outV": "foo", "inV": "bar"} assert row[2] == {"id": "bar", "label": "vertex"} # parse path with multiple elements e2 = Edge("bar", "out1", "label", "in2") v3 = Vertex("in2") p1 = Path(labels=["vertex", "label", "vertex"], objects=[v2, e2, v3]) out = gremlin_parser.gremlin_results_to_dict([p, p1]) df = pd.DataFrame.from_records(out) row = df.iloc[1] assert df.shape == (2, 3) assert row[0] == {"id": "bar", "label": "vertex"} assert row[1] == {"id": "bar", "label": "label", "outV": "out1", "inV": "in2"} assert row[2] == {"id": "in2", "label": "vertex"} # parse path with maps p = Path( labels=["vertex", "label", "vertex"], objects=[{"name": "foo", "age": 29}, {"dist": 32}, {"name": "bar", "age": 40}], ) out = gremlin_parser.gremlin_results_to_dict([p]) df = pd.DataFrame.from_records(out) row = df.iloc[0] assert df.shape == (1, 3) assert row[0]["name"] == "foo" assert row[0]["age"] == 29 assert row[1]["dist"] == 32 assert row[2]["name"] == "bar" assert row[2]["age"] == 40 # parse path with mixed elements and maps p = Path( labels=["vertex", "label", "vertex"], objects=[{"name": "foo", "age": 29}, Edge("bar", "out1", "label", "in2"), {"name": "bar", "age": 40}], ) out = gremlin_parser.gremlin_results_to_dict([p]) df = pd.DataFrame.from_records(out) row = df.iloc[0] assert df.shape == (1, 3) assert row[0]["name"] == "foo" assert row[0]["age"] == 29 assert row[1] == {"id": "bar", "label": "label", "outV": "out1", "inV": "in2"} assert row[2]["name"] == "bar" assert row[2]["age"] == 40
def test_edge(self): x = Edge(123, Vertex(1, 'person'), "developed", Vertex(10, "software")) output = self.graphbinary_reader.readObject( self.graphbinary_writer.writeObject(x)) assert x == output assert x.inV == output.inV assert x.outV == output.outV
def test_graph(self): # TODO: this assert is not compatible with python 3 and now that we test with both 2 and 3 it fails assert {"@type": "g:Vertex", "@value": {"id": {"@type": "g:Int64", "@value": 12}, "label": "person"}} == json.loads( self.graphson_writer.writeObject(Vertex(long(12), "person"))) assert {"@type": "g:Edge", "@value": {"id": {"@type": "g:Int32", "@value": 7}, "outV": {"@type": "g:Int32", "@value": 0}, "outVLabel": "person", "label": "knows", "inV": {"@type": "g:Int32", "@value": 1}, "inVLabel": "dog"}} == json.loads( self.graphson_writer.writeObject(Edge(7, Vertex(0, "person"), "knows", Vertex(1, "dog")))) assert {"@type": "g:VertexProperty", "@value": {"id": "blah", "label": "keyA", "value": True, "vertex": "stephen"}} == json.loads( self.graphson_writer.writeObject(VertexProperty("blah", "keyA", True, Vertex("stephen")))) assert {"@type": "g:Property", "@value": {"key": "name", "value": "marko", "element": {"@type": "g:VertexProperty", "@value": { "vertex": "vertexId", "id": {"@type": "g:Int32", "@value": 1234}, "label": "aKey"}}}} == json.loads( self.graphson_writer.writeObject( Property("name", "marko", VertexProperty(1234, "aKey", 21345, Vertex("vertexId"))))) vertex = self.graphson_reader.readObject(self.graphson_writer.writeObject(Vertex(1, "person"))) assert 1 == vertex.id assert "person" == vertex.label edge = self.graphson_reader.readObject( self.graphson_writer.writeObject(Edge(3, Vertex(1, "person"), "knows", Vertex(2, "dog")))) assert "knows" == edge.label assert 3 == edge.id assert 1 == edge.outV.id assert 2 == edge.inV.id vertex_property = self.graphson_reader.readObject( self.graphson_writer.writeObject(VertexProperty(1, "age", 32, Vertex(1)))) assert 1 == vertex_property.id assert "age" == vertex_property.key assert 32 == vertex_property.value property = self.graphson_reader.readObject(self.graphson_writer.writeObject(Property("age", 32.2, Edge(1,Vertex(2),"knows",Vertex(3))))) assert "age" == property.key assert 32.2 == property.value
def _read_edge(cls, b, r): edgeid = r.readObject(b) edgelbl = r.toObject(b, DataType.string, False) inv = Vertex(r.readObject(b), r.toObject(b, DataType.string, False)) outv = Vertex(r.readObject(b), r.toObject(b, DataType.string, False)) edge = Edge(edgeid, outv, edgelbl, inv) b.read(4) return edge
def test_graph(self): vertex = self.graphson_reader.readObject(""" {"@type":"g:Vertex", "@value":{"id":{"@type":"g:Int32","@value":1},"label":"person","outE":{"created":[{"id":{"@type":"g:Int32","@value":9},"inV":{"@type":"g:Int32","@value":3},"properties":{"weight":{"@type":"g:Double","@value":0.4}}}],"knows":[{"id":{"@type":"g:Int32","@value":7},"inV":{"@type":"g:Int32","@value":2},"properties":{"weight":{"@type":"g:Double","@value":0.5}}},{"id":{"@type":"g:Int32","@value":8},"inV":{"@type":"g:Int32","@value":4},"properties":{"weight":{"@type":"g:Double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"marko"}],"age":[{"id":{"@type":"g:Int64","@value":1},"value":{"@type":"g:Int32","@value":29}}]}}}""" ) assert isinstance(vertex, Vertex) assert "person" == vertex.label assert 1 == vertex.id assert isinstance(vertex.id, int) assert vertex == Vertex(1) ## vertex = self.graphson_reader.readObject(""" {"@type":"g:Vertex", "@value":{"id":{"@type":"g:Float","@value":45.23}}}""" ) assert isinstance(vertex, Vertex) assert 45.23 == vertex.id assert isinstance(vertex.id, FloatType) assert "vertex" == vertex.label assert vertex == Vertex(45.23) ## vertex_property = self.graphson_reader.readObject(""" {"@type":"g:VertexProperty", "@value":{"id":"anId","label":"aKey","value":true,"vertex":{"@type":"g:Int32","@value":9}}}""" ) assert isinstance(vertex_property, VertexProperty) assert "anId" == vertex_property.id assert "aKey" == vertex_property.label assert vertex_property.value assert vertex_property.vertex == Vertex(9) ## vertex_property = self.graphson_reader.readObject(""" {"@type":"g:VertexProperty", "@value":{"id":{"@type":"g:Int32","@value":1},"label":"name","value":"marko"}}""" ) assert isinstance(vertex_property, VertexProperty) assert 1 == vertex_property.id assert "name" == vertex_property.label assert "marko" == vertex_property.value assert vertex_property.vertex is None ## edge = self.graphson_reader.readObject(""" {"@type":"g:Edge", "@value":{"id":{"@type":"g:Int64","@value":17},"label":"knows","inV":"x","outV":"y","inVLabel":"xLab","properties":{"aKey":"aValue","bKey":true}}}""" ) # print edge assert isinstance(edge, Edge) assert 17 == edge.id assert "knows" == edge.label assert edge.inV == Vertex("x", "xLabel") assert edge.outV == Vertex("y", "vertex") ## property = self.graphson_reader.readObject(""" {"@type":"g:Property", "@value":{"key":"aKey","value":{"@type":"g:Int64","@value":17},"element":{"@type":"g:Edge","@value":{"id":{"@type":"g:Int64","@value":122},"label":"knows","inV":"x","outV":"y","inVLabel":"xLab"}}}}""" ) # print property assert isinstance(property, Property) assert "aKey" == property.key assert 17 == property.value assert Edge(122, Vertex("x"), "knows", Vertex("y")) == property.element
def test_parse_gremlin_edge_elements(gremlin_parser): # parse edge elements v = Edge("foo", "out1", "label", "in1") input = [v] out = gremlin_parser.gremlin_results_to_dict(input) df = pd.DataFrame.from_records(out) row = df.iloc[0] assert df.shape == (1, 4) assert row["id"] == "foo" assert row["outV"] == "out1" assert row["label"] == "label" assert row["inV"] == "in1" # parse multiple edge elements v1 = Edge("bar", "out1", "label", "in2") input = [v, v1] out = gremlin_parser.gremlin_results_to_dict(input) df = pd.DataFrame.from_records(out) row = df.iloc[1] assert df.shape == (2, 4) assert row["id"] == "bar" assert row["outV"] == "out1" assert row["label"] == "label" assert row["inV"] == "in2"
def test_graph_objects(self): vertex = Vertex(1) assert "v[1]" == str(vertex) assert "vertex" == vertex.label assert "person" == Vertex(1, "person").label assert vertex == Vertex(1) # edge = Edge(2, Vertex(1), "said", Vertex("hello", "phrase")) assert "e[2][1-said->hello]" == str(edge) assert Vertex(1) == edge.outV assert Vertex("hello") == edge.inV assert "said" == edge.label assert "phrase" == edge.inV.label assert edge.inV != edge.outV # vertex_property = VertexProperty(long(24), "name", "marko", Vertex(1)) assert "vp[name->marko]" == str(vertex_property) assert "name" == vertex_property.label assert "name" == vertex_property.key assert "marko" == vertex_property.value assert long(24) == vertex_property.id assert Vertex(1) == vertex_property.vertex assert isinstance(vertex_property.id, long) assert vertex_property == VertexProperty(long(24), "name", "marko", Vertex(1)) # property = Property("age", 29, Vertex(1)) assert "p[age->29]" == str(property) assert "age" == property.key assert 29 == property.value assert Vertex(1) == property.element assert isinstance(property.value, int) assert property == Property("age", 29, Vertex(1)) if not six.PY3: assert property != Property("age", long(29), Vertex(1)) # for i in [vertex, edge, vertex_property, property]: for j in [vertex, edge, vertex_property, property]: if type(i) != type(j): assert i != j else: assert i == j assert i.__hash__() == hash(i)
def test_graph(self): assert {"@type": "g:Vertex", "@value": {"id": {"@type": "g:Int64", "@value": 12}, "label": "person"}} == json.loads( self.graphson_writer.writeObject(Vertex(12l, "person"))) assert {"@type": "g:Edge", "@value": {"id": {"@type": "g:Int32", "@value": 7}, "outV": {"@type": "g:Int32", "@value": 0}, "outVLabel": "person", "label": "knows", "inV": {"@type": "g:Int32", "@value": 1}, "inVLabel": "dog"}} == json.loads( self.graphson_writer.writeObject(Edge(7, Vertex(0, "person"), "knows", Vertex(1, "dog")))) assert {"@type": "g:VertexProperty", "@value": {"id": "blah", "label": "keyA", "value": True, "vertex": "stephen"}} == json.loads( self.graphson_writer.writeObject(VertexProperty("blah", "keyA", True, Vertex("stephen")))) assert {"@type": "g:Property", "@value": {"key": "name", "value": "marko", "element": {"@type": "g:VertexProperty", "@value": { "vertex": "vertexId", "id": "anId", "label": "aKey"}}}} == json.loads( self.graphson_writer.writeObject( Property("name", "marko", VertexProperty("anId", "aKey", 21345, Vertex("vertexId")))))
def test_graph(self): # TODO: this assert is not compatible with python 3 and now that we test with both 2 and 3 it fails assert {"@type": "g:Vertex", "@value": {"id": {"@type": "g:Int64", "@value": 12}, "label": "person"}} == json.loads(self.graphson_writer.writeObject(Vertex(long(12), "person"))) assert {"@type": "g:Edge", "@value": {"id": {"@type": "g:Int32", "@value": 7}, "outV": {"@type": "g:Int32", "@value": 0}, "outVLabel": "person", "label": "knows", "inV": {"@type": "g:Int32", "@value": 1}, "inVLabel": "dog"}} == json.loads( self.graphson_writer.writeObject(Edge(7, Vertex(0, "person"), "knows", Vertex(1, "dog")))) assert {"@type": "g:VertexProperty", "@value": {"id": "blah", "label": "keyA", "value": True, "vertex": "stephen"}} == json.loads( self.graphson_writer.writeObject(VertexProperty("blah", "keyA", True, Vertex("stephen")))) assert {"@type": "g:Property", "@value": {"key": "name", "value": "marko", "element": {"@type": "g:VertexProperty", "@value": { "vertex": "vertexId", "id": {"@type": "g:Int32", "@value": 1234}, "label": "aKey"}}}} == json.loads( self.graphson_writer.writeObject( Property("name", "marko", VertexProperty(1234, "aKey", 21345, Vertex("vertexId")))))
def objectify(cls, d, reader): return Edge( reader.toObject(d["id"]), Vertex(reader.toObject(d["outV"]), d.get("outVLabel", "vertex")), d.get("label", "edge"), Vertex(reader.toObject(d["inV"]), d.get("inVLabel", "vertex")))
def _objectify(self, dict): value = dict[_SymbolHelper._VALUE] return Edge(GraphSONReader._objectify(value["id"]), Vertex(GraphSONReader._objectify(value["outV"]), ""), value["label"] if "label" in value else "vertex", Vertex(GraphSONReader._objectify(value["inV"]), ""))