Skip to content

Commit 88cb162

Browse files
committed
Removing Transaction.succeeded and using separate enum for failure.
1 parent 52f3fa8 commit 88cb162

File tree

2 files changed

+12
-61
lines changed

2 files changed

+12
-61
lines changed

gcloud/datastore/test_transaction.py

Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def test_ctor(self):
4747
self.assertEqual(xact.dataset_id, _DATASET)
4848
self.assertEqual(xact.connection, connection)
4949
self.assertEqual(xact.id, None)
50-
self.assertEqual(xact._status, None)
50+
self.assertEqual(xact._status, self._getTargetClass()._INITIAL)
5151
self.assertTrue(xact._commit_success is False)
5252
self.assertTrue(isinstance(xact.mutation, Mutation))
5353
self.assertEqual(len(xact._auto_id_entities), 0)
@@ -66,7 +66,7 @@ def test_ctor_with_env(self):
6666
self.assertEqual(xact.id, None)
6767
self.assertEqual(xact.dataset_id, DATASET_ID)
6868
self.assertEqual(xact.connection, CONNECTION)
69-
self.assertEqual(xact._status, None)
69+
self.assertEqual(xact._status, self._getTargetClass()._INITIAL)
7070
self.assertTrue(xact._commit_success is False)
7171

7272
def test_current(self):
@@ -94,47 +94,6 @@ def test_current(self):
9494
self.assertTrue(xact1.current() is None)
9595
self.assertTrue(xact2.current() is None)
9696

97-
def test_succeeded_fresh_transaction(self):
98-
_DATASET = 'DATASET'
99-
connection = _Connection()
100-
xact = self._makeOne(dataset_id=_DATASET, connection=connection)
101-
self.assertEqual(xact._status, None)
102-
103-
success = marker = object()
104-
with self.assertRaises(ValueError):
105-
success = xact.succeeded
106-
self.assertTrue(success is marker)
107-
108-
def test_succeeded_in_progress(self):
109-
_DATASET = 'DATASET'
110-
connection = _Connection()
111-
xact = self._makeOne(dataset_id=_DATASET, connection=connection)
112-
xact.begin()
113-
self.assertEqual(xact._status, self._getTargetClass()._IN_PROGRESS)
114-
115-
success = marker = object()
116-
with self.assertRaises(ValueError):
117-
success = xact.succeeded
118-
self.assertTrue(success is marker)
119-
120-
def test_succeeded_on_success(self):
121-
_DATASET = 'DATASET'
122-
connection = _Connection()
123-
xact = self._makeOne(dataset_id=_DATASET, connection=connection)
124-
xact.begin()
125-
xact.commit()
126-
self.assertEqual(xact._status, self._getTargetClass()._FINISHED)
127-
self.assertTrue(xact.succeeded is True)
128-
129-
def test_succeeded_on_failure(self):
130-
_DATASET = 'DATASET'
131-
connection = _Connection()
132-
xact = self._makeOne(dataset_id=_DATASET, connection=connection)
133-
xact.begin()
134-
xact.rollback()
135-
self.assertEqual(xact._status, self._getTargetClass()._FINISHED)
136-
self.assertTrue(xact.succeeded is False)
137-
13897
def test_begin(self):
13998
_DATASET = 'DATASET'
14099
connection = _Connection(234)

gcloud/datastore/transaction.py

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -114,16 +114,22 @@ class Transaction(Batch):
114114
are not set.
115115
"""
116116

117+
_INITIAL = 0
118+
"""Enum value for _INITIAL status of transaction."""
119+
117120
_IN_PROGRESS = 1
118121
"""Enum value for _IN_PROGRESS status of transaction."""
119122

120-
_FINISHED = 2
123+
_ABORTED = 2
124+
"""Enum value for _ABORTED status of transaction."""
125+
126+
_FINISHED = 3
121127
"""Enum value for _FINISHED status of transaction."""
122128

123129
def __init__(self, dataset_id=None, connection=None):
124130
super(Transaction, self).__init__(dataset_id, connection)
125131
self._id = None
126-
self._status = None
132+
self._status = self._INITIAL
127133
self._commit_success = False
128134

129135
@property
@@ -148,20 +154,6 @@ def current():
148154
if isinstance(top, Transaction):
149155
return top
150156

151-
@property
152-
def succeeded(self):
153-
"""Determines if transaction has succeeded or failed.
154-
155-
:rtype: boolean
156-
:returns: Boolean indicating successful commit.
157-
:raises: :class:`ValueError` if the transaction is still in progress.
158-
"""
159-
if self._status != self._FINISHED:
160-
raise ValueError('Transaction not yet finished. '
161-
'Success not known.')
162-
163-
return self._commit_success
164-
165157
def begin(self):
166158
"""Begins a transaction.
167159
@@ -171,7 +163,7 @@ def begin(self):
171163
172164
:raises: :class:`ValueError` if the transaction has already begun.
173165
"""
174-
if self._status is not None:
166+
if self._status != self._INITIAL:
175167
raise ValueError('Transaction already started previously.')
176168
self._status = self._IN_PROGRESS
177169
self._id = self.connection.begin_transaction(self._dataset_id)
@@ -187,7 +179,7 @@ def rollback(self):
187179
try:
188180
self.connection.rollback(self._dataset_id, self._id)
189181
finally:
190-
self._status = self._FINISHED
182+
self._status = self._ABORTED
191183
# Clear our own ID in case this gets accidentally reused.
192184
self._id = None
193185

0 commit comments

Comments
 (0)