Skip to content

Commit

Permalink
Removing Transaction.succeeded and using separate enum for failure.
Browse files Browse the repository at this point in the history
  • Loading branch information
dhermes committed Feb 6, 2015
1 parent 52f3fa8 commit 88cb162
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 61 deletions.
45 changes: 2 additions & 43 deletions gcloud/datastore/test_transaction.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def test_ctor(self):
self.assertEqual(xact.dataset_id, _DATASET)
self.assertEqual(xact.connection, connection)
self.assertEqual(xact.id, None)
self.assertEqual(xact._status, None)
self.assertEqual(xact._status, self._getTargetClass()._INITIAL)
self.assertTrue(xact._commit_success is False)
self.assertTrue(isinstance(xact.mutation, Mutation))
self.assertEqual(len(xact._auto_id_entities), 0)
Expand All @@ -66,7 +66,7 @@ def test_ctor_with_env(self):
self.assertEqual(xact.id, None)
self.assertEqual(xact.dataset_id, DATASET_ID)
self.assertEqual(xact.connection, CONNECTION)
self.assertEqual(xact._status, None)
self.assertEqual(xact._status, self._getTargetClass()._INITIAL)
self.assertTrue(xact._commit_success is False)

def test_current(self):
Expand Down Expand Up @@ -94,47 +94,6 @@ def test_current(self):
self.assertTrue(xact1.current() is None)
self.assertTrue(xact2.current() is None)

def test_succeeded_fresh_transaction(self):
_DATASET = 'DATASET'
connection = _Connection()
xact = self._makeOne(dataset_id=_DATASET, connection=connection)
self.assertEqual(xact._status, None)

success = marker = object()
with self.assertRaises(ValueError):
success = xact.succeeded
self.assertTrue(success is marker)

def test_succeeded_in_progress(self):
_DATASET = 'DATASET'
connection = _Connection()
xact = self._makeOne(dataset_id=_DATASET, connection=connection)
xact.begin()
self.assertEqual(xact._status, self._getTargetClass()._IN_PROGRESS)

success = marker = object()
with self.assertRaises(ValueError):
success = xact.succeeded
self.assertTrue(success is marker)

def test_succeeded_on_success(self):
_DATASET = 'DATASET'
connection = _Connection()
xact = self._makeOne(dataset_id=_DATASET, connection=connection)
xact.begin()
xact.commit()
self.assertEqual(xact._status, self._getTargetClass()._FINISHED)
self.assertTrue(xact.succeeded is True)

def test_succeeded_on_failure(self):
_DATASET = 'DATASET'
connection = _Connection()
xact = self._makeOne(dataset_id=_DATASET, connection=connection)
xact.begin()
xact.rollback()
self.assertEqual(xact._status, self._getTargetClass()._FINISHED)
self.assertTrue(xact.succeeded is False)

def test_begin(self):
_DATASET = 'DATASET'
connection = _Connection(234)
Expand Down
28 changes: 10 additions & 18 deletions gcloud/datastore/transaction.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,16 +114,22 @@ class Transaction(Batch):
are not set.
"""

_INITIAL = 0
"""Enum value for _INITIAL status of transaction."""

_IN_PROGRESS = 1
"""Enum value for _IN_PROGRESS status of transaction."""

_FINISHED = 2
_ABORTED = 2
"""Enum value for _ABORTED status of transaction."""

_FINISHED = 3
"""Enum value for _FINISHED status of transaction."""

def __init__(self, dataset_id=None, connection=None):
super(Transaction, self).__init__(dataset_id, connection)
self._id = None
self._status = None
self._status = self._INITIAL
self._commit_success = False

@property
Expand All @@ -148,20 +154,6 @@ def current():
if isinstance(top, Transaction):
return top

@property
def succeeded(self):
"""Determines if transaction has succeeded or failed.
:rtype: boolean
:returns: Boolean indicating successful commit.
:raises: :class:`ValueError` if the transaction is still in progress.
"""
if self._status != self._FINISHED:
raise ValueError('Transaction not yet finished. '
'Success not known.')

return self._commit_success

def begin(self):
"""Begins a transaction.
Expand All @@ -171,7 +163,7 @@ def begin(self):
:raises: :class:`ValueError` if the transaction has already begun.
"""
if self._status is not None:
if self._status != self._INITIAL:
raise ValueError('Transaction already started previously.')
self._status = self._IN_PROGRESS
self._id = self.connection.begin_transaction(self._dataset_id)
Expand All @@ -187,7 +179,7 @@ def rollback(self):
try:
self.connection.rollback(self._dataset_id, self._id)
finally:
self._status = self._FINISHED
self._status = self._ABORTED
# Clear our own ID in case this gets accidentally reused.
self._id = None

Expand Down

0 comments on commit 88cb162

Please sign in to comment.