Skip to content

Commit 58c0e32

Browse files
bigmontzrobsdedude
andauthored
Improve Aura Example (#614)
Add examples for reading relationships and logging. Co-authored-by: Robsdedude <rouven.bauer@neo4j.com>
1 parent c79d62e commit 58c0e32

File tree

1 file changed

+31
-11
lines changed

1 file changed

+31
-11
lines changed

tests/integration/examples/test_driver_introduction_example.py

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,10 @@
2525
from io import StringIO
2626

2727
# tag::driver-introduction-example-import[]
28-
from neo4j import GraphDatabase
2928
import logging
29+
import sys
30+
31+
from neo4j import GraphDatabase
3032
from neo4j.exceptions import ServiceUnavailable
3133
# end::driver-introduction-example-import[]
3234

@@ -45,27 +47,43 @@ def close(self):
4547
# Don't forget to close the driver connection when you are finished with it
4648
self.driver.close()
4749

48-
def create_friendship(self, person1_name, person2_name):
50+
@staticmethod
51+
def enable_log(level, output_stream):
52+
handler = logging.StreamHandler(output_stream)
53+
handler.setLevel(level)
54+
logging.getLogger("neo4j").addHandler(handler)
55+
logging.getLogger("neo4j").setLevel(level)
56+
57+
def create_friendship(self, person1_name, person2_name, knows_from):
4958
with self.driver.session() as session:
5059
# Write transactions allow the driver to handle retries and transient errors
5160
result = session.write_transaction(
52-
self._create_and_return_friendship, person1_name, person2_name)
61+
self._create_and_return_friendship, person1_name, person2_name, knows_from)
5362
for row in result:
54-
print("Created friendship between: {p1}, {p2}".format(p1=row['p1'], p2=row['p2']))
63+
print("Created friendship between: {p1}, {p2} from {knows_from}"
64+
.format(
65+
p1=row['p1'],
66+
p2=row['p2'],
67+
knows_from=row["knows_from"]))
5568

5669
@staticmethod
57-
def _create_and_return_friendship(tx, person1_name, person2_name):
70+
def _create_and_return_friendship(tx, person1_name, person2_name, knows_from):
5871
# To learn more about the Cypher syntax, see https://neo4j.com/docs/cypher-manual/current/
5972
# The Reference Card is also a good resource for keywords https://neo4j.com/docs/cypher-refcard/current/
6073
query = (
6174
"CREATE (p1:Person { name: $person1_name }) "
6275
"CREATE (p2:Person { name: $person2_name }) "
63-
"CREATE (p1)-[:KNOWS]->(p2) "
64-
"RETURN p1, p2"
76+
"CREATE (p1)-[k:KNOWS { from: $knows_from }]->(p2) "
77+
"RETURN p1, p2, k"
6578
)
66-
result = tx.run(query, person1_name=person1_name, person2_name=person2_name)
79+
result = tx.run(query, person1_name=person1_name,
80+
person2_name=person2_name, knows_from=knows_from)
6781
try:
68-
return [{"p1": row["p1"]["name"], "p2": row["p2"]["name"]}
82+
return [{
83+
"p1": row["p1"]["name"],
84+
"p2": row["p2"]["name"],
85+
"knows_from": row["k"]["from"]
86+
}
6987
for row in result]
7088
# Capture any errors along with the query and data for traceability
7189
except ServiceUnavailable as exception:
@@ -94,8 +112,9 @@ def _find_and_return_person(tx, person_name):
94112
bolt_url = "%%BOLT_URL_PLACEHOLDER%%"
95113
user = "<Username for database>"
96114
password = "<Password for database>"
115+
App.enable_log(logging.INFO, sys.stdout)
97116
app = App(bolt_url, user, password)
98-
app.create_friendship("Alice", "David")
117+
app.create_friendship("Alice", "David", "School")
99118
app.find_person("Alice")
100119
app.close()
101120
# end::driver-introduction-example[]
@@ -105,8 +124,9 @@ def test_driver_introduction_example(uri, auth):
105124
try:
106125
s = StringIO()
107126
with redirect_stdout(s):
127+
App.enable_log(logging.INFO, sys.stdout)
108128
app = App(uri, auth[0], auth[1])
109-
app.create_friendship("Alice", "David")
129+
app.create_friendship("Alice", "David", "School")
110130
app.find_person("Alice")
111131
app.close()
112132

0 commit comments

Comments
 (0)