google-cloud-pubsub 2.36.0__tar.gz → 2.37.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. {google_cloud_pubsub-2.36.0/google_cloud_pubsub.egg-info → google_cloud_pubsub-2.37.0}/PKG-INFO +16 -9
  2. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/README.rst +13 -6
  3. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/open_telemetry/publish_message_wrapper.py +18 -16
  4. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub/gapic_version.py +1 -1
  5. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/gapic_version.py +1 -1
  6. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/publisher/async_client.py +34 -16
  7. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/publisher/client.py +42 -20
  8. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/publisher/transports/base.py +6 -0
  9. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/publisher/transports/grpc.py +6 -2
  10. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/publisher/transports/grpc_asyncio.py +6 -2
  11. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/publisher/transports/rest.py +6 -0
  12. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/schema_service/async_client.py +34 -16
  13. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/schema_service/client.py +42 -20
  14. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/schema_service/transports/base.py +6 -0
  15. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/schema_service/transports/grpc.py +6 -2
  16. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/schema_service/transports/grpc_asyncio.py +6 -2
  17. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/schema_service/transports/rest.py +6 -0
  18. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/subscriber/async_client.py +34 -16
  19. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/subscriber/client.py +42 -20
  20. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/subscriber/transports/base.py +6 -0
  21. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/subscriber/transports/grpc.py +6 -2
  22. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/subscriber/transports/grpc_asyncio.py +6 -2
  23. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/subscriber/transports/rest.py +6 -0
  24. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/types/pubsub.py +1 -1
  25. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0/google_cloud_pubsub.egg-info}/PKG-INFO +16 -9
  26. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google_cloud_pubsub.egg-info/requires.txt +2 -2
  27. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/setup.py +2 -3
  28. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/gapic/pubsub_v1/test_publisher.py +286 -138
  29. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/gapic/pubsub_v1/test_schema_service.py +311 -152
  30. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/gapic/pubsub_v1/test_subscriber.py +356 -199
  31. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/subscriber/test_subscriber_client.py +14 -8
  32. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/LICENSE +0 -0
  33. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/MANIFEST.in +0 -0
  34. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub/__init__.py +0 -0
  35. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/__init__.py +0 -0
  36. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/exceptions.py +0 -0
  37. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/futures.py +0 -0
  38. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/open_telemetry/__init__.py +0 -0
  39. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/open_telemetry/context_propagation.py +0 -0
  40. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/open_telemetry/subscribe_opentelemetry.py +0 -0
  41. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/proto/pubsub.proto +0 -0
  42. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/proto/schema.proto +0 -0
  43. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/publisher/__init__.py +0 -0
  44. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/publisher/_batch/__init__.py +0 -0
  45. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/publisher/_batch/base.py +0 -0
  46. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/publisher/_batch/thread.py +0 -0
  47. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/publisher/_sequencer/__init__.py +0 -0
  48. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/publisher/_sequencer/base.py +0 -0
  49. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/publisher/_sequencer/ordered_sequencer.py +0 -0
  50. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/publisher/_sequencer/unordered_sequencer.py +0 -0
  51. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/publisher/client.py +0 -0
  52. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/publisher/exceptions.py +0 -0
  53. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/publisher/flow_controller.py +0 -0
  54. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/publisher/futures.py +0 -0
  55. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/subscriber/__init__.py +0 -0
  56. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/subscriber/_protocol/__init__.py +0 -0
  57. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/subscriber/_protocol/dispatcher.py +0 -0
  58. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/subscriber/_protocol/heartbeater.py +0 -0
  59. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/subscriber/_protocol/helper_threads.py +0 -0
  60. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/subscriber/_protocol/histogram.py +0 -0
  61. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/subscriber/_protocol/leaser.py +0 -0
  62. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/subscriber/_protocol/messages_on_hold.py +0 -0
  63. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/subscriber/_protocol/requests.py +0 -0
  64. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/subscriber/_protocol/streaming_pull_manager.py +0 -0
  65. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/subscriber/client.py +0 -0
  66. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/subscriber/exceptions.py +0 -0
  67. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/subscriber/futures.py +0 -0
  68. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/subscriber/message.py +0 -0
  69. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/subscriber/scheduler.py +0 -0
  70. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/cloud/pubsub_v1/types.py +0 -0
  71. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub/__init__.py +0 -0
  72. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub/py.typed +0 -0
  73. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/__init__.py +0 -0
  74. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/gapic_metadata.json +0 -0
  75. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/py.typed +0 -0
  76. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/__init__.py +0 -0
  77. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/publisher/__init__.py +0 -0
  78. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/publisher/pagers.py +0 -0
  79. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/publisher/transports/__init__.py +0 -0
  80. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/publisher/transports/rest_base.py +0 -0
  81. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/schema_service/__init__.py +0 -0
  82. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/schema_service/pagers.py +0 -0
  83. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/schema_service/transports/__init__.py +0 -0
  84. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/schema_service/transports/rest_base.py +0 -0
  85. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/subscriber/__init__.py +0 -0
  86. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/subscriber/pagers.py +0 -0
  87. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/subscriber/transports/__init__.py +0 -0
  88. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/services/subscriber/transports/rest_base.py +0 -0
  89. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/types/__init__.py +0 -0
  90. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google/pubsub_v1/types/schema.py +0 -0
  91. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google_cloud_pubsub.egg-info/SOURCES.txt +0 -0
  92. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google_cloud_pubsub.egg-info/dependency_links.txt +0 -0
  93. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google_cloud_pubsub.egg-info/not-zip-safe +0 -0
  94. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/google_cloud_pubsub.egg-info/top_level.txt +0 -0
  95. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/setup.cfg +0 -0
  96. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/__init__.py +0 -0
  97. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/system.py +0 -0
  98. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/__init__.py +0 -0
  99. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/gapic/__init__.py +0 -0
  100. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/gapic/pubsub_v1/__init__.py +0 -0
  101. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/conftest.py +0 -0
  102. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/publisher/batch/test_base.py +0 -0
  103. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/publisher/batch/test_thread.py +0 -0
  104. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/publisher/sequencer/test_ordered_sequencer.py +0 -0
  105. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/publisher/sequencer/test_unordered_sequencer.py +0 -0
  106. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/publisher/test_flow_controller.py +0 -0
  107. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/publisher/test_futures_publisher.py +0 -0
  108. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/publisher/test_publish_message_wrapper.py +0 -0
  109. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/publisher/test_publisher_client.py +0 -0
  110. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/subscriber/test_dispatcher.py +0 -0
  111. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/subscriber/test_futures_subscriber.py +0 -0
  112. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/subscriber/test_heartbeater.py +0 -0
  113. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/subscriber/test_helper_threads.py +0 -0
  114. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/subscriber/test_histogram.py +0 -0
  115. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/subscriber/test_leaser.py +0 -0
  116. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/subscriber/test_message.py +0 -0
  117. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/subscriber/test_messages_on_hold.py +0 -0
  118. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/subscriber/test_scheduler.py +0 -0
  119. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/subscriber/test_streaming_pull_manager.py +0 -0
  120. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/subscriber/test_subscribe_opentelemetry.py +0 -0
  121. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/pubsub_v1/test_futures.py +0 -0
  122. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/test_packaging.py +0 -0
  123. {google_cloud_pubsub-2.36.0 → google_cloud_pubsub-2.37.0}/tests/unit/test_pubsub.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: google-cloud-pubsub
