google-cloud-spanner 3.55.0__py3-none-any.whl

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 (119) hide show
  1. google/cloud/spanner.py +47 -0
  2. google/cloud/spanner_admin_database_v1/__init__.py +146 -0
  3. google/cloud/spanner_admin_database_v1/gapic_metadata.json +418 -0
  4. google/cloud/spanner_admin_database_v1/gapic_version.py +16 -0
  5. google/cloud/spanner_admin_database_v1/py.typed +2 -0
  6. google/cloud/spanner_admin_database_v1/services/__init__.py +15 -0
  7. google/cloud/spanner_admin_database_v1/services/database_admin/__init__.py +22 -0
  8. google/cloud/spanner_admin_database_v1/services/database_admin/async_client.py +4097 -0
  9. google/cloud/spanner_admin_database_v1/services/database_admin/client.py +4602 -0
  10. google/cloud/spanner_admin_database_v1/services/database_admin/pagers.py +989 -0
  11. google/cloud/spanner_admin_database_v1/services/database_admin/transports/__init__.py +38 -0
  12. google/cloud/spanner_admin_database_v1/services/database_admin/transports/base.py +820 -0
  13. google/cloud/spanner_admin_database_v1/services/database_admin/transports/grpc.py +1303 -0
  14. google/cloud/spanner_admin_database_v1/services/database_admin/transports/grpc_asyncio.py +1688 -0
  15. google/cloud/spanner_admin_database_v1/services/database_admin/transports/rest.py +6512 -0
  16. google/cloud/spanner_admin_database_v1/services/database_admin/transports/rest_base.py +1650 -0
  17. google/cloud/spanner_admin_database_v1/types/__init__.py +144 -0
  18. google/cloud/spanner_admin_database_v1/types/backup.py +1106 -0
  19. google/cloud/spanner_admin_database_v1/types/backup_schedule.py +369 -0
  20. google/cloud/spanner_admin_database_v1/types/common.py +180 -0
  21. google/cloud/spanner_admin_database_v1/types/spanner_database_admin.py +1303 -0
  22. google/cloud/spanner_admin_instance_v1/__init__.py +110 -0
  23. google/cloud/spanner_admin_instance_v1/gapic_metadata.json +343 -0
  24. google/cloud/spanner_admin_instance_v1/gapic_version.py +16 -0
  25. google/cloud/spanner_admin_instance_v1/py.typed +2 -0
  26. google/cloud/spanner_admin_instance_v1/services/__init__.py +15 -0
  27. google/cloud/spanner_admin_instance_v1/services/instance_admin/__init__.py +22 -0
  28. google/cloud/spanner_admin_instance_v1/services/instance_admin/async_client.py +3466 -0
  29. google/cloud/spanner_admin_instance_v1/services/instance_admin/client.py +3881 -0
  30. google/cloud/spanner_admin_instance_v1/services/instance_admin/pagers.py +856 -0
  31. google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/__init__.py +38 -0
  32. google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/base.py +545 -0
  33. google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/grpc.py +1347 -0
  34. google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/grpc_asyncio.py +1539 -0
  35. google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/rest.py +4834 -0
  36. google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/rest_base.py +1198 -0
  37. google/cloud/spanner_admin_instance_v1/types/__init__.py +104 -0
  38. google/cloud/spanner_admin_instance_v1/types/common.py +99 -0
  39. google/cloud/spanner_admin_instance_v1/types/spanner_instance_admin.py +2375 -0
  40. google/cloud/spanner_dbapi/__init__.py +93 -0
  41. google/cloud/spanner_dbapi/_helpers.py +113 -0
  42. google/cloud/spanner_dbapi/batch_dml_executor.py +135 -0
  43. google/cloud/spanner_dbapi/checksum.py +80 -0
  44. google/cloud/spanner_dbapi/client_side_statement_executor.py +140 -0
  45. google/cloud/spanner_dbapi/client_side_statement_parser.py +106 -0
  46. google/cloud/spanner_dbapi/connection.py +818 -0
  47. google/cloud/spanner_dbapi/cursor.py +609 -0
  48. google/cloud/spanner_dbapi/exceptions.py +172 -0
  49. google/cloud/spanner_dbapi/parse_utils.py +392 -0
  50. google/cloud/spanner_dbapi/parsed_statement.py +63 -0
  51. google/cloud/spanner_dbapi/parser.py +258 -0
  52. google/cloud/spanner_dbapi/partition_helper.py +41 -0
  53. google/cloud/spanner_dbapi/transaction_helper.py +294 -0
  54. google/cloud/spanner_dbapi/types.py +106 -0
  55. google/cloud/spanner_dbapi/utils.py +147 -0
  56. google/cloud/spanner_dbapi/version.py +20 -0
  57. google/cloud/spanner_v1/__init__.py +154 -0
  58. google/cloud/spanner_v1/_helpers.py +751 -0
  59. google/cloud/spanner_v1/_opentelemetry_tracing.py +165 -0
  60. google/cloud/spanner_v1/backup.py +397 -0
  61. google/cloud/spanner_v1/batch.py +433 -0
  62. google/cloud/spanner_v1/client.py +538 -0
  63. google/cloud/spanner_v1/data_types.py +350 -0
  64. google/cloud/spanner_v1/database.py +1968 -0
  65. google/cloud/spanner_v1/database_sessions_manager.py +249 -0
  66. google/cloud/spanner_v1/gapic_metadata.json +268 -0
  67. google/cloud/spanner_v1/gapic_version.py +16 -0
  68. google/cloud/spanner_v1/instance.py +735 -0
  69. google/cloud/spanner_v1/keyset.py +193 -0
  70. google/cloud/spanner_v1/merged_result_set.py +146 -0
  71. google/cloud/spanner_v1/metrics/constants.py +71 -0
  72. google/cloud/spanner_v1/metrics/metrics_capture.py +75 -0
  73. google/cloud/spanner_v1/metrics/metrics_exporter.py +384 -0
  74. google/cloud/spanner_v1/metrics/metrics_interceptor.py +156 -0
  75. google/cloud/spanner_v1/metrics/metrics_tracer.py +588 -0
  76. google/cloud/spanner_v1/metrics/metrics_tracer_factory.py +328 -0
  77. google/cloud/spanner_v1/metrics/spanner_metrics_tracer_factory.py +172 -0
  78. google/cloud/spanner_v1/param_types.py +110 -0
  79. google/cloud/spanner_v1/pool.py +813 -0
  80. google/cloud/spanner_v1/py.typed +2 -0
  81. google/cloud/spanner_v1/request_id_header.py +64 -0
  82. google/cloud/spanner_v1/services/__init__.py +15 -0
  83. google/cloud/spanner_v1/services/spanner/__init__.py +22 -0
  84. google/cloud/spanner_v1/services/spanner/async_client.py +2205 -0
  85. google/cloud/spanner_v1/services/spanner/client.py +2624 -0
  86. google/cloud/spanner_v1/services/spanner/pagers.py +196 -0
  87. google/cloud/spanner_v1/services/spanner/transports/__init__.py +38 -0
  88. google/cloud/spanner_v1/services/spanner/transports/base.py +520 -0
  89. google/cloud/spanner_v1/services/spanner/transports/grpc.py +911 -0
  90. google/cloud/spanner_v1/services/spanner/transports/grpc_asyncio.py +1144 -0
  91. google/cloud/spanner_v1/services/spanner/transports/rest.py +3468 -0
  92. google/cloud/spanner_v1/services/spanner/transports/rest_base.py +981 -0
  93. google/cloud/spanner_v1/session.py +631 -0
  94. google/cloud/spanner_v1/session_options.py +133 -0
  95. google/cloud/spanner_v1/snapshot.py +1057 -0
  96. google/cloud/spanner_v1/streamed.py +402 -0
  97. google/cloud/spanner_v1/table.py +181 -0
  98. google/cloud/spanner_v1/testing/__init__.py +0 -0
  99. google/cloud/spanner_v1/testing/database_test.py +121 -0
  100. google/cloud/spanner_v1/testing/interceptors.py +118 -0
  101. google/cloud/spanner_v1/testing/mock_database_admin.py +38 -0
  102. google/cloud/spanner_v1/testing/mock_spanner.py +261 -0
  103. google/cloud/spanner_v1/testing/spanner_database_admin_pb2_grpc.py +1267 -0
  104. google/cloud/spanner_v1/testing/spanner_pb2_grpc.py +882 -0
  105. google/cloud/spanner_v1/transaction.py +747 -0
  106. google/cloud/spanner_v1/types/__init__.py +118 -0
  107. google/cloud/spanner_v1/types/commit_response.py +94 -0
  108. google/cloud/spanner_v1/types/keys.py +248 -0
  109. google/cloud/spanner_v1/types/mutation.py +201 -0
  110. google/cloud/spanner_v1/types/query_plan.py +220 -0
  111. google/cloud/spanner_v1/types/result_set.py +379 -0
  112. google/cloud/spanner_v1/types/spanner.py +1815 -0
  113. google/cloud/spanner_v1/types/transaction.py +818 -0
  114. google/cloud/spanner_v1/types/type.py +288 -0
  115. google_cloud_spanner-3.55.0.dist-info/LICENSE +202 -0
  116. google_cloud_spanner-3.55.0.dist-info/METADATA +318 -0
  117. google_cloud_spanner-3.55.0.dist-info/RECORD +119 -0
  118. google_cloud_spanner-3.55.0.dist-info/WHEEL +5 -0
  119. google_cloud_spanner-3.55.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,249 @@
