Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-googleapis-common-protos for 
openSUSE:Factory checked in at 2026-10-09 21:46:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-googleapis-common-protos (Old)
 and      
/work/SRC/openSUSE:Factory/.python-googleapis-common-protos.new.3698736 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-googleapis-common-protos"

Fri Oct  9 21:46:13 2026 rev:38 rq:1383809 version:1.75.5

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-googleapis-common-protos/python-googleapis-common-protos.changes
  2026-09-17 15:25:23.278999054 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-googleapis-common-protos.new.3698736/python-googleapis-common-protos.changes
     2026-10-09 21:47:40.111083415 +0200
@@ -1,0 +2,9 @@
+Fri Oct  9 09:22:19 UTC 2026 - John Paul Adrian Glaubitz 
<[email protected]>
+
+- Update to 1.75.5
+  * resolve error where google/longrunning/operations.proto is missing (#18477)
+- from version 1.75.4
+  * regenerate gencode with protobuf 6.33.5 (#18461)
+- Update BuildRequires and Requires from pyproject.toml
+
+-------------------------------------------------------------------

Old:
----
  googleapis_common_protos-1.75.3.tar.gz

New:
----
  googleapis_common_protos-1.75.5.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-googleapis-common-protos.spec ++++++
--- /var/tmp/diff_new_pack.5Y58SL/_old  2026-10-09 21:47:40.726109208 +0200
+++ /var/tmp/diff_new_pack.5Y58SL/_new  2026-10-09 21:47:40.728109292 +0200
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-googleapis-common-protos
-Version:        1.75.3
+Version:        1.75.5
 Release:        0
 Summary:        Common protobufs used in Google APIs
 License:        Apache-2.0
@@ -26,14 +26,15 @@
 URL:            
https://github.com/googleapis/google-cloud-python/tree/main/packages/googleapis-common-protos
 Source:         
https://files.pythonhosted.org/packages/source/g/googleapis_common_protos/googleapis_common_protos-%{version}.tar.gz
 Source1:        test_google_api_error_reason.py
+BuildRequires:  %{python_module grpcio >= 1.59.0}
 BuildRequires:  %{python_module pip}
 BuildRequires:  %{python_module protobuf >= 6.33.5}
 BuildRequires:  %{python_module pytest}
 BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
+Requires:       python-grpcio >= 1.59.0
 Requires:       python-protobuf >= 6.33.5
-Recommends:     python-grpcio >= 1.59.0
 BuildArch:      noarch
 %if 0%{?sle_version} >= 150400
 Obsoletes:      python3-googleapis-common-protos < %{version}

++++++ googleapis_common_protos-1.75.3.tar.gz -> 
googleapis_common_protos-1.75.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/googleapis_common_protos-1.75.3/PKG-INFO 
new/googleapis_common_protos-1.75.5/PKG-INFO
--- old/googleapis_common_protos-1.75.3/PKG-INFO        2026-09-04 
00:03:39.869310900 +0200
+++ new/googleapis_common_protos-1.75.5/PKG-INFO        2026-09-29 
20:59:47.414398400 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: googleapis-common-protos
-Version: 1.75.3
+Version: 1.75.5
 Summary: Common protobufs used in Google APIs
 Author-email: Google LLC <[email protected]>
 License-Expression: Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/googleapis_common_protos-1.75.3/google/gapic/metadata/gapic_metadata_pb2.py 
new/googleapis_common_protos-1.75.5/google/gapic/metadata/gapic_metadata_pb2.py
--- 
old/googleapis_common_protos-1.75.3/google/gapic/metadata/gapic_metadata_pb2.py 
    2026-09-03 23:58:48.400189000 +0200
+++ 
new/googleapis_common_protos-1.75.5/google/gapic/metadata/gapic_metadata_pb2.py 
    2026-09-29 20:56:55.927580000 +0200
@@ -15,15 +15,25 @@
 # limitations under the License.
 
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
+# NO CHECKED-IN PROTOBUF GENCODE
 # source: google/gapic/metadata/gapic_metadata.proto
-# Protobuf Python Version: 4.25.3
+# Protobuf Python Version: 6.33.5
 """Generated protocol buffer code."""
 
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import runtime_version as _runtime_version
 from google.protobuf import symbol_database as _symbol_database
 from google.protobuf.internal import builder as _builder
 
+_runtime_version.ValidateProtobufRuntimeVersion(
+    _runtime_version.Domain.PUBLIC,
+    6,
+    33,
+    5,
+    "",
+    "google/gapic/metadata/gapic_metadata.proto",
+)
 # @@protoc_insertion_point(imports)
 
 _sym_db = _symbol_database.Default()
@@ -38,18 +48,18 @@
 _builder.BuildTopDescriptorsAndMessages(
     DESCRIPTOR, "google.gapic.metadata.gapic_metadata_pb2", _globals
 )
-if _descriptor._USE_C_DESCRIPTORS == False:
-    _globals["DESCRIPTOR"]._options = None
+if not _descriptor._USE_C_DESCRIPTORS:
+    _globals["DESCRIPTOR"]._loaded_options = None
     _globals[
         "DESCRIPTOR"
     ]._serialized_options = 
b"\n\031com.google.gapic.metadataB\022GapicMetadataProtoP\001Z=google.golang.org/genproto/googleapis/gapic/metadata;metadata\252\002\025Google.Gapic.Metadata\312\002\025Google\\Gapic\\Metadata\352\002\027Google::Gapic::Metadata"
-    _globals["_GAPICMETADATA_SERVICESENTRY"]._options = None
+    _globals["_GAPICMETADATA_SERVICESENTRY"]._loaded_options = None
     _globals["_GAPICMETADATA_SERVICESENTRY"]._serialized_options = b"8\001"
-    _globals["_GAPICMETADATA_SERVICEFORTRANSPORT_CLIENTSENTRY"]._options = None
+    
_globals["_GAPICMETADATA_SERVICEFORTRANSPORT_CLIENTSENTRY"]._loaded_options = 
None
     _globals[
         "_GAPICMETADATA_SERVICEFORTRANSPORT_CLIENTSENTRY"
     ]._serialized_options = b"8\001"
-    _globals["_GAPICMETADATA_SERVICEASCLIENT_RPCSENTRY"]._options = None
+    _globals["_GAPICMETADATA_SERVICEASCLIENT_RPCSENTRY"]._loaded_options = None
     _globals["_GAPICMETADATA_SERVICEASCLIENT_RPCSENTRY"]._serialized_options = 
b"8\001"
     _globals["_GAPICMETADATA"]._serialized_start = 70
     _globals["_GAPICMETADATA"]._serialized_end = 843
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/googleapis_common_protos-1.75.3/google/gapic/metadata/gapic_metadata_pb2.pyi
 
new/googleapis_common_protos-1.75.5/google/gapic/metadata/gapic_metadata_pb2.pyi
--- 
old/googleapis_common_protos-1.75.3/google/gapic/metadata/gapic_metadata_pb2.pyi
    2026-09-03 23:58:50.254190700 +0200
+++ 
new/googleapis_common_protos-1.75.5/google/gapic/metadata/gapic_metadata_pb2.pyi
    2026-09-29 20:56:54.084581900 +0200
@@ -12,9 +12,9 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+from collections.abc import Iterable as _Iterable
+from collections.abc import Mapping as _Mapping
 from typing import ClassVar as _ClassVar
-from typing import Iterable as _Iterable
-from typing import Mapping as _Mapping
 from typing import Optional as _Optional
 from typing import Union as _Union
 
@@ -33,7 +33,6 @@
         "library_package",
         "services",
     )
-
     class ServicesEntry(_message.Message):
         __slots__ = ("key", "value")
         KEY_FIELD_NUMBER: _ClassVar[int]
@@ -48,7 +47,6 @@
 
     class ServiceForTransport(_message.Message):
         __slots__ = ("clients", "api_version")
-
         class ClientsEntry(_message.Message):
             __slots__ = ("key", "value")
             KEY_FIELD_NUMBER: _ClassVar[int]
@@ -73,7 +71,6 @@
 
     class ServiceAsClient(_message.Message):
         __slots__ = ("library_client", "rpcs")
-
         class RpcsEntry(_message.Message):
             __slots__ = ("key", "value")
             KEY_FIELD_NUMBER: _ClassVar[int]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/googleapis_common_protos-1.75.3/google/longrunning/operations_proto.proto 
new/googleapis_common_protos-1.75.5/google/longrunning/operations_proto.proto
--- 
old/googleapis_common_protos-1.75.3/google/longrunning/operations_proto.proto   
    2026-09-03 23:58:45.944748000 +0200
+++ 
new/googleapis_common_protos-1.75.5/google/longrunning/operations_proto.proto   
    2026-09-29 20:56:54.218581700 +0200
@@ -18,13 +18,13 @@
 
 import "google/api/annotations.proto";
 import "google/api/client.proto";
+import "google/api/field_behavior.proto";
 import "google/protobuf/any.proto";
 import "google/protobuf/descriptor.proto";
 import "google/protobuf/duration.proto";
 import "google/protobuf/empty.proto";
 import "google/rpc/status.proto";
 
-option cc_enable_arenas = true;
 option csharp_namespace = "Google.LongRunning";
 option go_package = 
"cloud.google.com/go/longrunning/autogen/longrunningpb;longrunningpb";
 option java_multiple_files = true;
@@ -176,6 +176,18 @@
 
   // The standard list page token.
   string page_token = 3;
+
+  // When set to `true`, operations that are reachable are returned as normal,
+  // and those that are unreachable are returned in the
+  // [ListOperationsResponse.unreachable] field.
+  //
+  // This can only be `true` when reading across collections e.g. when `parent`
+  // is set to `"projects/example/locations/-"`.
+  //
+  // This field is not by default supported and will result in an
+  // `UNIMPLEMENTED` error if set unless explicitly documented otherwise in
+  // service or product specific documentation.
+  bool return_partial_success = 5;
 }
 
 // The response message for
