Skip to content

Commit ed7152a

Browse files
authored
fix!: convert operations pbs into Operation objects when listing operations (#186)
Co-authored-by: larkee <larkee@users.noreply.github.com>
1 parent f1e21ed commit ed7152a

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

google/cloud/spanner_v1/instance.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
"""User friendly container for Cloud Spanner Instance."""
1616

17+
import google.api_core.operation
1718
import re
1819

1920
from google.cloud.spanner_admin_instance_v1 import Instance as InstancePB
@@ -475,7 +476,7 @@ def list_backup_operations(self, filter_="", page_size=None):
475476
page_iter = self._client.database_admin_api.list_backup_operations(
476477
request=request, metadata=metadata
477478
)
478-
return page_iter
479+
return map(self._item_to_operation, page_iter)
479480

480481
def list_database_operations(self, filter_="", page_size=None):
481482
"""List database operations for the instance.
@@ -503,4 +504,18 @@ def list_database_operations(self, filter_="", page_size=None):
503504
page_iter = self._client.database_admin_api.list_database_operations(
504505
request=request, metadata=metadata
505506
)
506-
return page_iter
507+
return map(self._item_to_operation, page_iter)
508+
509+
def _item_to_operation(self, operation_pb):
510+
"""Convert an operation protobuf to the native object.
511+
:type operation_pb: :class:`~google.longrunning.operations.Operation`
512+
:param operation_pb: An operation returned from the API.
513+
:rtype: :class:`~google.api_core.operation.Operation`
514+
:returns: The next operation in the page.
515+
"""
516+
operations_client = self._client.database_admin_api.transport.operations_client
517+
metadata_type = _type_string_to_type_pb(operation_pb.metadata.type_url)
518+
response_type = _OPERATION_RESPONSE_TYPES[metadata_type]
519+
return google.api_core.operation.from_gapic(
520+
operation_pb, operations_client, response_type, metadata_type=metadata_type
521+
)

tests/unit/test_instance.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -697,6 +697,7 @@ def test_list_backups_w_options(self):
697697
)
698698

699699
def test_list_backup_operations_defaults(self):
700+
from google.api_core.operation import Operation
700701
from google.cloud.spanner_admin_database_v1 import CreateBackupMetadata
701702
from google.cloud.spanner_admin_database_v1 import DatabaseAdminClient
702703
from google.cloud.spanner_admin_database_v1 import ListBackupOperationsRequest
@@ -726,7 +727,7 @@ def test_list_backup_operations_defaults(self):
726727
api._transport.list_backup_operations
727728
] = mock.Mock(return_value=operations_pb)
728729

729-
instance.list_backup_operations()
730+
ops = instance.list_backup_operations()
730731

731732
expected_metadata = (
732733
("google-cloud-resource-prefix", instance.name),
@@ -738,8 +739,10 @@ def test_list_backup_operations_defaults(self):
738739
retry=mock.ANY,
739740
timeout=mock.ANY,
740741
)
742+
self.assertTrue(all([type(op) == Operation for op in ops]))
741743

742744
def test_list_backup_operations_w_options(self):
745+
from google.api_core.operation import Operation
743746
from google.cloud.spanner_admin_database_v1 import CreateBackupMetadata
744747
from google.cloud.spanner_admin_database_v1 import DatabaseAdminClient
745748
from google.cloud.spanner_admin_database_v1 import ListBackupOperationsRequest
@@ -769,7 +772,7 @@ def test_list_backup_operations_w_options(self):
769772
api._transport.list_backup_operations
770773
] = mock.Mock(return_value=operations_pb)
771774

772-
instance.list_backup_operations(filter_="filter", page_size=10)
775+
ops = instance.list_backup_operations(filter_="filter", page_size=10)
773776

774777
expected_metadata = (
775778
("google-cloud-resource-prefix", instance.name),
@@ -783,8 +786,10 @@ def test_list_backup_operations_w_options(self):
783786
retry=mock.ANY,
784787
timeout=mock.ANY,
785788
)
789+
self.assertTrue(all([type(op) == Operation for op in ops]))
786790

787791
def test_list_database_operations_defaults(self):
792+
from google.api_core.operation import Operation
788793
from google.cloud.spanner_admin_database_v1 import CreateDatabaseMetadata
789794
from google.cloud.spanner_admin_database_v1 import DatabaseAdminClient
790795
from google.cloud.spanner_admin_database_v1 import ListDatabaseOperationsRequest
@@ -827,7 +832,7 @@ def test_list_database_operations_defaults(self):
827832
api._transport.list_database_operations
828833
] = mock.Mock(return_value=databases_pb)
829834

830-
instance.list_database_operations()
835+
ops = instance.list_database_operations()
831836

832837
expected_metadata = (
833838
("google-cloud-resource-prefix", instance.name),
@@ -839,8 +844,10 @@ def test_list_database_operations_defaults(self):
839844
retry=mock.ANY,
840845
timeout=mock.ANY,
841846
)
847+
self.assertTrue(all([type(op) == Operation for op in ops]))
842848

843849
def test_list_database_operations_w_options(self):
850+
from google.api_core.operation import Operation
844851
from google.cloud.spanner_admin_database_v1 import DatabaseAdminClient
845852
from google.cloud.spanner_admin_database_v1 import ListDatabaseOperationsRequest
846853
from google.cloud.spanner_admin_database_v1 import (
@@ -888,7 +895,7 @@ def test_list_database_operations_w_options(self):
888895
api._transport.list_database_operations
889896
] = mock.Mock(return_value=databases_pb)
890897

891-
instance.list_database_operations(filter_="filter", page_size=10)
898+
ops = instance.list_database_operations(filter_="filter", page_size=10)
892899

893900
expected_metadata = (
894901
("google-cloud-resource-prefix", instance.name),
@@ -902,6 +909,7 @@ def test_list_database_operations_w_options(self):
902909
retry=mock.ANY,
903910
timeout=mock.ANY,
904911
)
912+
self.assertTrue(all([type(op) == Operation for op in ops]))
905913

906914
def test_type_string_to_type_pb_hit(self):
907915
from google.cloud.spanner_admin_database_v1 import (

0 commit comments

Comments
 (0)