Skip to content

Commit 3c018b7

Browse files
authored
Merge pull request #250 from lutovich/1.6-bookmark-fmt
Fix bookmark comparison
2 parents c2bc0e9 + 77b76e1 commit 3c018b7

File tree

8 files changed

+42
-36
lines changed

8 files changed

+42
-36
lines changed

neo4j/v1/api.py

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,20 +43,26 @@
4343
RETRY_DELAY_MULTIPLIER = 2.0
4444
RETRY_DELAY_JITTER_FACTOR = 0.2
4545

46+
BOOKMARK_PREFIX = "neo4j:bookmark:v1:tx"
47+
4648

4749
def last_bookmark(b0, b1):
48-
""" Return the latest of two bookmarks by looking for the maximum
49-
integer value following the last colon in the bookmark string.
50+
""" Return the latest of two bookmarks.
5051
"""
51-
n = [None, None]
52-
_, _, n[0] = b0.rpartition(":")
53-
_, _, n[1] = b1.rpartition(":")
54-
for i in range(2):
55-
try:
56-
n[i] = int(n[i])
57-
except ValueError:
58-
raise ValueError("Invalid bookmark: {}".format(b0))
59-
return b0 if n[0] > n[1] else b1
52+
return b0 if _bookmark_value(b0) > _bookmark_value(b1) else b1
53+
54+
55+
def _bookmark_value(b):
56+
"""Return the int value of the given bookmark.
57+
"""
58+
if b is None or not b.startswith(BOOKMARK_PREFIX):
59+
raise ValueError("Invalid bookmark: {}".format(b))
60+
61+
value_string = b[len(BOOKMARK_PREFIX):]
62+
try:
63+
return int(value_string)
64+
except ValueError:
65+
raise ValueError("Invalid bookmark: {}".format(b))
6066

6167

6268
def retry_delay_generator(initial_delay, multiplier, jitter_factor):
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
!: AUTO INIT
22
!: AUTO RESET
33

4-
C: RUN "BEGIN" {"bookmark": "bookmark:1", "bookmarks": ["bookmark:0", "bookmark:1"]}
4+
C: RUN "BEGIN" {"bookmark": "neo4j:bookmark:v1:tx1", "bookmarks": ["neo4j:bookmark:v1:tx0", "neo4j:bookmark:v1:tx1"]}
55
PULL_ALL
66
S: SUCCESS {}
77
SUCCESS {}
88
C: RUN "COMMIT" {}
99
PULL_ALL
10-
S: SUCCESS {"bookmark": "bookmark:2", "bookmarks": ["bookmark:2"]}
10+
S: SUCCESS {"bookmark": "neo4j:bookmark:v1:tx2", "bookmarks": ["neo4j:bookmark:v1:tx2"]}
1111
SUCCESS {}
1212

13-
C: RUN "BEGIN" {"bookmark": "bookmark:2", "bookmarks": ["bookmark:2"]}
13+
C: RUN "BEGIN" {"bookmark": "neo4j:bookmark:v1:tx2", "bookmarks": ["neo4j:bookmark:v1:tx2"]}
1414
PULL_ALL
1515
S: SUCCESS {}
1616
SUCCESS {}
1717
C: RUN "COMMIT" {}
1818
PULL_ALL
19-
S: SUCCESS {"bookmark": "bookmark:3", "bookmarks": ["bookmark:3"]}
19+
S: SUCCESS {"bookmark": "neo4j:bookmark:v1:tx3", "bookmarks": ["neo4j:bookmark:v1:tx3"]}
2020
SUCCESS {}
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
!: AUTO INIT
22
!: AUTO RESET
33

4-
C: RUN "BEGIN" {"bookmark": "bookmark:1", "bookmarks": ["bookmark:1"]}
4+
C: RUN "BEGIN" {"bookmark": "neo4j:bookmark:v1:tx1", "bookmarks": ["neo4j:bookmark:v1:tx1"]}
55
PULL_ALL
66
S: SUCCESS {}
77
SUCCESS {}
88
C: RUN "COMMIT" {}
99
PULL_ALL
10-
S: SUCCESS {"bookmark": "bookmark:2", "bookmarks": ["bookmark:2"]}
10+
S: SUCCESS {"bookmark": "neo4j:bookmark:v1:tx2", "bookmarks": ["neo4j:bookmark:v1:tx2"]}
1111
SUCCESS {}
1212

1313
C: RUN "RETURN 1" {}
1414
PULL_ALL
15-
S: SUCCESS {"bookmark": "bookmark:x", "bookmarks": ["bookmark:x"]}
15+
S: SUCCESS {"bookmark": "neo4j:bookmark:v1:tx42", "bookmarks": ["neo4j:bookmark:v1:tx42"]}
1616
SUCCESS {}
1717

18-
C: RUN "BEGIN" {"bookmark": "bookmark:2", "bookmarks": ["bookmark:2"]}
18+
C: RUN "BEGIN" {"bookmark": "neo4j:bookmark:v1:tx2", "bookmarks": ["neo4j:bookmark:v1:tx2"]}
1919
PULL_ALL
2020
S: SUCCESS {}
2121
SUCCESS {}
2222
C: RUN "COMMIT" {}
2323
PULL_ALL
24-
S: SUCCESS {"bookmark": "bookmark:3", "bookmarks": ["bookmark:3"]}
24+
S: SUCCESS {"bookmark": "neo4j:bookmark:v1:tx3", "bookmarks": ["neo4j:bookmark:v1:tx3"]}
2525
SUCCESS {}

test/stub/scripts/return_1_in_tx.script

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@ S: SUCCESS {"fields": ["1"]}
1414

1515
C: RUN "COMMIT" {}
1616
PULL_ALL
17-
S: SUCCESS {"bookmark": "bookmark:1", "bookmarks": ["bookmark:1"]}
17+
S: SUCCESS {"bookmark": "neo4j:bookmark:v1:tx1", "bookmarks": ["neo4j:bookmark:v1:tx1"]}
1818
SUCCESS {}

test/stub/scripts/return_1_in_tx_twice.script

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ S: SUCCESS {"fields": ["1"]}
1414

1515
C: RUN "COMMIT" {}
1616
PULL_ALL
17-
S: SUCCESS {"bookmark": "bookmark:1", "bookmarks": ["bookmark:1"]}
17+
S: SUCCESS {"bookmark": "neo4j:bookmark:v1:tx1", "bookmarks": ["neo4j:bookmark:v1:tx1"]}
1818
SUCCESS {}
1919

20-
C: RUN "BEGIN" {"bookmark": "bookmark:1", "bookmarks": ["bookmark:1"]}
20+
C: RUN "BEGIN" {"bookmark": "neo4j:bookmark:v1:tx1", "bookmarks": ["neo4j:bookmark:v1:tx1"]}
2121
PULL_ALL
2222
S: SUCCESS {"fields": []}
2323
SUCCESS {}
@@ -30,5 +30,5 @@ S: SUCCESS {"fields": ["1"]}
3030

3131
C: RUN "COMMIT" {}
3232
PULL_ALL
33-
S: SUCCESS {"bookmark": "bookmark:2", "bookmarks": ["bookmark:2"]}
33+
S: SUCCESS {"bookmark": "neo4j:bookmark:v1:tx2", "bookmarks": ["neo4j:bookmark:v1:tx2"]}
3434
SUCCESS {}

test/stub/scripts/return_1_twice_in_tx.script

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,5 @@ S: SUCCESS {"fields": ["x"]}
2020

2121
C: RUN "COMMIT" {}
2222
PULL_ALL
23-
S: SUCCESS {"bookmark": "bookmark:1", "bookmarks": ["bookmark:1"]}
23+
S: SUCCESS {"bookmark": "neo4j:bookmark:v1:tx1", "bookmarks": ["neo4j:bookmark:v1:tx1"]}
2424
SUCCESS {}

test/stub/scripts/return_2_in_tx.script

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
!: AUTO INIT
22
!: AUTO RESET
33

4-
C: RUN "BEGIN" {"bookmark": "bookmark:1", "bookmarks": ["bookmark:1"]}
4+
C: RUN "BEGIN" {"bookmark": "neo4j:bookmark:v1:tx1", "bookmarks": ["neo4j:bookmark:v1:tx1"]}
55
PULL_ALL
66
S: SUCCESS {"fields": []}
77
SUCCESS {}
@@ -14,5 +14,5 @@ S: SUCCESS {"fields": ["2"]}
1414

1515
C: RUN "COMMIT" {}
1616
PULL_ALL
17-
S: SUCCESS {"bookmark": "bookmark:2", "bookmarks": ["bookmark:2"]}
17+
S: SUCCESS {"bookmark": "neo4j:bookmark:v1:tx2", "bookmarks": ["neo4j:bookmark:v1:tx2"]}
1818
SUCCESS {}

test/stub/test_bookmarking.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,31 +44,31 @@ def test_should_be_able_to_set_multiple_bookmarks(self):
4444
with StubCluster({9001: "router.script"}):
4545
uri = "bolt+routing://localhost:9001"
4646
with GraphDatabase.driver(uri, auth=self.auth_token, encrypted=False) as driver:
47-
with driver.session(bookmarks=[":1", ":2"]) as session:
48-
assert session.last_bookmark() == ":2"
47+
with driver.session(bookmarks=["neo4j:bookmark:v1:tx1", "neo4j:bookmark:v1:tx2"]) as session:
48+
assert session.last_bookmark() == "neo4j:bookmark:v1:tx2"
4949

5050
def test_should_automatically_chain_bookmarks(self):
5151
with StubCluster({9001: "router.script", 9004: "bookmark_chain.script"}):
5252
uri = "bolt+routing://localhost:9001"
5353
with GraphDatabase.driver(uri, auth=self.auth_token, encrypted=False) as driver:
54-
with driver.session(access_mode=READ_ACCESS, bookmarks=["bookmark:0", "bookmark:1"]) as session:
54+
with driver.session(access_mode=READ_ACCESS, bookmarks=["neo4j:bookmark:v1:tx0", "neo4j:bookmark:v1:tx1"]) as session:
5555
with session.begin_transaction():
5656
pass
57-
assert session.last_bookmark() == "bookmark:2"
57+
assert session.last_bookmark() == "neo4j:bookmark:v1:tx2"
5858
with session.begin_transaction():
5959
pass
60-
assert session.last_bookmark() == "bookmark:3"
60+
assert session.last_bookmark() == "neo4j:bookmark:v1:tx3"
6161

6262
def test_autocommit_transaction_does_not_break_chain(self):
6363
with StubCluster({9001: "router.script", 9004: "bookmark_chain_with_autocommit.script"}):
6464
uri = "bolt+routing://localhost:9001"
6565
with GraphDatabase.driver(uri, auth=self.auth_token, encrypted=False) as driver:
66-
with driver.session(access_mode=READ_ACCESS, bookmark="bookmark:1") as session:
66+
with driver.session(access_mode=READ_ACCESS, bookmark="neo4j:bookmark:v1:tx1") as session:
6767
with session.begin_transaction():
6868
pass
69-
assert session.last_bookmark() == "bookmark:2"
69+
assert session.last_bookmark() == "neo4j:bookmark:v1:tx2"
7070
session.run("RETURN 1").consume()
71-
assert session.last_bookmark() == "bookmark:2"
71+
assert session.last_bookmark() == "neo4j:bookmark:v1:tx2"
7272
with session.begin_transaction():
7373
pass
74-
assert session.last_bookmark() == "bookmark:3"
74+
assert session.last_bookmark() == "neo4j:bookmark:v1:tx3"

0 commit comments

Comments
 (0)