1
+ # Copyright 2025 Google LLC All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ import datetime
15
+ import threading
16
+ import time
17
+ import weakref
18
+
19
+ from google.api_core.exceptions import MethodNotImplemented
20
+
21
+ from google.cloud.spanner_v1._opentelemetry_tracing import (
22
+ get_current_span,
23
+ add_span_event,
24
+ )
25
+ from google.cloud.spanner_v1.session import Session
26
+ from google.cloud.spanner_v1.session_options import TransactionType
27
+
28
+
29
+ class DatabaseSessionsManager(object):
30
+ """Manages sessions for a Cloud Spanner database.
31
+ Sessions can be checked out from the database session manager for a specific
32
+ transaction type using :meth:`get_session`, and returned to the session manager
33
+ using :meth:`put_session`.
34
+ The sessions returned by the session manager depend on the client's session options (see
35
+ :class:`~google.cloud.spanner_v1.session_options.SessionOptions`) and the provided session
36
+ pool (see :class:`~google.cloud.spanner_v1.pool.AbstractSessionPool`).
37
+ :type database: :class:`~google.cloud.spanner_v1.database.Database`
38
+ :param database: The database to manage sessions for.
39
+ :type pool: :class:`~google.cloud.spanner_v1.pool.AbstractSessionPool`
40
+ :param pool: The pool to get non-multiplexed sessions from.
41
+ """
42
+
43
+ # Intervals for the maintenance thread to check and refresh the multiplexed session.
44
+ _MAINTENANCE_THREAD_POLLING_INTERVAL = datetime.timedelta(minutes=10)
45
+ _MAINTENANCE_THREAD_REFRESH_INTERVAL = datetime.timedelta(days=7)
46
+
47
+ def __init__(self, database, pool):
48
+ self._database = database
49
+ self._pool = pool
50
+
51
+ # Declare multiplexed session attributes. When a multiplexed session for the
52
+ # database session manager is created, a maintenance thread is initialized to
53
+ # periodically delete and recreate the multiplexed session so that it remains
54
+ # valid. Because of this concurrency, we need to use a lock whenever we access
55
+ # the multiplexed session to avoid any race conditions. We also create an event
56
+ # so that the thread can terminate if the use of multiplexed session has been
57
+ # disabled for all transactions.
58
+ self._multiplexed_session = None
59
+ self._multiplexed_session_maintenance_thread = None
60
+ self._multiplexed_session_lock = threading.Lock()
61
+ self._is_multiplexed_sessions_disabled_event = threading.Event()
62
+
63
+ @property
64
+ def _logger(self):
65
+ """The logger used by this database session manager.
66
+
67
+ :rtype: :class:`logging.Logger`
68
+ :returns: The logger.
69
+ """
70
+ return self._database.logger
71
+
72
+ def get_session(self, transaction_type: TransactionType) -> Session:
73
+ """Returns a session for the given transaction type from the database session manager.
74
+ :rtype: :class:`~google.cloud.spanner_v1.session.Session`
75
+ :returns: a session for the given transaction type.
76
+ """
77
+
78
+ session_options = self._database.session_options
79
+ use_multiplexed = session_options.use_multiplexed(transaction_type)
80
+
81
+ if use_multiplexed and transaction_type == TransactionType.READ_WRITE:
82
+ raise NotImplementedError(
83
+ f"Multiplexed sessions are not yet supported for {transaction_type} transactions."
84
+ )
85
+
86
+ if use_multiplexed:
87
+ try:
88
+ session = self._get_multiplexed_session()
89
+
90
+ # If multiplexed sessions are not supported, disable
91
+ # them for all transactions and return a non-multiplexed session.
92
+ except MethodNotImplemented:
93
+ self._disable_multiplexed_sessions()
94
+ session = self._pool.get()
95
+
96
+ else:
97
+ session = self._pool.get()
98
+
99
+ add_span_event(
100
+ get_current_span(),
101
+ "Using session",
102
+ {"id": session.session_id, "multiplexed": session.is_multiplexed},
103
+ )
104
+
105
+ return session
106
+
107
+ def put_session(self, session: Session) -> None:
108
+ """Returns the session to the database session manager.
109
+ :type session: :class:`~google.cloud.spanner_v1.session.Session`
110
+ :param session: The session to return to the database session manager.
111
+ """
112
+
113
+ add_span_event(
114
+ get_current_span(),
115
+ "Returning session",
116
+ {"id": session.session_id, "multiplexed": session.is_multiplexed},
117
+ )
118
+
119
+ # No action is needed for multiplexed sessions: the session
120
+ # pool is only used for managing non-multiplexed sessions,
121
+ # since they can only process one transaction at a time.
122
+ if not session.is_multiplexed:
123
+ self._pool.put(session)
124
+
125
+ def _get_multiplexed_session(self) -> Session:
126
+ """Returns a multiplexed session from the database session manager.
127
+ If the multiplexed session is not defined, creates a new multiplexed
128
+ session and starts a maintenance thread to periodically delete and
129
+ recreate it so that it remains valid. Otherwise, simply returns the
130
+ current multiplexed session.
131
+ :raises MethodNotImplemented:
132
+ if multiplexed sessions are not supported.
133
+ :rtype: :class:`~google.cloud.spanner_v1.session.Session`
134
+ :returns: a multiplexed session.
135
+ """
136
+
137
+ with self._multiplexed_session_lock:
138
+ if self._multiplexed_session is None:
139
+ self._multiplexed_session = self._build_multiplexed_session()
140
+
141
+ # Build and start a thread to maintain the multiplexed session.
142
+ self._multiplexed_session_maintenance_thread = (
143
+ self._build_maintenance_thread()
144
+ )
145
+ self._multiplexed_session_maintenance_thread.start()
146
+
147
+ return self._multiplexed_session
148
+
149
+ def _build_multiplexed_session(self) -> Session:
150
+ """Builds and returns a new multiplexed session for the database session manager.
151
+ :raises MethodNotImplemented:
152
+ if multiplexed sessions are not supported.
153
+ :rtype: :class:`~google.cloud.spanner_v1.session.Session`
154
+ :returns: a new multiplexed session.
155
+ """
156
+
157
+ session = Session(
158
+ database=self._database,
159
+ database_role=self._database.database_role,
160
+ is_multiplexed=True,
161
+ )
162
+
163
+ session.create()
164
+
165
+ self._logger.info("Created multiplexed session.")
166
+
167
+ return session
168
+
169
+ def _disable_multiplexed_sessions(self) -> None:
170
+ """Disables multiplexed sessions for all transactions."""
171
+
172
+ self._multiplexed_session = None
173
+ self._is_multiplexed_sessions_disabled_event.set()
174
+ self._database.session_options.disable_multiplexed(self._logger)
175
+
176
+ def _build_maintenance_thread(self) -> threading.Thread:
177
+ """Builds and returns a multiplexed session maintenance thread for
178
+ the database session manager. This thread will periodically delete
179
+ and recreate the multiplexed session to ensure that it is always valid.
180
+ :rtype: :class:`threading.Thread`
181
+ :returns: a multiplexed session maintenance thread.
182
+ """
183
+
184
+ # Use a weak reference to the database session manager to avoid
185
+ # creating a circular reference that would prevent the database
186
+ # session manager from being garbage collected.
187
+ session_manager_ref = weakref.ref(self)
188
+
189
+ return threading.Thread(
190
+ target=self._maintain_multiplexed_session,
191
+ name=f"maintenance-multiplexed-session-{self._multiplexed_session.name}",
192
+ args=[session_manager_ref],
193
+ daemon=True,
194
+ )
195
+
196
+ @staticmethod
197
+ def _maintain_multiplexed_session(session_manager_ref) -> None:
198
+ """Maintains the multiplexed session for the database session manager.
199
+ This method will delete and recreate the referenced database session manager's
200
+ multiplexed session to ensure that it is always valid. The method will run until
201
+ the database session manager is deleted, the multiplexed session is deleted, or
202
+ building a multiplexed session fails.
203
+ :type session_manager_ref: :class:`_weakref.ReferenceType`
204
+ :param session_manager_ref: A weak reference to the database session manager.
205
+ """
206
+
207
+ session_manager = session_manager_ref()
208
+ if session_manager is None:
209
+ return
210
+
211
+ polling_interval_seconds = (
212
+ session_manager._MAINTENANCE_THREAD_POLLING_INTERVAL.total_seconds()
213
+ )
214
+ refresh_interval_seconds = (
215
+ session_manager._MAINTENANCE_THREAD_REFRESH_INTERVAL.total_seconds()
216
+ )
217
+
218
+ session_created_time = time.time()
219
+
220
+ while True:
221
+ # Terminate the thread is the database session manager has been deleted.
222
+ session_manager = session_manager_ref()
223
+ if session_manager is None:
224
+ return
225
+
226
+ # Terminate the thread if the use of multiplexed sessions has been disabled.
227
+ if session_manager._is_multiplexed_sessions_disabled_event.is_set():
228
+ return
229
+
230
+ # Wait for until the refresh interval has elapsed.
231
+ if time.time() - session_created_time < refresh_interval_seconds:
232
+ time.sleep(polling_interval_seconds)
233
+ continue
234
+
235
+ with session_manager._multiplexed_session_lock:
236
+ session_manager._multiplexed_session.delete()
237
+
238
+ try:
239
+ session_manager._multiplexed_session = (
240
+ session_manager._build_multiplexed_session()
241
+ )
242
+
243
+ # Disable multiplexed sessions for all transactions and terminate
244
+ # the thread if building a multiplexed session fails.
245
+ except MethodNotImplemented:
246
+ session_manager._disable_multiplexed_sessions()
247
+ return
248
+
249
+ session_created_time = time.time()
@@ -0,0 +1,268 @@
1
+ {
2
+ "comment": "This file maps proto services/RPCs to the corresponding library clients/methods",
3
+ "language": "python",
4
+ "libraryPackage": "google.cloud.spanner_v1",
5
+ "protoPackage": "google.spanner.v1",
6
+ "schema": "1.0",
7
+ "services": {
8
+ "Spanner": {
9
+ "clients": {
10
+ "grpc": {
11
+ "libraryClient": "SpannerClient",
12
+ "rpcs": {
13
+ "BatchCreateSessions": {
14
+ "methods": [
15
+ "batch_create_sessions"
16
+ ]
17
+ },
18
+ "BatchWrite": {
19
+ "methods": [
20
+ "batch_write"
21
+ ]
22
+ },
23
+ "BeginTransaction": {
24
+ "methods": [
25
+ "begin_transaction"
26
+ ]
27
+ },
28
+ "Commit": {
29
+ "methods": [
30
+ "commit"
31
+ ]
32
+ },
33
+ "CreateSession": {
34
+ "methods": [
35
+ "create_session"
36
+ ]
37
+ },
38
+ "DeleteSession": {
39
+ "methods": [
40
+ "delete_session"
41
+ ]
42
+ },
43
+ "ExecuteBatchDml": {
44
+ "methods": [
45
+ "execute_batch_dml"
46
+ ]
47
+ },
48
+ "ExecuteSql": {
49
+ "methods": [
50
+ "execute_sql"
51
+ ]
52
+ },
53
+ "ExecuteStreamingSql": {
54
+ "methods": [
55
+ "execute_streaming_sql"
56
+ ]
57
+ },
58
+ "GetSession": {
59
+ "methods": [
60
+ "get_session"
61
+ ]
62
+ },
63
+ "ListSessions": {
64
+ "methods": [
65
+ "list_sessions"
66
+ ]
67
+ },
68
+ "PartitionQuery": {
69
+ "methods": [
70
+ "partition_query"
71
+ ]
72
+ },
73
+ "PartitionRead": {
74
+ "methods": [
75
+ "partition_read"
76
+ ]
77
+ },
78
+ "Read": {
79
+ "methods": [
80
+ "read"
81
+ ]
82
+ },
83
+ "Rollback": {
84
+ "methods": [
85
+ "rollback"
86
+ ]
87
+ },
88
+ "StreamingRead": {
89
+ "methods": [
90
+ "streaming_read"
91
+ ]
92
+ }
93
+ }
94
+ },
95
+ "grpc-async": {
96
+ "libraryClient": "SpannerAsyncClient",
97
+ "rpcs": {
98
+ "BatchCreateSessions": {
99
+ "methods": [
100
+ "batch_create_sessions"
101
+ ]
102
+ },
103
+ "BatchWrite": {
104
+ "methods": [
105
+ "batch_write"
106
+ ]
107
+ },
108
+ "BeginTransaction": {
109
+ "methods": [
110
+ "begin_transaction"
111
+ ]
112
+ },
113
+ "Commit": {
114
+ "methods": [
115
+ "commit"
116
+ ]
117
+ },
118
+ "CreateSession": {
119
+ "methods": [
120
+ "create_session"
121
+ ]
122
+ },
123
+ "DeleteSession": {
124
+ "methods": [
125
+ "delete_session"
126
+ ]
127
+ },
128
+ "ExecuteBatchDml": {
129
+ "methods": [
130
+ "execute_batch_dml"
131
+ ]
132
+ },
133
+ "ExecuteSql": {
134
+ "methods": [
135
+ "execute_sql"
136
+ ]
137
+ },
138
+ "ExecuteStreamingSql": {
139
+ "methods": [
140
+ "execute_streaming_sql"
141
+ ]
142
+ },
143
+ "GetSession": {
144
+ "methods": [
145
+ "get_session"
146
+ ]
147
+ },
148
+ "ListSessions": {
149
+ "methods": [
150
+ "list_sessions"
151
+ ]
152
+ },
153
+ "PartitionQuery": {
154
+ "methods": [
155
+ "partition_query"
156
+ ]
157
+ },
158
+ "PartitionRead": {
159
+ "methods": [
160
+ "partition_read"
161
+ ]
162
+ },
163
+ "Read": {
164
+ "methods": [
165
+ "read"
166
+ ]
167
+ },
168
+ "Rollback": {
169
+ "methods": [
170
+ "rollback"
171
+ ]
172
+ },
173
+ "StreamingRead": {
174
+ "methods": [
175
+ "streaming_read"
176
+ ]
177
+ }
178
+ }
179
+ },
180
+ "rest": {
181
+ "libraryClient": "SpannerClient",
182
+ "rpcs": {
183
+ "BatchCreateSessions": {
184
+ "methods": [
185
+ "batch_create_sessions"
186
+ ]
187
+ },
188
+ "BatchWrite": {
189
+ "methods": [
190
+ "batch_write"
191
+ ]
192
+ },
193
+ "BeginTransaction": {
194
+ "methods": [
195
+ "begin_transaction"
196
+ ]
197
+ },
198
+ "Commit": {
199
+ "methods": [
200
+ "commit"
201
+ ]
202
+ },
203
+ "CreateSession": {
204
+ "methods": [
205
+ "create_session"
206
+ ]
207
+ },
208
+ "DeleteSession": {
209
+ "methods": [
210
+ "delete_session"
211
+ ]
212
+ },
213
+ "ExecuteBatchDml": {
214
+ "methods": [
215
+ "execute_batch_dml"
216
+ ]
217
+ },
218
+ "ExecuteSql": {
219
+ "methods": [
220
+ "execute_sql"
221
+ ]
222
+ },
223
+ "ExecuteStreamingSql": {
224
+ "methods": [
225
+ "execute_streaming_sql"
226
+ ]
227
+ },
228
+ "GetSession": {
229
+ "methods": [
230
+ "get_session"
231
+ ]
232
+ },
233
+ "ListSessions": {
234
+ "methods": [
235
+ "list_sessions"
236
+ ]
237
+ },
238
+ "PartitionQuery": {
239
+ "methods": [
240
+ "partition_query"
241
+ ]
242
+ },
243
+ "PartitionRead": {
244
+ "methods": [
245
+ "partition_read"
246
+ ]
247
+ },
248
+ "Read": {
249
+ "methods": [
250
+ "read"
251
+ ]
252
+ },
253
+ "Rollback": {
254
+ "methods": [
255
+ "rollback"
256
+ ]
257
+ },
258
+ "StreamingRead": {
259
+ "methods": [
260
+ "streaming_read"
261
+ ]
262
+ }
263
+ }
264
+ }
265
+ }
266
+ }
267
+ }
268
+ }
@@ -0,0 +1,16 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright 2022 Google LLC
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ __version__ = "3.55.0" # {x-release-please-version}