3
- Version: 2.36.0
3
+ Version: 2.37.0
4
4
  Summary: Google Cloud Pub/Sub API client library
5
5
  Home-page: https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-pubsub
6
6
  Author: Google LLC
@@ -22,12 +22,12 @@ Classifier: Operating System :: OS Independent
22
22
  Classifier: Topic :: Internet
23
23
  Requires-Python: >=3.9
24
24
  License-File: LICENSE
25
- Requires-Dist: google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.10.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<3.0.0,>=1.34.0
25
+ Requires-Dist: google-api-core[grpc]<3.0.0,>=2.11.0
26
26
  Requires-Dist: google-auth!=2.24.0,!=2.25.0,<3.0.0,>=2.14.1
27
27
  Requires-Dist: grpcio<2.0.0,>=1.51.3; python_version < "3.14"
28
28
  Requires-Dist: proto-plus<2.0.0,>=1.22.3
29
29
  Requires-Dist: proto-plus<2.0.0,>=1.25.0; python_version >= "3.13"
30
- Requires-Dist: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<7.0.0,>=3.20.2
30
+ Requires-Dist: protobuf<8.0.0,>=4.25.8
31
31
  Requires-Dist: grpc-google-iam-v1<1.0.0,>=0.14.0
32
32
  Requires-Dist: grpcio-status>=1.33.2