@@ -186,6 +198,13 @@
 
   // The standard List next-page token.
   string next_page_token = 2;
+
+  // Unordered list. Unreachable resources. Populated when the request sets
+  // `ListOperationsRequest.return_partial_success` and reads across
+  // collections e.g. when attempting to list all resources across all 
supported
+  // locations.
+  repeated string unreachable = 3
+      [(google.api.field_behavior) = UNORDERED_LIST];
 }
 
 // The request message for
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/googleapis_common_protos-1.75.3/google/longrunning/operations_proto_pb2.py 
new/googleapis_common_protos-1.75.5/google/longrunning/operations_proto_pb2.py
--- 
old/googleapis_common_protos-1.75.3/google/longrunning/operations_proto_pb2.py  
    2026-09-03 23:58:46.945935500 +0200
+++ 
new/googleapis_common_protos-1.75.5/google/longrunning/operations_proto_pb2.py  
    2026-09-29 20:56:55.204580800 +0200
@@ -15,15 +15,20 @@
 # limitations under the License.
 
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
+# NO CHECKED-IN PROTOBUF GENCODE
 # source: google/longrunning/operations.proto
-# Protobuf Python Version: 4.25.3
+# Protobuf Python Version: 6.33.5
 """Generated protocol buffer code."""
 
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import runtime_version as _runtime_version
 from google.protobuf import symbol_database as _symbol_database
 from google.protobuf.internal import builder as _builder
 
