Skip to content

Commit 911389d

Browse files
feat: Return LRO for RenameFolder and support longrunning protos
- Updated `update-protos.sh` to fetch `google/longrunning/operations.proto` - Regenerated Python protobuf bindings - Updated `grpc_server.py`'s `RenameFolder` to pack the resulting `Folder` into a `google.longrunning.Operation` to match production API behavior and resolve mismatched message type errors. - Added and updated comprehensive unit tests in `test_storage_control_stall.py` to verify LRO extraction.
1 parent f0ed846 commit 911389d

6 files changed

Lines changed: 582 additions & 129 deletions

File tree

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# -*- coding: utf-8 -*-
2+
# Copyright 2026 Google LLC
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
#
8+
# http://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS,
12+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
# See the License for the specific language governing permissions and
14+
# limitations under the License.
15+
16+
# Generated by the protocol buffer compiler. DO NOT EDIT!
17+
# NO CHECKED-IN PROTOBUF GENCODE
18+
# source: google/longrunning/operations.proto
19+
# Protobuf Python Version: 5.29.0
20+
"""Generated protocol buffer code."""
21+
from google.protobuf import descriptor as _descriptor
22+
from google.protobuf import descriptor_pool as _descriptor_pool
23+
from google.protobuf import runtime_version as _runtime_version
24+
from google.protobuf import symbol_database as _symbol_database
25+
from google.protobuf.internal import builder as _builder
26+
_runtime_version.ValidateProtobufRuntimeVersion(
27+
_runtime_version.Domain.PUBLIC,
28+
5,
29+
29,
30+
0,
31+
'',
32+
'google/longrunning/operations.proto'
33+
)
34+
# @@protoc_insertion_point(imports)
35+
36+
_sym_db = _symbol_database.Default()
37+
38+
39+
from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
40+
from google.api import client_pb2 as google_dot_api_dot_client__pb2
41+
from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2
42+
from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2
43+
from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2
44+
from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2
45+
from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
46+
from google.rpc import status_pb2 as google_dot_rpc_dot_status__pb2
47+
48+
49+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#google/longrunning/operations.proto\x12\x12google.longrunning\x1a\x1cgoogle/api/annotations.proto\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/protobuf/any.proto\x1a google/protobuf/descriptor.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x17google/rpc/status.proto\"\xa8\x01\n\tOperation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12&\n\x08metadata\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any\x12\x0c\n\x04\x64one\x18\x03 \x01(\x08\x12#\n\x05\x65rror\x18\x04 \x01(\x0b\x32\x12.google.rpc.StatusH\x00\x12(\n\x08response\x18\x05 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x42\x08\n\x06result\"#\n\x13GetOperationRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"|\n\x15ListOperationsRequest\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x0e\n\x06\x66ilter\x18\x01 \x01(\t\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\x12\x1e\n\x16return_partial_success\x18\x05 \x01(\x08\"~\n\x16ListOperationsResponse\x12\x31\n\noperations\x18\x01 \x03(\x0b\x32\x1d.google.longrunning.Operation\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x18\n\x0bunreachable\x18\x03 \x03(\tB\x03\xe0\x41\x06\"&\n\x16\x43\x61ncelOperationRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"&\n\x16\x44\x65leteOperationRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"P\n\x14WaitOperationRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12*\n\x07timeout\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration\"=\n\rOperationInfo\x12\x15\n\rresponse_type\x18\x01 \x01(\t\x12\x15\n\rmetadata_type\x18\x02 \x01(\t2\xaa\x05\n\nOperations\x12\x94\x01\n\x0eListOperations\x12).google.longrunning.ListOperationsRequest\x1a*.google.longrunning.ListOperationsResponse\"+\xda\x41\x0bname,filter\x82\xd3\xe4\x93\x02\x17\x12\x15/v1/{name=operations}\x12\x7f\n\x0cGetOperation\x12\'.google.longrunning.GetOperationRequest\x1a\x1d.google.longrunning.Operation\"\'\xda\x41\x04name\x82\xd3\xe4\x93\x02\x1a\x12\x18/v1/{name=operations/**}\x12~\n\x0f\x44\x65leteOperation\x12*.google.longrunning.DeleteOperationRequest\x1a\x16.google.protobuf.Empty\"\'\xda\x41\x04name\x82\xd3\xe4\x93\x02\x1a*\x18/v1/{name=operations/**}\x12\x88\x01\n\x0f\x43\x61ncelOperation\x12*.google.longrunning.CancelOperationRequest\x1a\x16.google.protobuf.Empty\"1\xda\x41\x04name\x82\xd3\xe4\x93\x02$\"\x1f/v1/{name=operations/**}:cancel:\x01*\x12Z\n\rWaitOperation\x12(.google.longrunning.WaitOperationRequest\x1a\x1d.google.longrunning.Operation\"\x00\x1a\x1d\xca\x41\x1alongrunning.googleapis.com:Z\n\x0eoperation_info\x12\x1e.google.protobuf.MethodOptions\x18\x99\x08 \x01(\x0b\x32!.google.longrunning.OperationInfoB\xa2\x01\n\x16\x63om.google.longrunningB\x0fOperationsProtoP\x01ZCcloud.google.com/go/longrunning/autogen/longrunningpb;longrunningpb\xa2\x02\x05GLRUN\xaa\x02\x12Google.LongRunning\xca\x02\x12Google\\LongRunningb\x06proto3')
50+
51+
_globals = globals()
52+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
53+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'google.longrunning.operations_pb2', _globals)
54+
if not _descriptor._USE_C_DESCRIPTORS:
55+
_globals['DESCRIPTOR']._loaded_options = None
56+
_globals['DESCRIPTOR']._serialized_options = b'\n\026com.google.longrunningB\017OperationsProtoP\001ZCcloud.google.com/go/longrunning/autogen/longrunningpb;longrunningpb\242\002\005GLRUN\252\002\022Google.LongRunning\312\002\022Google\\LongRunning'
57+
_globals['_LISTOPERATIONSRESPONSE'].fields_by_name['unreachable']._loaded_options = None
58+
_globals['_LISTOPERATIONSRESPONSE'].fields_by_name['unreachable']._serialized_options = b'\340A\006'
59+
_globals['_OPERATIONS']._loaded_options = None
60+
_globals['_OPERATIONS']._serialized_options = b'\312A\032longrunning.googleapis.com'
61+
_globals['_OPERATIONS'].methods_by_name['ListOperations']._loaded_options = None
62+
_globals['_OPERATIONS'].methods_by_name['ListOperations']._serialized_options = b'\332A\013name,filter\202\323\344\223\002\027\022\025/v1/{name=operations}'
63+
_globals['_OPERATIONS'].methods_by_name['GetOperation']._loaded_options = None
64+
_globals['_OPERATIONS'].methods_by_name['GetOperation']._serialized_options = b'\332A\004name\202\323\344\223\002\032\022\030/v1/{name=operations/**}'
65+
_globals['_OPERATIONS'].methods_by_name['DeleteOperation']._loaded_options = None
66+
_globals['_OPERATIONS'].methods_by_name['DeleteOperation']._serialized_options = b'\332A\004name\202\323\344\223\002\032*\030/v1/{name=operations/**}'
67+
_globals['_OPERATIONS'].methods_by_name['CancelOperation']._loaded_options = None
68+
_globals['_OPERATIONS'].methods_by_name['CancelOperation']._serialized_options = b'\332A\004name\202\323\344\223\002$\"\037/v1/{name=operations/**}:cancel:\001*'
69+
_globals['_OPERATION']._serialized_start=295
70+
_globals['_OPERATION']._serialized_end=463
71+
_globals['_GETOPERATIONREQUEST']._serialized_start=465
72+
_globals['_GETOPERATIONREQUEST']._serialized_end=500
73+
_globals['_LISTOPERATIONSREQUEST']._serialized_start=502
74+
_globals['_LISTOPERATIONSREQUEST']._serialized_end=626
75+
_globals['_LISTOPERATIONSRESPONSE']._serialized_start=628
76+
_globals['_LISTOPERATIONSRESPONSE']._serialized_end=754
77+
_globals['_CANCELOPERATIONREQUEST']._serialized_start=756
78+
_globals['_CANCELOPERATIONREQUEST']._serialized_end=794
79+
_globals['_DELETEOPERATIONREQUEST']._serialized_start=796
80+
_globals['_DELETEOPERATIONREQUEST']._serialized_end=834
81+
_globals['_WAITOPERATIONREQUEST']._serialized_start=836
82+
_globals['_WAITOPERATIONREQUEST']._serialized_end=916
83+
_globals['_OPERATIONINFO']._serialized_start=918
84+
_globals['_OPERATIONINFO']._serialized_end=979
85+
_globals['_OPERATIONS']._serialized_start=982
86+
_globals['_OPERATIONS']._serialized_end=1664
87+
# @@protoc_insertion_point(module_scope)

0 commit comments

Comments
 (0)