def test_can_hydrate_path(self): g = Graph() gh = Graph.Hydrator(g) alice = gh.hydrate_node(1, {"Person"}, {"name": "Alice", "age": 33}) bob = gh.hydrate_node(2, {"Person"}, {"name": "Bob", "age": 44}) carol = gh.hydrate_node(3, {"Person"}, {"name": "Carol", "age": 55}) r = [ gh.hydrate_unbound_relationship(1, "KNOWS", {"since": 1999}), gh.hydrate_unbound_relationship(2, "DISLIKES", {}) ] path = gh.hydrate_path([alice, bob, carol], r, [1, 1, -2, 2]) self.assertEqual(path.start_node, alice) self.assertEqual(path.end_node, carol) self.assertEqual(path.nodes, (alice, bob, carol)) expected_alice_knows_bob = gh.hydrate_relationship( 1, alice.id, bob.id, "KNOWS", {"since": 1999}) expected_carol_dislikes_bob = gh.hydrate_relationship( 2, carol.id, bob.id, "DISLIKES", {}) self.assertEqual( path.relationships, (expected_alice_knows_bob, expected_carol_dislikes_bob)) self.assertEqual( list(path), [expected_alice_knows_bob, expected_carol_dislikes_bob]) self.assertTrue(repr(path))
def test_node_repr(): g = Graph() gh = Graph.Hydrator(g) alice = gh.hydrate_node(1, {"Person"}, {"name": "Alice"}) assert repr( alice ) == "<Node id=1 labels=frozenset({'Person'}) properties={'name': 'Alice'}>"
def test_relationship_repr(): g = Graph() gh = Graph.Hydrator(g) alice = gh.hydrate_node(1, {"Person"}, {"name": "Alice"}) bob = gh.hydrate_node(2, {"Person"}, {"name": "Bob"}) alice_knows_bob = gh.hydrate_relationship(1, alice.id, bob.id, "KNOWS", {"since": 1999}) assert repr( alice_knows_bob ) == "<Relationship id=1 nodes=(<Node id=1 labels=frozenset({'Person'}) properties={'name': 'Alice'}>, <Node id=2 labels=frozenset({'Person'}) properties={'name': 'Bob'}>) type='KNOWS' properties={'since': 1999}>"
def test_path_hashing(self): g = Graph() gh = Graph.Hydrator(g) alice = gh.hydrate_node(1, {"Person"}, {"name": "Alice", "age": 33}) bob = gh.hydrate_node(2, {"Person"}, {"name": "Bob", "age": 44}) carol = gh.hydrate_node(3, {"Person"}, {"name": "Carol", "age": 55}) alice_knows_bob = gh.hydrate_relationship(1, alice.id, bob.id, "KNOWS", {"since": 1999}) carol_dislikes_bob = gh.hydrate_relationship(2, carol.id, bob.id, "DISLIKES", {}) path_1 = Path(alice, alice_knows_bob, carol_dislikes_bob) path_2 = Path(alice, alice_knows_bob, carol_dislikes_bob) self.assertEqual(hash(path_1), hash(path_2))
def test_path_repr(): g = Graph() gh = Graph.Hydrator(g) alice = gh.hydrate_node(1, {"Person"}, {"name": "Alice"}) bob = gh.hydrate_node(2, {"Person"}, {"name": "Bob"}) carol = gh.hydrate_node(3, {"Person"}, {"name": "Carol"}) alice_knows_bob = gh.hydrate_relationship(1, alice.id, bob.id, "KNOWS", {"since": 1999}) carol_dislikes_bob = gh.hydrate_relationship(2, carol.id, bob.id, "DISLIKES", {}) path = Path(alice, alice_knows_bob, carol_dislikes_bob) assert repr( path ) == "<Path start=<Node id=1 labels=frozenset({'Person'}) properties={'name': 'Alice'}> end=<Node id=3 labels=frozenset({'Person'}) properties={'name': 'Carol'}> size=2>"
def test_path_equality(): g = Graph() gh = Graph.Hydrator(g) alice = gh.hydrate_node(1, {"Person"}, {"name": "Alice", "age": 33}) bob = gh.hydrate_node(2, {"Person"}, {"name": "Bob", "age": 44}) carol = gh.hydrate_node(3, {"Person"}, {"name": "Carol", "age": 55}) alice_knows_bob = gh.hydrate_relationship(1, alice.id, bob.id, "KNOWS", {"since": 1999}) carol_dislikes_bob = gh.hydrate_relationship(2, carol.id, bob.id, "DISLIKES", {}) path_1 = Path(alice, alice_knows_bob, carol_dislikes_bob) path_2 = Path(alice, alice_knows_bob, carol_dislikes_bob) assert path_1 == path_2 assert path_1 != "this is not a path"
def test_can_create_relationship(self): g = Graph() gh = Graph.Hydrator(g) alice = gh.hydrate_node(1, {"Person"}, {"name": "Alice", "age": 33}) bob = gh.hydrate_node(2, {"Person"}, {"name": "Bob", "age": 44}) alice_knows_bob = gh.hydrate_relationship(1, alice.id, bob.id, "KNOWS", {"since": 1999}) self.assertEqual(alice_knows_bob.start_node, alice) self.assertEqual(alice_knows_bob.type, "KNOWS") self.assertEqual(alice_knows_bob.end_node, bob) self.assertEqual(set(alice_knows_bob.keys()), {"since"}) self.assertEqual(set(alice_knows_bob.values()), {1999}) self.assertEqual(set(alice_knows_bob.items()), {("since", 1999)}) self.assertEqual(alice_knows_bob.get("since"), 1999) self.assertTrue(repr(alice_knows_bob))
def test_null_properties(self): g = Graph() gh = Graph.Hydrator(g) stuff = gh.hydrate_node(1, (), { "good": ["puppies", "kittens"], "bad": None }) self.assertEqual(set(stuff.keys()), {"good"}) self.assertEqual(stuff.get("good"), ["puppies", "kittens"]) self.assertIsNone(stuff.get("bad")) self.assertEqual(len(stuff), 1) self.assertEqual(stuff["good"], ["puppies", "kittens"]) self.assertIsNone(stuff["bad"]) self.assertIn("good", stuff) self.assertNotIn("bad", stuff)
def test_can_create_relationship(): g = Graph() gh = Graph.Hydrator(g) alice = gh.hydrate_node(1, {"Person"}, {"name": "Alice", "age": 33}) bob = gh.hydrate_node(2, {"Person"}, {"name": "Bob", "age": 44}) alice_knows_bob = gh.hydrate_relationship(1, alice.id, bob.id, "KNOWS", {"since": 1999}) assert isinstance(alice_knows_bob, Relationship) assert alice_knows_bob.start_node == alice assert alice_knows_bob.type == "KNOWS" assert alice_knows_bob.end_node == bob assert set(alice_knows_bob.keys()) == {"since"} assert set(alice_knows_bob.values()) == {1999} assert set(alice_knows_bob.items()) == {("since", 1999)} assert alice_knows_bob.get("since") == 1999
def test_null_properties(): g = Graph() gh = Graph.Hydrator(g) stuff = gh.hydrate_node(1, (), { "good": ["puppies", "kittens"], "bad": None }) assert isinstance(stuff, Node) assert set(stuff.keys()) == {"good"} assert stuff.get("good") == ["puppies", "kittens"] assert stuff.get("bad") is None assert len(stuff) == 1 assert stuff["good"] == ["puppies", "kittens"] assert stuff["bad"] is None assert "good" in stuff assert "bad" not in stuff
def test_can_create_node(self): g = Graph() gh = Graph.Hydrator(g) alice = gh.hydrate_node(1, {"Person"}, {"name": "Alice", "age": 33}) self.assertEqual(alice.labels, {"Person"}) self.assertEqual(set(alice.keys()), {"name", "age"}) self.assertEqual(set(alice.values()), {"Alice", 33}) self.assertEqual(set(alice.items()), {("name", "Alice"), ("age", 33)}) self.assertEqual(alice.get("name"), "Alice") self.assertEqual(alice.get("age"), 33) self.assertTrue(repr(alice)) self.assertEqual(len(alice), 2) self.assertEqual(alice["name"], "Alice") self.assertEqual(alice["age"], 33) self.assertIn("name", alice) self.assertIn("age", alice) self.assertEqual(set(iter(alice)), {"name", "age"})
def test_can_create_node(): g = Graph() gh = Graph.Hydrator(g) alice = gh.hydrate_node(1, {"Person"}, {"name": "Alice", "age": 33}) assert isinstance(alice, Node) assert alice.labels == {"Person"} assert set(alice.keys()) == {"name", "age"} assert set(alice.values()) == {"Alice", 33} assert set(alice.items()) == {("name", "Alice"), ("age", 33)} assert alice.get("name") == "Alice" assert alice.get("age") == 33 assert len(alice) == 2 assert alice["name"] == "Alice" assert alice["age"] == 33 assert "name" in alice assert "age" in alice assert set(iter(alice)) == {"name", "age"}
def test_can_create_path(): g = Graph() gh = Graph.Hydrator(g) alice = gh.hydrate_node(1, {"Person"}, {"name": "Alice", "age": 33}) bob = gh.hydrate_node(2, {"Person"}, {"name": "Bob", "age": 44}) carol = gh.hydrate_node(3, {"Person"}, {"name": "Carol", "age": 55}) alice_knows_bob = gh.hydrate_relationship(1, alice.id, bob.id, "KNOWS", {"since": 1999}) carol_dislikes_bob = gh.hydrate_relationship(2, carol.id, bob.id, "DISLIKES", {}) path = Path(alice, alice_knows_bob, carol_dislikes_bob) assert isinstance(path, Path) assert path.start_node == alice assert path.end_node == carol assert path.nodes == (alice, bob, carol) assert path.relationships == (alice_knows_bob, carol_dislikes_bob) assert list(path) == [alice_knows_bob, carol_dislikes_bob]
def test_can_create_path(self): g = Graph() gh = Graph.Hydrator(g) alice = gh.hydrate_node(1, {"Person"}, {"name": "Alice", "age": 33}) bob = gh.hydrate_node(2, {"Person"}, {"name": "Bob", "age": 44}) carol = gh.hydrate_node(3, {"Person"}, {"name": "Carol", "age": 55}) alice_knows_bob = gh.hydrate_relationship(1, alice.id, bob.id, "KNOWS", {"since": 1999}) carol_dislikes_bob = gh.hydrate_relationship(2, carol.id, bob.id, "DISLIKES", {}) path = Path(alice, alice_knows_bob, carol_dislikes_bob) self.assertEqual(path.start_node, alice) self.assertEqual(path.end_node, carol) self.assertEqual(path.nodes, (alice, bob, carol)) self.assertEqual(path.relationships, (alice_knows_bob, carol_dislikes_bob)) self.assertEqual(list(path), [alice_knows_bob, carol_dislikes_bob]) self.assertTrue(repr(path))
def __init__(self): super(DataHydrator, self).__init__() self.graph = Graph() self.graph_hydrator = Graph.Hydrator(self.graph) self.hydration_functions = { b"N": self.graph_hydrator.hydrate_node, b"R": self.graph_hydrator.hydrate_relationship, b"r": self.graph_hydrator.hydrate_unbound_relationship, b"P": self.graph_hydrator.hydrate_path, b"X": hydrate_point, b"Y": hydrate_point, b"D": hydrate_date, b"T": hydrate_time, # time zone offset b"t": hydrate_time, # no time zone b"F": hydrate_datetime, # time zone offset b"f": hydrate_datetime, # time zone name b"d": hydrate_datetime, # no time zone b"E": hydrate_duration, }
def test_can_hydrate_path(): g = Graph() gh = Graph.Hydrator(g) alice = gh.hydrate_node(1, {"Person"}, {"name": "Alice", "age": 33}) bob = gh.hydrate_node(2, {"Person"}, {"name": "Bob", "age": 44}) carol = gh.hydrate_node(3, {"Person"}, {"name": "Carol", "age": 55}) r = [ gh.hydrate_unbound_relationship(1, "KNOWS", {"since": 1999}), gh.hydrate_unbound_relationship(2, "DISLIKES", {}) ] path = gh.hydrate_path([alice, bob, carol], r, [1, 1, -2, 2]) assert path.start_node == alice assert path.end_node == carol assert path.nodes == (alice, bob, carol) expected_alice_knows_bob = gh.hydrate_relationship(1, alice.id, bob.id, "KNOWS", {"since": 1999}) expected_carol_dislikes_bob = gh.hydrate_relationship( 2, carol.id, bob.id, "DISLIKES", {}) assert path.relationships == (expected_alice_knows_bob, expected_carol_dislikes_bob) assert list(path) == [ expected_alice_knows_bob, expected_carol_dislikes_bob ]