def test_can_execute_example_code(self): class Person(object): def __init__(self, email=None, name=None, age=None): self.email = email self.name = name self.age = age def __str__(self): return self.name graph = Graph() store = Store(graph) alice = Person("*****@*****.**", "Alice", 34) store.save_unique("People", "email", alice.email, alice) bob = Person("*****@*****.**", "Bob", 66) carol = Person("*****@*****.**", "Carol", 42) store.relate(alice, "LIKES", bob) store.relate(alice, "LIKES", carol) store.save(alice) friends = store.load_related(alice, "LIKES", Person) print("Alice likes {0}".format(" and ".join(str(f) for f in friends)))
class TestLoadRelated(object): @pytest.fixture(autouse=True) def setup(self, graph): self.graph = graph self.store = Store(self.graph) def test_can_load_single_related_object(self): alice = Person("*****@*****.**", "Alice", 34) bob = Person("*****@*****.**", "Bob", 66) self.store.relate(alice, "LIKES", bob) self.store.save(alice) friends = self.store.load_related(alice, "LIKES", Person) assert friends == [bob] def test_can_load_multiple_related_objects(self): alice = Person("*****@*****.**", "Alice", 34) bob = Person("*****@*****.**", "Bob", 66) carol = Person("*****@*****.**", "Carol", 42) self.store.relate(alice, "LIKES", bob) self.store.relate(alice, "LIKES", carol) self.store.save(alice) friends = self.store.load_related(alice, "LIKES", Person) assert friends == [bob, carol] def test_can_load_related_objects_among_other_relationships(self): alice = Person("*****@*****.**", "Alice", 34) bob = Person("*****@*****.**", "Bob", 66) carol = Person("*****@*****.**", "Carol", 42) dave = Person("*****@*****.**", "Dave", 18) self.store.relate(alice, "LIKES", bob) self.store.relate(alice, "LIKES", carol) self.store.relate(alice, "DISLIKES", dave) self.store.save(alice) friends = self.store.load_related(alice, "LIKES", Person) assert friends == [bob, carol] enemies = self.store.load_related(alice, "DISLIKES", Person) assert enemies == [dave] def test_can_load_related_when_never_related(self): alice = Person("*****@*****.**", "Alice", 34) friends = self.store.load_related(alice, "LIKES", Person) assert friends == []
self.email = email self.name = name self.age = age def __str__(self): return self.name graph = Graph('http://127.0.0.1:7474/db/data/') store = Store(graph) alice = Person("*****@*****.**", "Tobin", 34) store.save_unique("People", "email", alice.email, alice) bob = Person("*****@*****.**", "Bob", 66) carol = Person("*****@*****.**", "Carol", 42) jenny = Person("*****@*****.**", "Jenny", 43) edgar = Person("*****@*****.**", "Edgar", 44) mike = Person("*****@*****.**", "Mike", 45) store.relate(alice, "LIKES", bob) # these relationships are not saved store.relate(alice, "LIKES", carol) # until `alice` is saved store.relate(alice, "LIKES", jenny) # until `alice` is saved store.relate(alice, "LIKES", edgar) # until `alice` is saved store.relate(alice, "LIKES", mike) # until `alice` is saved store.save(alice) friends = store.load_related(alice, "LIKES", Person) print "Alice likes {0}".format(" and ".join(str(f) for f in friends)) '''MATCH (you )-[:LIKES]->(yourFriends) RETURN you, yourFriends'''
class TestLoadUnique(object): @pytest.fixture(autouse=True) def setup(self, graph): self.graph = graph try: self.graph.legacy.delete_index(Node, "People") except LookupError: pass self.graph.legacy.get_or_create_index(Node, "People") self.store = Store(self.graph) def test_can_load_simple_object(self): alice_node = self.graph.legacy.get_or_create_indexed_node( "People", "email", "*****@*****.**", { "email": "*****@*****.**", "name": "Alice Allison", "age": 34, }) alice = self.store.load_unique("People", "email", "*****@*****.**", Person) assert isinstance(alice, Person) assert hasattr(alice, "__node__") assert alice.__node__ == alice_node assert hasattr(alice, "__rel__") assert alice.__rel__ == {} assert alice.email == "*****@*****.**" assert alice.name == "Alice Allison" assert alice.age == 34 def test_can_load_object_with_relationships(self): alice_node = self.graph.legacy.get_or_create_indexed_node( "People", "email", "*****@*****.**", { "email": "*****@*****.**", "name": "Alice Allison", "age": 34, }) path = alice_node.create_path("LIKES", {"name": "Bob Robertson"}) bob_node = path.nodes[1] alice = self.store.load_unique("People", "email", "*****@*****.**", Person) assert isinstance(alice, Person) assert hasattr(alice, "__node__") assert alice.__node__ == alice_node assert hasattr(alice, "__rel__") assert alice.__rel__ == { "LIKES": [({}, bob_node)], } assert alice.email == "*****@*****.**" assert alice.name == "Alice Allison" assert alice.age == 34 friends = self.store.load_related(alice, "LIKES", Person) assert isinstance(friends, list) assert len(friends) == 1 friend = friends[0] assert isinstance(friend, Person) assert friend.__node__ == bob_node enemies = self.store.load_related(alice, "DISLIKES", Person) assert isinstance(enemies, list) assert len(enemies) == 0 def test_will_not_load_when_none_exists(self): alice = self.store.load_unique("People", "email", "*****@*****.**", Person) assert alice is None
class TestLoadUnique(object): @pytest.fixture(autouse=True) def setup(self, graph): self.graph = graph try: self.graph.legacy.delete_index(Node, "People") except LookupError: pass self.graph.legacy.get_or_create_index(Node, "People") self.store = Store(self.graph) def test_can_load_simple_object(self): alice_node = self.graph.legacy.get_or_create_indexed_node( "People", "email", "*****@*****.**", { "email": "*****@*****.**", "name": "Alice Allison", "age": 34, } ) alice = self.store.load_unique("People", "email", "*****@*****.**", Person) assert isinstance(alice, Person) assert hasattr(alice, "__node__") assert alice.__node__ == alice_node assert hasattr(alice, "__rel__") assert alice.__rel__ == {} assert alice.email == "*****@*****.**" assert alice.name == "Alice Allison" assert alice.age == 34 def test_can_load_object_with_relationships(self): alice_node = self.graph.legacy.get_or_create_indexed_node( "People", "email", "*****@*****.**", { "email": "*****@*****.**", "name": "Alice Allison", "age": 34, } ) path = alice_node.create_path("LIKES", {"name": "Bob Robertson"}) bob_node = path.nodes[1] alice = self.store.load_unique("People", "email", "*****@*****.**", Person) assert isinstance(alice, Person) assert hasattr(alice, "__node__") assert alice.__node__ == alice_node assert hasattr(alice, "__rel__") assert alice.__rel__ == { "LIKES": [({}, bob_node)], } assert alice.email == "*****@*****.**" assert alice.name == "Alice Allison" assert alice.age == 34 friends = self.store.load_related(alice, "LIKES", Person) assert isinstance(friends, list) assert len(friends) == 1 friend = friends[0] assert isinstance(friend, Person) assert friend.__node__ == bob_node enemies = self.store.load_related(alice, "DISLIKES", Person) assert isinstance(enemies, list) assert len(enemies) == 0 def test_will_not_load_when_none_exists(self): alice = self.store.load_unique("People", "email", "*****@*****.**", Person) assert alice is None