From 58cf601f02cea9a83462d7c43301b84b04f2c9f6 Mon Sep 17 00:00:00 2001 From: Cathy Ouyang Date: Thu, 24 Oct 2024 20:45:25 +0000 Subject: [PATCH 1/2] chore: update protos circa 2024-10-24 --- google/iam/v1/iam_policy_pb2.py | 4 +- google/iam/v1/iam_policy_pb2_grpc.py | 3 - google/storage/v2/storage_pb2.py | 344 +++++++------------ google/storage/v2/storage_pb2_grpc.py | 453 +------------------------- 4 files changed, 131 insertions(+), 673 deletions(-) diff --git a/google/iam/v1/iam_policy_pb2.py b/google/iam/v1/iam_policy_pb2.py index d5eeaf58..137f6a52 100644 --- a/google/iam/v1/iam_policy_pb2.py +++ b/google/iam/v1/iam_policy_pb2.py @@ -45,14 +45,14 @@ from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1egoogle/iam/v1/iam_policy.proto\x12\rgoogle.iam.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a\x1bgoogle/iam/v1/options.proto\x1a\x1agoogle/iam/v1/policy.proto\x1a google/protobuf/field_mask.proto\"\x8f\x01\n\x13SetIamPolicyRequest\x12\x1b\n\x08resource\x18\x01 \x01(\tB\t\xe0\x41\x02\xfa\x41\x03\n\x01*\x12*\n\x06policy\x18\x02 \x01(\x0b\x32\x15.google.iam.v1.PolicyB\x03\xe0\x41\x02\x12/\n\x0bupdate_mask\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.FieldMask\"d\n\x13GetIamPolicyRequest\x12\x1b\n\x08resource\x18\x01 \x01(\tB\t\xe0\x41\x02\xfa\x41\x03\n\x01*\x12\x30\n\x07options\x18\x02 \x01(\x0b\x32\x1f.google.iam.v1.GetPolicyOptions\"R\n\x19TestIamPermissionsRequest\x12\x1b\n\x08resource\x18\x01 \x01(\tB\t\xe0\x41\x02\xfa\x41\x03\n\x01*\x12\x18\n\x0bpermissions\x18\x02 \x03(\tB\x03\xe0\x41\x02\"1\n\x1aTestIamPermissionsResponse\x12\x13\n\x0bpermissions\x18\x01 \x03(\t2\xb4\x03\n\tIAMPolicy\x12t\n\x0cSetIamPolicy\x12\".google.iam.v1.SetIamPolicyRequest\x1a\x15.google.iam.v1.Policy\")\x82\xd3\xe4\x93\x02#\"\x1e/v1/{resource=**}:setIamPolicy:\x01*\x12t\n\x0cGetIamPolicy\x12\".google.iam.v1.GetIamPolicyRequest\x1a\x15.google.iam.v1.Policy\")\x82\xd3\xe4\x93\x02#\"\x1e/v1/{resource=**}:getIamPolicy:\x01*\x12\x9a\x01\n\x12TestIamPermissions\x12(.google.iam.v1.TestIamPermissionsRequest\x1a).google.iam.v1.TestIamPermissionsResponse\"/\x82\xd3\xe4\x93\x02)\"$/v1/{resource=**}:testIamPermissions:\x01*\x1a\x1e\xca\x41\x1biam-meta-api.googleapis.comB\x7f\n\x11\x63om.google.iam.v1B\x0eIamPolicyProtoP\x01Z)cloud.google.com/go/iam/apiv1/iampb;iampb\xf8\x01\x01\xaa\x02\x13Google.Cloud.Iam.V1\xca\x02\x13Google\\Cloud\\Iam\\V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1egoogle/iam/v1/iam_policy.proto\x12\rgoogle.iam.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a\x1bgoogle/iam/v1/options.proto\x1a\x1agoogle/iam/v1/policy.proto\x1a google/protobuf/field_mask.proto\"\x8f\x01\n\x13SetIamPolicyRequest\x12\x1b\n\x08resource\x18\x01 \x01(\tB\t\xe0\x41\x02\xfa\x41\x03\n\x01*\x12*\n\x06policy\x18\x02 \x01(\x0b\x32\x15.google.iam.v1.PolicyB\x03\xe0\x41\x02\x12/\n\x0bupdate_mask\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.FieldMask\"d\n\x13GetIamPolicyRequest\x12\x1b\n\x08resource\x18\x01 \x01(\tB\t\xe0\x41\x02\xfa\x41\x03\n\x01*\x12\x30\n\x07options\x18\x02 \x01(\x0b\x32\x1f.google.iam.v1.GetPolicyOptions\"R\n\x19TestIamPermissionsRequest\x12\x1b\n\x08resource\x18\x01 \x01(\tB\t\xe0\x41\x02\xfa\x41\x03\n\x01*\x12\x18\n\x0bpermissions\x18\x02 \x03(\tB\x03\xe0\x41\x02\"1\n\x1aTestIamPermissionsResponse\x12\x13\n\x0bpermissions\x18\x01 \x03(\t2\xb4\x03\n\tIAMPolicy\x12t\n\x0cSetIamPolicy\x12\".google.iam.v1.SetIamPolicyRequest\x1a\x15.google.iam.v1.Policy\")\x82\xd3\xe4\x93\x02#\"\x1e/v1/{resource=**}:setIamPolicy:\x01*\x12t\n\x0cGetIamPolicy\x12\".google.iam.v1.GetIamPolicyRequest\x1a\x15.google.iam.v1.Policy\")\x82\xd3\xe4\x93\x02#\"\x1e/v1/{resource=**}:getIamPolicy:\x01*\x12\x9a\x01\n\x12TestIamPermissions\x12(.google.iam.v1.TestIamPermissionsRequest\x1a).google.iam.v1.TestIamPermissionsResponse\"/\x82\xd3\xe4\x93\x02)\"$/v1/{resource=**}:testIamPermissions:\x01*\x1a\x1e\xca\x41\x1biam-meta-api.googleapis.comB|\n\x11\x63om.google.iam.v1B\x0eIamPolicyProtoP\x01Z)cloud.google.com/go/iam/apiv1/iampb;iampb\xaa\x02\x13Google.Cloud.Iam.V1\xca\x02\x13Google\\Cloud\\Iam\\V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'google.iam.v1.iam_policy_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\021com.google.iam.v1B\016IamPolicyProtoP\001Z)cloud.google.com/go/iam/apiv1/iampb;iampb\370\001\001\252\002\023Google.Cloud.Iam.V1\312\002\023Google\\Cloud\\Iam\\V1' + _globals['DESCRIPTOR']._serialized_options = b'\n\021com.google.iam.v1B\016IamPolicyProtoP\001Z)cloud.google.com/go/iam/apiv1/iampb;iampb\252\002\023Google.Cloud.Iam.V1\312\002\023Google\\Cloud\\Iam\\V1' _globals['_SETIAMPOLICYREQUEST'].fields_by_name['resource']._loaded_options = None _globals['_SETIAMPOLICYREQUEST'].fields_by_name['resource']._serialized_options = b'\340A\002\372A\003\n\001*' _globals['_SETIAMPOLICYREQUEST'].fields_by_name['policy']._loaded_options = None diff --git a/google/iam/v1/iam_policy_pb2_grpc.py b/google/iam/v1/iam_policy_pb2_grpc.py index 5a6efa84..8cd3a944 100644 --- a/google/iam/v1/iam_policy_pb2_grpc.py +++ b/google/iam/v1/iam_policy_pb2_grpc.py @@ -43,7 +43,6 @@ class IAMPolicyStub(object): """API Overview - Manages Identity and Access Management (IAM) policies. Any implementation of an API that offers access control features @@ -95,7 +94,6 @@ def __init__(self, channel): class IAMPolicyServicer(object): """API Overview - Manages Identity and Access Management (IAM) policies. Any implementation of an API that offers access control features @@ -182,7 +180,6 @@ def add_IAMPolicyServicer_to_server(servicer, server): class IAMPolicy(object): """API Overview - Manages Identity and Access Management (IAM) policies. Any implementation of an API that offers access control features diff --git a/google/storage/v2/storage_pb2.py b/google/storage/v2/storage_pb2.py index 20b4e74b..dc85e4b2 100644 --- a/google/storage/v2/storage_pb2.py +++ b/google/storage/v2/storage_pb2.py @@ -49,7 +49,7 @@ from google.type import date_pb2 as google_dot_type_dot_date__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fgoogle/storage/v2/storage.proto\x12\x11google.storage.v2\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a\x18google/api/routing.proto\x1a\x1egoogle/iam/v1/iam_policy.proto\x1a\x1agoogle/iam/v1/policy.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x16google/type/date.proto\"\xd6\x01\n\x13\x44\x65leteBucketRequest\x12\x33\n\x04name\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12$\n\x17if_metageneration_match\x18\x02 \x01(\x03H\x00\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\x03 \x01(\x03H\x01\x88\x01\x01\x42\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_match\"\x95\x02\n\x10GetBucketRequest\x12\x33\n\x04name\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12$\n\x17if_metageneration_match\x18\x02 \x01(\x03H\x00\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\x03 \x01(\x03H\x01\x88\x01\x01\x12\x32\n\tread_mask\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x02\x88\x01\x01\x42\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_matchB\x0c\n\n_read_mask\"\xce\x01\n\x13\x43reateBucketRequest\x12\x35\n\x06parent\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\x12\x1dstorage.googleapis.com/Bucket\x12)\n\x06\x62ucket\x18\x02 \x01(\x0b\x32\x19.google.storage.v2.Bucket\x12\x16\n\tbucket_id\x18\x03 \x01(\tB\x03\xe0\x41\x02\x12\x16\n\x0epredefined_acl\x18\x06 \x01(\t\x12%\n\x1dpredefined_default_object_acl\x18\x07 \x01(\t\"\xc4\x01\n\x12ListBucketsRequest\x12\x35\n\x06parent\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\x12\x1dstorage.googleapis.com/Bucket\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\x12\x0e\n\x06prefix\x18\x04 \x01(\t\x12\x32\n\tread_mask\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x00\x88\x01\x01\x42\x0c\n\n_read_mask\"Z\n\x13ListBucketsResponse\x12*\n\x07\x62uckets\x18\x01 \x03(\x0b\x32\x19.google.storage.v2.Bucket\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"\x7f\n LockBucketRetentionPolicyRequest\x12\x35\n\x06\x62ucket\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12$\n\x17if_metageneration_match\x18\x02 \x01(\x03\x42\x03\xe0\x41\x02\"\xc6\x02\n\x13UpdateBucketRequest\x12.\n\x06\x62ucket\x18\x01 \x01(\x0b\x32\x19.google.storage.v2.BucketB\x03\xe0\x41\x02\x12$\n\x17if_metageneration_match\x18\x02 \x01(\x03H\x00\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\x03 \x01(\x03H\x01\x88\x01\x01\x12\x16\n\x0epredefined_acl\x18\x08 \x01(\t\x12%\n\x1dpredefined_default_object_acl\x18\t \x01(\t\x12\x34\n\x0bupdate_mask\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x03\xe0\x41\x02\x42\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_match\"b\n\x1f\x44\x65leteNotificationConfigRequest\x12?\n\x04name\x18\x01 \x01(\tB1\xe0\x41\x02\xfa\x41+\n)storage.googleapis.com/NotificationConfig\"_\n\x1cGetNotificationConfigRequest\x12?\n\x04name\x18\x01 \x01(\tB1\xe0\x41\x02\xfa\x41+\n)storage.googleapis.com/NotificationConfig\"\xad\x01\n\x1f\x43reateNotificationConfigRequest\x12\x41\n\x06parent\x18\x01 \x01(\tB1\xe0\x41\x02\xfa\x41+\x12)storage.googleapis.com/NotificationConfig\x12G\n\x13notification_config\x18\x02 \x01(\x0b\x32%.google.storage.v2.NotificationConfigB\x03\xe0\x41\x02\"\x8a\x01\n\x1eListNotificationConfigsRequest\x12\x41\n\x06parent\x18\x01 \x01(\tB1\xe0\x41\x02\xfa\x41+\x12)storage.googleapis.com/NotificationConfig\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\"\x7f\n\x1fListNotificationConfigsResponse\x12\x43\n\x14notification_configs\x18\x01 \x03(\x0b\x32%.google.storage.v2.NotificationConfig\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"\xf5\x05\n\x14\x43omposeObjectRequest\x12\x33\n\x0b\x64\x65stination\x18\x01 \x01(\x0b\x32\x19.google.storage.v2.ObjectB\x03\xe0\x41\x02\x12L\n\x0esource_objects\x18\x02 \x03(\x0b\x32\x34.google.storage.v2.ComposeObjectRequest.SourceObject\x12\"\n\x1a\x64\x65stination_predefined_acl\x18\t \x01(\t\x12 \n\x13if_generation_match\x18\x04 \x01(\x03H\x00\x88\x01\x01\x12$\n\x17if_metageneration_match\x18\x05 \x01(\x03H\x01\x88\x01\x01\x12\x37\n\x07kms_key\x18\x06 \x01(\tB&\xfa\x41#\n!cloudkms.googleapis.com/CryptoKey\x12R\n\x1c\x63ommon_object_request_params\x18\x07 \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParams\x12<\n\x10object_checksums\x18\n \x01(\x0b\x32\".google.storage.v2.ObjectChecksums\x1a\xee\x01\n\x0cSourceObject\x12\x11\n\x04name\x18\x01 \x01(\tB\x03\xe0\x41\x02\x12\x12\n\ngeneration\x18\x02 \x01(\x03\x12\x66\n\x14object_preconditions\x18\x03 \x01(\x0b\x32H.google.storage.v2.ComposeObjectRequest.SourceObject.ObjectPreconditions\x1aO\n\x13ObjectPreconditions\x12 \n\x13if_generation_match\x18\x01 \x01(\x03H\x00\x88\x01\x01\x42\x16\n\x14_if_generation_matchB\x16\n\x14_if_generation_matchB\x1a\n\x18_if_metageneration_match\"\xd1\x03\n\x13\x44\x65leteObjectRequest\x12\x35\n\x06\x62ucket\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12\x13\n\x06object\x18\x02 \x01(\tB\x03\xe0\x41\x02\x12\x12\n\ngeneration\x18\x04 \x01(\x03\x12 \n\x13if_generation_match\x18\x05 \x01(\x03H\x00\x88\x01\x01\x12$\n\x17if_generation_not_match\x18\x06 \x01(\x03H\x01\x88\x01\x01\x12$\n\x17if_metageneration_match\x18\x07 \x01(\x03H\x02\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\x08 \x01(\x03H\x03\x88\x01\x01\x12R\n\x1c\x63ommon_object_request_params\x18\n \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParamsB\x16\n\x14_if_generation_matchB\x1a\n\x18_if_generation_not_matchB\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_match\"\x89\x04\n\x14RestoreObjectRequest\x12\x35\n\x06\x62ucket\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12\x13\n\x06object\x18\x02 \x01(\tB\x03\xe0\x41\x02\x12\x17\n\ngeneration\x18\x03 \x01(\x03\x42\x03\xe0\x41\x02\x12 \n\x13if_generation_match\x18\x04 \x01(\x03H\x00\x88\x01\x01\x12$\n\x17if_generation_not_match\x18\x05 \x01(\x03H\x01\x88\x01\x01\x12$\n\x17if_metageneration_match\x18\x06 \x01(\x03H\x02\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\x07 \x01(\x03H\x03\x88\x01\x01\x12\x1c\n\x0f\x63opy_source_acl\x18\t \x01(\x08H\x04\x88\x01\x01\x12R\n\x1c\x63ommon_object_request_params\x18\x08 \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParamsB\x16\n\x14_if_generation_matchB\x1a\n\x18_if_generation_not_matchB\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_matchB\x12\n\x10_copy_source_acl\"5\n\x1b\x43\x61ncelResumableWriteRequest\x12\x16\n\tupload_id\x18\x01 \x01(\tB\x03\xe0\x41\x02\"\x1e\n\x1c\x43\x61ncelResumableWriteResponse\"\xba\x04\n\x11ReadObjectRequest\x12\x35\n\x06\x62ucket\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12\x13\n\x06object\x18\x02 \x01(\tB\x03\xe0\x41\x02\x12\x12\n\ngeneration\x18\x03 \x01(\x03\x12\x13\n\x0bread_offset\x18\x04 \x01(\x03\x12\x12\n\nread_limit\x18\x05 \x01(\x03\x12 \n\x13if_generation_match\x18\x06 \x01(\x03H\x00\x88\x01\x01\x12$\n\x17if_generation_not_match\x18\x07 \x01(\x03H\x01\x88\x01\x01\x12$\n\x17if_metageneration_match\x18\x08 \x01(\x03H\x02\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\t \x01(\x03H\x03\x88\x01\x01\x12R\n\x1c\x63ommon_object_request_params\x18\n \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParams\x12\x32\n\tread_mask\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x04\x88\x01\x01\x42\x16\n\x14_if_generation_matchB\x1a\n\x18_if_generation_not_matchB\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_matchB\x0c\n\n_read_mask\"\xbc\x04\n\x10GetObjectRequest\x12\x35\n\x06\x62ucket\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12\x13\n\x06object\x18\x02 \x01(\tB\x03\xe0\x41\x02\x12\x12\n\ngeneration\x18\x03 \x01(\x03\x12\x19\n\x0csoft_deleted\x18\x0b \x01(\x08H\x00\x88\x01\x01\x12 \n\x13if_generation_match\x18\x04 \x01(\x03H\x01\x88\x01\x01\x12$\n\x17if_generation_not_match\x18\x05 \x01(\x03H\x02\x88\x01\x01\x12$\n\x17if_metageneration_match\x18\x06 \x01(\x03H\x03\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\x07 \x01(\x03H\x04\x88\x01\x01\x12R\n\x1c\x63ommon_object_request_params\x18\x08 \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParams\x12\x32\n\tread_mask\x18\n \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x05\x88\x01\x01\x42\x0f\n\r_soft_deletedB\x16\n\x14_if_generation_matchB\x1a\n\x18_if_generation_not_matchB\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_matchB\x0c\n\n_read_mask\"\xf5\x01\n\x12ReadObjectResponse\x12<\n\x10\x63hecksummed_data\x18\x01 \x01(\x0b\x32\".google.storage.v2.ChecksummedData\x12<\n\x10object_checksums\x18\x02 \x01(\x0b\x32\".google.storage.v2.ObjectChecksums\x12\x36\n\rcontent_range\x18\x03 \x01(\x0b\x32\x1f.google.storage.v2.ContentRange\x12+\n\x08metadata\x18\x04 \x01(\x0b\x32\x19.google.storage.v2.Object\"\x8d\x03\n\x0fWriteObjectSpec\x12\x30\n\x08resource\x18\x01 \x01(\x0b\x32\x19.google.storage.v2.ObjectB\x03\xe0\x41\x02\x12\x16\n\x0epredefined_acl\x18\x07 \x01(\t\x12 \n\x13if_generation_match\x18\x03 \x01(\x03H\x00\x88\x01\x01\x12$\n\x17if_generation_not_match\x18\x04 \x01(\x03H\x01\x88\x01\x01\x12$\n\x17if_metageneration_match\x18\x05 \x01(\x03H\x02\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\x06 \x01(\x03H\x03\x88\x01\x01\x12\x18\n\x0bobject_size\x18\x08 \x01(\x03H\x04\x88\x01\x01\x42\x16\n\x14_if_generation_matchB\x1a\n\x18_if_generation_not_matchB\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_matchB\x0e\n\x0c_object_size\"\x86\x03\n\x12WriteObjectRequest\x12\x13\n\tupload_id\x18\x01 \x01(\tH\x00\x12?\n\x11write_object_spec\x18\x02 \x01(\x0b\x32\".google.storage.v2.WriteObjectSpecH\x00\x12\x19\n\x0cwrite_offset\x18\x03 \x01(\x03\x42\x03\xe0\x41\x02\x12>\n\x10\x63hecksummed_data\x18\x04 \x01(\x0b\x32\".google.storage.v2.ChecksummedDataH\x01\x12<\n\x10object_checksums\x18\x06 \x01(\x0b\x32\".google.storage.v2.ObjectChecksums\x12\x14\n\x0c\x66inish_write\x18\x07 \x01(\x08\x12R\n\x1c\x63ommon_object_request_params\x18\x08 \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParamsB\x0f\n\rfirst_messageB\x06\n\x04\x64\x61ta\"n\n\x13WriteObjectResponse\x12\x18\n\x0epersisted_size\x18\x01 \x01(\x03H\x00\x12-\n\x08resource\x18\x02 \x01(\x0b\x32\x19.google.storage.v2.ObjectH\x00\x42\x0e\n\x0cwrite_status\"\xaf\x03\n\x16\x42idiWriteObjectRequest\x12\x13\n\tupload_id\x18\x01 \x01(\tH\x00\x12?\n\x11write_object_spec\x18\x02 \x01(\x0b\x32\".google.storage.v2.WriteObjectSpecH\x00\x12\x19\n\x0cwrite_offset\x18\x03 \x01(\x03\x42\x03\xe0\x41\x02\x12>\n\x10\x63hecksummed_data\x18\x04 \x01(\x0b\x32\".google.storage.v2.ChecksummedDataH\x01\x12<\n\x10object_checksums\x18\x06 \x01(\x0b\x32\".google.storage.v2.ObjectChecksums\x12\x14\n\x0cstate_lookup\x18\x07 \x01(\x08\x12\r\n\x05\x66lush\x18\x08 \x01(\x08\x12\x14\n\x0c\x66inish_write\x18\t \x01(\x08\x12R\n\x1c\x63ommon_object_request_params\x18\n \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParamsB\x0f\n\rfirst_messageB\x06\n\x04\x64\x61ta\"r\n\x17\x42idiWriteObjectResponse\x12\x18\n\x0epersisted_size\x18\x01 \x01(\x03H\x00\x12-\n\x08resource\x18\x02 \x01(\x0b\x32\x19.google.storage.v2.ObjectH\x00\x42\x0e\n\x0cwrite_status\"\xad\x03\n\x12ListObjectsRequest\x12\x35\n\x06parent\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\x12\x11\n\tdelimiter\x18\x04 \x01(\t\x12\"\n\x1ainclude_trailing_delimiter\x18\x05 \x01(\x08\x12\x0e\n\x06prefix\x18\x06 \x01(\t\x12\x10\n\x08versions\x18\x07 \x01(\x08\x12\x32\n\tread_mask\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x00\x88\x01\x01\x12 \n\x13lexicographic_start\x18\n \x01(\tB\x03\xe0\x41\x01\x12\x1e\n\x11lexicographic_end\x18\x0b \x01(\tB\x03\xe0\x41\x01\x12\x19\n\x0csoft_deleted\x18\x0c \x01(\x08\x42\x03\xe0\x41\x01\x12(\n\x1binclude_folders_as_prefixes\x18\r \x01(\x08\x42\x03\xe0\x41\x01\x12\x17\n\nmatch_glob\x18\x0e \x01(\tB\x03\xe0\x41\x01\x42\x0c\n\n_read_mask\"\x85\x01\n\x17QueryWriteStatusRequest\x12\x16\n\tupload_id\x18\x01 \x01(\tB\x03\xe0\x41\x02\x12R\n\x1c\x63ommon_object_request_params\x18\x02 \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParams\"s\n\x18QueryWriteStatusResponse\x12\x18\n\x0epersisted_size\x18\x01 \x01(\x03H\x00\x12-\n\x08resource\x18\x02 \x01(\x0b\x32\x19.google.storage.v2.ObjectH\x00\x42\x0e\n\x0cwrite_status\"\xa8\n\n\x14RewriteObjectRequest\x12 \n\x10\x64\x65stination_name\x18\x18 \x01(\tB\x06\xe0\x41\x02\xe0\x41\x05\x12\x44\n\x12\x64\x65stination_bucket\x18\x19 \x01(\tB(\xe0\x41\x02\xe0\x41\x05\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12\x43\n\x13\x64\x65stination_kms_key\x18\x1b \x01(\tB&\xfa\x41#\n!cloudkms.googleapis.com/CryptoKey\x12.\n\x0b\x64\x65stination\x18\x01 \x01(\x0b\x32\x19.google.storage.v2.Object\x12<\n\rsource_bucket\x18\x02 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12\x1a\n\rsource_object\x18\x03 \x01(\tB\x03\xe0\x41\x02\x12\x19\n\x11source_generation\x18\x04 \x01(\x03\x12\x15\n\rrewrite_token\x18\x05 \x01(\t\x12\"\n\x1a\x64\x65stination_predefined_acl\x18\x1c \x01(\t\x12 \n\x13if_generation_match\x18\x07 \x01(\x03H\x00\x88\x01\x01\x12$\n\x17if_generation_not_match\x18\x08 \x01(\x03H\x01\x88\x01\x01\x12$\n\x17if_metageneration_match\x18\t \x01(\x03H\x02\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\n \x01(\x03H\x03\x88\x01\x01\x12\'\n\x1aif_source_generation_match\x18\x0b \x01(\x03H\x04\x88\x01\x01\x12+\n\x1eif_source_generation_not_match\x18\x0c \x01(\x03H\x05\x88\x01\x01\x12+\n\x1eif_source_metageneration_match\x18\r \x01(\x03H\x06\x88\x01\x01\x12/\n\"if_source_metageneration_not_match\x18\x0e \x01(\x03H\x07\x88\x01\x01\x12$\n\x1cmax_bytes_rewritten_per_call\x18\x0f \x01(\x03\x12(\n copy_source_encryption_algorithm\x18\x10 \x01(\t\x12(\n copy_source_encryption_key_bytes\x18\x15 \x01(\x0c\x12/\n\'copy_source_encryption_key_sha256_bytes\x18\x16 \x01(\x0c\x12R\n\x1c\x63ommon_object_request_params\x18\x13 \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParams\x12<\n\x10object_checksums\x18\x1d \x01(\x0b\x32\".google.storage.v2.ObjectChecksumsB\x16\n\x14_if_generation_matchB\x1a\n\x18_if_generation_not_matchB\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_matchB\x1d\n\x1b_if_source_generation_matchB!\n\x1f_if_source_generation_not_matchB!\n\x1f_if_source_metageneration_matchB%\n#_if_source_metageneration_not_match\"\x97\x01\n\x0fRewriteResponse\x12\x1d\n\x15total_bytes_rewritten\x18\x01 \x01(\x03\x12\x13\n\x0bobject_size\x18\x02 \x01(\x03\x12\x0c\n\x04\x64one\x18\x03 \x01(\x08\x12\x15\n\rrewrite_token\x18\x04 \x01(\t\x12+\n\x08resource\x18\x05 \x01(\x0b\x32\x19.google.storage.v2.Object\"\xf2\x01\n\x1aStartResumableWriteRequest\x12\x42\n\x11write_object_spec\x18\x01 \x01(\x0b\x32\".google.storage.v2.WriteObjectSpecB\x03\xe0\x41\x02\x12R\n\x1c\x63ommon_object_request_params\x18\x03 \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParams\x12<\n\x10object_checksums\x18\x05 \x01(\x0b\x32\".google.storage.v2.ObjectChecksums\"0\n\x1bStartResumableWriteResponse\x12\x11\n\tupload_id\x18\x01 \x01(\t\"\xef\x03\n\x13UpdateObjectRequest\x12.\n\x06object\x18\x01 \x01(\x0b\x32\x19.google.storage.v2.ObjectB\x03\xe0\x41\x02\x12 \n\x13if_generation_match\x18\x02 \x01(\x03H\x00\x88\x01\x01\x12$\n\x17if_generation_not_match\x18\x03 \x01(\x03H\x01\x88\x01\x01\x12$\n\x17if_metageneration_match\x18\x04 \x01(\x03H\x02\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\x05 \x01(\x03H\x03\x88\x01\x01\x12\x16\n\x0epredefined_acl\x18\n \x01(\t\x12\x34\n\x0bupdate_mask\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x03\xe0\x41\x02\x12R\n\x1c\x63ommon_object_request_params\x18\x08 \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParamsB\x16\n\x14_if_generation_matchB\x1a\n\x18_if_generation_not_matchB\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_match\"`\n\x18GetServiceAccountRequest\x12\x44\n\x07project\x18\x01 \x01(\tB3\xe0\x41\x02\xfa\x41-\n+cloudresourcemanager.googleapis.com/Project\"\x80\x01\n\x14\x43reateHmacKeyRequest\x12\x44\n\x07project\x18\x01 \x01(\tB3\xe0\x41\x02\xfa\x41-\n+cloudresourcemanager.googleapis.com/Project\x12\"\n\x15service_account_email\x18\x02 \x01(\tB\x03\xe0\x41\x02\"g\n\x15\x43reateHmacKeyResponse\x12\x34\n\x08metadata\x18\x01 \x01(\x0b\x32\".google.storage.v2.HmacKeyMetadata\x12\x18\n\x10secret_key_bytes\x18\x03 \x01(\x0c\"t\n\x14\x44\x65leteHmacKeyRequest\x12\x16\n\taccess_id\x18\x01 \x01(\tB\x03\xe0\x41\x02\x12\x44\n\x07project\x18\x02 \x01(\tB3\xe0\x41\x02\xfa\x41-\n+cloudresourcemanager.googleapis.com/Project\"q\n\x11GetHmacKeyRequest\x12\x16\n\taccess_id\x18\x01 \x01(\tB\x03\xe0\x41\x02\x12\x44\n\x07project\x18\x02 \x01(\tB3\xe0\x41\x02\xfa\x41-\n+cloudresourcemanager.googleapis.com/Project\"\xbc\x01\n\x13ListHmacKeysRequest\x12\x44\n\x07project\x18\x01 \x01(\tB3\xe0\x41\x02\xfa\x41-\n+cloudresourcemanager.googleapis.com/Project\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\x12\x1d\n\x15service_account_email\x18\x04 \x01(\t\x12\x19\n\x11show_deleted_keys\x18\x05 \x01(\x08\"f\n\x14ListHmacKeysResponse\x12\x35\n\thmac_keys\x18\x01 \x03(\x0b\x32\".google.storage.v2.HmacKeyMetadata\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"\x82\x01\n\x14UpdateHmacKeyRequest\x12\x39\n\x08hmac_key\x18\x01 \x01(\x0b\x32\".google.storage.v2.HmacKeyMetadataB\x03\xe0\x41\x02\x12/\n\x0bupdate_mask\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.FieldMask\"|\n\x19\x43ommonObjectRequestParams\x12\x1c\n\x14\x65ncryption_algorithm\x18\x01 \x01(\t\x12\x1c\n\x14\x65ncryption_key_bytes\x18\x04 \x01(\x0c\x12#\n\x1b\x65ncryption_key_sha256_bytes\x18\x05 \x01(\x0c\"\xca\x05\n\x10ServiceConstants\"\xb5\x05\n\x06Values\x12\x16\n\x12VALUES_UNSPECIFIED\x10\x00\x12\x1b\n\x14MAX_READ_CHUNK_BYTES\x10\x80\x80\x80\x01\x12\x1c\n\x15MAX_WRITE_CHUNK_BYTES\x10\x80\x80\x80\x01\x12\x19\n\x12MAX_OBJECT_SIZE_MB\x10\x80\x80\xc0\x02\x12)\n$MAX_CUSTOM_METADATA_FIELD_NAME_BYTES\x10\x80\x08\x12*\n%MAX_CUSTOM_METADATA_FIELD_VALUE_BYTES\x10\x80 \x12)\n$MAX_CUSTOM_METADATA_TOTAL_SIZE_BYTES\x10\x80@\x12*\n$MAX_BUCKET_METADATA_TOTAL_SIZE_BYTES\x10\x80\xa0\x01\x12\'\n#MAX_NOTIFICATION_CONFIGS_PER_BUCKET\x10\x64\x12\"\n\x1eMAX_LIFECYCLE_RULES_PER_BUCKET\x10\x64\x12&\n\"MAX_NOTIFICATION_CUSTOM_ATTRIBUTES\x10\x05\x12\x31\n,MAX_NOTIFICATION_CUSTOM_ATTRIBUTE_KEY_LENGTH\x10\x80\x02\x12\x33\n.MAX_NOTIFICATION_CUSTOM_ATTRIBUTE_VALUE_LENGTH\x10\x80\x08\x12\x1c\n\x18MAX_LABELS_ENTRIES_COUNT\x10@\x12\x1f\n\x1bMAX_LABELS_KEY_VALUE_LENGTH\x10?\x12\x1f\n\x1aMAX_LABELS_KEY_VALUE_BYTES\x10\x80\x01\x12.\n)MAX_OBJECT_IDS_PER_DELETE_OBJECTS_REQUEST\x10\xe8\x07\x12\x1e\n\x1aSPLIT_TOKEN_MAX_VALID_DAYS\x10\x0e\x1a\x02\x10\x01\"\x92\x1c\n\x06\x42ucket\x12\x11\n\x04name\x18\x01 \x01(\tB\x03\xe0\x41\x05\x12\x16\n\tbucket_id\x18\x02 \x01(\tB\x03\xe0\x41\x03\x12\x0c\n\x04\x65tag\x18\x1d \x01(\t\x12\x44\n\x07project\x18\x03 \x01(\tB3\xe0\x41\x05\xfa\x41-\n+cloudresourcemanager.googleapis.com/Project\x12\x1b\n\x0emetageneration\x18\x04 \x01(\x03\x42\x03\xe0\x41\x03\x12\x15\n\x08location\x18\x05 \x01(\tB\x03\xe0\x41\x05\x12\x1a\n\rlocation_type\x18\x06 \x01(\tB\x03\xe0\x41\x03\x12\x15\n\rstorage_class\x18\x07 \x01(\t\x12\x0b\n\x03rpo\x18\x1b \x01(\t\x12\x33\n\x03\x61\x63l\x18\x08 \x03(\x0b\x32&.google.storage.v2.BucketAccessControl\x12\x42\n\x12\x64\x65\x66\x61ult_object_acl\x18\t \x03(\x0b\x32&.google.storage.v2.ObjectAccessControl\x12\x36\n\tlifecycle\x18\n \x01(\x0b\x32#.google.storage.v2.Bucket.Lifecycle\x12\x34\n\x0b\x63reate_time\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12,\n\x04\x63ors\x18\x0c \x03(\x0b\x32\x1e.google.storage.v2.Bucket.Cors\x12\x34\n\x0bupdate_time\x18\r \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12 \n\x18\x64\x65\x66\x61ult_event_based_hold\x18\x0e \x01(\x08\x12\x35\n\x06labels\x18\x0f \x03(\x0b\x32%.google.storage.v2.Bucket.LabelsEntry\x12\x32\n\x07website\x18\x10 \x01(\x0b\x32!.google.storage.v2.Bucket.Website\x12\x38\n\nversioning\x18\x11 \x01(\x0b\x32$.google.storage.v2.Bucket.Versioning\x12\x32\n\x07logging\x18\x12 \x01(\x0b\x32!.google.storage.v2.Bucket.Logging\x12,\n\x05owner\x18\x13 \x01(\x0b\x32\x18.google.storage.v2.OwnerB\x03\xe0\x41\x03\x12\x38\n\nencryption\x18\x14 \x01(\x0b\x32$.google.storage.v2.Bucket.Encryption\x12\x32\n\x07\x62illing\x18\x15 \x01(\x0b\x32!.google.storage.v2.Bucket.Billing\x12\x43\n\x10retention_policy\x18\x16 \x01(\x0b\x32).google.storage.v2.Bucket.RetentionPolicy\x12\x37\n\niam_config\x18\x17 \x01(\x0b\x32#.google.storage.v2.Bucket.IamConfig\x12\x15\n\rsatisfies_pzs\x18\x19 \x01(\x08\x12P\n\x17\x63ustom_placement_config\x18\x1a \x01(\x0b\x32/.google.storage.v2.Bucket.CustomPlacementConfig\x12\x36\n\tautoclass\x18\x1c \x01(\x0b\x32#.google.storage.v2.Bucket.Autoclass\x12T\n\x16hierarchical_namespace\x18 \x01(\x0b\x32/.google.storage.v2.Bucket.HierarchicalNamespaceB\x03\xe0\x41\x01\x12K\n\x12soft_delete_policy\x18\x1f \x01(\x0b\x32*.google.storage.v2.Bucket.SoftDeletePolicyB\x03\xe0\x41\x01\x1a!\n\x07\x42illing\x12\x16\n\x0erequester_pays\x18\x01 \x01(\x08\x1aX\n\x04\x43ors\x12\x0e\n\x06origin\x18\x01 \x03(\t\x12\x0e\n\x06method\x18\x02 \x03(\t\x12\x17\n\x0fresponse_header\x18\x03 \x03(\t\x12\x17\n\x0fmax_age_seconds\x18\x04 \x01(\x05\x1aM\n\nEncryption\x12?\n\x0f\x64\x65\x66\x61ult_kms_key\x18\x01 \x01(\tB&\xfa\x41#\n!cloudkms.googleapis.com/CryptoKey\x1a\xec\x01\n\tIamConfig\x12\x61\n\x1buniform_bucket_level_access\x18\x01 \x01(\x0b\x32<.google.storage.v2.Bucket.IamConfig.UniformBucketLevelAccess\x12 \n\x18public_access_prevention\x18\x03 \x01(\t\x1aZ\n\x18UniformBucketLevelAccess\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12-\n\tlock_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a\xf3\x05\n\tLifecycle\x12\x36\n\x04rule\x18\x01 \x03(\x0b\x32(.google.storage.v2.Bucket.Lifecycle.Rule\x1a\xad\x05\n\x04Rule\x12?\n\x06\x61\x63tion\x18\x01 \x01(\x0b\x32/.google.storage.v2.Bucket.Lifecycle.Rule.Action\x12\x45\n\tcondition\x18\x02 \x01(\x0b\x32\x32.google.storage.v2.Bucket.Lifecycle.Rule.Condition\x1a-\n\x06\x41\x63tion\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x15\n\rstorage_class\x18\x02 \x01(\t\x1a\xed\x03\n\tCondition\x12\x15\n\x08\x61ge_days\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12)\n\x0e\x63reated_before\x18\x02 \x01(\x0b\x32\x11.google.type.Date\x12\x14\n\x07is_live\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x1f\n\x12num_newer_versions\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1d\n\x15matches_storage_class\x18\x05 \x03(\t\x12#\n\x16\x64\x61ys_since_custom_time\x18\x07 \x01(\x05H\x03\x88\x01\x01\x12-\n\x12\x63ustom_time_before\x18\x08 \x01(\x0b\x32\x11.google.type.Date\x12\'\n\x1a\x64\x61ys_since_noncurrent_time\x18\t \x01(\x05H\x04\x88\x01\x01\x12\x31\n\x16noncurrent_time_before\x18\n \x01(\x0b\x32\x11.google.type.Date\x12\x16\n\x0ematches_prefix\x18\x0b \x03(\t\x12\x16\n\x0ematches_suffix\x18\x0c \x03(\tB\x0b\n\t_age_daysB\n\n\x08_is_liveB\x15\n\x13_num_newer_versionsB\x19\n\x17_days_since_custom_timeB\x1d\n\x1b_days_since_noncurrent_time\x1a\x38\n\x07Logging\x12\x12\n\nlog_bucket\x18\x01 \x01(\t\x12\x19\n\x11log_object_prefix\x18\x02 \x01(\t\x1a\x8f\x01\n\x0fRetentionPolicy\x12\x32\n\x0e\x65\x66\x66\x65\x63tive_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x11\n\tis_locked\x18\x02 \x01(\x08\x12\x35\n\x12retention_duration\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\x1a\xb1\x01\n\x10SoftDeletePolicy\x12:\n\x12retention_duration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00\x88\x01\x01\x12\x37\n\x0e\x65\x66\x66\x65\x63tive_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01\x88\x01\x01\x42\x15\n\x13_retention_durationB\x11\n\x0f_effective_time\x1a\x1d\n\nVersioning\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x1a;\n\x07Website\x12\x18\n\x10main_page_suffix\x18\x01 \x01(\t\x12\x16\n\x0enot_found_page\x18\x02 \x01(\t\x1a/\n\x15\x43ustomPlacementConfig\x12\x16\n\x0e\x64\x61ta_locations\x18\x01 \x03(\t\x1a\x8b\x02\n\tAutoclass\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x34\n\x0btoggle_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12#\n\x16terminal_storage_class\x18\x03 \x01(\tH\x00\x88\x01\x01\x12P\n\"terminal_storage_class_update_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03H\x01\x88\x01\x01\x42\x19\n\x17_terminal_storage_classB%\n#_terminal_storage_class_update_time\x1a-\n\x15HierarchicalNamespace\x12\x14\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x03\xe0\x41\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01:G\xea\x41\x44\n\x1dstorage.googleapis.com/Bucket\x12#projects/{project}/buckets/{bucket}\"\xce\x01\n\x13\x42ucketAccessControl\x12\x0c\n\x04role\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x0e\n\x06\x65ntity\x18\x03 \x01(\t\x12\x17\n\nentity_alt\x18\t \x01(\tB\x03\xe0\x41\x03\x12\x11\n\tentity_id\x18\x04 \x01(\t\x12\x0c\n\x04\x65tag\x18\x08 \x01(\t\x12\r\n\x05\x65mail\x18\x05 \x01(\t\x12\x0e\n\x06\x64omain\x18\x06 \x01(\t\x12\x34\n\x0cproject_team\x18\x07 \x01(\x0b\x32\x1e.google.storage.v2.ProjectTeam\"I\n\x0f\x43hecksummedData\x12\x16\n\x07\x63ontent\x18\x01 \x01(\x0c\x42\x05\x08\x01\xe0\x41\x01\x12\x13\n\x06\x63rc32c\x18\x02 \x01(\x07H\x00\x88\x01\x01\x42\t\n\x07_crc32c\"C\n\x0fObjectChecksums\x12\x13\n\x06\x63rc32c\x18\x01 \x01(\x07H\x00\x88\x01\x01\x12\x10\n\x08md5_hash\x18\x02 \x01(\x0c\x42\t\n\x07_crc32c\"\xad\x02\n\x0fHmacKeyMetadata\x12\x0f\n\x02id\x18\x01 \x01(\tB\x03\xe0\x41\x05\x12\x16\n\taccess_id\x18\x02 \x01(\tB\x03\xe0\x41\x05\x12\x44\n\x07project\x18\x03 \x01(\tB3\xe0\x41\x05\xfa\x41-\n+cloudresourcemanager.googleapis.com/Project\x12\"\n\x15service_account_email\x18\x04 \x01(\tB\x03\xe0\x41\x03\x12\r\n\x05state\x18\x05 \x01(\t\x12\x34\n\x0b\x63reate_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12\x34\n\x0bupdate_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12\x0c\n\x04\x65tag\x18\x08 \x01(\t\"\xa7\x03\n\x12NotificationConfig\x12\x11\n\x04name\x18\x01 \x01(\tB\x03\xe0\x41\x02\x12\x12\n\x05topic\x18\x02 \x01(\tB\x03\xe0\x41\x02\x12\x0c\n\x04\x65tag\x18\x07 \x01(\t\x12\x13\n\x0b\x65vent_types\x18\x03 \x03(\t\x12V\n\x11\x63ustom_attributes\x18\x04 \x03(\x0b\x32;.google.storage.v2.NotificationConfig.CustomAttributesEntry\x12\x1a\n\x12object_name_prefix\x18\x05 \x01(\t\x12\x1b\n\x0epayload_format\x18\x06 \x01(\tB\x03\xe0\x41\x02\x1a\x37\n\x15\x43ustomAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01:}\xea\x41z\n)storage.googleapis.com/NotificationConfig\x12Mprojects/{project}/buckets/{bucket}/notificationConfigs/{notification_config}\"L\n\x12\x43ustomerEncryption\x12\x1c\n\x14\x65ncryption_algorithm\x18\x01 \x01(\t\x12\x18\n\x10key_sha256_bytes\x18\x03 \x01(\x0c\"\xac\n\n\x06Object\x12\x11\n\x04name\x18\x01 \x01(\tB\x03\xe0\x41\x05\x12\x35\n\x06\x62ucket\x18\x02 \x01(\tB%\xe0\x41\x05\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12\x0c\n\x04\x65tag\x18\x1b \x01(\t\x12\x17\n\ngeneration\x18\x03 \x01(\x03\x42\x03\xe0\x41\x05\x12\x1b\n\x0emetageneration\x18\x04 \x01(\x03\x42\x03\xe0\x41\x03\x12\x15\n\rstorage_class\x18\x05 \x01(\t\x12\x11\n\x04size\x18\x06 \x01(\x03\x42\x03\xe0\x41\x03\x12\x18\n\x10\x63ontent_encoding\x18\x07 \x01(\t\x12\x1b\n\x13\x63ontent_disposition\x18\x08 \x01(\t\x12\x15\n\rcache_control\x18\t \x01(\t\x12\x33\n\x03\x61\x63l\x18\n \x03(\x0b\x32&.google.storage.v2.ObjectAccessControl\x12\x18\n\x10\x63ontent_language\x18\x0b \x01(\t\x12\x34\n\x0b\x64\x65lete_time\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12\x14\n\x0c\x63ontent_type\x18\r \x01(\t\x12\x34\n\x0b\x63reate_time\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12\x1c\n\x0f\x63omponent_count\x18\x0f \x01(\x05\x42\x03\xe0\x41\x03\x12:\n\tchecksums\x18\x10 \x01(\x0b\x32\".google.storage.v2.ObjectChecksumsB\x03\xe0\x41\x03\x12\x34\n\x0bupdate_time\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12\x37\n\x07kms_key\x18\x12 \x01(\tB&\xfa\x41#\n!cloudkms.googleapis.com/CryptoKey\x12\x42\n\x19update_storage_class_time\x18\x13 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12\x16\n\x0etemporary_hold\x18\x14 \x01(\x08\x12\x39\n\x15retention_expire_time\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x39\n\x08metadata\x18\x16 \x03(\x0b\x32\'.google.storage.v2.Object.MetadataEntry\x12\x1d\n\x10\x65vent_based_hold\x18\x17 \x01(\x08H\x00\x88\x01\x01\x12,\n\x05owner\x18\x18 \x01(\x0b\x32\x18.google.storage.v2.OwnerB\x03\xe0\x41\x03\x12\x42\n\x13\x63ustomer_encryption\x18\x19 \x01(\x0b\x32%.google.storage.v2.CustomerEncryption\x12/\n\x0b\x63ustom_time\x18\x1a \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12>\n\x10soft_delete_time\x18\x1c \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03H\x01\x88\x01\x01\x12>\n\x10hard_delete_time\x18\x1d \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03H\x02\x88\x01\x01\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x13\n\x11_event_based_holdB\x13\n\x11_soft_delete_timeB\x13\n\x11_hard_delete_time\"\xce\x01\n\x13ObjectAccessControl\x12\x0c\n\x04role\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x0e\n\x06\x65ntity\x18\x03 \x01(\t\x12\x17\n\nentity_alt\x18\t \x01(\tB\x03\xe0\x41\x03\x12\x11\n\tentity_id\x18\x04 \x01(\t\x12\x0c\n\x04\x65tag\x18\x08 \x01(\t\x12\r\n\x05\x65mail\x18\x05 \x01(\t\x12\x0e\n\x06\x64omain\x18\x06 \x01(\t\x12\x34\n\x0cproject_team\x18\x07 \x01(\x0b\x32\x1e.google.storage.v2.ProjectTeam\"l\n\x13ListObjectsResponse\x12*\n\x07objects\x18\x01 \x03(\x0b\x32\x19.google.storage.v2.Object\x12\x10\n\x08prefixes\x18\x02 \x03(\t\x12\x17\n\x0fnext_page_token\x18\x03 \x01(\t\"3\n\x0bProjectTeam\x12\x16\n\x0eproject_number\x18\x01 \x01(\t\x12\x0c\n\x04team\x18\x02 \x01(\t\"\'\n\x0eServiceAccount\x12\x15\n\remail_address\x18\x01 \x01(\t\"*\n\x05Owner\x12\x0e\n\x06\x65ntity\x18\x01 \x01(\t\x12\x11\n\tentity_id\x18\x02 \x01(\t\"C\n\x0c\x43ontentRange\x12\r\n\x05start\x18\x01 \x01(\x03\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x03\x12\x17\n\x0f\x63omplete_length\x18\x03 \x01(\x03\x32\xaa\'\n\x07Storage\x12r\n\x0c\x44\x65leteBucket\x12&.google.storage.v2.DeleteBucketRequest\x1a\x16.google.protobuf.Empty\"\"\xda\x41\x04name\x8a\xd3\xe4\x93\x02\x15\x12\x13\n\x04name\x12\x0b{bucket=**}\x12o\n\tGetBucket\x12#.google.storage.v2.GetBucketRequest\x1a\x19.google.storage.v2.Bucket\"\"\xda\x41\x04name\x8a\xd3\xe4\x93\x02\x15\x12\x13\n\x04name\x12\x0b{bucket=**}\x12\xab\x01\n\x0c\x43reateBucket\x12&.google.storage.v2.CreateBucketRequest\x1a\x19.google.storage.v2.Bucket\"X\xda\x41\x17parent,bucket,bucket_id\x8a\xd3\xe4\x93\x02\x38\x12\x16\n\x06parent\x12\x0c{project=**}\x12\x1e\n\x0e\x62ucket.project\x12\x0c{project=**}\x12\x85\x01\n\x0bListBuckets\x12%.google.storage.v2.ListBucketsRequest\x1a&.google.storage.v2.ListBucketsResponse\"\'\xda\x41\x06parent\x8a\xd3\xe4\x93\x02\x18\x12\x16\n\x06parent\x12\x0c{project=**}\x12\x93\x01\n\x19LockBucketRetentionPolicy\x12\x33.google.storage.v2.LockBucketRetentionPolicyRequest\x1a\x19.google.storage.v2.Bucket\"&\xda\x41\x06\x62ucket\x8a\xd3\xe4\x93\x02\x17\x12\x15\n\x06\x62ucket\x12\x0b{bucket=**}\x12u\n\x0cGetIamPolicy\x12\".google.iam.v1.GetIamPolicyRequest\x1a\x15.google.iam.v1.Policy\"*\xda\x41\x08resource\x8a\xd3\xe4\x93\x02\x19\x12\x17\n\x08resource\x12\x0b{bucket=**}\x12|\n\x0cSetIamPolicy\x12\".google.iam.v1.SetIamPolicyRequest\x1a\x15.google.iam.v1.Policy\"1\xda\x41\x0fresource,policy\x8a\xd3\xe4\x93\x02\x19\x12\x17\n\x08resource\x12\x0b{bucket=**}\x12\xd7\x01\n\x12TestIamPermissions\x12(.google.iam.v1.TestIamPermissionsRequest\x1a).google.iam.v1.TestIamPermissionsResponse\"l\xda\x41\x14resource,permissions\x8a\xd3\xe4\x93\x02O\x12\x17\n\x08resource\x12\x0b{bucket=**}\x12\x34\n\x08resource\x12({bucket=projects/*/buckets/*}/objects/**\x12\x8a\x01\n\x0cUpdateBucket\x12&.google.storage.v2.UpdateBucketRequest\x1a\x19.google.storage.v2.Bucket\"7\xda\x41\x12\x62ucket,update_mask\x8a\xd3\xe4\x93\x02\x1c\x12\x1a\n\x0b\x62ucket.name\x12\x0b{bucket=**}\x12\x9f\x01\n\x18\x44\x65leteNotificationConfig\x12\x32.google.storage.v2.DeleteNotificationConfigRequest\x1a\x16.google.protobuf.Empty\"7\xda\x41\x04name\x8a\xd3\xe4\x93\x02*\x12(\n\x04name\x12 {bucket=projects/*/buckets/*}/**\x12\xa8\x01\n\x15GetNotificationConfig\x12/.google.storage.v2.GetNotificationConfigRequest\x1a%.google.storage.v2.NotificationConfig\"7\xda\x41\x04name\x8a\xd3\xe4\x93\x02*\x12(\n\x04name\x12 {bucket=projects/*/buckets/*}/**\x12\xb1\x01\n\x18\x43reateNotificationConfig\x12\x32.google.storage.v2.CreateNotificationConfigRequest\x1a%.google.storage.v2.NotificationConfig\":\xda\x41\x1aparent,notification_config\x8a\xd3\xe4\x93\x02\x17\x12\x15\n\x06parent\x12\x0b{bucket=**}\x12\xa8\x01\n\x17ListNotificationConfigs\x12\x31.google.storage.v2.ListNotificationConfigsRequest\x1a\x32.google.storage.v2.ListNotificationConfigsResponse\"&\xda\x41\x06parent\x8a\xd3\xe4\x93\x02\x17\x12\x15\n\x06parent\x12\x0b{bucket=**}\x12~\n\rComposeObject\x12\'.google.storage.v2.ComposeObjectRequest\x1a\x19.google.storage.v2.Object\")\x8a\xd3\xe4\x93\x02#\x12!\n\x12\x64\x65stination.bucket\x12\x0b{bucket=**}\x12\x98\x01\n\x0c\x44\x65leteObject\x12&.google.storage.v2.DeleteObjectRequest\x1a\x16.google.protobuf.Empty\"H\xda\x41\rbucket,object\xda\x41\x18\x62ucket,object,generation\x8a\xd3\xe4\x93\x02\x17\x12\x15\n\x06\x62ucket\x12\x0b{bucket=**}\x12\x8d\x01\n\rRestoreObject\x12\'.google.storage.v2.RestoreObjectRequest\x1a\x19.google.storage.v2.Object\"8\xda\x41\x18\x62ucket,object,generation\x8a\xd3\xe4\x93\x02\x17\x12\x15\n\x06\x62ucket\x12\x0b{bucket=**}\x12\xba\x01\n\x14\x43\x61ncelResumableWrite\x12..google.storage.v2.CancelResumableWriteRequest\x1a/.google.storage.v2.CancelResumableWriteResponse\"A\xda\x41\tupload_id\x8a\xd3\xe4\x93\x02/\x12-\n\tupload_id\x12 {bucket=projects/*/buckets/*}/**\x12\x95\x01\n\tGetObject\x12#.google.storage.v2.GetObjectRequest\x1a\x19.google.storage.v2.Object\"H\xda\x41\rbucket,object\xda\x41\x18\x62ucket,object,generation\x8a\xd3\xe4\x93\x02\x17\x12\x15\n\x06\x62ucket\x12\x0b{bucket=**}\x12\xa5\x01\n\nReadObject\x12$.google.storage.v2.ReadObjectRequest\x1a%.google.storage.v2.ReadObjectResponse\"H\xda\x41\rbucket,object\xda\x41\x18\x62ucket,object,generation\x8a\xd3\xe4\x93\x02\x17\x12\x15\n\x06\x62ucket\x12\x0b{bucket=**}0\x01\x12\x8c\x01\n\x0cUpdateObject\x12&.google.storage.v2.UpdateObjectRequest\x1a\x19.google.storage.v2.Object\"9\xda\x41\x12object,update_mask\x8a\xd3\xe4\x93\x02\x1e\x12\x1c\n\robject.bucket\x12\x0b{bucket=**}\x12`\n\x0bWriteObject\x12%.google.storage.v2.WriteObjectRequest\x1a&.google.storage.v2.WriteObjectResponse\"\x00(\x01\x12n\n\x0f\x42idiWriteObject\x12).google.storage.v2.BidiWriteObjectRequest\x1a*.google.storage.v2.BidiWriteObjectResponse\"\x00(\x01\x30\x01\x12\x84\x01\n\x0bListObjects\x12%.google.storage.v2.ListObjectsRequest\x1a&.google.storage.v2.ListObjectsResponse\"&\xda\x41\x06parent\x8a\xd3\xe4\x93\x02\x17\x12\x15\n\x06parent\x12\x0b{bucket=**}\x12\x98\x01\n\rRewriteObject\x12\'.google.storage.v2.RewriteObjectRequest\x1a\".google.storage.v2.RewriteResponse\":\x8a\xd3\xe4\x93\x02\x34\x12\x0f\n\rsource_bucket\x12!\n\x12\x64\x65stination_bucket\x12\x0b{bucket=**}\x12\xae\x01\n\x13StartResumableWrite\x12-.google.storage.v2.StartResumableWriteRequest\x1a..google.storage.v2.StartResumableWriteResponse\"8\x8a\xd3\xe4\x93\x02\x32\x12\x30\n!write_object_spec.resource.bucket\x12\x0b{bucket=**}\x12\xae\x01\n\x10QueryWriteStatus\x12*.google.storage.v2.QueryWriteStatusRequest\x1a+.google.storage.v2.QueryWriteStatusResponse\"A\xda\x41\tupload_id\x8a\xd3\xe4\x93\x02/\x12-\n\tupload_id\x12 {bucket=projects/*/buckets/*}/**\x12\x80\x01\n\x11GetServiceAccount\x12+.google.storage.v2.GetServiceAccountRequest\x1a!.google.storage.v2.ServiceAccount\"\x1b\xda\x41\x07project\x8a\xd3\xe4\x93\x02\x0b\x12\t\n\x07project\x12\x95\x01\n\rCreateHmacKey\x12\'.google.storage.v2.CreateHmacKeyRequest\x1a(.google.storage.v2.CreateHmacKeyResponse\"1\xda\x41\x1dproject,service_account_email\x8a\xd3\xe4\x93\x02\x0b\x12\t\n\x07project\x12w\n\rDeleteHmacKey\x12\'.google.storage.v2.DeleteHmacKeyRequest\x1a\x16.google.protobuf.Empty\"%\xda\x41\x11\x61\x63\x63\x65ss_id,project\x8a\xd3\xe4\x93\x02\x0b\x12\t\n\x07project\x12}\n\nGetHmacKey\x12$.google.storage.v2.GetHmacKeyRequest\x1a\".google.storage.v2.HmacKeyMetadata\"%\xda\x41\x11\x61\x63\x63\x65ss_id,project\x8a\xd3\xe4\x93\x02\x0b\x12\t\n\x07project\x12|\n\x0cListHmacKeys\x12&.google.storage.v2.ListHmacKeysRequest\x1a\'.google.storage.v2.ListHmacKeysResponse\"\x1b\xda\x41\x07project\x8a\xd3\xe4\x93\x02\x0b\x12\t\n\x07project\x12\x9d\x01\n\rUpdateHmacKey\x12\'.google.storage.v2.UpdateHmacKeyRequest\x1a\".google.storage.v2.HmacKeyMetadata\"?\xda\x41\x14hmac_key,update_mask\x8a\xd3\xe4\x93\x02\"\x12 \n\x10hmac_key.project\x12\x0c{project=**}\x1a\xa7\x02\xca\x41\x16storage.googleapis.com\xd2\x41\x8a\x02https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/cloud-platform.read-only,https://www.googleapis.com/auth/devstorage.full_control,https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/devstorage.read_writeB\xe2\x01\n\x15\x63om.google.storage.v2B\x0cStorageProtoP\x01Z>cloud.google.com/go/storage/internal/apiv2/storagepb;storagepb\xea\x41x\n!cloudkms.googleapis.com/CryptoKey\x12Sprojects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fgoogle/storage/v2/storage.proto\x12\x11google.storage.v2\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a\x18google/api/routing.proto\x1a\x1egoogle/iam/v1/iam_policy.proto\x1a\x1agoogle/iam/v1/policy.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x16google/type/date.proto\"\xd6\x01\n\x13\x44\x65leteBucketRequest\x12\x33\n\x04name\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12$\n\x17if_metageneration_match\x18\x02 \x01(\x03H\x00\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\x03 \x01(\x03H\x01\x88\x01\x01\x42\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_match\"\x95\x02\n\x10GetBucketRequest\x12\x33\n\x04name\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12$\n\x17if_metageneration_match\x18\x02 \x01(\x03H\x00\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\x03 \x01(\x03H\x01\x88\x01\x01\x12\x32\n\tread_mask\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x02\x88\x01\x01\x42\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_matchB\x0c\n\n_read_mask\"\xce\x01\n\x13\x43reateBucketRequest\x12\x35\n\x06parent\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\x12\x1dstorage.googleapis.com/Bucket\x12)\n\x06\x62ucket\x18\x02 \x01(\x0b\x32\x19.google.storage.v2.Bucket\x12\x16\n\tbucket_id\x18\x03 \x01(\tB\x03\xe0\x41\x02\x12\x16\n\x0epredefined_acl\x18\x06 \x01(\t\x12%\n\x1dpredefined_default_object_acl\x18\x07 \x01(\t\"\xc4\x01\n\x12ListBucketsRequest\x12\x35\n\x06parent\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\x12\x1dstorage.googleapis.com/Bucket\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\x12\x0e\n\x06prefix\x18\x04 \x01(\t\x12\x32\n\tread_mask\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x00\x88\x01\x01\x42\x0c\n\n_read_mask\"Z\n\x13ListBucketsResponse\x12*\n\x07\x62uckets\x18\x01 \x03(\x0b\x32\x19.google.storage.v2.Bucket\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"\x7f\n LockBucketRetentionPolicyRequest\x12\x35\n\x06\x62ucket\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12$\n\x17if_metageneration_match\x18\x02 \x01(\x03\x42\x03\xe0\x41\x02\"\xc6\x02\n\x13UpdateBucketRequest\x12.\n\x06\x62ucket\x18\x01 \x01(\x0b\x32\x19.google.storage.v2.BucketB\x03\xe0\x41\x02\x12$\n\x17if_metageneration_match\x18\x02 \x01(\x03H\x00\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\x03 \x01(\x03H\x01\x88\x01\x01\x12\x16\n\x0epredefined_acl\x18\x08 \x01(\t\x12%\n\x1dpredefined_default_object_acl\x18\t \x01(\t\x12\x34\n\x0bupdate_mask\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x03\xe0\x41\x02\x42\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_match\"\xf5\x05\n\x14\x43omposeObjectRequest\x12\x33\n\x0b\x64\x65stination\x18\x01 \x01(\x0b\x32\x19.google.storage.v2.ObjectB\x03\xe0\x41\x02\x12L\n\x0esource_objects\x18\x02 \x03(\x0b\x32\x34.google.storage.v2.ComposeObjectRequest.SourceObject\x12\"\n\x1a\x64\x65stination_predefined_acl\x18\t \x01(\t\x12 \n\x13if_generation_match\x18\x04 \x01(\x03H\x00\x88\x01\x01\x12$\n\x17if_metageneration_match\x18\x05 \x01(\x03H\x01\x88\x01\x01\x12\x37\n\x07kms_key\x18\x06 \x01(\tB&\xfa\x41#\n!cloudkms.googleapis.com/CryptoKey\x12R\n\x1c\x63ommon_object_request_params\x18\x07 \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParams\x12<\n\x10object_checksums\x18\n \x01(\x0b\x32\".google.storage.v2.ObjectChecksums\x1a\xee\x01\n\x0cSourceObject\x12\x11\n\x04name\x18\x01 \x01(\tB\x03\xe0\x41\x02\x12\x12\n\ngeneration\x18\x02 \x01(\x03\x12\x66\n\x14object_preconditions\x18\x03 \x01(\x0b\x32H.google.storage.v2.ComposeObjectRequest.SourceObject.ObjectPreconditions\x1aO\n\x13ObjectPreconditions\x12 \n\x13if_generation_match\x18\x01 \x01(\x03H\x00\x88\x01\x01\x42\x16\n\x14_if_generation_matchB\x16\n\x14_if_generation_matchB\x1a\n\x18_if_metageneration_match\"\xd1\x03\n\x13\x44\x65leteObjectRequest\x12\x35\n\x06\x62ucket\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12\x13\n\x06object\x18\x02 \x01(\tB\x03\xe0\x41\x02\x12\x12\n\ngeneration\x18\x04 \x01(\x03\x12 \n\x13if_generation_match\x18\x05 \x01(\x03H\x00\x88\x01\x01\x12$\n\x17if_generation_not_match\x18\x06 \x01(\x03H\x01\x88\x01\x01\x12$\n\x17if_metageneration_match\x18\x07 \x01(\x03H\x02\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\x08 \x01(\x03H\x03\x88\x01\x01\x12R\n\x1c\x63ommon_object_request_params\x18\n \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParamsB\x16\n\x14_if_generation_matchB\x1a\n\x18_if_generation_not_matchB\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_match\"\xa5\x04\n\x14RestoreObjectRequest\x12\x35\n\x06\x62ucket\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12\x13\n\x06object\x18\x02 \x01(\tB\x03\xe0\x41\x02\x12\x17\n\ngeneration\x18\x03 \x01(\x03\x42\x03\xe0\x41\x02\x12\x1a\n\rrestore_token\x18\x0b \x01(\tB\x03\xe0\x41\x01\x12 \n\x13if_generation_match\x18\x04 \x01(\x03H\x00\x88\x01\x01\x12$\n\x17if_generation_not_match\x18\x05 \x01(\x03H\x01\x88\x01\x01\x12$\n\x17if_metageneration_match\x18\x06 \x01(\x03H\x02\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\x07 \x01(\x03H\x03\x88\x01\x01\x12\x1c\n\x0f\x63opy_source_acl\x18\t \x01(\x08H\x04\x88\x01\x01\x12R\n\x1c\x63ommon_object_request_params\x18\x08 \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParamsB\x16\n\x14_if_generation_matchB\x1a\n\x18_if_generation_not_matchB\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_matchB\x12\n\x10_copy_source_acl\"5\n\x1b\x43\x61ncelResumableWriteRequest\x12\x16\n\tupload_id\x18\x01 \x01(\tB\x03\xe0\x41\x02\"\x1e\n\x1c\x43\x61ncelResumableWriteResponse\"\xba\x04\n\x11ReadObjectRequest\x12\x35\n\x06\x62ucket\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12\x13\n\x06object\x18\x02 \x01(\tB\x03\xe0\x41\x02\x12\x12\n\ngeneration\x18\x03 \x01(\x03\x12\x13\n\x0bread_offset\x18\x04 \x01(\x03\x12\x12\n\nread_limit\x18\x05 \x01(\x03\x12 \n\x13if_generation_match\x18\x06 \x01(\x03H\x00\x88\x01\x01\x12$\n\x17if_generation_not_match\x18\x07 \x01(\x03H\x01\x88\x01\x01\x12$\n\x17if_metageneration_match\x18\x08 \x01(\x03H\x02\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\t \x01(\x03H\x03\x88\x01\x01\x12R\n\x1c\x63ommon_object_request_params\x18\n \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParams\x12\x32\n\tread_mask\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x04\x88\x01\x01\x42\x16\n\x14_if_generation_matchB\x1a\n\x18_if_generation_not_matchB\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_matchB\x0c\n\n_read_mask\"\xd8\x04\n\x10GetObjectRequest\x12\x35\n\x06\x62ucket\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12\x13\n\x06object\x18\x02 \x01(\tB\x03\xe0\x41\x02\x12\x12\n\ngeneration\x18\x03 \x01(\x03\x12\x19\n\x0csoft_deleted\x18\x0b \x01(\x08H\x00\x88\x01\x01\x12 \n\x13if_generation_match\x18\x04 \x01(\x03H\x01\x88\x01\x01\x12$\n\x17if_generation_not_match\x18\x05 \x01(\x03H\x02\x88\x01\x01\x12$\n\x17if_metageneration_match\x18\x06 \x01(\x03H\x03\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\x07 \x01(\x03H\x04\x88\x01\x01\x12R\n\x1c\x63ommon_object_request_params\x18\x08 \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParams\x12\x32\n\tread_mask\x18\n \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x05\x88\x01\x01\x12\x1a\n\rrestore_token\x18\x0c \x01(\tB\x03\xe0\x41\x01\x42\x0f\n\r_soft_deletedB\x16\n\x14_if_generation_matchB\x1a\n\x18_if_generation_not_matchB\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_matchB\x0c\n\n_read_mask\"\xf5\x01\n\x12ReadObjectResponse\x12<\n\x10\x63hecksummed_data\x18\x01 \x01(\x0b\x32\".google.storage.v2.ChecksummedData\x12<\n\x10object_checksums\x18\x02 \x01(\x0b\x32\".google.storage.v2.ObjectChecksums\x12\x36\n\rcontent_range\x18\x03 \x01(\x0b\x32\x1f.google.storage.v2.ContentRange\x12+\n\x08metadata\x18\x04 \x01(\x0b\x32\x19.google.storage.v2.Object\"\x8d\x03\n\x0fWriteObjectSpec\x12\x30\n\x08resource\x18\x01 \x01(\x0b\x32\x19.google.storage.v2.ObjectB\x03\xe0\x41\x02\x12\x16\n\x0epredefined_acl\x18\x07 \x01(\t\x12 \n\x13if_generation_match\x18\x03 \x01(\x03H\x00\x88\x01\x01\x12$\n\x17if_generation_not_match\x18\x04 \x01(\x03H\x01\x88\x01\x01\x12$\n\x17if_metageneration_match\x18\x05 \x01(\x03H\x02\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\x06 \x01(\x03H\x03\x88\x01\x01\x12\x18\n\x0bobject_size\x18\x08 \x01(\x03H\x04\x88\x01\x01\x42\x16\n\x14_if_generation_matchB\x1a\n\x18_if_generation_not_matchB\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_matchB\x0e\n\x0c_object_size\"\x86\x03\n\x12WriteObjectRequest\x12\x13\n\tupload_id\x18\x01 \x01(\tH\x00\x12?\n\x11write_object_spec\x18\x02 \x01(\x0b\x32\".google.storage.v2.WriteObjectSpecH\x00\x12\x19\n\x0cwrite_offset\x18\x03 \x01(\x03\x42\x03\xe0\x41\x02\x12>\n\x10\x63hecksummed_data\x18\x04 \x01(\x0b\x32\".google.storage.v2.ChecksummedDataH\x01\x12<\n\x10object_checksums\x18\x06 \x01(\x0b\x32\".google.storage.v2.ObjectChecksums\x12\x14\n\x0c\x66inish_write\x18\x07 \x01(\x08\x12R\n\x1c\x63ommon_object_request_params\x18\x08 \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParamsB\x0f\n\rfirst_messageB\x06\n\x04\x64\x61ta\"n\n\x13WriteObjectResponse\x12\x18\n\x0epersisted_size\x18\x01 \x01(\x03H\x00\x12-\n\x08resource\x18\x02 \x01(\x0b\x32\x19.google.storage.v2.ObjectH\x00\x42\x0e\n\x0cwrite_status\"\xaf\x03\n\x16\x42idiWriteObjectRequest\x12\x13\n\tupload_id\x18\x01 \x01(\tH\x00\x12?\n\x11write_object_spec\x18\x02 \x01(\x0b\x32\".google.storage.v2.WriteObjectSpecH\x00\x12\x19\n\x0cwrite_offset\x18\x03 \x01(\x03\x42\x03\xe0\x41\x02\x12>\n\x10\x63hecksummed_data\x18\x04 \x01(\x0b\x32\".google.storage.v2.ChecksummedDataH\x01\x12<\n\x10object_checksums\x18\x06 \x01(\x0b\x32\".google.storage.v2.ObjectChecksums\x12\x14\n\x0cstate_lookup\x18\x07 \x01(\x08\x12\r\n\x05\x66lush\x18\x08 \x01(\x08\x12\x14\n\x0c\x66inish_write\x18\t \x01(\x08\x12R\n\x1c\x63ommon_object_request_params\x18\n \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParamsB\x0f\n\rfirst_messageB\x06\n\x04\x64\x61ta\"r\n\x17\x42idiWriteObjectResponse\x12\x18\n\x0epersisted_size\x18\x01 \x01(\x03H\x00\x12-\n\x08resource\x18\x02 \x01(\x0b\x32\x19.google.storage.v2.ObjectH\x00\x42\x0e\n\x0cwrite_status\"\xad\x03\n\x12ListObjectsRequest\x12\x35\n\x06parent\x18\x01 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\x12\x11\n\tdelimiter\x18\x04 \x01(\t\x12\"\n\x1ainclude_trailing_delimiter\x18\x05 \x01(\x08\x12\x0e\n\x06prefix\x18\x06 \x01(\t\x12\x10\n\x08versions\x18\x07 \x01(\x08\x12\x32\n\tread_mask\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x00\x88\x01\x01\x12 \n\x13lexicographic_start\x18\n \x01(\tB\x03\xe0\x41\x01\x12\x1e\n\x11lexicographic_end\x18\x0b \x01(\tB\x03\xe0\x41\x01\x12\x19\n\x0csoft_deleted\x18\x0c \x01(\x08\x42\x03\xe0\x41\x01\x12(\n\x1binclude_folders_as_prefixes\x18\r \x01(\x08\x42\x03\xe0\x41\x01\x12\x17\n\nmatch_glob\x18\x0e \x01(\tB\x03\xe0\x41\x01\x42\x0c\n\n_read_mask\"\x85\x01\n\x17QueryWriteStatusRequest\x12\x16\n\tupload_id\x18\x01 \x01(\tB\x03\xe0\x41\x02\x12R\n\x1c\x63ommon_object_request_params\x18\x02 \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParams\"s\n\x18QueryWriteStatusResponse\x12\x18\n\x0epersisted_size\x18\x01 \x01(\x03H\x00\x12-\n\x08resource\x18\x02 \x01(\x0b\x32\x19.google.storage.v2.ObjectH\x00\x42\x0e\n\x0cwrite_status\"\xa8\n\n\x14RewriteObjectRequest\x12 \n\x10\x64\x65stination_name\x18\x18 \x01(\tB\x06\xe0\x41\x02\xe0\x41\x05\x12\x44\n\x12\x64\x65stination_bucket\x18\x19 \x01(\tB(\xe0\x41\x02\xe0\x41\x05\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12\x43\n\x13\x64\x65stination_kms_key\x18\x1b \x01(\tB&\xfa\x41#\n!cloudkms.googleapis.com/CryptoKey\x12.\n\x0b\x64\x65stination\x18\x01 \x01(\x0b\x32\x19.google.storage.v2.Object\x12<\n\rsource_bucket\x18\x02 \x01(\tB%\xe0\x41\x02\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12\x1a\n\rsource_object\x18\x03 \x01(\tB\x03\xe0\x41\x02\x12\x19\n\x11source_generation\x18\x04 \x01(\x03\x12\x15\n\rrewrite_token\x18\x05 \x01(\t\x12\"\n\x1a\x64\x65stination_predefined_acl\x18\x1c \x01(\t\x12 \n\x13if_generation_match\x18\x07 \x01(\x03H\x00\x88\x01\x01\x12$\n\x17if_generation_not_match\x18\x08 \x01(\x03H\x01\x88\x01\x01\x12$\n\x17if_metageneration_match\x18\t \x01(\x03H\x02\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\n \x01(\x03H\x03\x88\x01\x01\x12\'\n\x1aif_source_generation_match\x18\x0b \x01(\x03H\x04\x88\x01\x01\x12+\n\x1eif_source_generation_not_match\x18\x0c \x01(\x03H\x05\x88\x01\x01\x12+\n\x1eif_source_metageneration_match\x18\r \x01(\x03H\x06\x88\x01\x01\x12/\n\"if_source_metageneration_not_match\x18\x0e \x01(\x03H\x07\x88\x01\x01\x12$\n\x1cmax_bytes_rewritten_per_call\x18\x0f \x01(\x03\x12(\n copy_source_encryption_algorithm\x18\x10 \x01(\t\x12(\n copy_source_encryption_key_bytes\x18\x15 \x01(\x0c\x12/\n\'copy_source_encryption_key_sha256_bytes\x18\x16 \x01(\x0c\x12R\n\x1c\x63ommon_object_request_params\x18\x13 \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParams\x12<\n\x10object_checksums\x18\x1d \x01(\x0b\x32\".google.storage.v2.ObjectChecksumsB\x16\n\x14_if_generation_matchB\x1a\n\x18_if_generation_not_matchB\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_matchB\x1d\n\x1b_if_source_generation_matchB!\n\x1f_if_source_generation_not_matchB!\n\x1f_if_source_metageneration_matchB%\n#_if_source_metageneration_not_match\"\x97\x01\n\x0fRewriteResponse\x12\x1d\n\x15total_bytes_rewritten\x18\x01 \x01(\x03\x12\x13\n\x0bobject_size\x18\x02 \x01(\x03\x12\x0c\n\x04\x64one\x18\x03 \x01(\x08\x12\x15\n\rrewrite_token\x18\x04 \x01(\t\x12+\n\x08resource\x18\x05 \x01(\x0b\x32\x19.google.storage.v2.Object\"\xf2\x01\n\x1aStartResumableWriteRequest\x12\x42\n\x11write_object_spec\x18\x01 \x01(\x0b\x32\".google.storage.v2.WriteObjectSpecB\x03\xe0\x41\x02\x12R\n\x1c\x63ommon_object_request_params\x18\x03 \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParams\x12<\n\x10object_checksums\x18\x05 \x01(\x0b\x32\".google.storage.v2.ObjectChecksums\"0\n\x1bStartResumableWriteResponse\x12\x11\n\tupload_id\x18\x01 \x01(\t\"\xef\x03\n\x13UpdateObjectRequest\x12.\n\x06object\x18\x01 \x01(\x0b\x32\x19.google.storage.v2.ObjectB\x03\xe0\x41\x02\x12 \n\x13if_generation_match\x18\x02 \x01(\x03H\x00\x88\x01\x01\x12$\n\x17if_generation_not_match\x18\x03 \x01(\x03H\x01\x88\x01\x01\x12$\n\x17if_metageneration_match\x18\x04 \x01(\x03H\x02\x88\x01\x01\x12(\n\x1bif_metageneration_not_match\x18\x05 \x01(\x03H\x03\x88\x01\x01\x12\x16\n\x0epredefined_acl\x18\n \x01(\t\x12\x34\n\x0bupdate_mask\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x03\xe0\x41\x02\x12R\n\x1c\x63ommon_object_request_params\x18\x08 \x01(\x0b\x32,.google.storage.v2.CommonObjectRequestParamsB\x16\n\x14_if_generation_matchB\x1a\n\x18_if_generation_not_matchB\x1a\n\x18_if_metageneration_matchB\x1e\n\x1c_if_metageneration_not_match\"|\n\x19\x43ommonObjectRequestParams\x12\x1c\n\x14\x65ncryption_algorithm\x18\x01 \x01(\t\x12\x1c\n\x14\x65ncryption_key_bytes\x18\x04 \x01(\x0c\x12#\n\x1b\x65ncryption_key_sha256_bytes\x18\x05 \x01(\x0c\"\xca\x05\n\x10ServiceConstants\"\xb5\x05\n\x06Values\x12\x16\n\x12VALUES_UNSPECIFIED\x10\x00\x12\x1b\n\x14MAX_READ_CHUNK_BYTES\x10\x80\x80\x80\x01\x12\x1c\n\x15MAX_WRITE_CHUNK_BYTES\x10\x80\x80\x80\x01\x12\x19\n\x12MAX_OBJECT_SIZE_MB\x10\x80\x80\xc0\x02\x12)\n$MAX_CUSTOM_METADATA_FIELD_NAME_BYTES\x10\x80\x08\x12*\n%MAX_CUSTOM_METADATA_FIELD_VALUE_BYTES\x10\x80 \x12)\n$MAX_CUSTOM_METADATA_TOTAL_SIZE_BYTES\x10\x80@\x12*\n$MAX_BUCKET_METADATA_TOTAL_SIZE_BYTES\x10\x80\xa0\x01\x12\'\n#MAX_NOTIFICATION_CONFIGS_PER_BUCKET\x10\x64\x12\"\n\x1eMAX_LIFECYCLE_RULES_PER_BUCKET\x10\x64\x12&\n\"MAX_NOTIFICATION_CUSTOM_ATTRIBUTES\x10\x05\x12\x31\n,MAX_NOTIFICATION_CUSTOM_ATTRIBUTE_KEY_LENGTH\x10\x80\x02\x12\x33\n.MAX_NOTIFICATION_CUSTOM_ATTRIBUTE_VALUE_LENGTH\x10\x80\x08\x12\x1c\n\x18MAX_LABELS_ENTRIES_COUNT\x10@\x12\x1f\n\x1bMAX_LABELS_KEY_VALUE_LENGTH\x10?\x12\x1f\n\x1aMAX_LABELS_KEY_VALUE_BYTES\x10\x80\x01\x12.\n)MAX_OBJECT_IDS_PER_DELETE_OBJECTS_REQUEST\x10\xe8\x07\x12\x1e\n\x1aSPLIT_TOKEN_MAX_VALID_DAYS\x10\x0e\x1a\x02\x10\x01\"\xa3\x1c\n\x06\x42ucket\x12\x11\n\x04name\x18\x01 \x01(\tB\x03\xe0\x41\x05\x12\x16\n\tbucket_id\x18\x02 \x01(\tB\x03\xe0\x41\x03\x12\x0c\n\x04\x65tag\x18\x1d \x01(\t\x12\x44\n\x07project\x18\x03 \x01(\tB3\xe0\x41\x05\xfa\x41-\n+cloudresourcemanager.googleapis.com/Project\x12\x1b\n\x0emetageneration\x18\x04 \x01(\x03\x42\x03\xe0\x41\x03\x12\x15\n\x08location\x18\x05 \x01(\tB\x03\xe0\x41\x05\x12\x1a\n\rlocation_type\x18\x06 \x01(\tB\x03\xe0\x41\x03\x12\x15\n\rstorage_class\x18\x07 \x01(\t\x12\x0b\n\x03rpo\x18\x1b \x01(\t\x12\x33\n\x03\x61\x63l\x18\x08 \x03(\x0b\x32&.google.storage.v2.BucketAccessControl\x12\x42\n\x12\x64\x65\x66\x61ult_object_acl\x18\t \x03(\x0b\x32&.google.storage.v2.ObjectAccessControl\x12\x36\n\tlifecycle\x18\n \x01(\x0b\x32#.google.storage.v2.Bucket.Lifecycle\x12\x34\n\x0b\x63reate_time\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12,\n\x04\x63ors\x18\x0c \x03(\x0b\x32\x1e.google.storage.v2.Bucket.Cors\x12\x34\n\x0bupdate_time\x18\r \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12 \n\x18\x64\x65\x66\x61ult_event_based_hold\x18\x0e \x01(\x08\x12\x35\n\x06labels\x18\x0f \x03(\x0b\x32%.google.storage.v2.Bucket.LabelsEntry\x12\x32\n\x07website\x18\x10 \x01(\x0b\x32!.google.storage.v2.Bucket.Website\x12\x38\n\nversioning\x18\x11 \x01(\x0b\x32$.google.storage.v2.Bucket.Versioning\x12\x32\n\x07logging\x18\x12 \x01(\x0b\x32!.google.storage.v2.Bucket.Logging\x12,\n\x05owner\x18\x13 \x01(\x0b\x32\x18.google.storage.v2.OwnerB\x03\xe0\x41\x03\x12\x38\n\nencryption\x18\x14 \x01(\x0b\x32$.google.storage.v2.Bucket.Encryption\x12\x32\n\x07\x62illing\x18\x15 \x01(\x0b\x32!.google.storage.v2.Bucket.Billing\x12\x43\n\x10retention_policy\x18\x16 \x01(\x0b\x32).google.storage.v2.Bucket.RetentionPolicy\x12\x37\n\niam_config\x18\x17 \x01(\x0b\x32#.google.storage.v2.Bucket.IamConfig\x12\x15\n\rsatisfies_pzs\x18\x19 \x01(\x08\x12P\n\x17\x63ustom_placement_config\x18\x1a \x01(\x0b\x32/.google.storage.v2.Bucket.CustomPlacementConfig\x12\x36\n\tautoclass\x18\x1c \x01(\x0b\x32#.google.storage.v2.Bucket.Autoclass\x12T\n\x16hierarchical_namespace\x18 \x01(\x0b\x32/.google.storage.v2.Bucket.HierarchicalNamespaceB\x03\xe0\x41\x01\x12K\n\x12soft_delete_policy\x18\x1f \x01(\x0b\x32*.google.storage.v2.Bucket.SoftDeletePolicyB\x03\xe0\x41\x01\x1a!\n\x07\x42illing\x12\x16\n\x0erequester_pays\x18\x01 \x01(\x08\x1aX\n\x04\x43ors\x12\x0e\n\x06origin\x18\x01 \x03(\t\x12\x0e\n\x06method\x18\x02 \x03(\t\x12\x17\n\x0fresponse_header\x18\x03 \x03(\t\x12\x17\n\x0fmax_age_seconds\x18\x04 \x01(\x05\x1aM\n\nEncryption\x12?\n\x0f\x64\x65\x66\x61ult_kms_key\x18\x01 \x01(\tB&\xfa\x41#\n!cloudkms.googleapis.com/CryptoKey\x1a\xec\x01\n\tIamConfig\x12\x61\n\x1buniform_bucket_level_access\x18\x01 \x01(\x0b\x32<.google.storage.v2.Bucket.IamConfig.UniformBucketLevelAccess\x12 \n\x18public_access_prevention\x18\x03 \x01(\t\x1aZ\n\x18UniformBucketLevelAccess\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12-\n\tlock_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a\xf3\x05\n\tLifecycle\x12\x36\n\x04rule\x18\x01 \x03(\x0b\x32(.google.storage.v2.Bucket.Lifecycle.Rule\x1a\xad\x05\n\x04Rule\x12?\n\x06\x61\x63tion\x18\x01 \x01(\x0b\x32/.google.storage.v2.Bucket.Lifecycle.Rule.Action\x12\x45\n\tcondition\x18\x02 \x01(\x0b\x32\x32.google.storage.v2.Bucket.Lifecycle.Rule.Condition\x1a-\n\x06\x41\x63tion\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x15\n\rstorage_class\x18\x02 \x01(\t\x1a\xed\x03\n\tCondition\x12\x15\n\x08\x61ge_days\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12)\n\x0e\x63reated_before\x18\x02 \x01(\x0b\x32\x11.google.type.Date\x12\x14\n\x07is_live\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x1f\n\x12num_newer_versions\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1d\n\x15matches_storage_class\x18\x05 \x03(\t\x12#\n\x16\x64\x61ys_since_custom_time\x18\x07 \x01(\x05H\x03\x88\x01\x01\x12-\n\x12\x63ustom_time_before\x18\x08 \x01(\x0b\x32\x11.google.type.Date\x12\'\n\x1a\x64\x61ys_since_noncurrent_time\x18\t \x01(\x05H\x04\x88\x01\x01\x12\x31\n\x16noncurrent_time_before\x18\n \x01(\x0b\x32\x11.google.type.Date\x12\x16\n\x0ematches_prefix\x18\x0b \x03(\t\x12\x16\n\x0ematches_suffix\x18\x0c \x03(\tB\x0b\n\t_age_daysB\n\n\x08_is_liveB\x15\n\x13_num_newer_versionsB\x19\n\x17_days_since_custom_timeB\x1d\n\x1b_days_since_noncurrent_time\x1a\x38\n\x07Logging\x12\x12\n\nlog_bucket\x18\x01 \x01(\t\x12\x19\n\x11log_object_prefix\x18\x02 \x01(\t\x1a\x8f\x01\n\x0fRetentionPolicy\x12\x32\n\x0e\x65\x66\x66\x65\x63tive_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x11\n\tis_locked\x18\x02 \x01(\x08\x12\x35\n\x12retention_duration\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\x1a\xb1\x01\n\x10SoftDeletePolicy\x12:\n\x12retention_duration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00\x88\x01\x01\x12\x37\n\x0e\x65\x66\x66\x65\x63tive_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01\x88\x01\x01\x42\x15\n\x13_retention_durationB\x11\n\x0f_effective_time\x1a\x1d\n\nVersioning\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x1a;\n\x07Website\x12\x18\n\x10main_page_suffix\x18\x01 \x01(\t\x12\x16\n\x0enot_found_page\x18\x02 \x01(\t\x1a/\n\x15\x43ustomPlacementConfig\x12\x16\n\x0e\x64\x61ta_locations\x18\x01 \x03(\t\x1a\x8b\x02\n\tAutoclass\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x34\n\x0btoggle_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12#\n\x16terminal_storage_class\x18\x03 \x01(\tH\x00\x88\x01\x01\x12P\n\"terminal_storage_class_update_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03H\x01\x88\x01\x01\x42\x19\n\x17_terminal_storage_classB%\n#_terminal_storage_class_update_time\x1a-\n\x15HierarchicalNamespace\x12\x14\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x03\xe0\x41\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01:X\xea\x41U\n\x1dstorage.googleapis.com/Bucket\x12#projects/{project}/buckets/{bucket}*\x07\x62uckets2\x06\x62ucket\"\xce\x01\n\x13\x42ucketAccessControl\x12\x0c\n\x04role\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x0e\n\x06\x65ntity\x18\x03 \x01(\t\x12\x17\n\nentity_alt\x18\t \x01(\tB\x03\xe0\x41\x03\x12\x11\n\tentity_id\x18\x04 \x01(\t\x12\x0c\n\x04\x65tag\x18\x08 \x01(\t\x12\r\n\x05\x65mail\x18\x05 \x01(\t\x12\x0e\n\x06\x64omain\x18\x06 \x01(\t\x12\x34\n\x0cproject_team\x18\x07 \x01(\x0b\x32\x1e.google.storage.v2.ProjectTeam\"I\n\x0f\x43hecksummedData\x12\x16\n\x07\x63ontent\x18\x01 \x01(\x0c\x42\x05\x08\x01\xe0\x41\x01\x12\x13\n\x06\x63rc32c\x18\x02 \x01(\x07H\x00\x88\x01\x01\x42\t\n\x07_crc32c\"C\n\x0fObjectChecksums\x12\x13\n\x06\x63rc32c\x18\x01 \x01(\x07H\x00\x88\x01\x01\x12\x10\n\x08md5_hash\x18\x02 \x01(\x0c\x42\t\n\x07_crc32c\"L\n\x12\x43ustomerEncryption\x12\x1c\n\x14\x65ncryption_algorithm\x18\x01 \x01(\t\x12\x18\n\x10key_sha256_bytes\x18\x03 \x01(\x0c\"\xdf\n\n\x06Object\x12\x11\n\x04name\x18\x01 \x01(\tB\x03\xe0\x41\x05\x12\x35\n\x06\x62ucket\x18\x02 \x01(\tB%\xe0\x41\x05\xfa\x41\x1f\n\x1dstorage.googleapis.com/Bucket\x12\x0c\n\x04\x65tag\x18\x1b \x01(\t\x12\x17\n\ngeneration\x18\x03 \x01(\x03\x42\x03\xe0\x41\x05\x12\x1f\n\rrestore_token\x18# \x01(\tB\x03\xe0\x41\x03H\x00\x88\x01\x01\x12\x1b\n\x0emetageneration\x18\x04 \x01(\x03\x42\x03\xe0\x41\x03\x12\x15\n\rstorage_class\x18\x05 \x01(\t\x12\x11\n\x04size\x18\x06 \x01(\x03\x42\x03\xe0\x41\x03\x12\x18\n\x10\x63ontent_encoding\x18\x07 \x01(\t\x12\x1b\n\x13\x63ontent_disposition\x18\x08 \x01(\t\x12\x15\n\rcache_control\x18\t \x01(\t\x12\x33\n\x03\x61\x63l\x18\n \x03(\x0b\x32&.google.storage.v2.ObjectAccessControl\x12\x18\n\x10\x63ontent_language\x18\x0b \x01(\t\x12\x34\n\x0b\x64\x65lete_time\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12\x14\n\x0c\x63ontent_type\x18\r \x01(\t\x12\x34\n\x0b\x63reate_time\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12\x1c\n\x0f\x63omponent_count\x18\x0f \x01(\x05\x42\x03\xe0\x41\x03\x12:\n\tchecksums\x18\x10 \x01(\x0b\x32\".google.storage.v2.ObjectChecksumsB\x03\xe0\x41\x03\x12\x34\n\x0bupdate_time\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12\x37\n\x07kms_key\x18\x12 \x01(\tB&\xfa\x41#\n!cloudkms.googleapis.com/CryptoKey\x12\x42\n\x19update_storage_class_time\x18\x13 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12\x16\n\x0etemporary_hold\x18\x14 \x01(\x08\x12\x39\n\x15retention_expire_time\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x39\n\x08metadata\x18\x16 \x03(\x0b\x32\'.google.storage.v2.Object.MetadataEntry\x12\x1d\n\x10\x65vent_based_hold\x18\x17 \x01(\x08H\x01\x88\x01\x01\x12,\n\x05owner\x18\x18 \x01(\x0b\x32\x18.google.storage.v2.OwnerB\x03\xe0\x41\x03\x12\x42\n\x13\x63ustomer_encryption\x18\x19 \x01(\x0b\x32%.google.storage.v2.CustomerEncryption\x12/\n\x0b\x63ustom_time\x18\x1a \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12>\n\x10soft_delete_time\x18\x1c \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03H\x02\x88\x01\x01\x12>\n\x10hard_delete_time\x18\x1d \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03H\x03\x88\x01\x01\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x10\n\x0e_restore_tokenB\x13\n\x11_event_based_holdB\x13\n\x11_soft_delete_timeB\x13\n\x11_hard_delete_time\"\xce\x01\n\x13ObjectAccessControl\x12\x0c\n\x04role\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x0e\n\x06\x65ntity\x18\x03 \x01(\t\x12\x17\n\nentity_alt\x18\t \x01(\tB\x03\xe0\x41\x03\x12\x11\n\tentity_id\x18\x04 \x01(\t\x12\x0c\n\x04\x65tag\x18\x08 \x01(\t\x12\r\n\x05\x65mail\x18\x05 \x01(\t\x12\x0e\n\x06\x64omain\x18\x06 \x01(\t\x12\x34\n\x0cproject_team\x18\x07 \x01(\x0b\x32\x1e.google.storage.v2.ProjectTeam\"l\n\x13ListObjectsResponse\x12*\n\x07objects\x18\x01 \x03(\x0b\x32\x19.google.storage.v2.Object\x12\x10\n\x08prefixes\x18\x02 \x03(\t\x12\x17\n\x0fnext_page_token\x18\x03 \x01(\t\"3\n\x0bProjectTeam\x12\x16\n\x0eproject_number\x18\x01 \x01(\t\x12\x0c\n\x04team\x18\x02 \x01(\t\"*\n\x05Owner\x12\x0e\n\x06\x65ntity\x18\x01 \x01(\t\x12\x11\n\tentity_id\x18\x02 \x01(\t\"C\n\x0c\x43ontentRange\x12\r\n\x05start\x18\x01 \x01(\x03\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x03\x12\x17\n\x0f\x63omplete_length\x18\x03 \x01(\x03\x32\x8c\x1c\n\x07Storage\x12r\n\x0c\x44\x65leteBucket\x12&.google.storage.v2.DeleteBucketRequest\x1a\x16.google.protobuf.Empty\"\"\xda\x41\x04name\x8a\xd3\xe4\x93\x02\x15\x12\x13\n\x04name\x12\x0b{bucket=**}\x12o\n\tGetBucket\x12#.google.storage.v2.GetBucketRequest\x1a\x19.google.storage.v2.Bucket\"\"\xda\x41\x04name\x8a\xd3\xe4\x93\x02\x15\x12\x13\n\x04name\x12\x0b{bucket=**}\x12\xab\x01\n\x0c\x43reateBucket\x12&.google.storage.v2.CreateBucketRequest\x1a\x19.google.storage.v2.Bucket\"X\xda\x41\x17parent,bucket,bucket_id\x8a\xd3\xe4\x93\x02\x38\x12\x16\n\x06parent\x12\x0c{project=**}\x12\x1e\n\x0e\x62ucket.project\x12\x0c{project=**}\x12\x85\x01\n\x0bListBuckets\x12%.google.storage.v2.ListBucketsRequest\x1a&.google.storage.v2.ListBucketsResponse\"\'\xda\x41\x06parent\x8a\xd3\xe4\x93\x02\x18\x12\x16\n\x06parent\x12\x0c{project=**}\x12\x93\x01\n\x19LockBucketRetentionPolicy\x12\x33.google.storage.v2.LockBucketRetentionPolicyRequest\x1a\x19.google.storage.v2.Bucket\"&\xda\x41\x06\x62ucket\x8a\xd3\xe4\x93\x02\x17\x12\x15\n\x06\x62ucket\x12\x0b{bucket=**}\x12u\n\x0cGetIamPolicy\x12\".google.iam.v1.GetIamPolicyRequest\x1a\x15.google.iam.v1.Policy\"*\xda\x41\x08resource\x8a\xd3\xe4\x93\x02\x19\x12\x17\n\x08resource\x12\x0b{bucket=**}\x12|\n\x0cSetIamPolicy\x12\".google.iam.v1.SetIamPolicyRequest\x1a\x15.google.iam.v1.Policy\"1\xda\x41\x0fresource,policy\x8a\xd3\xe4\x93\x02\x19\x12\x17\n\x08resource\x12\x0b{bucket=**}\x12\x96\x02\n\x12TestIamPermissions\x12(.google.iam.v1.TestIamPermissionsRequest\x1a).google.iam.v1.TestIamPermissionsResponse\"\xaa\x01\xda\x41\x14resource,permissions\x8a\xd3\xe4\x93\x02\x8c\x01\x12\x17\n\x08resource\x12\x0b{bucket=**}\x12\x34\n\x08resource\x12({bucket=projects/*/buckets/*}/objects/**\x12;\n\x08resource\x12/{bucket=projects/*/buckets/*}/managedFolders/**\x12\x8a\x01\n\x0cUpdateBucket\x12&.google.storage.v2.UpdateBucketRequest\x1a\x19.google.storage.v2.Bucket\"7\xda\x41\x12\x62ucket,update_mask\x8a\xd3\xe4\x93\x02\x1c\x12\x1a\n\x0b\x62ucket.name\x12\x0b{bucket=**}\x12~\n\rComposeObject\x12\'.google.storage.v2.ComposeObjectRequest\x1a\x19.google.storage.v2.Object\")\x8a\xd3\xe4\x93\x02#\x12!\n\x12\x64\x65stination.bucket\x12\x0b{bucket=**}\x12\x98\x01\n\x0c\x44\x65leteObject\x12&.google.storage.v2.DeleteObjectRequest\x1a\x16.google.protobuf.Empty\"H\xda\x41\rbucket,object\xda\x41\x18\x62ucket,object,generation\x8a\xd3\xe4\x93\x02\x17\x12\x15\n\x06\x62ucket\x12\x0b{bucket=**}\x12\x8d\x01\n\rRestoreObject\x12\'.google.storage.v2.RestoreObjectRequest\x1a\x19.google.storage.v2.Object\"8\xda\x41\x18\x62ucket,object,generation\x8a\xd3\xe4\x93\x02\x17\x12\x15\n\x06\x62ucket\x12\x0b{bucket=**}\x12\xba\x01\n\x14\x43\x61ncelResumableWrite\x12..google.storage.v2.CancelResumableWriteRequest\x1a/.google.storage.v2.CancelResumableWriteResponse\"A\xda\x41\tupload_id\x8a\xd3\xe4\x93\x02/\x12-\n\tupload_id\x12 {bucket=projects/*/buckets/*}/**\x12\x95\x01\n\tGetObject\x12#.google.storage.v2.GetObjectRequest\x1a\x19.google.storage.v2.Object\"H\xda\x41\rbucket,object\xda\x41\x18\x62ucket,object,generation\x8a\xd3\xe4\x93\x02\x17\x12\x15\n\x06\x62ucket\x12\x0b{bucket=**}\x12\xa5\x01\n\nReadObject\x12$.google.storage.v2.ReadObjectRequest\x1a%.google.storage.v2.ReadObjectResponse\"H\xda\x41\rbucket,object\xda\x41\x18\x62ucket,object,generation\x8a\xd3\xe4\x93\x02\x17\x12\x15\n\x06\x62ucket\x12\x0b{bucket=**}0\x01\x12\x8c\x01\n\x0cUpdateObject\x12&.google.storage.v2.UpdateObjectRequest\x1a\x19.google.storage.v2.Object\"9\xda\x41\x12object,update_mask\x8a\xd3\xe4\x93\x02\x1e\x12\x1c\n\robject.bucket\x12\x0b{bucket=**}\x12`\n\x0bWriteObject\x12%.google.storage.v2.WriteObjectRequest\x1a&.google.storage.v2.WriteObjectResponse\"\x00(\x01\x12n\n\x0f\x42idiWriteObject\x12).google.storage.v2.BidiWriteObjectRequest\x1a*.google.storage.v2.BidiWriteObjectResponse\"\x00(\x01\x30\x01\x12\x84\x01\n\x0bListObjects\x12%.google.storage.v2.ListObjectsRequest\x1a&.google.storage.v2.ListObjectsResponse\"&\xda\x41\x06parent\x8a\xd3\xe4\x93\x02\x17\x12\x15\n\x06parent\x12\x0b{bucket=**}\x12\x98\x01\n\rRewriteObject\x12\'.google.storage.v2.RewriteObjectRequest\x1a\".google.storage.v2.RewriteResponse\":\x8a\xd3\xe4\x93\x02\x34\x12\x0f\n\rsource_bucket\x12!\n\x12\x64\x65stination_bucket\x12\x0b{bucket=**}\x12\xae\x01\n\x13StartResumableWrite\x12-.google.storage.v2.StartResumableWriteRequest\x1a..google.storage.v2.StartResumableWriteResponse\"8\x8a\xd3\xe4\x93\x02\x32\x12\x30\n!write_object_spec.resource.bucket\x12\x0b{bucket=**}\x12\xae\x01\n\x10QueryWriteStatus\x12*.google.storage.v2.QueryWriteStatusRequest\x1a+.google.storage.v2.QueryWriteStatusResponse\"A\xda\x41\tupload_id\x8a\xd3\xe4\x93\x02/\x12-\n\tupload_id\x12 {bucket=projects/*/buckets/*}/**\x1a\xa7\x02\xca\x41\x16storage.googleapis.com\xd2\x41\x8a\x02https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/cloud-platform.read-only,https://www.googleapis.com/auth/devstorage.full_control,https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/devstorage.read_writeB\xe2\x01\n\x15\x63om.google.storage.v2B\x0cStorageProtoP\x01Z>cloud.google.com/go/storage/internal/apiv2/storagepb;storagepb\xea\x41x\n!cloudkms.googleapis.com/CryptoKey\x12Sprojects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -75,16 +75,6 @@ _globals['_UPDATEBUCKETREQUEST'].fields_by_name['bucket']._serialized_options = b'\340A\002' _globals['_UPDATEBUCKETREQUEST'].fields_by_name['update_mask']._loaded_options = None _globals['_UPDATEBUCKETREQUEST'].fields_by_name['update_mask']._serialized_options = b'\340A\002' - _globals['_DELETENOTIFICATIONCONFIGREQUEST'].fields_by_name['name']._loaded_options = None - _globals['_DELETENOTIFICATIONCONFIGREQUEST'].fields_by_name['name']._serialized_options = b'\340A\002\372A+\n)storage.googleapis.com/NotificationConfig' - _globals['_GETNOTIFICATIONCONFIGREQUEST'].fields_by_name['name']._loaded_options = None - _globals['_GETNOTIFICATIONCONFIGREQUEST'].fields_by_name['name']._serialized_options = b'\340A\002\372A+\n)storage.googleapis.com/NotificationConfig' - _globals['_CREATENOTIFICATIONCONFIGREQUEST'].fields_by_name['parent']._loaded_options = None - _globals['_CREATENOTIFICATIONCONFIGREQUEST'].fields_by_name['parent']._serialized_options = b'\340A\002\372A+\022)storage.googleapis.com/NotificationConfig' - _globals['_CREATENOTIFICATIONCONFIGREQUEST'].fields_by_name['notification_config']._loaded_options = None - _globals['_CREATENOTIFICATIONCONFIGREQUEST'].fields_by_name['notification_config']._serialized_options = b'\340A\002' - _globals['_LISTNOTIFICATIONCONFIGSREQUEST'].fields_by_name['parent']._loaded_options = None - _globals['_LISTNOTIFICATIONCONFIGSREQUEST'].fields_by_name['parent']._serialized_options = b'\340A\002\372A+\022)storage.googleapis.com/NotificationConfig' _globals['_COMPOSEOBJECTREQUEST_SOURCEOBJECT'].fields_by_name['name']._loaded_options = None _globals['_COMPOSEOBJECTREQUEST_SOURCEOBJECT'].fields_by_name['name']._serialized_options = b'\340A\002' _globals['_COMPOSEOBJECTREQUEST'].fields_by_name['destination']._loaded_options = None @@ -101,6 +91,8 @@ _globals['_RESTOREOBJECTREQUEST'].fields_by_name['object']._serialized_options = b'\340A\002' _globals['_RESTOREOBJECTREQUEST'].fields_by_name['generation']._loaded_options = None _globals['_RESTOREOBJECTREQUEST'].fields_by_name['generation']._serialized_options = b'\340A\002' + _globals['_RESTOREOBJECTREQUEST'].fields_by_name['restore_token']._loaded_options = None + _globals['_RESTOREOBJECTREQUEST'].fields_by_name['restore_token']._serialized_options = b'\340A\001' _globals['_CANCELRESUMABLEWRITEREQUEST'].fields_by_name['upload_id']._loaded_options = None _globals['_CANCELRESUMABLEWRITEREQUEST'].fields_by_name['upload_id']._serialized_options = b'\340A\002' _globals['_READOBJECTREQUEST'].fields_by_name['bucket']._loaded_options = None @@ -111,6 +103,8 @@ _globals['_GETOBJECTREQUEST'].fields_by_name['bucket']._serialized_options = b'\340A\002\372A\037\n\035storage.googleapis.com/Bucket' _globals['_GETOBJECTREQUEST'].fields_by_name['object']._loaded_options = None _globals['_GETOBJECTREQUEST'].fields_by_name['object']._serialized_options = b'\340A\002' + _globals['_GETOBJECTREQUEST'].fields_by_name['restore_token']._loaded_options = None + _globals['_GETOBJECTREQUEST'].fields_by_name['restore_token']._serialized_options = b'\340A\001' _globals['_WRITEOBJECTSPEC'].fields_by_name['resource']._loaded_options = None _globals['_WRITEOBJECTSPEC'].fields_by_name['resource']._serialized_options = b'\340A\002' _globals['_WRITEOBJECTREQUEST'].fields_by_name['write_offset']._loaded_options = None @@ -147,24 +141,6 @@ _globals['_UPDATEOBJECTREQUEST'].fields_by_name['object']._serialized_options = b'\340A\002' _globals['_UPDATEOBJECTREQUEST'].fields_by_name['update_mask']._loaded_options = None _globals['_UPDATEOBJECTREQUEST'].fields_by_name['update_mask']._serialized_options = b'\340A\002' - _globals['_GETSERVICEACCOUNTREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_GETSERVICEACCOUNTREQUEST'].fields_by_name['project']._serialized_options = b'\340A\002\372A-\n+cloudresourcemanager.googleapis.com/Project' - _globals['_CREATEHMACKEYREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_CREATEHMACKEYREQUEST'].fields_by_name['project']._serialized_options = b'\340A\002\372A-\n+cloudresourcemanager.googleapis.com/Project' - _globals['_CREATEHMACKEYREQUEST'].fields_by_name['service_account_email']._loaded_options = None - _globals['_CREATEHMACKEYREQUEST'].fields_by_name['service_account_email']._serialized_options = b'\340A\002' - _globals['_DELETEHMACKEYREQUEST'].fields_by_name['access_id']._loaded_options = None - _globals['_DELETEHMACKEYREQUEST'].fields_by_name['access_id']._serialized_options = b'\340A\002' - _globals['_DELETEHMACKEYREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_DELETEHMACKEYREQUEST'].fields_by_name['project']._serialized_options = b'\340A\002\372A-\n+cloudresourcemanager.googleapis.com/Project' - _globals['_GETHMACKEYREQUEST'].fields_by_name['access_id']._loaded_options = None - _globals['_GETHMACKEYREQUEST'].fields_by_name['access_id']._serialized_options = b'\340A\002' - _globals['_GETHMACKEYREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_GETHMACKEYREQUEST'].fields_by_name['project']._serialized_options = b'\340A\002\372A-\n+cloudresourcemanager.googleapis.com/Project' - _globals['_LISTHMACKEYSREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_LISTHMACKEYSREQUEST'].fields_by_name['project']._serialized_options = b'\340A\002\372A-\n+cloudresourcemanager.googleapis.com/Project' - _globals['_UPDATEHMACKEYREQUEST'].fields_by_name['hmac_key']._loaded_options = None - _globals['_UPDATEHMACKEYREQUEST'].fields_by_name['hmac_key']._serialized_options = b'\340A\002' _globals['_SERVICECONSTANTS_VALUES']._loaded_options = None _globals['_SERVICECONSTANTS_VALUES']._serialized_options = b'\020\001' _globals['_BUCKET_ENCRYPTION'].fields_by_name['default_kms_key']._loaded_options = None @@ -200,33 +176,11 @@ _globals['_BUCKET'].fields_by_name['soft_delete_policy']._loaded_options = None _globals['_BUCKET'].fields_by_name['soft_delete_policy']._serialized_options = b'\340A\001' _globals['_BUCKET']._loaded_options = None - _globals['_BUCKET']._serialized_options = b'\352AD\n\035storage.googleapis.com/Bucket\022#projects/{project}/buckets/{bucket}' + _globals['_BUCKET']._serialized_options = b'\352AU\n\035storage.googleapis.com/Bucket\022#projects/{project}/buckets/{bucket}*\007buckets2\006bucket' _globals['_BUCKETACCESSCONTROL'].fields_by_name['entity_alt']._loaded_options = None _globals['_BUCKETACCESSCONTROL'].fields_by_name['entity_alt']._serialized_options = b'\340A\003' _globals['_CHECKSUMMEDDATA'].fields_by_name['content']._loaded_options = None _globals['_CHECKSUMMEDDATA'].fields_by_name['content']._serialized_options = b'\010\001\340A\001' - _globals['_HMACKEYMETADATA'].fields_by_name['id']._loaded_options = None - _globals['_HMACKEYMETADATA'].fields_by_name['id']._serialized_options = b'\340A\005' - _globals['_HMACKEYMETADATA'].fields_by_name['access_id']._loaded_options = None - _globals['_HMACKEYMETADATA'].fields_by_name['access_id']._serialized_options = b'\340A\005' - _globals['_HMACKEYMETADATA'].fields_by_name['project']._loaded_options = None - _globals['_HMACKEYMETADATA'].fields_by_name['project']._serialized_options = b'\340A\005\372A-\n+cloudresourcemanager.googleapis.com/Project' - _globals['_HMACKEYMETADATA'].fields_by_name['service_account_email']._loaded_options = None - _globals['_HMACKEYMETADATA'].fields_by_name['service_account_email']._serialized_options = b'\340A\003' - _globals['_HMACKEYMETADATA'].fields_by_name['create_time']._loaded_options = None - _globals['_HMACKEYMETADATA'].fields_by_name['create_time']._serialized_options = b'\340A\003' - _globals['_HMACKEYMETADATA'].fields_by_name['update_time']._loaded_options = None - _globals['_HMACKEYMETADATA'].fields_by_name['update_time']._serialized_options = b'\340A\003' - _globals['_NOTIFICATIONCONFIG_CUSTOMATTRIBUTESENTRY']._loaded_options = None - _globals['_NOTIFICATIONCONFIG_CUSTOMATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_NOTIFICATIONCONFIG'].fields_by_name['name']._loaded_options = None - _globals['_NOTIFICATIONCONFIG'].fields_by_name['name']._serialized_options = b'\340A\002' - _globals['_NOTIFICATIONCONFIG'].fields_by_name['topic']._loaded_options = None - _globals['_NOTIFICATIONCONFIG'].fields_by_name['topic']._serialized_options = b'\340A\002' - _globals['_NOTIFICATIONCONFIG'].fields_by_name['payload_format']._loaded_options = None - _globals['_NOTIFICATIONCONFIG'].fields_by_name['payload_format']._serialized_options = b'\340A\002' - _globals['_NOTIFICATIONCONFIG']._loaded_options = None - _globals['_NOTIFICATIONCONFIG']._serialized_options = b'\352Az\n)storage.googleapis.com/NotificationConfig\022Mprojects/{project}/buckets/{bucket}/notificationConfigs/{notification_config}' _globals['_OBJECT_METADATAENTRY']._loaded_options = None _globals['_OBJECT_METADATAENTRY']._serialized_options = b'8\001' _globals['_OBJECT'].fields_by_name['name']._loaded_options = None @@ -235,6 +189,8 @@ _globals['_OBJECT'].fields_by_name['bucket']._serialized_options = b'\340A\005\372A\037\n\035storage.googleapis.com/Bucket' _globals['_OBJECT'].fields_by_name['generation']._loaded_options = None _globals['_OBJECT'].fields_by_name['generation']._serialized_options = b'\340A\005' + _globals['_OBJECT'].fields_by_name['restore_token']._loaded_options = None + _globals['_OBJECT'].fields_by_name['restore_token']._serialized_options = b'\340A\003' _globals['_OBJECT'].fields_by_name['metageneration']._loaded_options = None _globals['_OBJECT'].fields_by_name['metageneration']._serialized_options = b'\340A\003' _globals['_OBJECT'].fields_by_name['size']._loaded_options = None @@ -278,17 +234,9 @@ _globals['_STORAGE'].methods_by_name['SetIamPolicy']._loaded_options = None _globals['_STORAGE'].methods_by_name['SetIamPolicy']._serialized_options = b'\332A\017resource,policy\212\323\344\223\002\031\022\027\n\010resource\022\013{bucket=**}' _globals['_STORAGE'].methods_by_name['TestIamPermissions']._loaded_options = None - _globals['_STORAGE'].methods_by_name['TestIamPermissions']._serialized_options = b'\332A\024resource,permissions\212\323\344\223\002O\022\027\n\010resource\022\013{bucket=**}\0224\n\010resource\022({bucket=projects/*/buckets/*}/objects/**' + _globals['_STORAGE'].methods_by_name['TestIamPermissions']._serialized_options = b'\332A\024resource,permissions\212\323\344\223\002\214\001\022\027\n\010resource\022\013{bucket=**}\0224\n\010resource\022({bucket=projects/*/buckets/*}/objects/**\022;\n\010resource\022/{bucket=projects/*/buckets/*}/managedFolders/**' _globals['_STORAGE'].methods_by_name['UpdateBucket']._loaded_options = None _globals['_STORAGE'].methods_by_name['UpdateBucket']._serialized_options = b'\332A\022bucket,update_mask\212\323\344\223\002\034\022\032\n\013bucket.name\022\013{bucket=**}' - _globals['_STORAGE'].methods_by_name['DeleteNotificationConfig']._loaded_options = None - _globals['_STORAGE'].methods_by_name['DeleteNotificationConfig']._serialized_options = b'\332A\004name\212\323\344\223\002*\022(\n\004name\022 {bucket=projects/*/buckets/*}/**' - _globals['_STORAGE'].methods_by_name['GetNotificationConfig']._loaded_options = None - _globals['_STORAGE'].methods_by_name['GetNotificationConfig']._serialized_options = b'\332A\004name\212\323\344\223\002*\022(\n\004name\022 {bucket=projects/*/buckets/*}/**' - _globals['_STORAGE'].methods_by_name['CreateNotificationConfig']._loaded_options = None - _globals['_STORAGE'].methods_by_name['CreateNotificationConfig']._serialized_options = b'\332A\032parent,notification_config\212\323\344\223\002\027\022\025\n\006parent\022\013{bucket=**}' - _globals['_STORAGE'].methods_by_name['ListNotificationConfigs']._loaded_options = None - _globals['_STORAGE'].methods_by_name['ListNotificationConfigs']._serialized_options = b'\332A\006parent\212\323\344\223\002\027\022\025\n\006parent\022\013{bucket=**}' _globals['_STORAGE'].methods_by_name['ComposeObject']._loaded_options = None _globals['_STORAGE'].methods_by_name['ComposeObject']._serialized_options = b'\212\323\344\223\002#\022!\n\022destination.bucket\022\013{bucket=**}' _globals['_STORAGE'].methods_by_name['DeleteObject']._loaded_options = None @@ -311,18 +259,6 @@ _globals['_STORAGE'].methods_by_name['StartResumableWrite']._serialized_options = b'\212\323\344\223\0022\0220\n!write_object_spec.resource.bucket\022\013{bucket=**}' _globals['_STORAGE'].methods_by_name['QueryWriteStatus']._loaded_options = None _globals['_STORAGE'].methods_by_name['QueryWriteStatus']._serialized_options = b'\332A\tupload_id\212\323\344\223\002/\022-\n\tupload_id\022 {bucket=projects/*/buckets/*}/**' - _globals['_STORAGE'].methods_by_name['GetServiceAccount']._loaded_options = None - _globals['_STORAGE'].methods_by_name['GetServiceAccount']._serialized_options = b'\332A\007project\212\323\344\223\002\013\022\t\n\007project' - _globals['_STORAGE'].methods_by_name['CreateHmacKey']._loaded_options = None - _globals['_STORAGE'].methods_by_name['CreateHmacKey']._serialized_options = b'\332A\035project,service_account_email\212\323\344\223\002\013\022\t\n\007project' - _globals['_STORAGE'].methods_by_name['DeleteHmacKey']._loaded_options = None - _globals['_STORAGE'].methods_by_name['DeleteHmacKey']._serialized_options = b'\332A\021access_id,project\212\323\344\223\002\013\022\t\n\007project' - _globals['_STORAGE'].methods_by_name['GetHmacKey']._loaded_options = None - _globals['_STORAGE'].methods_by_name['GetHmacKey']._serialized_options = b'\332A\021access_id,project\212\323\344\223\002\013\022\t\n\007project' - _globals['_STORAGE'].methods_by_name['ListHmacKeys']._loaded_options = None - _globals['_STORAGE'].methods_by_name['ListHmacKeys']._serialized_options = b'\332A\007project\212\323\344\223\002\013\022\t\n\007project' - _globals['_STORAGE'].methods_by_name['UpdateHmacKey']._loaded_options = None - _globals['_STORAGE'].methods_by_name['UpdateHmacKey']._serialized_options = b'\332A\024hmac_key,update_mask\212\323\344\223\002\"\022 \n\020hmac_key.project\022\014{project=**}' _globals['_DELETEBUCKETREQUEST']._serialized_start=378 _globals['_DELETEBUCKETREQUEST']._serialized_end=592 _globals['_GETBUCKETREQUEST']._serialized_start=595 @@ -337,152 +273,118 @@ _globals['_LOCKBUCKETRETENTIONPOLICYREQUEST']._serialized_end=1501 _globals['_UPDATEBUCKETREQUEST']._serialized_start=1504 _globals['_UPDATEBUCKETREQUEST']._serialized_end=1830 - _globals['_DELETENOTIFICATIONCONFIGREQUEST']._serialized_start=1832 - _globals['_DELETENOTIFICATIONCONFIGREQUEST']._serialized_end=1930 - _globals['_GETNOTIFICATIONCONFIGREQUEST']._serialized_start=1932 - _globals['_GETNOTIFICATIONCONFIGREQUEST']._serialized_end=2027 - _globals['_CREATENOTIFICATIONCONFIGREQUEST']._serialized_start=2030 - _globals['_CREATENOTIFICATIONCONFIGREQUEST']._serialized_end=2203 - _globals['_LISTNOTIFICATIONCONFIGSREQUEST']._serialized_start=2206 - _globals['_LISTNOTIFICATIONCONFIGSREQUEST']._serialized_end=2344 - _globals['_LISTNOTIFICATIONCONFIGSRESPONSE']._serialized_start=2346 - _globals['_LISTNOTIFICATIONCONFIGSRESPONSE']._serialized_end=2473 - _globals['_COMPOSEOBJECTREQUEST']._serialized_start=2476 - _globals['_COMPOSEOBJECTREQUEST']._serialized_end=3233 - _globals['_COMPOSEOBJECTREQUEST_SOURCEOBJECT']._serialized_start=2943 - _globals['_COMPOSEOBJECTREQUEST_SOURCEOBJECT']._serialized_end=3181 - _globals['_COMPOSEOBJECTREQUEST_SOURCEOBJECT_OBJECTPRECONDITIONS']._serialized_start=3102 - _globals['_COMPOSEOBJECTREQUEST_SOURCEOBJECT_OBJECTPRECONDITIONS']._serialized_end=3181 - _globals['_DELETEOBJECTREQUEST']._serialized_start=3236 - _globals['_DELETEOBJECTREQUEST']._serialized_end=3701 - _globals['_RESTOREOBJECTREQUEST']._serialized_start=3704 - _globals['_RESTOREOBJECTREQUEST']._serialized_end=4225 - _globals['_CANCELRESUMABLEWRITEREQUEST']._serialized_start=4227 - _globals['_CANCELRESUMABLEWRITEREQUEST']._serialized_end=4280 - _globals['_CANCELRESUMABLEWRITERESPONSE']._serialized_start=4282 - _globals['_CANCELRESUMABLEWRITERESPONSE']._serialized_end=4312 - _globals['_READOBJECTREQUEST']._serialized_start=4315 - _globals['_READOBJECTREQUEST']._serialized_end=4885 - _globals['_GETOBJECTREQUEST']._serialized_start=4888 - _globals['_GETOBJECTREQUEST']._serialized_end=5460 - _globals['_READOBJECTRESPONSE']._serialized_start=5463 - _globals['_READOBJECTRESPONSE']._serialized_end=5708 - _globals['_WRITEOBJECTSPEC']._serialized_start=5711 - _globals['_WRITEOBJECTSPEC']._serialized_end=6108 - _globals['_WRITEOBJECTREQUEST']._serialized_start=6111 - _globals['_WRITEOBJECTREQUEST']._serialized_end=6501 - _globals['_WRITEOBJECTRESPONSE']._serialized_start=6503 - _globals['_WRITEOBJECTRESPONSE']._serialized_end=6613 - _globals['_BIDIWRITEOBJECTREQUEST']._serialized_start=6616 - _globals['_BIDIWRITEOBJECTREQUEST']._serialized_end=7047 - _globals['_BIDIWRITEOBJECTRESPONSE']._serialized_start=7049 - _globals['_BIDIWRITEOBJECTRESPONSE']._serialized_end=7163 - _globals['_LISTOBJECTSREQUEST']._serialized_start=7166 - _globals['_LISTOBJECTSREQUEST']._serialized_end=7595 - _globals['_QUERYWRITESTATUSREQUEST']._serialized_start=7598 - _globals['_QUERYWRITESTATUSREQUEST']._serialized_end=7731 - _globals['_QUERYWRITESTATUSRESPONSE']._serialized_start=7733 - _globals['_QUERYWRITESTATUSRESPONSE']._serialized_end=7848 - _globals['_REWRITEOBJECTREQUEST']._serialized_start=7851 - _globals['_REWRITEOBJECTREQUEST']._serialized_end=9171 - _globals['_REWRITERESPONSE']._serialized_start=9174 - _globals['_REWRITERESPONSE']._serialized_end=9325 - _globals['_STARTRESUMABLEWRITEREQUEST']._serialized_start=9328 - _globals['_STARTRESUMABLEWRITEREQUEST']._serialized_end=9570 - _globals['_STARTRESUMABLEWRITERESPONSE']._serialized_start=9572 - _globals['_STARTRESUMABLEWRITERESPONSE']._serialized_end=9620 - _globals['_UPDATEOBJECTREQUEST']._serialized_start=9623 - _globals['_UPDATEOBJECTREQUEST']._serialized_end=10118 - _globals['_GETSERVICEACCOUNTREQUEST']._serialized_start=10120 - _globals['_GETSERVICEACCOUNTREQUEST']._serialized_end=10216 - _globals['_CREATEHMACKEYREQUEST']._serialized_start=10219 - _globals['_CREATEHMACKEYREQUEST']._serialized_end=10347 - _globals['_CREATEHMACKEYRESPONSE']._serialized_start=10349 - _globals['_CREATEHMACKEYRESPONSE']._serialized_end=10452 - _globals['_DELETEHMACKEYREQUEST']._serialized_start=10454 - _globals['_DELETEHMACKEYREQUEST']._serialized_end=10570 - _globals['_GETHMACKEYREQUEST']._serialized_start=10572 - _globals['_GETHMACKEYREQUEST']._serialized_end=10685 - _globals['_LISTHMACKEYSREQUEST']._serialized_start=10688 - _globals['_LISTHMACKEYSREQUEST']._serialized_end=10876 - _globals['_LISTHMACKEYSRESPONSE']._serialized_start=10878 - _globals['_LISTHMACKEYSRESPONSE']._serialized_end=10980 - _globals['_UPDATEHMACKEYREQUEST']._serialized_start=10983 - _globals['_UPDATEHMACKEYREQUEST']._serialized_end=11113 - _globals['_COMMONOBJECTREQUESTPARAMS']._serialized_start=11115 - _globals['_COMMONOBJECTREQUESTPARAMS']._serialized_end=11239 - _globals['_SERVICECONSTANTS']._serialized_start=11242 - _globals['_SERVICECONSTANTS']._serialized_end=11956 - _globals['_SERVICECONSTANTS_VALUES']._serialized_start=11263 - _globals['_SERVICECONSTANTS_VALUES']._serialized_end=11956 - _globals['_BUCKET']._serialized_start=11959 - _globals['_BUCKET']._serialized_end=15561 - _globals['_BUCKET_BILLING']._serialized_start=13400 - _globals['_BUCKET_BILLING']._serialized_end=13433 - _globals['_BUCKET_CORS']._serialized_start=13435 - _globals['_BUCKET_CORS']._serialized_end=13523 - _globals['_BUCKET_ENCRYPTION']._serialized_start=13525 - _globals['_BUCKET_ENCRYPTION']._serialized_end=13602 - _globals['_BUCKET_IAMCONFIG']._serialized_start=13605 - _globals['_BUCKET_IAMCONFIG']._serialized_end=13841 - _globals['_BUCKET_IAMCONFIG_UNIFORMBUCKETLEVELACCESS']._serialized_start=13751 - _globals['_BUCKET_IAMCONFIG_UNIFORMBUCKETLEVELACCESS']._serialized_end=13841 - _globals['_BUCKET_LIFECYCLE']._serialized_start=13844 - _globals['_BUCKET_LIFECYCLE']._serialized_end=14599 - _globals['_BUCKET_LIFECYCLE_RULE']._serialized_start=13914 - _globals['_BUCKET_LIFECYCLE_RULE']._serialized_end=14599 - _globals['_BUCKET_LIFECYCLE_RULE_ACTION']._serialized_start=14058 - _globals['_BUCKET_LIFECYCLE_RULE_ACTION']._serialized_end=14103 - _globals['_BUCKET_LIFECYCLE_RULE_CONDITION']._serialized_start=14106 - _globals['_BUCKET_LIFECYCLE_RULE_CONDITION']._serialized_end=14599 - _globals['_BUCKET_LOGGING']._serialized_start=14601 - _globals['_BUCKET_LOGGING']._serialized_end=14657 - _globals['_BUCKET_RETENTIONPOLICY']._serialized_start=14660 - _globals['_BUCKET_RETENTIONPOLICY']._serialized_end=14803 - _globals['_BUCKET_SOFTDELETEPOLICY']._serialized_start=14806 - _globals['_BUCKET_SOFTDELETEPOLICY']._serialized_end=14983 - _globals['_BUCKET_VERSIONING']._serialized_start=14985 - _globals['_BUCKET_VERSIONING']._serialized_end=15014 - _globals['_BUCKET_WEBSITE']._serialized_start=15016 - _globals['_BUCKET_WEBSITE']._serialized_end=15075 - _globals['_BUCKET_CUSTOMPLACEMENTCONFIG']._serialized_start=15077 - _globals['_BUCKET_CUSTOMPLACEMENTCONFIG']._serialized_end=15124 - _globals['_BUCKET_AUTOCLASS']._serialized_start=15127 - _globals['_BUCKET_AUTOCLASS']._serialized_end=15394 - _globals['_BUCKET_HIERARCHICALNAMESPACE']._serialized_start=15396 - _globals['_BUCKET_HIERARCHICALNAMESPACE']._serialized_end=15441 - _globals['_BUCKET_LABELSENTRY']._serialized_start=15443 - _globals['_BUCKET_LABELSENTRY']._serialized_end=15488 - _globals['_BUCKETACCESSCONTROL']._serialized_start=15564 - _globals['_BUCKETACCESSCONTROL']._serialized_end=15770 - _globals['_CHECKSUMMEDDATA']._serialized_start=15772 - _globals['_CHECKSUMMEDDATA']._serialized_end=15845 - _globals['_OBJECTCHECKSUMS']._serialized_start=15847 - _globals['_OBJECTCHECKSUMS']._serialized_end=15914 - _globals['_HMACKEYMETADATA']._serialized_start=15917 - _globals['_HMACKEYMETADATA']._serialized_end=16218 - _globals['_NOTIFICATIONCONFIG']._serialized_start=16221 - _globals['_NOTIFICATIONCONFIG']._serialized_end=16644 - _globals['_NOTIFICATIONCONFIG_CUSTOMATTRIBUTESENTRY']._serialized_start=16462 - _globals['_NOTIFICATIONCONFIG_CUSTOMATTRIBUTESENTRY']._serialized_end=16517 - _globals['_CUSTOMERENCRYPTION']._serialized_start=16646 - _globals['_CUSTOMERENCRYPTION']._serialized_end=16722 - _globals['_OBJECT']._serialized_start=16725 - _globals['_OBJECT']._serialized_end=18049 - _globals['_OBJECT_METADATAENTRY']._serialized_start=17939 - _globals['_OBJECT_METADATAENTRY']._serialized_end=17986 - _globals['_OBJECTACCESSCONTROL']._serialized_start=18052 - _globals['_OBJECTACCESSCONTROL']._serialized_end=18258 - _globals['_LISTOBJECTSRESPONSE']._serialized_start=18260 - _globals['_LISTOBJECTSRESPONSE']._serialized_end=18368 - _globals['_PROJECTTEAM']._serialized_start=18370 - _globals['_PROJECTTEAM']._serialized_end=18421 - _globals['_SERVICEACCOUNT']._serialized_start=18423 - _globals['_SERVICEACCOUNT']._serialized_end=18462 - _globals['_OWNER']._serialized_start=18464 - _globals['_OWNER']._serialized_end=18506 - _globals['_CONTENTRANGE']._serialized_start=18508 - _globals['_CONTENTRANGE']._serialized_end=18575 - _globals['_STORAGE']._serialized_start=18578 - _globals['_STORAGE']._serialized_end=23612 + _globals['_COMPOSEOBJECTREQUEST']._serialized_start=1833 + _globals['_COMPOSEOBJECTREQUEST']._serialized_end=2590 + _globals['_COMPOSEOBJECTREQUEST_SOURCEOBJECT']._serialized_start=2300 + _globals['_COMPOSEOBJECTREQUEST_SOURCEOBJECT']._serialized_end=2538 + _globals['_COMPOSEOBJECTREQUEST_SOURCEOBJECT_OBJECTPRECONDITIONS']._serialized_start=2459 + _globals['_COMPOSEOBJECTREQUEST_SOURCEOBJECT_OBJECTPRECONDITIONS']._serialized_end=2538 + _globals['_DELETEOBJECTREQUEST']._serialized_start=2593 + _globals['_DELETEOBJECTREQUEST']._serialized_end=3058 + _globals['_RESTOREOBJECTREQUEST']._serialized_start=3061 + _globals['_RESTOREOBJECTREQUEST']._serialized_end=3610 + _globals['_CANCELRESUMABLEWRITEREQUEST']._serialized_start=3612 + _globals['_CANCELRESUMABLEWRITEREQUEST']._serialized_end=3665 + _globals['_CANCELRESUMABLEWRITERESPONSE']._serialized_start=3667 + _globals['_CANCELRESUMABLEWRITERESPONSE']._serialized_end=3697 + _globals['_READOBJECTREQUEST']._serialized_start=3700 + _globals['_READOBJECTREQUEST']._serialized_end=4270 + _globals['_GETOBJECTREQUEST']._serialized_start=4273 + _globals['_GETOBJECTREQUEST']._serialized_end=4873 + _globals['_READOBJECTRESPONSE']._serialized_start=4876 + _globals['_READOBJECTRESPONSE']._serialized_end=5121 + _globals['_WRITEOBJECTSPEC']._serialized_start=5124 + _globals['_WRITEOBJECTSPEC']._serialized_end=5521 + _globals['_WRITEOBJECTREQUEST']._serialized_start=5524 + _globals['_WRITEOBJECTREQUEST']._serialized_end=5914 + _globals['_WRITEOBJECTRESPONSE']._serialized_start=5916 + _globals['_WRITEOBJECTRESPONSE']._serialized_end=6026 + _globals['_BIDIWRITEOBJECTREQUEST']._serialized_start=6029 + _globals['_BIDIWRITEOBJECTREQUEST']._serialized_end=6460 + _globals['_BIDIWRITEOBJECTRESPONSE']._serialized_start=6462 + _globals['_BIDIWRITEOBJECTRESPONSE']._serialized_end=6576 + _globals['_LISTOBJECTSREQUEST']._serialized_start=6579 + _globals['_LISTOBJECTSREQUEST']._serialized_end=7008 + _globals['_QUERYWRITESTATUSREQUEST']._serialized_start=7011 + _globals['_QUERYWRITESTATUSREQUEST']._serialized_end=7144 + _globals['_QUERYWRITESTATUSRESPONSE']._serialized_start=7146 + _globals['_QUERYWRITESTATUSRESPONSE']._serialized_end=7261 + _globals['_REWRITEOBJECTREQUEST']._serialized_start=7264 + _globals['_REWRITEOBJECTREQUEST']._serialized_end=8584 + _globals['_REWRITERESPONSE']._serialized_start=8587 + _globals['_REWRITERESPONSE']._serialized_end=8738 + _globals['_STARTRESUMABLEWRITEREQUEST']._serialized_start=8741 + _globals['_STARTRESUMABLEWRITEREQUEST']._serialized_end=8983 + _globals['_STARTRESUMABLEWRITERESPONSE']._serialized_start=8985 + _globals['_STARTRESUMABLEWRITERESPONSE']._serialized_end=9033 + _globals['_UPDATEOBJECTREQUEST']._serialized_start=9036 + _globals['_UPDATEOBJECTREQUEST']._serialized_end=9531 + _globals['_COMMONOBJECTREQUESTPARAMS']._serialized_start=9533 + _globals['_COMMONOBJECTREQUESTPARAMS']._serialized_end=9657 + _globals['_SERVICECONSTANTS']._serialized_start=9660 + _globals['_SERVICECONSTANTS']._serialized_end=10374 + _globals['_SERVICECONSTANTS_VALUES']._serialized_start=9681 + _globals['_SERVICECONSTANTS_VALUES']._serialized_end=10374 + _globals['_BUCKET']._serialized_start=10377 + _globals['_BUCKET']._serialized_end=13996 + _globals['_BUCKET_BILLING']._serialized_start=11818 + _globals['_BUCKET_BILLING']._serialized_end=11851 + _globals['_BUCKET_CORS']._serialized_start=11853 + _globals['_BUCKET_CORS']._serialized_end=11941 + _globals['_BUCKET_ENCRYPTION']._serialized_start=11943 + _globals['_BUCKET_ENCRYPTION']._serialized_end=12020 + _globals['_BUCKET_IAMCONFIG']._serialized_start=12023 + _globals['_BUCKET_IAMCONFIG']._serialized_end=12259 + _globals['_BUCKET_IAMCONFIG_UNIFORMBUCKETLEVELACCESS']._serialized_start=12169 + _globals['_BUCKET_IAMCONFIG_UNIFORMBUCKETLEVELACCESS']._serialized_end=12259 + _globals['_BUCKET_LIFECYCLE']._serialized_start=12262 + _globals['_BUCKET_LIFECYCLE']._serialized_end=13017 + _globals['_BUCKET_LIFECYCLE_RULE']._serialized_start=12332 + _globals['_BUCKET_LIFECYCLE_RULE']._serialized_end=13017 + _globals['_BUCKET_LIFECYCLE_RULE_ACTION']._serialized_start=12476 + _globals['_BUCKET_LIFECYCLE_RULE_ACTION']._serialized_end=12521 + _globals['_BUCKET_LIFECYCLE_RULE_CONDITION']._serialized_start=12524 + _globals['_BUCKET_LIFECYCLE_RULE_CONDITION']._serialized_end=13017 + _globals['_BUCKET_LOGGING']._serialized_start=13019 + _globals['_BUCKET_LOGGING']._serialized_end=13075 + _globals['_BUCKET_RETENTIONPOLICY']._serialized_start=13078 + _globals['_BUCKET_RETENTIONPOLICY']._serialized_end=13221 + _globals['_BUCKET_SOFTDELETEPOLICY']._serialized_start=13224 + _globals['_BUCKET_SOFTDELETEPOLICY']._serialized_end=13401 + _globals['_BUCKET_VERSIONING']._serialized_start=13403 + _globals['_BUCKET_VERSIONING']._serialized_end=13432 + _globals['_BUCKET_WEBSITE']._serialized_start=13434 + _globals['_BUCKET_WEBSITE']._serialized_end=13493 + _globals['_BUCKET_CUSTOMPLACEMENTCONFIG']._serialized_start=13495 + _globals['_BUCKET_CUSTOMPLACEMENTCONFIG']._serialized_end=13542 + _globals['_BUCKET_AUTOCLASS']._serialized_start=13545 + _globals['_BUCKET_AUTOCLASS']._serialized_end=13812 + _globals['_BUCKET_HIERARCHICALNAMESPACE']._serialized_start=13814 + _globals['_BUCKET_HIERARCHICALNAMESPACE']._serialized_end=13859 + _globals['_BUCKET_LABELSENTRY']._serialized_start=13861 + _globals['_BUCKET_LABELSENTRY']._serialized_end=13906 + _globals['_BUCKETACCESSCONTROL']._serialized_start=13999 + _globals['_BUCKETACCESSCONTROL']._serialized_end=14205 + _globals['_CHECKSUMMEDDATA']._serialized_start=14207 + _globals['_CHECKSUMMEDDATA']._serialized_end=14280 + _globals['_OBJECTCHECKSUMS']._serialized_start=14282 + _globals['_OBJECTCHECKSUMS']._serialized_end=14349 + _globals['_CUSTOMERENCRYPTION']._serialized_start=14351 + _globals['_CUSTOMERENCRYPTION']._serialized_end=14427 + _globals['_OBJECT']._serialized_start=14430 + _globals['_OBJECT']._serialized_end=15805 + _globals['_OBJECT_METADATAENTRY']._serialized_start=15677 + _globals['_OBJECT_METADATAENTRY']._serialized_end=15724 + _globals['_OBJECTACCESSCONTROL']._serialized_start=15808 + _globals['_OBJECTACCESSCONTROL']._serialized_end=16014 + _globals['_LISTOBJECTSRESPONSE']._serialized_start=16016 + _globals['_LISTOBJECTSRESPONSE']._serialized_end=16124 + _globals['_PROJECTTEAM']._serialized_start=16126 + _globals['_PROJECTTEAM']._serialized_end=16177 + _globals['_OWNER']._serialized_start=16179 + _globals['_OWNER']._serialized_end=16221 + _globals['_CONTENTRANGE']._serialized_start=16223 + _globals['_CONTENTRANGE']._serialized_end=16290 + _globals['_STORAGE']._serialized_start=16293 + _globals['_STORAGE']._serialized_end=19889 # @@protoc_insertion_point(module_scope) diff --git a/google/storage/v2/storage_pb2_grpc.py b/google/storage/v2/storage_pb2_grpc.py index 1b70e6b2..a196aa7d 100644 --- a/google/storage/v2/storage_pb2_grpc.py +++ b/google/storage/v2/storage_pb2_grpc.py @@ -117,26 +117,6 @@ def __init__(self, channel): request_serializer=google_dot_storage_dot_v2_dot_storage__pb2.UpdateBucketRequest.SerializeToString, response_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.Bucket.FromString, _registered_method=True) - self.DeleteNotificationConfig = channel.unary_unary( - '/google.storage.v2.Storage/DeleteNotificationConfig', - request_serializer=google_dot_storage_dot_v2_dot_storage__pb2.DeleteNotificationConfigRequest.SerializeToString, - response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) - self.GetNotificationConfig = channel.unary_unary( - '/google.storage.v2.Storage/GetNotificationConfig', - request_serializer=google_dot_storage_dot_v2_dot_storage__pb2.GetNotificationConfigRequest.SerializeToString, - response_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.NotificationConfig.FromString, - _registered_method=True) - self.CreateNotificationConfig = channel.unary_unary( - '/google.storage.v2.Storage/CreateNotificationConfig', - request_serializer=google_dot_storage_dot_v2_dot_storage__pb2.CreateNotificationConfigRequest.SerializeToString, - response_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.NotificationConfig.FromString, - _registered_method=True) - self.ListNotificationConfigs = channel.unary_unary( - '/google.storage.v2.Storage/ListNotificationConfigs', - request_serializer=google_dot_storage_dot_v2_dot_storage__pb2.ListNotificationConfigsRequest.SerializeToString, - response_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.ListNotificationConfigsResponse.FromString, - _registered_method=True) self.ComposeObject = channel.unary_unary( '/google.storage.v2.Storage/ComposeObject', request_serializer=google_dot_storage_dot_v2_dot_storage__pb2.ComposeObjectRequest.SerializeToString, @@ -202,36 +182,6 @@ def __init__(self, channel): request_serializer=google_dot_storage_dot_v2_dot_storage__pb2.QueryWriteStatusRequest.SerializeToString, response_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.QueryWriteStatusResponse.FromString, _registered_method=True) - self.GetServiceAccount = channel.unary_unary( - '/google.storage.v2.Storage/GetServiceAccount', - request_serializer=google_dot_storage_dot_v2_dot_storage__pb2.GetServiceAccountRequest.SerializeToString, - response_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.ServiceAccount.FromString, - _registered_method=True) - self.CreateHmacKey = channel.unary_unary( - '/google.storage.v2.Storage/CreateHmacKey', - request_serializer=google_dot_storage_dot_v2_dot_storage__pb2.CreateHmacKeyRequest.SerializeToString, - response_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.CreateHmacKeyResponse.FromString, - _registered_method=True) - self.DeleteHmacKey = channel.unary_unary( - '/google.storage.v2.Storage/DeleteHmacKey', - request_serializer=google_dot_storage_dot_v2_dot_storage__pb2.DeleteHmacKeyRequest.SerializeToString, - response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) - self.GetHmacKey = channel.unary_unary( - '/google.storage.v2.Storage/GetHmacKey', - request_serializer=google_dot_storage_dot_v2_dot_storage__pb2.GetHmacKeyRequest.SerializeToString, - response_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.HmacKeyMetadata.FromString, - _registered_method=True) - self.ListHmacKeys = channel.unary_unary( - '/google.storage.v2.Storage/ListHmacKeys', - request_serializer=google_dot_storage_dot_v2_dot_storage__pb2.ListHmacKeysRequest.SerializeToString, - response_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.ListHmacKeysResponse.FromString, - _registered_method=True) - self.UpdateHmacKey = channel.unary_unary( - '/google.storage.v2.Storage/UpdateHmacKey', - request_serializer=google_dot_storage_dot_v2_dot_storage__pb2.UpdateHmacKeyRequest.SerializeToString, - response_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.HmacKeyMetadata.FromString, - _registered_method=True) class StorageServicer(object): @@ -312,11 +262,13 @@ def SetIamPolicy(self, request, context): raise NotImplementedError('Method not implemented!') def TestIamPermissions(self, request, context): - """Tests a set of permissions on the given bucket or object to see which, if - any, are held by the caller. + """Tests a set of permissions on the given bucket, object, or managed folder + to see which, if any, are held by the caller. The `resource` field in the request should be - `projects/_/buckets/{bucket}` for a bucket or - `projects/_/buckets/{bucket}/objects/{object}` for an object. + `projects/_/buckets/{bucket}` for a bucket, + `projects/_/buckets/{bucket}/objects/{object}` for an object, or + `projects/_/buckets/{bucket}/managedFolders/{managedFolder}` + for a managed folder. """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') @@ -329,37 +281,6 @@ def UpdateBucket(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def DeleteNotificationConfig(self, request, context): - """Permanently deletes a NotificationConfig. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def GetNotificationConfig(self, request, context): - """View a NotificationConfig. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def CreateNotificationConfig(self, request, context): - """Creates a NotificationConfig for a given bucket. - These NotificationConfigs, when triggered, publish messages to the - specified Pub/Sub topics. See - https://cloud.google.com/storage/docs/pubsub-notifications. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def ListNotificationConfigs(self, request, context): - """Retrieves a list of NotificationConfigs for a given bucket. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - def ComposeObject(self, request, context): """Concatenates a list of existing objects into a new object in the same bucket. @@ -552,48 +473,6 @@ def QueryWriteStatus(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def GetServiceAccount(self, request, context): - """Retrieves the name of a project's Google Cloud Storage service account. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def CreateHmacKey(self, request, context): - """Creates a new HMAC key for the given service account. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def DeleteHmacKey(self, request, context): - """Deletes a given HMAC key. Key must be in an INACTIVE state. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def GetHmacKey(self, request, context): - """Gets an existing HMAC key metadata for the given id. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def ListHmacKeys(self, request, context): - """Lists HMAC keys under a given project with the additional filters provided. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def UpdateHmacKey(self, request, context): - """Updates a given HMAC key state between ACTIVE and INACTIVE. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - def add_StorageServicer_to_server(servicer, server): rpc_method_handlers = { @@ -642,26 +521,6 @@ def add_StorageServicer_to_server(servicer, server): request_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.UpdateBucketRequest.FromString, response_serializer=google_dot_storage_dot_v2_dot_storage__pb2.Bucket.SerializeToString, ), - 'DeleteNotificationConfig': grpc.unary_unary_rpc_method_handler( - servicer.DeleteNotificationConfig, - request_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.DeleteNotificationConfigRequest.FromString, - response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - ), - 'GetNotificationConfig': grpc.unary_unary_rpc_method_handler( - servicer.GetNotificationConfig, - request_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.GetNotificationConfigRequest.FromString, - response_serializer=google_dot_storage_dot_v2_dot_storage__pb2.NotificationConfig.SerializeToString, - ), - 'CreateNotificationConfig': grpc.unary_unary_rpc_method_handler( - servicer.CreateNotificationConfig, - request_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.CreateNotificationConfigRequest.FromString, - response_serializer=google_dot_storage_dot_v2_dot_storage__pb2.NotificationConfig.SerializeToString, - ), - 'ListNotificationConfigs': grpc.unary_unary_rpc_method_handler( - servicer.ListNotificationConfigs, - request_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.ListNotificationConfigsRequest.FromString, - response_serializer=google_dot_storage_dot_v2_dot_storage__pb2.ListNotificationConfigsResponse.SerializeToString, - ), 'ComposeObject': grpc.unary_unary_rpc_method_handler( servicer.ComposeObject, request_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.ComposeObjectRequest.FromString, @@ -727,36 +586,6 @@ def add_StorageServicer_to_server(servicer, server): request_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.QueryWriteStatusRequest.FromString, response_serializer=google_dot_storage_dot_v2_dot_storage__pb2.QueryWriteStatusResponse.SerializeToString, ), - 'GetServiceAccount': grpc.unary_unary_rpc_method_handler( - servicer.GetServiceAccount, - request_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.GetServiceAccountRequest.FromString, - response_serializer=google_dot_storage_dot_v2_dot_storage__pb2.ServiceAccount.SerializeToString, - ), - 'CreateHmacKey': grpc.unary_unary_rpc_method_handler( - servicer.CreateHmacKey, - request_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.CreateHmacKeyRequest.FromString, - response_serializer=google_dot_storage_dot_v2_dot_storage__pb2.CreateHmacKeyResponse.SerializeToString, - ), - 'DeleteHmacKey': grpc.unary_unary_rpc_method_handler( - servicer.DeleteHmacKey, - request_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.DeleteHmacKeyRequest.FromString, - response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - ), - 'GetHmacKey': grpc.unary_unary_rpc_method_handler( - servicer.GetHmacKey, - request_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.GetHmacKeyRequest.FromString, - response_serializer=google_dot_storage_dot_v2_dot_storage__pb2.HmacKeyMetadata.SerializeToString, - ), - 'ListHmacKeys': grpc.unary_unary_rpc_method_handler( - servicer.ListHmacKeys, - request_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.ListHmacKeysRequest.FromString, - response_serializer=google_dot_storage_dot_v2_dot_storage__pb2.ListHmacKeysResponse.SerializeToString, - ), - 'UpdateHmacKey': grpc.unary_unary_rpc_method_handler( - servicer.UpdateHmacKey, - request_deserializer=google_dot_storage_dot_v2_dot_storage__pb2.UpdateHmacKeyRequest.FromString, - response_serializer=google_dot_storage_dot_v2_dot_storage__pb2.HmacKeyMetadata.SerializeToString, - ), } generic_handler = grpc.method_handlers_generic_handler( 'google.storage.v2.Storage', rpc_method_handlers) @@ -1032,114 +861,6 @@ def UpdateBucket(request, metadata, _registered_method=True) - @staticmethod - def DeleteNotificationConfig(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/google.storage.v2.Storage/DeleteNotificationConfig', - google_dot_storage_dot_v2_dot_storage__pb2.DeleteNotificationConfigRequest.SerializeToString, - google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def GetNotificationConfig(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/google.storage.v2.Storage/GetNotificationConfig', - google_dot_storage_dot_v2_dot_storage__pb2.GetNotificationConfigRequest.SerializeToString, - google_dot_storage_dot_v2_dot_storage__pb2.NotificationConfig.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def CreateNotificationConfig(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/google.storage.v2.Storage/CreateNotificationConfig', - google_dot_storage_dot_v2_dot_storage__pb2.CreateNotificationConfigRequest.SerializeToString, - google_dot_storage_dot_v2_dot_storage__pb2.NotificationConfig.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def ListNotificationConfigs(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/google.storage.v2.Storage/ListNotificationConfigs', - google_dot_storage_dot_v2_dot_storage__pb2.ListNotificationConfigsRequest.SerializeToString, - google_dot_storage_dot_v2_dot_storage__pb2.ListNotificationConfigsResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - @staticmethod def ComposeObject(request, target, @@ -1490,165 +1211,3 @@ def QueryWriteStatus(request, timeout, metadata, _registered_method=True) - - @staticmethod - def GetServiceAccount(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/google.storage.v2.Storage/GetServiceAccount', - google_dot_storage_dot_v2_dot_storage__pb2.GetServiceAccountRequest.SerializeToString, - google_dot_storage_dot_v2_dot_storage__pb2.ServiceAccount.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def CreateHmacKey(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/google.storage.v2.Storage/CreateHmacKey', - google_dot_storage_dot_v2_dot_storage__pb2.CreateHmacKeyRequest.SerializeToString, - google_dot_storage_dot_v2_dot_storage__pb2.CreateHmacKeyResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def DeleteHmacKey(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/google.storage.v2.Storage/DeleteHmacKey', - google_dot_storage_dot_v2_dot_storage__pb2.DeleteHmacKeyRequest.SerializeToString, - google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def GetHmacKey(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/google.storage.v2.Storage/GetHmacKey', - google_dot_storage_dot_v2_dot_storage__pb2.GetHmacKeyRequest.SerializeToString, - google_dot_storage_dot_v2_dot_storage__pb2.HmacKeyMetadata.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def ListHmacKeys(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/google.storage.v2.Storage/ListHmacKeys', - google_dot_storage_dot_v2_dot_storage__pb2.ListHmacKeysRequest.SerializeToString, - google_dot_storage_dot_v2_dot_storage__pb2.ListHmacKeysResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def UpdateHmacKey(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/google.storage.v2.Storage/UpdateHmacKey', - google_dot_storage_dot_v2_dot_storage__pb2.UpdateHmacKeyRequest.SerializeToString, - google_dot_storage_dot_v2_dot_storage__pb2.HmacKeyMetadata.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) From f8855b24aef4f60d95ef2f7f6a16ec11d9590d7d Mon Sep 17 00:00:00 2001 From: cojenco Date: Thu, 24 Oct 2024 14:44:17 -0700 Subject: [PATCH 2/2] chore: remove Notification, HMAC, SA grpc support (#693) * chore: remove Notification, HMAC, SA grpc support * fix lint --- testbench/database.py | 6 + testbench/grpc_server.py | 183 --------------- tests/test_grpc_server.py | 466 -------------------------------------- 3 files changed, 6 insertions(+), 649 deletions(-) diff --git a/testbench/database.py b/testbench/database.py index 30cd0284..65412f11 100644 --- a/testbench/database.py +++ b/testbench/database.py @@ -606,6 +606,11 @@ def __validate_grpc_method_implemented_retry(self, method): "storage.default_object_acl.insert", "storage.default_object_acl.patch", "storage.default_object_acl.update", + "storage.hmacKey.create", + "storage.hmacKey.delete", + "storage.hmacKey.get", + "storage.hmacKey.list", + "storage.hmacKey.update", "storage.object_acl.get", "storage.object_acl.list", "storage.object_acl.delete", @@ -616,6 +621,7 @@ def __validate_grpc_method_implemented_retry(self, method): "storage.notifications.get", "storage.notifications.insert", "storage.notifications.list", + "storage.serviceaccount.get", } if method in not_supported_grpc_w_retry: testbench.error.unimplemented( diff --git a/testbench/grpc_server.py b/testbench/grpc_server.py index 6087ef37..4a2370ec 100644 --- a/testbench/grpc_server.py +++ b/testbench/grpc_server.py @@ -352,72 +352,6 @@ def UpdateBucket(self, request, context): bucket.metadata.update_time.FromDatetime(now) return bucket.metadata - def _notification_from_rest(self, rest, bucket_name): - # We need to make a copy before changing any values - rest = rest.copy() - rest.pop("kind") - rest["name"] = bucket_name + "/notificationConfigs/" + rest.pop("id") - rest["topic"] = "//pubsub.googleapis.com/" + rest["topic"] - return json_format.ParseDict(rest, storage_pb2.NotificationConfig()) - - def _decompose_notification_name(self, notification_name, context): - loc = notification_name.find("/notificationConfigs/") - if loc == -1: - testbench.error.invalid( - "GetNotificationConfig() malformed notification name [%s]" - % notification_name, - context, - ) - return (None, None) - bucket_name = notification_name[:loc] - notification_id = notification_name[loc + len("/notificationConfigs/") :] - return (bucket_name, notification_id) - - def DeleteNotificationConfig(self, request, context): - bucket_name, notification_id = self._decompose_notification_name( - request.name, context - ) - if bucket_name is None: - return None - bucket = self.db.get_bucket(bucket_name, context) - bucket.delete_notification(notification_id, context) - return empty_pb2.Empty() - - def GetNotificationConfig(self, request, context): - bucket_name, notification_id = self._decompose_notification_name( - request.name, context - ) - if bucket_name is None: - return None - bucket = self.db.get_bucket(bucket_name, context) - rest = bucket.get_notification(notification_id, context) - return self._notification_from_rest(rest, bucket_name) - - def CreateNotificationConfig(self, request, context): - pattern = "^//pubsub.googleapis.com/projects/[^/]+/topics/[^/]+$" - if re.match(pattern, request.notification_config.topic) is None: - return testbench.error.invalid( - "topic names must be in" - + " //pubsub.googleapis.com/projects/{project-identifier}/topics/{my-topic}" - + " format, got=%s" % request.notification_config.topic, - context, - ) - bucket = self.db.get_bucket(request.parent, context) - notification = json_format.MessageToDict(request.notification_config) - # Convert topic names to REST format - notification["topic"] = notification["topic"][len("//pubsub.googleapis.com/") :] - rest = bucket.insert_notification(json.dumps(notification), context) - return self._notification_from_rest(rest, request.parent) - - def ListNotificationConfigs(self, request, context): - bucket = self.db.get_bucket(request.parent, context) - items = bucket.list_notifications(context).get("items", []) - return storage_pb2.ListNotificationConfigsResponse( - notification_configs=[ - self._notification_from_rest(r, request.parent) for r in items - ] - ) - @retry_test(method="storage.objects.compose") def ComposeObject(self, request, context): if len(request.source_objects) == 0: @@ -815,123 +749,6 @@ def QueryWriteStatus(self, request, context): return storage_pb2.QueryWriteStatusResponse(resource=upload.blob.metadata) return storage_pb2.QueryWriteStatusResponse(persisted_size=len(upload.media)) - @retry_test("storage.serviceaccount.get") - def GetServiceAccount(self, request, context): - if not request.project.startswith("projects/"): - return testbench.error.invalid( - "project name must start with projects/, got=%s" % request.project, - context, - ) - project_id = request.project[len("projects/") :] - project = self.db.get_project(project_id) - return storage_pb2.ServiceAccount(email_address=project.service_account_email()) - - def _hmac_key_metadata_from_rest(self, rest): - rest = rest.copy() - rest.pop("kind", None) - rest["project"] = "projects/" + rest.pop("projectId") - rest["create_time"] = rest.pop("timeCreated") - rest["update_time"] = rest.pop("updated") - return json_format.ParseDict(rest, storage_pb2.HmacKeyMetadata()) - - @retry_test(method="storage.hmacKey.create") - def CreateHmacKey(self, request, context): - if not request.project.startswith("projects/"): - return testbench.error.invalid( - "project name must start with projects/, got=%s" % request.project, - context, - ) - if request.service_account_email == "": - return testbench.error.invalid( - "service account email must be non-empty", context - ) - project_id = request.project[len("projects/") :] - project = self.db.get_project(project_id) - rest = project.insert_hmac_key(request.service_account_email) - return storage_pb2.CreateHmacKeyResponse( - secret_key_bytes=base64.b64decode(rest.get("secret").encode("utf-8")), - metadata=self._hmac_key_metadata_from_rest(rest.get("metadata")), - ) - - @retry_test(method="storage.hmacKey.delete") - def DeleteHmacKey(self, request, context): - if not request.project.startswith("projects/"): - return testbench.error.invalid( - "project name must start with projects/, got=%s" % request.project, - context, - ) - project_id = request.project[len("projects/") :] - project = self.db.get_project(project_id) - project.delete_hmac_key(request.access_id, context) - return empty_pb2.Empty() - - @retry_test("storage.hmacKey.get") - def GetHmacKey(self, request, context): - if not request.project.startswith("projects/"): - return testbench.error.invalid( - "project name must start with projects/, got=%s" % request.project, - context, - ) - project_id = request.project[len("projects/") :] - project = self.db.get_project(project_id) - rest = project.get_hmac_key(request.access_id, context) - return self._hmac_key_metadata_from_rest(rest) - - @retry_test("storage.hmacKey.list") - def ListHmacKeys(self, request, context): - if not request.project.startswith("projects/"): - return testbench.error.invalid( - "project name must start with projects/, got=%s" % request.project, - context, - ) - project_id = request.project[len("projects/") :] - project = self.db.get_project(project_id) - - items = [] - sa_email = request.service_account_email - if len(sa_email) != 0: - service_account = project.service_account(sa_email) - if service_account: - items = service_account.key_items() - else: - for sa in project.service_accounts.values(): - items.extend(sa.key_items()) - - state_filter = lambda x: x.get("state") != "DELETED" - if request.show_deleted_keys: - state_filter = lambda x: True - - return storage_pb2.ListHmacKeysResponse( - hmac_keys=[ - self._hmac_key_metadata_from_rest(i) for i in items if state_filter(i) - ] - ) - - @retry_test(method="storage.hmacKey.update") - def UpdateHmacKey(self, request, context): - if request.update_mask.paths == []: - return testbench.error.invalid( - "UpdateHmacKey() with an empty update mask", context - ) - if request.update_mask.paths != ["state"]: - return testbench.error.invalid( - "UpdateHmacKey() only the `state` field can be modified [%s]" - % ",".join(request.update_mask.paths), - context, - ) - project_id = request.hmac_key.project - if not project_id.startswith("projects/"): - return testbench.error.invalid( - "project name must start with projects/, got=%s" % project_id, context - ) - project_id = project_id[len("projects/") :] - project = self.db.get_project(project_id) - payload = {"state": request.hmac_key.state} - if request.hmac_key.etag != "": - payload["etag"] = request.hmac_key.etag - rest = project.update_hmac_key(request.hmac_key.access_id, payload, context) - return self._hmac_key_metadata_from_rest(rest) - def run(port, database, echo_metadata=False): server = grpc.server(futures.ThreadPoolExecutor(max_workers=1)) diff --git a/tests/test_grpc_server.py b/tests/test_grpc_server.py index 3c178832..bd4e0a49 100755 --- a/tests/test_grpc_server.py +++ b/tests/test_grpc_server.py @@ -638,180 +638,6 @@ def test_update_bucket_soft_delete(self): grpc.StatusCode.INVALID_ARGUMENT, unittest.mock.ANY ) - def test_delete_notification(self): - context = unittest.mock.Mock() - create = self.grpc.CreateNotificationConfig( - storage_pb2.CreateNotificationConfigRequest( - parent="projects/_/buckets/bucket-name", - notification_config=storage_pb2.NotificationConfig( - topic="//pubsub.googleapis.com/projects/test-project-id/topics/test-topic", - custom_attributes={"key": "value"}, - payload_format="JSON_API_V1", - ), - ), - context, - ) - self.assertTrue( - create.name.startswith( - "projects/_/buckets/bucket-name/notificationConfigs/" - ), - msg=create, - ) - - context = unittest.mock.Mock() - _ = self.grpc.DeleteNotificationConfig( - storage_pb2.GetNotificationConfigRequest(name=create.name), context - ) - context.abort.assert_not_called() - - # The code depends on `context.abort()` raising an exception. - context = unittest.mock.Mock() - context.abort = unittest.mock.MagicMock() - context.abort.side_effect = grpc.RpcError() - with self.assertRaises(grpc.RpcError): - _ = self.grpc.GetNotificationConfig( - storage_pb2.GetNotificationConfigRequest(name=create.name), context - ) - context.abort.assert_called_once_with( - grpc.StatusCode.NOT_FOUND, unittest.mock.ANY - ) - - def test_delete_notification_malformed(self): - context = unittest.mock.Mock() - _ = self.grpc.DeleteNotificationConfig( - storage_pb2.GetNotificationConfigRequest(name=""), context - ) - context.abort.assert_called_once_with( - grpc.StatusCode.INVALID_ARGUMENT, unittest.mock.ANY - ) - - def test_get_notification(self): - context = unittest.mock.Mock() - topic_name = ( - "//pubsub.googleapis.com/projects/test-project-id/topics/test-topic" - ) - response = self.grpc.CreateNotificationConfig( - storage_pb2.CreateNotificationConfigRequest( - parent="projects/_/buckets/bucket-name", - notification_config=storage_pb2.NotificationConfig( - topic=topic_name, - custom_attributes={"key": "value"}, - payload_format="JSON_API_V1", - ), - ), - context, - ) - self.assertTrue( - response.name.startswith( - "projects/_/buckets/bucket-name/notificationConfigs/" - ), - msg=response, - ) - - context = unittest.mock.Mock() - get = self.grpc.GetNotificationConfig( - storage_pb2.GetNotificationConfigRequest(name=response.name), context - ) - self.assertEqual(get, response) - self.assertEqual(get.topic, topic_name) - - def test_get_notification_malformed(self): - context = unittest.mock.Mock() - _ = self.grpc.GetNotificationConfig( - storage_pb2.GetNotificationConfigRequest( - name="projects/_/buckets/bucket-name/" - ), - context, - ) - context.abort.assert_called_once_with( - grpc.StatusCode.INVALID_ARGUMENT, unittest.mock.ANY - ) - - def test_create_notification(self): - topic_name = ( - "//pubsub.googleapis.com/projects/test-project-id/topics/test-topic" - ) - context = unittest.mock.Mock() - response = self.grpc.CreateNotificationConfig( - storage_pb2.CreateNotificationConfigRequest( - parent="projects/_/buckets/bucket-name", - notification_config=storage_pb2.NotificationConfig( - topic=topic_name, - custom_attributes={"key": "value"}, - payload_format="JSON_API_V1", - ), - ), - context, - ) - self.assertTrue( - response.name.startswith( - "projects/_/buckets/bucket-name/notificationConfigs/" - ), - msg=response, - ) - self.assertEqual(response.topic, topic_name) - - # Invalid topic names return an error - invalid_topic_names = [ - "", - "//pubsub.googleapis.com", - "//pubsub.googleapis.com/", - "//pubsub.googleapis.com/projects", - "//pubsub.googleapis.com/projects/", - "//pubsub.googleapis.com/projects/test-project-id", - "//pubsub.googleapis.com/projects/test-project-id/", - "//pubsub.googleapis.com/projects/test-project-id/topics", - "//pubsub.googleapis.com/projects/test-project-id/topics/", - ] - for topic in invalid_topic_names: - context = unittest.mock.Mock() - context.abort = unittest.mock.MagicMock() - context.abort.side_effect = grpc.RpcError() - with self.assertRaises(grpc.RpcError): - _ = self.grpc.CreateNotificationConfig( - storage_pb2.CreateNotificationConfigRequest( - parent="projects/_/buckets/bucket-name", - notification_config=storage_pb2.NotificationConfig( - topic=topic, payload_format="JSON_API_V1" - ), - ), - context, - ) - context.abort.assert_called_once_with( - grpc.StatusCode.INVALID_ARGUMENT, unittest.mock.ANY - ) - - def test_list_notifications(self): - expected = set() - topics = [ - "//pubsub.googleapis.com/projects/test-project-id/topics/test-topic-1", - "//pubsub.googleapis.com/projects/test-project-id/topics/test-topic-2", - ] - for topic in topics: - context = unittest.mock.Mock() - response = self.grpc.CreateNotificationConfig( - storage_pb2.CreateNotificationConfigRequest( - parent="projects/_/buckets/bucket-name", - notification_config=storage_pb2.NotificationConfig( - topic=topic, - custom_attributes={"key": "value"}, - payload_format="JSON_API_V1", - ), - ), - context, - ) - expected.add(response.name) - - context = unittest.mock.Mock() - response = self.grpc.ListNotificationConfigs( - storage_pb2.ListNotificationConfigsRequest( - parent="projects/_/buckets/bucket-name" - ), - context, - ) - names = {n.name for n in response.notification_configs} - self.assertEqual(names, expected) - def test_compose_object(self): payloads = { "fox": b"The quick brown fox jumps over the lazy dog\n", @@ -1867,298 +1693,6 @@ def test_list_objects_trailing_delimiters(self): response_names = [o.name for o in response.objects] self.assertEqual(response_names, case["expected"], msg=case) - def test_get_service_account(self): - context = unittest.mock.Mock() - response = self.grpc.GetServiceAccount( - storage_pb2.GetServiceAccountRequest(project="projects/test-project"), - context, - ) - self.assertIn("@", response.email_address) - - def test_get_service_account_failure(self): - context = unittest.mock.Mock() - _ = self.grpc.GetServiceAccount( - storage_pb2.GetServiceAccountRequest(project="invalid-format"), - context, - ) - context.abort.assert_called_once_with( - grpc.StatusCode.INVALID_ARGUMENT, unittest.mock.ANY - ) - - def test_create_hmac_key(self): - sa_email = "test-sa@test-project-id.iam.gserviceaccount.com" - context = unittest.mock.Mock() - response = self.grpc.CreateHmacKey( - storage_pb2.CreateHmacKeyRequest( - project="projects/test-project-id", - service_account_email=sa_email, - ), - context, - ) - self.assertNotEqual(response.secret_key_bytes, "") - self.assertNotEqual(response.metadata.id, "") - self.assertNotEqual(response.metadata.access_id, "") - self.assertEqual(response.metadata.service_account_email, sa_email) - self.assertNotEqual(response.metadata.etag, "") - - context = unittest.mock.Mock() - _ = self.grpc.CreateHmacKey( - storage_pb2.CreateHmacKeyRequest( - project="invalid-project-name-format", - service_account_email=sa_email, - ), - context, - ) - context.abort.assert_called_once_with( - grpc.StatusCode.INVALID_ARGUMENT, unittest.mock.ANY - ) - - # Missing service account emails should fail - context = unittest.mock.Mock() - _ = self.grpc.CreateHmacKey( - storage_pb2.CreateHmacKeyRequest( - project="projects/test-project-id", - ), - context, - ) - context.abort.assert_called_once_with( - grpc.StatusCode.INVALID_ARGUMENT, unittest.mock.ANY - ) - - def test_delete_hmac_key(self): - sa_email = "test-sa@test-project-id.iam.gserviceaccount.com" - context = unittest.mock.Mock() - create = self.grpc.CreateHmacKey( - storage_pb2.CreateHmacKeyRequest( - project="projects/test-project-id", - service_account_email=sa_email, - ), - context, - ) - - metadata = storage_pb2.HmacKeyMetadata() - metadata.CopyFrom(create.metadata) - metadata.state = "INACTIVE" - - context = unittest.mock.Mock() - response = self.grpc.UpdateHmacKey( - storage_pb2.UpdateHmacKeyRequest( - hmac_key=metadata, update_mask=field_mask_pb2.FieldMask(paths=["state"]) - ), - context, - ) - self.assertEqual(response.state, "INACTIVE") - - context = unittest.mock.Mock() - _ = self.grpc.DeleteHmacKey( - storage_pb2.DeleteHmacKeyRequest( - access_id=metadata.access_id, project=metadata.project - ), - context, - ) - context.abort.assert_not_called() - - # The code depends on `context.abort()` raising an exception. - context.abort = unittest.mock.MagicMock() - context.abort.side_effect = grpc.RpcError() - with self.assertRaises(grpc.RpcError): - _ = self.grpc.GetHmacKey( - storage_pb2.GetHmacKeyRequest( - access_id=metadata.access_id, project="projects/test-project-id" - ), - context, - ) - context.abort.assert_called_once_with( - grpc.StatusCode.NOT_FOUND, unittest.mock.ANY - ) - - # Missing or malformed project id is an error - context = unittest.mock.Mock() - _ = self.grpc.DeleteHmacKey( - storage_pb2.DeleteHmacKeyRequest(access_id=metadata.access_id), - context, - ) - context.abort.assert_called_once_with( - grpc.StatusCode.INVALID_ARGUMENT, unittest.mock.ANY - ) - - def test_get_hmac_key(self): - sa_email = "test-sa@test-project-id.iam.gserviceaccount.com" - context = unittest.mock.Mock() - create = self.grpc.CreateHmacKey( - storage_pb2.CreateHmacKeyRequest( - project="projects/test-project-id", - service_account_email=sa_email, - ), - context, - ) - - context = unittest.mock.Mock() - response = self.grpc.GetHmacKey( - storage_pb2.GetHmacKeyRequest( - access_id=create.metadata.access_id, project="projects/test-project-id" - ), - context, - ) - self.assertEqual(response, create.metadata) - - # Missing or malformed project id is an error - context = unittest.mock.Mock() - _ = self.grpc.GetHmacKey( - storage_pb2.GetHmacKeyRequest(access_id=create.metadata.access_id), - context, - ) - context.abort.assert_called_once_with( - grpc.StatusCode.INVALID_ARGUMENT, unittest.mock.ANY - ) - - def test_list_hmac_keys(self): - # Create several keys for two different projects. - expected = [] - sa_emails = [ - "test-sa-1@test-project-id.iam.gserviceaccount.com", - "test-sa-2@test-project-id.iam.gserviceaccount.com", - ] - for sa in sa_emails: - for _ in [1, 2]: - context = unittest.mock.Mock() - create = self.grpc.CreateHmacKey( - storage_pb2.CreateHmacKeyRequest( - project="projects/test-project-id", - service_account_email=sa, - ), - context, - ) - expected.append(create.metadata) - - # First test without any filtering - context = unittest.mock.Mock() - response = self.grpc.ListHmacKeys( - storage_pb2.ListHmacKeysRequest(project="projects/test-project-id"), - context, - ) - expected_access_ids = {k.access_id for k in expected} - self.assertEqual({k.access_id for k in response.hmac_keys}, expected_access_ids) - - # Then only for one of the sa emails - context = unittest.mock.Mock() - sa_filter = sa_emails[0] - response = self.grpc.ListHmacKeys( - storage_pb2.ListHmacKeysRequest( - project="projects/test-project-id", service_account_email=sa_filter - ), - context, - ) - expected_access_ids = { - k.access_id for k in expected if k.service_account_email == sa_filter - } - self.assertEqual({k.access_id for k in response.hmac_keys}, expected_access_ids) - - # Include deleted accounts (there are none, but should work) - context = unittest.mock.Mock() - sa_filter = sa_emails[0] - response = self.grpc.ListHmacKeys( - storage_pb2.ListHmacKeysRequest( - project="projects/test-project-id", - service_account_email=sa_filter, - show_deleted_keys=True, - ), - context, - ) - expected_access_ids = { - k.access_id for k in expected if k.service_account_email == sa_filter - } - self.assertEqual({k.access_id for k in response.hmac_keys}, expected_access_ids) - - # Missing or malformed project id is an error - context = unittest.mock.Mock() - _ = self.grpc.ListHmacKeys(storage_pb2.ListHmacKeysRequest(), context) - context.abort.assert_called_once_with( - grpc.StatusCode.INVALID_ARGUMENT, unittest.mock.ANY - ) - - def test_update_hmac_key(self): - sa_email = "test-sa@test-project-id.iam.gserviceaccount.com" - context = unittest.mock.Mock() - create = self.grpc.CreateHmacKey( - storage_pb2.CreateHmacKeyRequest( - project="projects/test-project-id", - service_account_email=sa_email, - ), - context, - ) - - metadata = storage_pb2.HmacKeyMetadata() - metadata.CopyFrom(create.metadata) - metadata.state = "INACTIVE" - - context = unittest.mock.Mock() - response = self.grpc.UpdateHmacKey( - storage_pb2.UpdateHmacKeyRequest( - hmac_key=metadata, update_mask=field_mask_pb2.FieldMask(paths=["state"]) - ), - context, - ) - self.assertEqual(response.id, metadata.id) - self.assertEqual(response.access_id, metadata.access_id) - self.assertEqual(response.project, metadata.project) - self.assertEqual(response.service_account_email, metadata.service_account_email) - self.assertEqual(response.state, metadata.state) - self.assertEqual(response.create_time, metadata.create_time) - - # Verify a missing, empty, or invalid update mask returns an error - for mask in [[], ["not-state"], ["state", "and-more"]]: - context = unittest.mock.Mock() - _ = self.grpc.UpdateHmacKey( - storage_pb2.UpdateHmacKeyRequest( - hmac_key=metadata, update_mask=field_mask_pb2.FieldMask(paths=mask) - ), - context, - ) - context.abort.assert_called_once_with( - grpc.StatusCode.INVALID_ARGUMENT, unittest.mock.ANY - ) - - # An empty metadata attribute is also an error - context = unittest.mock.Mock() - _ = self.grpc.UpdateHmacKey( - storage_pb2.UpdateHmacKeyRequest( - hmac_key=storage_pb2.HmacKeyMetadata(), - update_mask=field_mask_pb2.FieldMask(paths=["state"]), - ), - context, - ) - context.abort.assert_called_once_with( - grpc.StatusCode.INVALID_ARGUMENT, unittest.mock.ANY - ) - - def test_update_hmac_key_bad_etag(self): - sa_email = "test-sa@test-project-id.iam.gserviceaccount.com" - context = unittest.mock.Mock() - create = self.grpc.CreateHmacKey( - storage_pb2.CreateHmacKeyRequest( - project="projects/test-project-id", - service_account_email=sa_email, - ), - context, - ) - - metadata = storage_pb2.HmacKeyMetadata() - metadata.CopyFrom(create.metadata) - metadata.state = "INACTIVE" - metadata.etag = "test-only-invalid" - - context = unittest.mock.Mock() - response = self.grpc.UpdateHmacKey( - storage_pb2.UpdateHmacKeyRequest( - hmac_key=metadata, update_mask=field_mask_pb2.FieldMask(paths=["state"]) - ), - context, - ) - context.abort.assert_called_once_with( - grpc.StatusCode.FAILED_PRECONDITION, unittest.mock.ANY - ) - def test_run(self): port, server = testbench.grpc_server.run(0, self.db) self.assertNotEqual(port, 0)