33
33
  Requires-Dist: opentelemetry-api>=1.27.0
@@ -118,15 +118,22 @@ Code samples and snippets live in the `samples/`_ folder.
118
118
 
119
119
  Supported Python Versions
120
120
  ^^^^^^^^^^^^^^^^^^^^^^^^^
121
- Python >= 3.9
121
+ Our client libraries are compatible with all current `active`_ and `maintenance`_ versions of
122
+ Python.
122
123
 
123
- Deprecated Python Versions
124
- ^^^^^^^^^^^^^^^^^^^^^^^^^^
125
- Python < 3.9
124
+ Python >= 3.9, including 3.14
125
+
126
+ .. _active: https://devguide.python.org/devcycle/#in-development-main-branch
127
+ .. _maintenance: https://devguide.python.org/devcycle/#maintenance-branches
128
+
129
+ Unsupported Python Versions
130
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
131
+ Python <= 3.8
126
132
 
127
- The last version of this library compatible with Python 3.7 and 3.8 is google-cloud-pubsub==2.34.0.
133
+ If you are using an `end-of-life`_
134
+ version of Python, we recommend that you update as soon as possible to an actively supported version.
128
135
 
129
- The last version of this library compatible with Python 2.7 is google-cloud-pubsub==1.7.0.
136
+ .. _end-of-life: https://devguide.python.org/devcycle/#end-of-life-branches
130
137
 
131
138
  Mac/Linux
132
139
  ^^^^^^^^^
@@ -69,15 +69,22 @@ Code samples and snippets live in the `samples/`_ folder.
69
69
 
70
70
  Supported Python Versions
71
71
  ^^^^^^^^^^^^^^^^^^^^^^^^^
72
- Python >= 3.9
72
+ Our client libraries are compatible with all current `active`_ and `maintenance`_ versions of
73
+ Python.
73
74
 
74
- Deprecated Python Versions
75
- ^^^^^^^^^^^^^^^^^^^^^^^^^^
76
- Python < 3.9
75
+ Python >= 3.9, including 3.14
76
+
77
+ .. _active: https://devguide.python.org/devcycle/#in-development-main-branch
78
+ .. _maintenance: https://devguide.python.org/devcycle/#maintenance-branches
79
+
80
+ Unsupported Python Versions
81
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
82
+ Python <= 3.8
77
83
 
78
- The last version of this library compatible with Python 3.7 and 3.8 is google-cloud-pubsub==2.34.0.
84
+ If you are using an `end-of-life`_
85
+ version of Python, we recommend that you update as soon as possible to an actively supported version.
79
86
 
80
- The last version of this library compatible with Python 2.7 is google-cloud-pubsub==1.7.0.
87
+ .. _end-of-life: https://devguide.python.org/devcycle/#end-of-life-branches
81
88
 
82
89
  Mac/Linux
83
90
  ^^^^^^^^^
@@ -62,22 +62,24 @@ class PublishMessageWrapper:
62
62
  tracer = trace.get_tracer(self._OPEN_TELEMETRY_TRACER_NAME)
63
63
  assert len(topic.split("/")) == 4
64
64
  topic_short_name = topic.split("/")[3]