+_runtime_version.ValidateProtobufRuntimeVersion(
+    _runtime_version.Domain.PUBLIC, 6, 33, 5, "", 
"google/longrunning/operations.proto"
+)
 # @@protoc_insertion_point(imports)
 
 _sym_db = _symbol_database.Default()
@@ -36,10 +41,11 @@
 
 from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
 from google.api import client_pb2 as google_dot_api_dot_client__pb2
+from google.api import field_behavior_pb2 as 
google_dot_api_dot_field__behavior__pb2
 from google.rpc import status_pb2 as google_dot_rpc_dot_status__pb2
 
 DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
-    
b'\n#google/longrunning/operations.proto\x12\x12google.longrunning\x1a\x1cgoogle/api/annotations.proto\x1a\x17google/api/client.proto\x1a\x19google/protobuf/any.proto\x1a
 
google/protobuf/descriptor.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x17google/rpc/status.proto"\xa8\x01\n\tOperation\x12\x0c\n\x04name\x18\x01
 \x01(\t\x12&\n\x08metadata\x18\x02 
\x01(\x0b\x32\x14.google.protobuf.Any\x12\x0c\n\x04\x64one\x18\x03 
\x01(\x08\x12#\n\x05\x65rror\x18\x04 
\x01(\x0b\x32\x12.google.rpc.StatusH\x00\x12(\n\x08response\x18\x05 
\x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x42\x08\n\x06result"#\n\x13GetOperationRequest\x12\x0c\n\x04name\x18\x01
 \x01(\t"\\\n\x15ListOperationsRequest\x12\x0c\n\x04name\x18\x04 
\x01(\t\x12\x0e\n\x06\x66ilter\x18\x01 \x01(\t\x12\x11\n\tpage_size\x18\x02 
\x01(\x05\x12\x12\n\npage_token\x18\x03 
\x01(\t"d\n\x16ListOperationsResponse\x12\x31\n\noperations\x18\x01 
\x03(\x0b\x32\x1d.google.longrunning.Operation\x12\x17\n\x0fnext_p
 age_token\x18\x02 
\x01(\t"&\n\x16\x43\x61ncelOperationRequest\x12\x0c\n\x04name\x18\x01 
\x01(\t"&\n\x16\x44\x65leteOperationRequest\x12\x0c\n\x04name\x18\x01 
\x01(\t"P\n\x14WaitOperationRequest\x12\x0c\n\x04name\x18\x01 
\x01(\t\x12*\n\x07timeout\x18\x02 
\x01(\x0b\x32\x19.google.protobuf.Duration"=\n\rOperationInfo\x12\x15\n\rresponse_type\x18\x01
 \x01(\t\x12\x15\n\rmetadata_type\x18\x02 
\x01(\t2\xaa\x05\n\nOperations\x12\x94\x01\n\x0eListOperations\x12).google.longrunning.ListOperationsRequest\x1a*.google.longrunning.ListOperationsResponse"+\xda\x41\x0bname,filter\x82\xd3\xe4\x93\x02\x17\x12\x15/v1/{name=operations}\x12\x7f\n\x0cGetOperation\x12\'.google.longrunning.GetOperationRequest\x1a\x1d.google.longrunning.Operation"\'\xda\x41\x04name\x82\xd3\xe4\x93\x02\x1a\x12\x18/v1/{name=operations/**}\x12~\n\x0f\x44\x65leteOperation\x12*.google.longrunning.DeleteOperationRequest\x1a\x16.google.protobuf.Empty"\'\xda\x41\x04name\x82\xd3\xe4\x93\x02\x1a*\x18/v1/{name=operations/**}\x12\x88\x
 
01\n\x0f\x43\x61ncelOperation\x12*.google.longrunning.CancelOperationRequest\x1a\x16.google.protobuf.Empty"1\xda\x41\x04name\x82\xd3\xe4\x93\x02$"\x1f/v1/{name=operations/**}:cancel:\x01*\x12Z\n\rWaitOperation\x12(.google.longrunning.WaitOperationRequest\x1a\x1d.google.longrunning.Operation"\x00\x1a\x1d\xca\x41\x1alongrunning.googleapis.com:Z\n\x0eoperation_info\x12\x1e.google.protobuf.MethodOptions\x18\x99\x08
 
\x01(\x0b\x32!.google.longrunning.OperationInfoB\xa5\x01\n\x16\x63om.google.longrunningB\x0fOperationsProtoP\x01ZCcloud.google.com/go/longrunning/autogen/longrunningpb;longrunningpb\xf8\x01\x01\xa2\x02\x05GLRUN\xaa\x02\x12Google.LongRunning\xca\x02\x12Google\\LongRunningb\x06proto3'
+    
b'\n#google/longrunning/operations.proto\x12\x12google.longrunning\x1a\x1cgoogle/api/annotations.proto\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/protobuf/any.proto\x1a
 
google/protobuf/descriptor.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x17google/rpc/status.proto"\xa8\x01\n\tOperation\x12\x0c\n\x04name\x18\x01
 \x01(\t\x12&\n\x08metadata\x18\x02 
\x01(\x0b\x32\x14.google.protobuf.Any\x12\x0c\n\x04\x64one\x18\x03 
\x01(\x08\x12#\n\x05\x65rror\x18\x04 
\x01(\x0b\x32\x12.google.rpc.StatusH\x00\x12(\n\x08response\x18\x05 
\x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x42\x08\n\x06result"#\n\x13GetOperationRequest\x12\x0c\n\x04name\x18\x01
 \x01(\t"|\n\x15ListOperationsRequest\x12\x0c\n\x04name\x18\x04 
\x01(\t\x12\x0e\n\x06\x66ilter\x18\x01 \x01(\t\x12\x11\n\tpage_size\x18\x02 
\x01(\x05\x12\x12\n\npage_token\x18\x03 
\x01(\t\x12\x1e\n\x16return_partial_success\x18\x05 
\x01(\x08"~\n\x16ListOperationsResponse\x12\
 x31\n\noperations\x18\x01 
\x03(\x0b\x32\x1d.google.longrunning.Operation\x12\x17\n\x0fnext_page_token\x18\x02
 \x01(\t\x12\x18\n\x0bunreachable\x18\x03 
\x03(\tB\x03\xe0\x41\x06"&\n\x16\x43\x61ncelOperationRequest\x12\x0c\n\x04name\x18\x01
 \x01(\t"&\n\x16\x44\x65leteOperationRequest\x12\x0c\n\x04name\x18\x01 
\x01(\t"P\n\x14WaitOperationRequest\x12\x0c\n\x04name\x18\x01 
\x01(\t\x12*\n\x07timeout\x18\x02 
\x01(\x0b\x32\x19.google.protobuf.Duration"=\n\rOperationInfo\x12\x15\n\rresponse_type\x18\x01
 \x01(\t\x12\x15\n\rmetadata_type\x18\x02 
\x01(\t2\xaa\x05\n\nOperations\x12\x94\x01\n\x0eListOperations\x12).google.longrunning.ListOperationsRequest\x1a*.google.longrunning.ListOperationsResponse"+\xda\x41\x0bname,filter\x82\xd3\xe4\x93\x02\x17\x12\x15/v1/{name=operations}\x12\x7f\n\x0cGetOperation\x12\'.google.longrunning.GetOperationRequest\x1a\x1d.google.longrunning.Operation"\'\xda\x41\x04name\x82\xd3\xe4\x93\x02\x1a\x12\x18/v1/{name=operations/**}\x12~\n\x0f\x44\x65leteOperation\x12*.goo
 
gle.longrunning.DeleteOperationRequest\x1a\x16.google.protobuf.Empty"\'\xda\x41\x04name\x82\xd3\xe4\x93\x02\x1a*\x18/v1/{name=operations/**}\x12\x88\x01\n\x0f\x43\x61ncelOperation\x12*.google.longrunning.CancelOperationRequest\x1a\x16.google.protobuf.Empty"1\xda\x41\x04name\x82\xd3\xe4\x93\x02$"\x1f/v1/{name=operations/**}:cancel:\x01*\x12Z\n\rWaitOperation\x12(.google.longrunning.WaitOperationRequest\x1a\x1d.google.longrunning.Operation"\x00\x1a\x1d\xca\x41\x1alongrunning.googleapis.com:Z\n\x0eoperation_info\x12\x1e.google.protobuf.MethodOptions\x18\x99\x08
 
\x01(\x0b\x32!.google.longrunning.OperationInfoB\xa2\x01\n\x16\x63om.google.longrunningB\x0fOperationsProtoP\x01ZCcloud.google.com/go/longrunning/autogen/longrunningpb;longrunningpb\xa2\x02\x05GLRUN\xaa\x02\x12Google.LongRunning\xca\x02\x12Google\\LongRunningb\x06proto3'
 )
 
 _globals = globals()
@@ -47,53 +53,59 @@
 _builder.BuildTopDescriptorsAndMessages(
     DESCRIPTOR, "google.longrunning.operations_pb2", _globals
 )
-if _descriptor._USE_C_DESCRIPTORS == False:
-    _globals["DESCRIPTOR"]._options = None
+if not _descriptor._USE_C_DESCRIPTORS:
+    _globals["DESCRIPTOR"]._loaded_options = None
     _globals[
         "DESCRIPTOR"
-    ]._serialized_options = 
b"\n\026com.google.longrunningB\017OperationsProtoP\001ZCcloud.google.com/go/longrunning/autogen/longrunningpb;longrunningpb\370\001\001\242\002\005GLRUN\252\002\022Google.LongRunning\312\002\022Google\\LongRunning"
-    _globals["_OPERATIONS"]._options = None
+    ]._serialized_options = 
b"\n\026com.google.longrunningB\017OperationsProtoP\001ZCcloud.google.com/go/longrunning/autogen/longrunningpb;longrunningpb\242\002\005GLRUN\252\002\022Google.LongRunning\312\002\022Google\\LongRunning"
+    _globals["_LISTOPERATIONSRESPONSE"].fields_by_name[
+        "unreachable"
+    ]._loaded_options = None
+    _globals["_LISTOPERATIONSRESPONSE"].fields_by_name[
+        "unreachable"
+    ]._serialized_options = b"\340A\006"
+    _globals["_OPERATIONS"]._loaded_options = None
     _globals["_OPERATIONS"]._serialized_options = 
b"\312A\032longrunning.googleapis.com"
-    _globals["_OPERATIONS"].methods_by_name["ListOperations"]._options = None
+    _globals["_OPERATIONS"].methods_by_name["ListOperations"]._loaded_options 
= None
     _globals["_OPERATIONS"].methods_by_name[
         "ListOperations"
     ]._serialized_options = (
         
b"\332A\013name,filter\202\323\344\223\002\027\022\025/v1/{name=operations}"
     )
-    _globals["_OPERATIONS"].methods_by_name["GetOperation"]._options = None
+    _globals["_OPERATIONS"].methods_by_name["GetOperation"]._loaded_options = 
None
     _globals["_OPERATIONS"].methods_by_name[
         "GetOperation"
     ]._serialized_options = (
         
b"\332A\004name\202\323\344\223\002\032\022\030/v1/{name=operations/**}"
     )
-    _globals["_OPERATIONS"].methods_by_name["DeleteOperation"]._options = None
+    _globals["_OPERATIONS"].methods_by_name["DeleteOperation"]._loaded_options 
= None
     _globals["_OPERATIONS"].methods_by_name[
         "DeleteOperation"
     ]._serialized_options = (
         b"\332A\004name\202\323\344\223\002\032*\030/v1/{name=operations/**}"
     )
-    _globals["_OPERATIONS"].methods_by_name["CancelOperation"]._options = None
+    _globals["_OPERATIONS"].methods_by_name["CancelOperation"]._loaded_options 
= None
     _globals["_OPERATIONS"].methods_by_name[
         "CancelOperation"
     ]._serialized_options = (
         
b'\332A\004name\202\323\344\223\002$"\037/v1/{name=operations/**}:cancel:\001*'
     )
-    _globals["_OPERATION"]._serialized_start = 262
-    _globals["_OPERATION"]._serialized_end = 430
-    _globals["_GETOPERATIONREQUEST"]._serialized_start = 432
-    _globals["_GETOPERATIONREQUEST"]._serialized_end = 467
-    _globals["_LISTOPERATIONSREQUEST"]._serialized_start = 469
-    _globals["_LISTOPERATIONSREQUEST"]._serialized_end = 561
-    _globals["_LISTOPERATIONSRESPONSE"]._serialized_start = 563
-    _globals["_LISTOPERATIONSRESPONSE"]._serialized_end = 663
-    _globals["_CANCELOPERATIONREQUEST"]._serialized_start = 665
-    _globals["_CANCELOPERATIONREQUEST"]._serialized_end = 703
-    _globals["_DELETEOPERATIONREQUEST"]._serialized_start = 705
-    _globals["_DELETEOPERATIONREQUEST"]._serialized_end = 743
-    _globals["_WAITOPERATIONREQUEST"]._serialized_start = 745
-    _globals["_WAITOPERATIONREQUEST"]._serialized_end = 825
-    _globals["_OPERATIONINFO"]._serialized_start = 827
-    _globals["_OPERATIONINFO"]._serialized_end = 888
-    _globals["_OPERATIONS"]._serialized_start = 891
-    _globals["_OPERATIONS"]._serialized_end = 1573
+    _globals["_OPERATION"]._serialized_start = 295
+    _globals["_OPERATION"]._serialized_end = 463
+    _globals["_GETOPERATIONREQUEST"]._serialized_start = 465
+    _globals["_GETOPERATIONREQUEST"]._serialized_end = 500
+    _globals["_LISTOPERATIONSREQUEST"]._serialized_start = 502
+    _globals["_LISTOPERATIONSREQUEST"]._serialized_end = 626
+    _globals["_LISTOPERATIONSRESPONSE"]._serialized_start = 628
+    _globals["_LISTOPERATIONSRESPONSE"]._serialized_end = 754
+    _globals["_CANCELOPERATIONREQUEST"]._serialized_start = 756
+    _globals["_CANCELOPERATIONREQUEST"]._serialized_end = 794
+    _globals["_DELETEOPERATIONREQUEST"]._serialized_start = 796
+    _globals["_DELETEOPERATIONREQUEST"]._serialized_end = 834
+    _globals["_WAITOPERATIONREQUEST"]._serialized_start = 836
+    _globals["_WAITOPERATIONREQUEST"]._serialized_end = 916
+    _globals["_OPERATIONINFO"]._serialized_start = 918
+    _globals["_OPERATIONINFO"]._serialized_end = 979
+    _globals["_OPERATIONS"]._serialized_start = 982
+    _globals["_OPERATIONS"]._serialized_end = 1664
 # @@protoc_insertion_point(module_scope)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/googleapis_common_protos-1.75.3/google/longrunning/operations_proto_pb2.pyi 
new/googleapis_common_protos-1.75.5/google/longrunning/operations_proto_pb2.pyi
--- 
old/googleapis_common_protos-1.75.3/google/longrunning/operations_proto_pb2.pyi 
    2026-09-03 23:58:47.895188300 +0200
+++ 
new/googleapis_common_protos-1.75.5/google/longrunning/operations_proto_pb2.pyi 
    2026-09-29 20:56:54.079581700 +0200
@@ -12,9 +12,10 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import datetime
+from collections.abc import Iterable as _Iterable
+from collections.abc import Mapping as _Mapping
 from typing import ClassVar as _ClassVar
-from typing import Iterable as _Iterable
-from typing import Mapping as _Mapping
 from typing import Optional as _Optional
 from typing import Union as _Union
 
@@ -28,6 +29,7 @@
 
 from google.api import annotations_pb2 as _annotations_pb2
 from google.api import client_pb2 as _client_pb2
+from google.api import field_behavior_pb2 as _field_behavior_pb2
 from google.rpc import status_pb2 as _status_pb2
 
 DESCRIPTOR: _descriptor.FileDescriptor
@@ -50,7 +52,7 @@
         self,
         name: _Optional[str] = ...,
         metadata: _Optional[_Union[_any_pb2.Any, _Mapping]] = ...,
-        done: bool = ...,
+        done: _Optional[bool] = ...,
         error: _Optional[_Union[_status_pb2.Status, _Mapping]] = ...,
         response: _Optional[_Union[_any_pb2.Any, _Mapping]] = ...,
     ) -> None: ...
@@ -62,33 +64,39 @@
     def __init__(self, name: _Optional[str] = ...) -> None: ...
 
 class ListOperationsRequest(_message.Message):
-    __slots__ = ("name", "filter", "page_size", "page_token")
+    __slots__ = ("name", "filter", "page_size", "page_token", 
"return_partial_success")
     NAME_FIELD_NUMBER: _ClassVar[int]
     FILTER_FIELD_NUMBER: _ClassVar[int]
     PAGE_SIZE_FIELD_NUMBER: _ClassVar[int]
     PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int]
+    RETURN_PARTIAL_SUCCESS_FIELD_NUMBER: _ClassVar[int]
     name: str
     filter: str
     page_size: int
     page_token: str
+    return_partial_success: bool
     def __init__(
         self,
         name: _Optional[str] = ...,
         filter: _Optional[str] = ...,
         page_size: _Optional[int] = ...,
         page_token: _Optional[str] = ...,
+        return_partial_success: _Optional[bool] = ...,
     ) -> None: ...
 
 class ListOperationsResponse(_message.Message):
-    __slots__ = ("operations", "next_page_token")
+    __slots__ = ("operations", "next_page_token", "unreachable")
     OPERATIONS_FIELD_NUMBER: _ClassVar[int]
     NEXT_PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int]
+    UNREACHABLE_FIELD_NUMBER: _ClassVar[int]
     operations: _containers.RepeatedCompositeFieldContainer[Operation]
     next_page_token: str
+    unreachable: _containers.RepeatedScalarFieldContainer[str]
     def __init__(
         self,
         operations: _Optional[_Iterable[_Union[Operation, _Mapping]]] = ...,
         next_page_token: _Optional[str] = ...,
+        unreachable: _Optional[_Iterable[str]] = ...,
     ) -> None: ...
 
 class CancelOperationRequest(_message.Message):
@@ -112,7 +120,9 @@
     def __init__(
         self,
         name: _Optional[str] = ...,
-        timeout: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ...,
+        timeout: _Optional[
+            _Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]
+        ] = ...,
     ) -> None: ...
 
 class OperationInfo(_message.Message):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/googleapis_common_protos-1.75.3/googleapis_common_protos.egg-info/PKG-INFO 
new/googleapis_common_protos-1.75.5/googleapis_common_protos.egg-info/PKG-INFO
--- 
old/googleapis_common_protos-1.75.3/googleapis_common_protos.egg-info/PKG-INFO  
    2026-09-04 00:03:39.818264200 +0200
+++ 
new/googleapis_common_protos-1.75.5/googleapis_common_protos.egg-info/PKG-INFO  
    2026-09-29 20:59:47.352897000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: googleapis-common-protos
-Version: 1.75.3
+Version: 1.75.5
 Summary: Common protobufs used in Google APIs
 Author-email: Google LLC <[email protected]>
 License-Expression: Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/googleapis_common_protos-1.75.3/googleapis_common_protos.egg-info/SOURCES.txt
 
new/googleapis_common_protos-1.75.5/googleapis_common_protos.egg-info/SOURCES.txt
--- 
old/googleapis_common_protos-1.75.3/googleapis_common_protos.egg-info/SOURCES.txt
   2026-09-04 00:03:39.840440300 +0200
+++ 
new/googleapis_common_protos-1.75.5/googleapis_common_protos.egg-info/SOURCES.txt
   2026-09-29 20:59:47.377034700 +0200
@@ -203,4 +203,5 @@
 googleapis_common_protos.egg-info/requires.txt
 googleapis_common_protos.egg-info/top_level.txt
 tests/unit/test_google_api_error_reason.py
+tests/unit/test_operations.py
 tests/unit/test_packaging.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/googleapis_common_protos-1.75.3/pyproject.toml 
new/googleapis_common_protos-1.75.5/pyproject.toml
--- old/googleapis_common_protos-1.75.3/pyproject.toml  2026-09-03 
23:58:46.676158700 +0200
+++ new/googleapis_common_protos-1.75.5/pyproject.toml  2026-09-29 
20:56:57.119578800 +0200
@@ -18,7 +18,7 @@
 
 [project]
 name = "googleapis-common-protos"
-version = "1.75.3"
+version = "1.75.5"
 authors = [{ name = "Google LLC", email = "[email protected]" }]
 license = "Apache-2.0"
 requires-python = ">= 3.10"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/googleapis_common_protos-1.75.3/tests/unit/test_operations.py 
new/googleapis_common_protos-1.75.5/tests/unit/test_operations.py
--- old/googleapis_common_protos-1.75.3/tests/unit/test_operations.py   
1970-01-01 01:00:00.000000000 +0100
+++ new/googleapis_common_protos-1.75.5/tests/unit/test_operations.py   
2026-09-29 20:56:56.190580000 +0200
@@ -0,0 +1,201 @@
+# Copyright 2026 Google LLC All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import importlib
+import sys
+import uuid
+from unittest import mock
+
+import pytest
+from google.protobuf import descriptor_pb2, descriptor_pool
+
+
+def test_operations_descriptor_name():
+    """Validates the canonical proto name registered in the descriptor pool."""
+    from google.longrunning import operations_pb2
+
+    # The descriptor name MUST be the canonical path 
'google/longrunning/operations.proto'.
+    # If named 'google/longrunning/operations_proto.proto', any downstream 
proto that
+    # imports 'google/longrunning/operations.proto' will fail to resolve.
+    assert operations_pb2.DESCRIPTOR.name == 
"google/longrunning/operations.proto"
+
+    # Verify lookup by canonical path succeeds in the global descriptor pool
+    pool = descriptor_pool.Default()
+    file_desc = pool.FindFileByName("google/longrunning/operations.proto")
+    assert file_desc is not None
+    assert file_desc.name == "google/longrunning/operations.proto"
+
+
+def test_operations_message_instantiation():
+    """Validates message instantiation from both public module entry points."""
+    from google.longrunning import operations_pb2, operations_proto_pb2
+
+    op1 = operations_pb2.Operation(name="operations/123", done=True)
+    assert op1.name == "operations/123"
+    assert op1.done is True
+
+    op2 = operations_proto_pb2.Operation(name="operations/456", done=False)
+    assert op2.name == "operations/456"
+    assert op2.done is False
+
+
+def test_downstream_dependency_resolution():
+    """Regression test for b/566222096.
+
+    Downstream clients compile protos containing:
+        import "google/longrunning/operations.proto";
+
+    When their generated *_pb2 modules load, protobuf calls:
+
+    ```
+        _descriptor_pool.Default().AddSerializedFile(...)
+    ```
+
+    which checks that 'google/longrunning/operations.proto' exists in the pool.
+    """
+    # Ensure operations_pb2 is imported and registered
+    from google.longrunning import operations_pb2  # noqa: F401
+
+    pool = descriptor_pool.Default()
+
+    # Create a uniquely named proto to avoid collision during repeated test 
runs
+    unique_name = f"google/test/downstream_{uuid.uuid4().hex}.proto"
+
+    downstream_file = descriptor_pb2.FileDescriptorProto()
+    downstream_file.name = unique_name
+    downstream_file.package = "google.test"
+    downstream_file.dependency.append("google/longrunning/operations.proto")
+
+    # 1. This step will throw the TypeError if operations.proto is missing 
(under C++ runtime).
+    pool.Add(downstream_file)
+
+    # 2. Retrieve the descriptor from the pool (required because pool.Add() 
returns None).
+    file_descriptor = pool.FindFileByName(unique_name)
+    assert file_descriptor is not None
+    assert file_descriptor.name == unique_name
+    assert "google/longrunning/operations.proto" in [
+        dep.name for dep in file_descriptor.dependencies
+    ]
+
+
+def test_operations_servicer_interface():
+    """Verifies OperationsServicer default method implementations raise 
NotImplementedError."""
+    from google.longrunning import operations_pb2_grpc
+
+    servicer = operations_pb2_grpc.OperationsServicer()
+    context = mock.Mock()
+    request = mock.Mock()
+
+    # Servicer interface must define all RPCs and default to 
NotImplementedError
+    for method in [
+        servicer.ListOperations,
+        servicer.GetOperation,
+        servicer.DeleteOperation,
+        servicer.CancelOperation,
+        servicer.WaitOperation,
+    ]:
+        with pytest.raises(NotImplementedError):
+            method(request, context)
+
+
+def test_add_operations_servicer_to_server():
+    """Verifies server handler registration for OperationsServicer."""
+    from google.longrunning import operations_pb2_grpc
+
+    servicer = operations_pb2_grpc.OperationsServicer()
+    mock_server = mock.Mock()
+
+    operations_pb2_grpc.add_OperationsServicer_to_server(servicer, mock_server)
+
+    # Assert that generic RPC handlers were registered with the server
+    assert mock_server.add_generic_rpc_handlers.called
+    assert mock_server.add_generic_rpc_handlers.call_count == 1
+
+    # Verify the handler structure passed to the server
+    handlers = mock_server.add_generic_rpc_handlers.call_args[0][0]
+    assert len(handlers) == 1
+    assert hasattr(handlers[0], "service_name")
+    assert handlers[0].service_name() == "google.longrunning.Operations"
+
+
+def test_operations_client_stubs_and_static_methods():
+    """Verifies OperationsStub client calls and static method dispatch."""
+    from google.longrunning import operations_pb2_grpc
+
+    # 1. Test OperationsStub channel binding and RPC dispatch
+    mock_callable = mock.Mock(return_value=mock.Mock())
+    mock_channel = mock.Mock()
+    mock_channel.unary_unary = mock.Mock(return_value=mock_callable)
+    mock_channel.unary_stream = mock.Mock(return_value=mock_callable)
+
+    stub = operations_pb2_grpc.OperationsStub(mock_channel)
+    assert mock_channel.unary_unary.call_count == 5
+
+    request = mock.Mock()
+    for rpc in [
+        stub.ListOperations,
+        stub.GetOperation,
+        stub.DeleteOperation,
+        stub.CancelOperation,
+        stub.WaitOperation,
+    ]:
+        response = rpc(request)
+        assert response is not None
+
+    assert mock_callable.call_count == 5
+
+    # 2. Test Operations static invocation helpers
+    with mock.patch(
+        "grpc.experimental.unary_unary", return_value=mock.Mock()
+    ) as mock_unary:
+        for static_rpc in [
+            operations_pb2_grpc.Operations.ListOperations,
+            operations_pb2_grpc.Operations.GetOperation,
+            operations_pb2_grpc.Operations.DeleteOperation,
+            operations_pb2_grpc.Operations.CancelOperation,
+            operations_pb2_grpc.Operations.WaitOperation,
+        ]:
+            result = static_rpc(request, "localhost:50051")
+            assert result is not None
+
+        assert mock_unary.call_count == 5
+
+
+def test_operations_pb2_non_grpc_fallback_environment():
+    """Verifies module loading and class contract in non-gRPC environments.
+
+    In environments where gRPC is unsupported, the module must fall back to 
pure
+    protobuf-only imports without throwing exceptions, and all message classes
+    must remain instantiable.
+    """
+    # 1. Simulate an environment where the gRPC-dependent pb2 module is 
unavailable
+    with mock.patch.dict(sys.modules, 
{"google.longrunning.operations_grpc_pb2": None}):
+        # Reload to force execution of the fallback import path
+        if "google.longrunning.operations_pb2" in sys.modules:
+            fallback_module = importlib.reload(
+                sys.modules["google.longrunning.operations_pb2"]
+            )
+        else:
+            import google.longrunning.operations_pb2 as fallback_module  # 
pragma: NO COVER
+
+        # 2. Assert that canonical messages can still be resolved and 
instantiated
+        assert hasattr(fallback_module, "Operation")
+        assert hasattr(fallback_module, "GetOperationRequest")
+
+        op = fallback_module.Operation(name="operations/789", done=True)
+        assert op.name == "operations/789"
+        assert op.done is True
+
+    # 3. Restore the environment back to its gRPC-enabled state
+    importlib.reload(sys.modules["google.longrunning.operations_pb2"])

Reply via email to