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 TestSave(object): @pytest.fixture(autouse=True) def setup(self, graph): self.graph = graph self.store = Store(self.graph) def test_can_save_simple_object(self): alice = Person("*****@*****.**", "Alice", 34) assert not self.store.is_saved(alice) self.store.save_unique("People", "email", "*****@*****.**", alice) assert self.store.is_saved(alice) assert alice.__node__["name"] == "Alice" assert alice.__node__["age"] == 34 alice.name = "Alice Smith" alice.age = 35 self.store.save(alice) assert alice.__node__["name"] == "Alice Smith" assert alice.__node__["age"] == 35
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'''
store = Store(graph) series = ["Downton Abbey", "Daniel Tiger", ] downton = Series(name="Downton Abbey") episode1 = Episode(name="Ep1") episode2 = Episode(name="Ep2") bbc = Organization(name="BBC") hbo = Organization(name="HBO") actor1 = Actor(name="Bob") actor2 = Actor(name="Mary") actor3 = Actor(name="Mark") store.relate(downton, "HAS_EPISODE", episode1) store.relate(downton, "HAS_EPISODE", episode2) store.relate(downton, "PRODUCED_BY", bbc) store.relate(downton, "DISTRIBUTED_BY", hbo) store.relate(downton, "ACTED_IN", actor1) store.relate(downton, "ACTED_IN", actor2) store.relate(downton, "ACTED_IN", actor3) store.save(downton)