Skip to content

Commit aa3c0a3

Browse files
fix: populate transaction attributes after commit (#977)
* fix: populate transaction attributes after commit * fixed lint * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
1 parent 3fe7271 commit aa3c0a3

File tree

4 files changed

+30
-4
lines changed

4 files changed

+30
-4
lines changed

google/cloud/firestore_v1/async_transaction.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,9 @@ async def _commit(self) -> list:
145145
)
146146

147147
self._clean_up()
148-
return list(commit_response.write_results)
148+
self.write_results = list(commit_response.write_results)
149+
self.commit_time = commit_response.commit_time
150+
return self.write_results
149151

150152
async def get_all(
151153
self,

google/cloud/firestore_v1/transaction.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,9 @@ def _commit(self) -> list:
145145
)
146146

147147
self._clean_up()
148-
return list(commit_response.write_results)
148+
self.write_results = list(commit_response.write_results)
149+
self.commit_time = commit_response.commit_time
150+
return self.write_results
149151

150152
def get_all(
151153
self,

tests/unit/v1/test_async_transaction.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,10 +198,17 @@ async def test_asynctransaction__rollback_failure():
198198
@pytest.mark.asyncio
199199
async def test_asynctransaction__commit():
200200
from google.cloud.firestore_v1.types import firestore, write
201+
from google.protobuf.timestamp_pb2 import Timestamp
202+
import datetime
201203

202204
# Create a minimal fake GAPIC with a dummy result.
203205
firestore_api = AsyncMock()
204-
commit_response = firestore.CommitResponse(write_results=[write.WriteResult()])
206+
commit_time = Timestamp()
207+
commit_time.FromDatetime(datetime.datetime.now())
208+
results = [write.WriteResult(update_time=commit_time)]
209+
commit_response = firestore.CommitResponse(
210+
write_results=results, commit_time=commit_time
211+
)
205212
firestore_api.commit.return_value = commit_response
206213

207214
# Attach the fake GAPIC to a real client.
@@ -221,6 +228,9 @@ async def test_asynctransaction__commit():
221228
# Make sure transaction has no more "changes".
222229
assert transaction._id is None
223230
assert transaction._write_pbs == []
231+
# ensure write_results and commit_time were set
232+
assert transaction.write_results == results
233+
assert transaction.commit_time.timestamp_pb() == commit_time
224234

225235
# Verify the mocks.
226236
firestore_api.commit.assert_called_once_with(

tests/unit/v1/test_transaction.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ def test_transaction_constructor_defaults():
3333
assert transaction._max_attempts == MAX_ATTEMPTS
3434
assert not transaction._read_only
3535
assert transaction._id is None
36+
assert transaction.write_results is None
37+
assert transaction.commit_time is None
3638

3739

3840
def test_transaction_constructor_explicit():
@@ -209,12 +211,19 @@ def test_transaction__rollback_failure(database):
209211
def test_transaction__commit(database):
210212
from google.cloud.firestore_v1.services.firestore import client as firestore_client
211213
from google.cloud.firestore_v1.types import firestore, write
214+
from google.protobuf.timestamp_pb2 import Timestamp
215+
import datetime
212216

213217
# Create a minimal fake GAPIC with a dummy result.
214218
firestore_api = mock.create_autospec(
215219
firestore_client.FirestoreClient, instance=True
216220
)
217-
commit_response = firestore.CommitResponse(write_results=[write.WriteResult()])
221+
commit_time = Timestamp()
222+
commit_time.FromDatetime(datetime.datetime.now())
223+
results = [write.WriteResult(update_time=commit_time)]
224+
commit_response = firestore.CommitResponse(
225+
write_results=results, commit_time=commit_time
226+
)
218227
firestore_api.commit.return_value = commit_response
219228

220229
# Attach the fake GAPIC to a real client.
@@ -234,6 +243,9 @@ def test_transaction__commit(database):
234243
# Make sure transaction has no more "changes".
235244
assert transaction._id is None
236245
assert transaction._write_pbs == []
246+
# ensure write_results and commit_time were set
247+
assert transaction.write_results == results
248+
assert transaction.commit_time.timestamp_pb() == commit_time
237249

238250
# Verify the mocks.
239251
firestore_api.commit.assert_called_once_with(

0 commit comments

Comments
 (0)