65
- with tracer.start_as_current_span(
66
- name=f"{topic_short_name} create",
67
- attributes={
68
- "messaging.system": self._OPEN_TELEMETRY_MESSAGING_SYSTEM,
69
- "messaging.destination.name": topic_short_name,
70
- "code.function": "publish",
71
- "messaging.gcp_pubsub.message.ordering_key": ordering_key,
72
- "messaging.operation": "create",
73
- "gcp.project_id": topic.split("/")[1],
74
- "messaging.message.body.size": sys.getsizeof(
75
- self._message.data
76
- ), # sys.getsizeof() used since the attribute expects size of message body in bytes
77
- },
78
- kind=trace.SpanKind.PRODUCER,
79
- end_on_exit=False,
80
- ) as create_span:
65
+ with (
66
+ tracer.start_as_current_span(
67
+ name=f"{topic_short_name} create",
68
+ attributes={
69
+ "messaging.system": self._OPEN_TELEMETRY_MESSAGING_SYSTEM,
70
+ "messaging.destination.name": topic_short_name,
71
+ "code.function": "publish",
72
+ "messaging.gcp_pubsub.message.ordering_key": ordering_key,
73
+ "messaging.operation": "create",
74
+ "gcp.project_id": topic.split("/")[1],
75
+ "messaging.message.body.size": sys.getsizeof(
76
+ self._message.data
77
+ ), # sys.getsizeof() used since the attribute expects size of message body in bytes
78
+ },
79
+ kind=trace.SpanKind.PRODUCER,
80
+ end_on_exit=False,
81
+ ) as create_span
82
+ ):
81
83
  create_span.add_event(
82
84
  name=self._PUBLISH_START_EVENT,
83
85
  attributes={
@@ -13,4 +13,4 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
  #
16
- __version__ = "2.36.0" # {x-release-please-version}
16
+ __version__ = "2.37.0" # {x-release-please-version}
@@ -13,4 +13,4 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
  #
16
- __version__ = "2.36.0" # {x-release-please-version}
16
+ __version__ = "2.37.0" # {x-release-please-version}
@@ -196,7 +196,7 @@ class PublisherAsyncClient:
196
196
  return self._client.transport
197
197
 
198
198
  @property
199
- def api_endpoint(self):
199
+ def api_endpoint(self) -> str:
200
200
  """Return the API endpoint used by the client instance.
201
201
 
202
202
  Returns:
@@ -1358,7 +1358,7 @@ class PublisherAsyncClient:
1358
1358
 
1359
1359
  async def set_iam_policy(
1360
1360
  self,
1361
- request: Optional[iam_policy_pb2.SetIamPolicyRequest] = None,
1361
+ request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None,
1362
1362
  *,
1363
1363
  retry: OptionalRetry = gapic_v1.method.DEFAULT,
1364
1364
  timeout: TimeoutType = gapic_v1.method.DEFAULT,
@@ -1451,8 +1451,12 @@ class PublisherAsyncClient:
1451
1451
 
1452
1452
  # The request isn't a proto-plus wrapped type,
1453
1453
  # so it must be constructed via keyword expansion.
1454
- if isinstance(request, dict):
1455
- request = iam_policy_pb2.SetIamPolicyRequest(**request)
1454
+ if request is None:
1455
+ request_pb = iam_policy_pb2.SetIamPolicyRequest()
1456
+ elif isinstance(request, dict):
1457
+ request_pb = iam_policy_pb2.SetIamPolicyRequest(**request)
1458
+ else:
1459
+ request_pb = request
1456
1460
 
1457
1461
  # Wrap the RPC method; this adds retry and timeout information,
1458
1462
  # and friendly error handling.
@@ -1461,7 +1465,9 @@ class PublisherAsyncClient:
1461
1465
  # Certain fields should be provided within the metadata header;
1462
1466
  # add these here.
1463
1467
  metadata = tuple(metadata) + (
1464
- gapic_v1.routing_header.to_grpc_metadata((("resource", request.resource),)),
1468
+ gapic_v1.routing_header.to_grpc_metadata(
1469
+ (("resource", request_pb.resource),)
1470
+ ),
1465
1471
  )
1466
1472
 
1467
1473
  # Validate the universe domain.
@@ -1469,7 +1475,7 @@ class PublisherAsyncClient:
1469
1475
 
1470
1476
  # Send the request.
1471
1477
  response = await rpc(
1472
- request,
1478
+ request_pb,
1473
1479
  retry=retry,
1474
1480
  timeout=timeout,
1475
1481
  metadata=metadata,
@@ -1480,7 +1486,7 @@ class PublisherAsyncClient:
1480
1486
 
1481
1487
  async def get_iam_policy(
1482
1488
  self,
1483
- request: Optional[iam_policy_pb2.GetIamPolicyRequest] = None,
1489
+ request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None,
1484
1490
  *,
1485
1491
  retry: OptionalRetry = gapic_v1.method.DEFAULT,
1486
1492
  timeout: TimeoutType = gapic_v1.method.DEFAULT,
@@ -1574,8 +1580,12 @@ class PublisherAsyncClient:
1574
1580
 
1575
1581
  # The request isn't a proto-plus wrapped type,
1576
1582
  # so it must be constructed via keyword expansion.
1577
- if isinstance(request, dict):
1578
- request = iam_policy_pb2.GetIamPolicyRequest(**request)
1583
+ if request is None:
1584
+ request_pb = iam_policy_pb2.GetIamPolicyRequest()
1585
+ elif isinstance(request, dict):
1586
+ request_pb = iam_policy_pb2.GetIamPolicyRequest(**request)
1587
+ else:
1588
+ request_pb = request
1579
1589
 
1580
1590
  # Wrap the RPC method; this adds retry and timeout information,
1581
1591
  # and friendly error handling.
@@ -1584,7 +1594,9 @@ class PublisherAsyncClient:
1584
1594
  # Certain fields should be provided within the metadata header;
1585
1595
  # add these here.
1586
1596
  metadata = tuple(metadata) + (
1587
- gapic_v1.routing_header.to_grpc_metadata((("resource", request.resource),)),
1597
+ gapic_v1.routing_header.to_grpc_metadata(
1598
+ (("resource", request_pb.resource),)
1599
+ ),
1588
1600
  )
1589
1601
 
1590
1602
  # Validate the universe domain.
@@ -1592,7 +1604,7 @@ class PublisherAsyncClient:
1592
1604
 
1593
1605
  # Send the request.
1594
1606
  response = await rpc(
1595
- request,
1607
+ request_pb,
1596
1608
  retry=retry,
1597
1609
  timeout=timeout,
1598
1610
  metadata=metadata,
@@ -1603,7 +1615,7 @@ class PublisherAsyncClient:
1603
1615
 
1604
1616
  async def test_iam_permissions(
1605
1617
  self,
1606
- request: Optional[iam_policy_pb2.TestIamPermissionsRequest] = None,
1618
+ request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None,
1607
1619
  *,
1608
1620
  retry: OptionalRetry = gapic_v1.method.DEFAULT,
1609
1621
  timeout: TimeoutType = gapic_v1.method.DEFAULT,
@@ -1635,8 +1647,12 @@ class PublisherAsyncClient:
1635
1647
 
1636
1648
  # The request isn't a proto-plus wrapped type,
1637
1649
  # so it must be constructed via keyword expansion.
1638
- if isinstance(request, dict):
1639
- request = iam_policy_pb2.TestIamPermissionsRequest(**request)
1650
+ if request is None:
1651
+ request_pb = iam_policy_pb2.TestIamPermissionsRequest()
1652
+ elif isinstance(request, dict):
1653
+ request_pb = iam_policy_pb2.TestIamPermissionsRequest(**request)
1654
+ else:
1655
+ request_pb = request
1640
1656
 
1641
1657
  # Wrap the RPC method; this adds retry and timeout information,
1642
1658
  # and friendly error handling.
@@ -1647,7 +1663,9 @@ class PublisherAsyncClient:
1647
1663
  # Certain fields should be provided within the metadata header;
1648
1664
  # add these here.
1649
1665
  metadata = tuple(metadata) + (
1650
- gapic_v1.routing_header.to_grpc_metadata((("resource", request.resource),)),
1666
+ gapic_v1.routing_header.to_grpc_metadata(
1667
+ (("resource", request_pb.resource),)
1668
+ ),
1651
1669
  )
1652
1670
 
1653
1671
  # Validate the universe domain.
@@ -1655,7 +1673,7 @@ class PublisherAsyncClient:
1655
1673
 
1656
1674
  # Send the request.
1657
1675
  response = await rpc(
1658
- request,
1676
+ request_pb,
1659
1677
  retry=retry,
1660
1678
  timeout=timeout,
1661
1679
  metadata=metadata,
@@ -120,7 +120,7 @@ class PublisherClient(metaclass=PublisherClientMeta):
120
120
  """
121
121
 
122
122
  @staticmethod
123
- def _get_default_mtls_endpoint(api_endpoint):
123
+ def _get_default_mtls_endpoint(api_endpoint) -> Optional[str]:
124
124
  """Converts api endpoint to mTLS endpoint.
125
125
 
126
126
  Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to
@@ -128,7 +128,7 @@ class PublisherClient(metaclass=PublisherClientMeta):
128
128
  Args:
129
129
  api_endpoint (Optional[str]): the api endpoint to convert.
130
130
  Returns:
131
- str: converted mTLS api endpoint.
131
+ Optional[str]: converted mTLS api endpoint.
132
132
  """
133
133
  if not api_endpoint:
134
134
  return api_endpoint
@@ -138,6 +138,10 @@ class PublisherClient(metaclass=PublisherClientMeta):
138
138
  )
139
139
 
140
140
  m = mtls_endpoint_re.match(api_endpoint)
141
+ if m is None:
142
+ # Could not parse api_endpoint; return as-is.
143
+ return api_endpoint
144
+
141
145
  name, mtls, sandbox, googledomain = m.groups()
142
146
  if mtls or not googledomain:
143
147
  return api_endpoint
@@ -523,7 +527,7 @@ class PublisherClient(metaclass=PublisherClientMeta):
523
527
  @staticmethod
524
528
  def _get_api_endpoint(
525
529
  api_override, client_cert_source, universe_domain, use_mtls_endpoint
526
- ):
530
+ ) -> str:
527
531
  """Return the API endpoint used by the client.
528
532
 
529
533
  Args:
@@ -620,7 +624,7 @@ class PublisherClient(metaclass=PublisherClientMeta):
620
624
  error._details.append(json.dumps(cred_info))
621
625
 
622
626
  @property
623
- def api_endpoint(self):
627
+ def api_endpoint(self) -> str:
624
628
  """Return the API endpoint used by the client instance.
625
629
 
626
630
  Returns:
@@ -716,7 +720,7 @@ class PublisherClient(metaclass=PublisherClientMeta):
716
720
  self._universe_domain = PublisherClient._get_universe_domain(
717
721
  universe_domain_opt, self._universe_domain_env
718
722
  )
719
- self._api_endpoint = None # updated below, depending on `transport`
723
+ self._api_endpoint: str = "" # updated below, depending on `transport`
720
724
 
721
725
  # Initialize the universe domain validation.
722
726
  self._is_universe_domain_valid = False
@@ -1859,7 +1863,7 @@ class PublisherClient(metaclass=PublisherClientMeta):
1859
1863
 
1860
1864
  def set_iam_policy(
1861
1865
  self,
1862
- request: Optional[iam_policy_pb2.SetIamPolicyRequest] = None,
1866
+ request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None,
1863
1867
  *,
1864
1868
  retry: OptionalRetry = gapic_v1.method.DEFAULT,
1865
1869
  timeout: TimeoutType = gapic_v1.method.DEFAULT,
@@ -1952,8 +1956,12 @@ class PublisherClient(metaclass=PublisherClientMeta):
1952
1956
 
1953
1957
  # The request isn't a proto-plus wrapped type,
1954
1958
  # so it must be constructed via keyword expansion.
1955
- if isinstance(request, dict):
1956
- request = iam_policy_pb2.SetIamPolicyRequest(**request)
1959
+ if request is None:
1960
+ request_pb = iam_policy_pb2.SetIamPolicyRequest()
1961
+ elif isinstance(request, dict):
1962
+ request_pb = iam_policy_pb2.SetIamPolicyRequest(**request)
1963
+ else:
1964
+ request_pb = request
1957
1965
 
1958
1966
  # Wrap the RPC method; this adds retry and timeout information,
1959
1967
  # and friendly error handling.
@@ -1962,7 +1970,9 @@ class PublisherClient(metaclass=PublisherClientMeta):
1962
1970
  # Certain fields should be provided within the metadata header;
1963
1971
  # add these here.
1964
1972
  metadata = tuple(metadata) + (
1965
- gapic_v1.routing_header.to_grpc_metadata((("resource", request.resource),)),
1973
+ gapic_v1.routing_header.to_grpc_metadata(
1974
+ (("resource", request_pb.resource),)
1975
+ ),
1966
1976
  )
1967
1977
 
1968
1978
  # Validate the universe domain.
@@ -1971,7 +1981,7 @@ class PublisherClient(metaclass=PublisherClientMeta):
1971
1981
  try:
1972
1982
  # Send the request.
1973
1983
  response = rpc(
1974
- request,
1984
+ request_pb,
1975
1985
  retry=retry,
1976
1986
  timeout=timeout,
1977
1987
  metadata=metadata,
@@ -1985,7 +1995,7 @@ class PublisherClient(metaclass=PublisherClientMeta):
1985
1995
 
1986
1996
  def get_iam_policy(
1987
1997
  self,
1988
- request: Optional[iam_policy_pb2.GetIamPolicyRequest] = None,
1998
+ request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None,
1989
1999
  *,
1990
2000
  retry: OptionalRetry = gapic_v1.method.DEFAULT,
1991
2001
  timeout: TimeoutType = gapic_v1.method.DEFAULT,
@@ -2079,8 +2089,12 @@ class PublisherClient(metaclass=PublisherClientMeta):
2079
2089
 
2080
2090
  # The request isn't a proto-plus wrapped type,
2081
2091
  # so it must be constructed via keyword expansion.
2082
- if isinstance(request, dict):
2083
- request = iam_policy_pb2.GetIamPolicyRequest(**request)
2092
+ if request is None:
2093
+ request_pb = iam_policy_pb2.GetIamPolicyRequest()
2094
+ elif isinstance(request, dict):
2095
+ request_pb = iam_policy_pb2.GetIamPolicyRequest(**request)
2096
+ else:
2097
+ request_pb = request
2084
2098
 
2085
2099
  # Wrap the RPC method; this adds retry and timeout information,
2086
2100
  # and friendly error handling.
@@ -2089,7 +2103,9 @@ class PublisherClient(metaclass=PublisherClientMeta):
2089
2103
  # Certain fields should be provided within the metadata header;
2090
2104
  # add these here.
2091
2105
  metadata = tuple(metadata) + (
2092
- gapic_v1.routing_header.to_grpc_metadata((("resource", request.resource),)),
2106
+ gapic_v1.routing_header.to_grpc_metadata(
2107
+ (("resource", request_pb.resource),)
2108
+ ),
2093
2109
  )
2094
2110
 
2095
2111
  # Validate the universe domain.
@@ -2098,7 +2114,7 @@ class PublisherClient(metaclass=PublisherClientMeta):
2098
2114
  try:
2099
2115
  # Send the request.
2100
2116
  response = rpc(
2101
- request,
2117
+ request_pb,
2102
2118
  retry=retry,
2103
2119
  timeout=timeout,
2104
2120
  metadata=metadata,
@@ -2112,7 +2128,7 @@ class PublisherClient(metaclass=PublisherClientMeta):
2112
2128
 
2113
2129
  def test_iam_permissions(
2114
2130
  self,
2115
- request: Optional[iam_policy_pb2.TestIamPermissionsRequest] = None,
2131
+ request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None,
2116
2132
  *,
2117
2133
  retry: OptionalRetry = gapic_v1.method.DEFAULT,
2118
2134
  timeout: TimeoutType = gapic_v1.method.DEFAULT,
@@ -2144,8 +2160,12 @@ class PublisherClient(metaclass=PublisherClientMeta):
2144
2160
 
2145
2161
  # The request isn't a proto-plus wrapped type,
2146
2162
  # so it must be constructed via keyword expansion.
2147
- if isinstance(request, dict):
2148
- request = iam_policy_pb2.TestIamPermissionsRequest(**request)
2163
+ if request is None:
2164
+ request_pb = iam_policy_pb2.TestIamPermissionsRequest()
2165
+ elif isinstance(request, dict):
2166
+ request_pb = iam_policy_pb2.TestIamPermissionsRequest(**request)
2167
+ else:
2168
+ request_pb = request
2149
2169
 
2150
2170
  # Wrap the RPC method; this adds retry and timeout information,
2151
2171
  # and friendly error handling.
@@ -2154,7 +2174,9 @@ class PublisherClient(metaclass=PublisherClientMeta):
2154
2174
  # Certain fields should be provided within the metadata header;
2155
2175
  # add these here.
2156
2176
  metadata = tuple(metadata) + (
2157
- gapic_v1.routing_header.to_grpc_metadata((("resource", request.resource),)),
2177
+ gapic_v1.routing_header.to_grpc_metadata(
2178
+ (("resource", request_pb.resource),)
2179
+ ),
2158
2180
  )
2159
2181
 
2160
2182
  # Validate the universe domain.
@@ -2163,7 +2185,7 @@ class PublisherClient(metaclass=PublisherClientMeta):
2163
2185
  try:
2164
2186
  # Send the request.
2165
2187
  response = rpc(
2166
- request,
2188
+ request_pb,
2167
2189
  retry=retry,
2168
2190
  timeout=timeout,
2169
2191
  metadata=metadata,
@@ -88,6 +88,10 @@ class PublisherTransport(abc.ABC):
88
88
  your own client library.
89
89
  always_use_jwt_access (Optional[bool]): Whether self signed JWT should
90
90
  be used for service account credentials.
91
+ api_audience (Optional[str]): The intended audience for the API calls
92
+ to the service that will be set when using certain 3rd party
93
+ authentication flows. Audience is typically a resource identifier.
94
+ If not set, the host value will be used as a default.
91
95
  """
92
96
 
93
97
  # Save the scopes.
@@ -137,6 +141,8 @@ class PublisherTransport(abc.ABC):
137
141
  host += ":443"
138
142
  self._host = host
139
143
 
144
+ self._wrapped_methods: Dict[Callable, Callable] = {}
145
+
140
146
  @property
141
147
  def host(self):
142
148
  return self._host
@@ -59,7 +59,7 @@ class _LoggingClientInterceptor(grpc.UnaryUnaryClientInterceptor): # pragma: NO
59
59
  elif isinstance(request, google.protobuf.message.Message):
60
60
  request_payload = MessageToJson(request)
61
61
  else:
62
- request_payload = f"{type(request).__name__}: {pickle.dumps(request)}"
62
+ request_payload = f"{type(request).__name__}: {pickle.dumps(request)!r}"
63
63
 
64
64
  request_metadata = {
65
65
  key: value.decode("utf-8") if isinstance(value, bytes) else value
@@ -94,7 +94,7 @@ class _LoggingClientInterceptor(grpc.UnaryUnaryClientInterceptor): # pragma: NO
94
94
  elif isinstance(result, google.protobuf.message.Message):
95
95
  response_payload = MessageToJson(result)
96
96
  else:
97
- response_payload = f"{type(result).__name__}: {pickle.dumps(result)}"
97
+ response_payload = f"{type(result).__name__}: {pickle.dumps(result)!r}"
98
98
  grpc_response = {
99
99
  "payload": response_payload,
100
100
  "metadata": metadata,
@@ -190,6 +190,10 @@ class PublisherGrpcTransport(PublisherTransport):
190
190
  your own client library.
191
191
  always_use_jwt_access (Optional[bool]): Whether self signed JWT should
192
192
  be used for service account credentials.
193
+ api_audience (Optional[str]): The intended audience for the API calls
194
+ to the service that will be set when using certain 3rd party
195
+ authentication flows. Audience is typically a resource identifier.
196
+ If not set, the host value will be used as a default.
193
197
 
194
198
  Raises:
195
199
  google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport
@@ -65,7 +65,7 @@ class _LoggingClientAIOInterceptor(
65
65
  elif isinstance(request, google.protobuf.message.Message):
66
66
  request_payload = MessageToJson(request)
67
67
  else:
68
- request_payload = f"{type(request).__name__}: {pickle.dumps(request)}"
68
+ request_payload = f"{type(request).__name__}: {pickle.dumps(request)!r}"
69
69
 
70
70
  request_metadata = {
71
71
  key: value.decode("utf-8") if isinstance(value, bytes) else value
@@ -100,7 +100,7 @@ class _LoggingClientAIOInterceptor(
100
100
  elif isinstance(result, google.protobuf.message.Message):
101
101
  response_payload = MessageToJson(result)
102
102
  else:
103
- response_payload = f"{type(result).__name__}: {pickle.dumps(result)}"
103
+ response_payload = f"{type(result).__name__}: {pickle.dumps(result)!r}"
104
104
  grpc_response = {
105
105
  "payload": response_payload,
106
106
  "metadata": metadata,
@@ -241,6 +241,10 @@ class PublisherGrpcAsyncIOTransport(PublisherTransport):
241
241
  your own client library.
242
242
  always_use_jwt_access (Optional[bool]): Whether self signed JWT should
243
243
  be used for service account credentials.
244
+ api_audience (Optional[str]): The intended audience for the API calls
245
+ to the service that will be set when using certain 3rd party
246
+ authentication flows. Audience is typically a resource identifier.
247
+ If not set, the host value will be used as a default.
244
248
 
245
249
  Raises:
246
250
  google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport
@@ -667,6 +667,12 @@ class PublisherRestTransport(_BasePublisherRestTransport):
667
667
  url_scheme: the protocol scheme for the API endpoint. Normally
668
668
  "https", but for testing or local servers,
669
669
  "http" can be specified.
670
+ interceptor (Optional[PublisherRestInterceptor]): Interceptor used
671
+ to manipulate requests, request metadata, and responses.
672
+ api_audience (Optional[str]): The intended audience for the API calls
673
+ to the service that will be set when using certain 3rd party
674
+ authentication flows. Audience is typically a resource identifier.
675
+ If not set, the host value will be used as a default.
670
676
  """
671
677
  # Run the base constructor
672
678
  # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc.