google-cloud-spanner 3.59.0__tar.gz → 3.61.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.
- {google_cloud_spanner-3.59.0/google_cloud_spanner.egg-info → google_cloud_spanner-3.61.0}/PKG-INFO +8 -8
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/__init__.py +104 -0
- google_cloud_spanner-3.61.0/google/cloud/spanner_admin_database_v1/gapic_version.py +16 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/services/database_admin/client.py +32 -14
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/services/database_admin/transports/base.py +3 -2
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/services/database_admin/transports/grpc.py +6 -3
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/services/database_admin/transports/grpc_asyncio.py +6 -3
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/services/database_admin/transports/rest.py +3 -2
- google_cloud_spanner-3.61.0/google/cloud/spanner_admin_instance_v1/__init__.py +214 -0
- google_cloud_spanner-3.61.0/google/cloud/spanner_admin_instance_v1/gapic_version.py +16 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/client.py +32 -14
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/base.py +3 -2
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/grpc.py +6 -3
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/grpc_asyncio.py +6 -3
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/rest.py +3 -2
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_instance_v1/types/spanner_instance_admin.py +11 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_dbapi/connection.py +6 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_dbapi/version.py +2 -2
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/_helpers.py +49 -4
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/_opentelemetry_tracing.py +16 -20
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/client.py +38 -5
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/database.py +20 -1
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/database_sessions_manager.py +3 -2
- google_cloud_spanner-3.61.0/google/cloud/spanner_v1/gapic_version.py +16 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/instance.py +2 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/metrics/constants.py +0 -1
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/metrics/spanner_metrics_tracer_factory.py +3 -38
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/request_id_header.py +1 -1
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/services/spanner/async_client.py +6 -4
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/services/spanner/client.py +38 -18
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/services/spanner/transports/base.py +3 -2
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/services/spanner/transports/grpc.py +6 -3
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/services/spanner/transports/grpc_asyncio.py +6 -3
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/services/spanner/transports/rest.py +3 -2
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/session.py +44 -42
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/snapshot.py +6 -2
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/testing/database_test.py +12 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/transaction.py +6 -2
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/types/__init__.py +18 -0
- google_cloud_spanner-3.61.0/google/cloud/spanner_v1/types/location.py +677 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/types/mutation.py +94 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/types/query_plan.py +53 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/types/result_set.py +14 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/types/spanner.py +36 -7
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/types/transaction.py +5 -4
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0/google_cloud_spanner.egg-info}/PKG-INFO +8 -8
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google_cloud_spanner.egg-info/SOURCES.txt +2 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google_cloud_spanner.egg-info/requires.txt +6 -8
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/setup.py +13 -11
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/_helpers.py +6 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/conftest.py +18 -2
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/test_backup_api.py +6 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/test_database_api.py +15 -2
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/test_dbapi.py +7 -1
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/test_instance_api.py +1 -0
- google_cloud_spanner-3.61.0/tests/system/test_metrics.py +92 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/test_session_api.py +8 -4
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/gapic/spanner_admin_database_v1/test_database_admin.py +231 -29
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/gapic/spanner_admin_instance_v1/test_instance_admin.py +231 -29
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/gapic/spanner_v1/test_spanner.py +232 -29
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test__helpers.py +47 -1
- google_cloud_spanner-3.61.0/tests/unit/test__opentelemetry_tracing.py +222 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_batch.py +117 -23
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_client.py +34 -3
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_database.py +4 -1
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_pool.py +208 -41
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_session.py +100 -75
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_snapshot.py +350 -113
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_spanner.py +48 -68
- google_cloud_spanner-3.61.0/tests/unit/test_spanner_metrics_tracer_factory.py +47 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_transaction.py +218 -47
- google_cloud_spanner-3.59.0/google/cloud/spanner_admin_database_v1/gapic_version.py +0 -16
- google_cloud_spanner-3.59.0/google/cloud/spanner_admin_instance_v1/__init__.py +0 -110
- google_cloud_spanner-3.59.0/google/cloud/spanner_admin_instance_v1/gapic_version.py +0 -16
- google_cloud_spanner-3.59.0/google/cloud/spanner_v1/gapic_version.py +0 -16
- google_cloud_spanner-3.59.0/tests/unit/test__opentelemetry_tracing.py +0 -233
- google_cloud_spanner-3.59.0/tests/unit/test_spanner_metrics_tracer_factory.py +0 -97
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/LICENSE +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/MANIFEST.in +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/README.rst +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/gapic_metadata.json +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/py.typed +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/services/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/services/database_admin/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/services/database_admin/async_client.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/services/database_admin/pagers.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/services/database_admin/transports/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/services/database_admin/transports/rest_base.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/types/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/types/backup.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/types/backup_schedule.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/types/common.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_database_v1/types/spanner_database_admin.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_instance_v1/gapic_metadata.json +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_instance_v1/py.typed +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_instance_v1/services/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/async_client.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/pagers.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/rest_base.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_instance_v1/types/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_admin_instance_v1/types/common.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_dbapi/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_dbapi/_helpers.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_dbapi/batch_dml_executor.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_dbapi/checksum.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_dbapi/client_side_statement_executor.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_dbapi/client_side_statement_parser.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_dbapi/cursor.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_dbapi/exceptions.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_dbapi/parse_utils.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_dbapi/parsed_statement.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_dbapi/parser.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_dbapi/partition_helper.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_dbapi/transaction_helper.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_dbapi/types.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_dbapi/utils.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/backup.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/batch.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/data_types.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/gapic_metadata.json +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/keyset.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/merged_result_set.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/metrics/metrics_capture.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/metrics/metrics_exporter.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/metrics/metrics_interceptor.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/metrics/metrics_tracer.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/metrics/metrics_tracer_factory.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/param_types.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/pool.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/py.typed +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/services/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/services/spanner/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/services/spanner/pagers.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/services/spanner/transports/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/services/spanner/transports/rest_base.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/streamed.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/table.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/testing/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/testing/interceptors.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/testing/mock_database_admin.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/testing/mock_spanner.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/testing/spanner_database_admin_pb2_grpc.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/testing/spanner_pb2_grpc.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/types/change_stream.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/types/commit_response.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/types/keys.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google/cloud/spanner_v1/types/type.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google_cloud_spanner.egg-info/dependency_links.txt +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google_cloud_spanner.egg-info/not-zip-safe +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/google_cloud_spanner.egg-info/top_level.txt +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/setup.cfg +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/_builders.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/_fixtures.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/_helpers.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/mockserver_tests/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/mockserver_tests/mock_server_test_base.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/mockserver_tests/test_aborted_transaction.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/mockserver_tests/test_basics.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/mockserver_tests/test_dbapi_autocommit.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/mockserver_tests/test_dbapi_isolation_level.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/mockserver_tests/test_request_id_header.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/mockserver_tests/test_tags.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/_sample_data.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/test_observability_options.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/test_streaming_chunking.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/test_table_api.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/testdata/descriptors.pb +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/testdata/singer.proto +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/testdata/singer_pb2.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/utils/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/utils/clear_streaming.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/utils/populate_streaming.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/utils/scrub_instances.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/system/utils/streaming_utils.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/gapic/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/gapic/spanner_admin_database_v1/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/gapic/spanner_admin_instance_v1/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/gapic/spanner_v1/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/spanner_dbapi/__init__.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/spanner_dbapi/test__helpers.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/spanner_dbapi/test_batch_dml_executor.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/spanner_dbapi/test_checksum.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/spanner_dbapi/test_client_side_statement_executor.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/spanner_dbapi/test_connect.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/spanner_dbapi/test_connection.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/spanner_dbapi/test_cursor.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/spanner_dbapi/test_globals.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/spanner_dbapi/test_parse_utils.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/spanner_dbapi/test_parser.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/spanner_dbapi/test_transaction_helper.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/spanner_dbapi/test_types.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/spanner_dbapi/test_utils.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/streaming-read-acceptance-test.json +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_atomic_counter.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_backup.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_database_session_manager.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_datatypes.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_instance.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_keyset.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_merged_result_set.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_metrics.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_metrics_capture.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_metrics_exporter.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_metrics_interceptor.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_metrics_tracer.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_metrics_tracer_factory.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_packaging.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_param_types.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_streamed.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/test_table.py +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/testdata/singer.proto +0 -0
- {google_cloud_spanner-3.59.0 → google_cloud_spanner-3.61.0}/tests/unit/testdata/singer_pb2.py +0 -0
{google_cloud_spanner-3.59.0/google_cloud_spanner.egg-info → google_cloud_spanner-3.61.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: google-cloud-spanner
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.61.0
|
|
4
4
|
Summary: Google Cloud Spanner API client library
|
|
5
5
|
Home-page: https://github.com/googleapis/python-spanner
|
|
6
6
|
Author: Google LLC
|
|
@@ -16,6 +16,7 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.10
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
19
20
|
Classifier: Operating System :: OS Independent
|
|
20
21
|
Classifier: Topic :: Internet
|
|
21
22
|
Requires-Python: >=3.9
|
|
@@ -28,13 +29,12 @@ Requires-Dist: sqlparse>=0.4.4
|
|
|
28
29
|
Requires-Dist: proto-plus<2.0.0,>=1.22.2; python_version >= "3.11"
|
|
29
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
31
|
Requires-Dist: grpc-interceptor>=0.15.4
|
|
31
|
-
|
|
32
|
-
Requires-Dist: opentelemetry-
|
|
33
|
-
Requires-Dist: opentelemetry-
|
|
34
|
-
Requires-Dist: opentelemetry-
|
|
35
|
-
Requires-Dist:
|
|
36
|
-
Requires-Dist:
|
|
37
|
-
Requires-Dist: mmh3>=4.1.0; extra == "tracing"
|
|
32
|
+
Requires-Dist: opentelemetry-api>=1.22.0
|
|
33
|
+
Requires-Dist: opentelemetry-sdk>=1.22.0
|
|
34
|
+
Requires-Dist: opentelemetry-semantic-conventions>=0.43b0
|
|
35
|
+
Requires-Dist: opentelemetry-resourcedetector-gcp>=1.8.0a0
|
|
36
|
+
Requires-Dist: google-cloud-monitoring>=2.16.0
|
|
37
|
+
Requires-Dist: mmh3>=4.1.0
|
|
38
38
|
Provides-Extra: libcst
|
|
39
39
|
Requires-Dist: libcst>=0.2.5; extra == "libcst"
|
|
40
40
|
Dynamic: author
|
|
@@ -15,8 +15,18 @@
|
|
|
15
15
|
#
|
|
16
16
|
from google.cloud.spanner_admin_database_v1 import gapic_version as package_version
|
|
17
17
|
|
|
18
|
+
import google.api_core as api_core
|
|
19
|
+
import sys
|
|
20
|
+
|
|
18
21
|
__version__ = package_version.__version__
|
|
19
22
|
|
|
23
|
+
if sys.version_info >= (3, 8): # pragma: NO COVER
|
|
24
|
+
from importlib import metadata
|
|
25
|
+
else: # pragma: NO COVER
|
|
26
|
+
# TODO(https://github.com/googleapis/python-api-core/issues/835): Remove
|
|
27
|
+
# this code path once we drop support for Python 3.7
|
|
28
|
+
import importlib_metadata as metadata
|
|
29
|
+
|
|
20
30
|
|
|
21
31
|
from .services.database_admin import DatabaseAdminClient
|
|
22
32
|
from .services.database_admin import DatabaseAdminAsyncClient
|
|
@@ -83,6 +93,100 @@ from .types.spanner_database_admin import UpdateDatabaseMetadata
|
|
|
83
93
|
from .types.spanner_database_admin import UpdateDatabaseRequest
|
|
84
94
|
from .types.spanner_database_admin import RestoreSourceType
|
|
85
95
|
|
|
96
|
+
if hasattr(api_core, "check_python_version") and hasattr(
|
|
97
|
+
api_core, "check_dependency_versions"
|
|
98
|
+
): # pragma: NO COVER
|
|
99
|
+
api_core.check_python_version("google.cloud.spanner_admin_database_v1") # type: ignore
|
|
100
|
+
api_core.check_dependency_versions("google.cloud.spanner_admin_database_v1") # type: ignore
|
|
101
|
+
else: # pragma: NO COVER
|
|
102
|
+
# An older version of api_core is installed which does not define the
|
|
103
|
+
# functions above. We do equivalent checks manually.
|
|
104
|
+
try:
|
|
105
|
+
import warnings
|
|
106
|
+
import sys
|
|
107
|
+
|
|
108
|
+
_py_version_str = sys.version.split()[0]
|
|
109
|
+
_package_label = "google.cloud.spanner_admin_database_v1"
|
|
110
|
+
if sys.version_info < (3, 9):
|
|
111
|
+
warnings.warn(
|
|
112
|
+
"You are using a non-supported Python version "
|
|
113
|
+
+ f"({_py_version_str}). Google will not post any further "
|
|
114
|
+
+ f"updates to {_package_label} supporting this Python version. "
|
|
115
|
+
+ "Please upgrade to the latest Python version, or at "
|
|
116
|
+
+ f"least to Python 3.9, and then update {_package_label}.",
|
|
117
|
+
FutureWarning,
|
|
118
|
+
)
|
|
119
|
+
if sys.version_info[:2] == (3, 9):
|
|
120
|
+
warnings.warn(
|
|
121
|
+
f"You are using a Python version ({_py_version_str}) "
|
|
122
|
+
+ f"which Google will stop supporting in {_package_label} in "
|
|
123
|
+
+ "January 2026. Please "
|
|
124
|
+
+ "upgrade to the latest Python version, or at "
|
|
125
|
+
+ "least to Python 3.10, before then, and "
|
|
126
|
+
+ f"then update {_package_label}.",
|
|
127
|
+
FutureWarning,
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
def parse_version_to_tuple(version_string: str):
|
|
131
|
+
"""Safely converts a semantic version string to a comparable tuple of integers.
|
|
132
|
+
Example: "4.25.8" -> (4, 25, 8)
|
|
133
|
+
Ignores non-numeric parts and handles common version formats.
|
|
134
|
+
Args:
|
|
135
|
+
version_string: Version string in the format "x.y.z" or "x.y.z<suffix>"
|
|
136
|
+
Returns:
|
|
137
|
+
Tuple of integers for the parsed version string.
|
|
138
|
+
"""
|
|
139
|
+
parts = []
|
|
140
|
+
for part in version_string.split("."):
|
|
141
|
+
try:
|
|
142
|
+
parts.append(int(part))
|
|
143
|
+
except ValueError:
|
|
144
|
+
# If it's a non-numeric part (e.g., '1.0.0b1' -> 'b1'), stop here.
|
|
145
|
+
# This is a simplification compared to 'packaging.parse_version', but sufficient
|
|
146
|
+
# for comparing strictly numeric semantic versions.
|
|
147
|
+
break
|
|
148
|
+
return tuple(parts)
|
|
149
|
+
|
|
150
|
+
def _get_version(dependency_name):
|
|
151
|
+
try:
|
|
152
|
+
version_string: str = metadata.version(dependency_name)
|
|
153
|
+
parsed_version = parse_version_to_tuple(version_string)
|
|
154
|
+
return (parsed_version, version_string)
|
|
155
|
+
except Exception:
|
|
156
|
+
# Catch exceptions from metadata.version() (e.g., PackageNotFoundError)
|
|
157
|
+
# or errors during parse_version_to_tuple
|
|
158
|
+
return (None, "--")
|
|
159
|
+
|
|
160
|
+
_dependency_package = "google.protobuf"
|
|
161
|
+
_next_supported_version = "4.25.8"
|
|
162
|
+
_next_supported_version_tuple = (4, 25, 8)
|
|
163
|
+
_recommendation = " (we recommend 6.x)"
|
|
164
|
+
(_version_used, _version_used_string) = _get_version(_dependency_package)
|
|
165
|
+
if _version_used and _version_used < _next_supported_version_tuple:
|
|
166
|
+
warnings.warn(
|
|
167
|
+
f"Package {_package_label} depends on "
|
|
168
|
+
+ f"{_dependency_package}, currently installed at version "
|
|
169
|
+
+ f"{_version_used_string}. Future updates to "
|
|
170
|
+
+ f"{_package_label} will require {_dependency_package} at "
|
|
171
|
+
+ f"version {_next_supported_version} or higher{_recommendation}."
|
|
172
|
+
+ " Please ensure "
|
|
173
|
+
+ "that either (a) your Python environment doesn't pin the "
|
|
174
|
+
+ f"version of {_dependency_package}, so that updates to "
|
|
175
|
+
+ f"{_package_label} can require the higher version, or "
|
|
176
|
+
+ "(b) you manually update your Python environment to use at "
|
|
177
|
+
+ f"least version {_next_supported_version} of "
|
|
178
|
+
+ f"{_dependency_package}.",
|
|
179
|
+
FutureWarning,
|
|
180
|
+
)
|
|
181
|
+
except Exception:
|
|
182
|
+
warnings.warn(
|
|
183
|
+
"Could not determine the version of Python "
|
|
184
|
+
+ "currently being used. To continue receiving "
|
|
185
|
+
+ "updates for {_package_label}, ensure you are "
|
|
186
|
+
+ "using a supported version of Python; see "
|
|
187
|
+
+ "https://devguide.python.org/versions/"
|
|
188
|
+
)
|
|
189
|
+
|
|
86
190
|
__all__ = (
|
|
87
191
|
"DatabaseAdminAsyncClient",
|
|
88
192
|
"AddSplitPointsRequest",
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Copyright 2025 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.61.0" # {x-release-please-version}
|
|
@@ -172,6 +172,34 @@ class DatabaseAdminClient(metaclass=DatabaseAdminClientMeta):
|
|
|
172
172
|
_DEFAULT_ENDPOINT_TEMPLATE = "spanner.{UNIVERSE_DOMAIN}"
|
|
173
173
|
_DEFAULT_UNIVERSE = "googleapis.com"
|
|
174
174
|
|
|
175
|
+
@staticmethod
|
|
176
|
+
def _use_client_cert_effective():
|
|
177
|
+
"""Returns whether client certificate should be used for mTLS if the
|
|
178
|
+
google-auth version supports should_use_client_cert automatic mTLS enablement.
|
|
179
|
+
|
|
180
|
+
Alternatively, read from the GOOGLE_API_USE_CLIENT_CERTIFICATE env var.
|
|
181
|
+
|
|
182
|
+
Returns:
|
|
183
|
+
bool: whether client certificate should be used for mTLS
|
|
184
|
+
Raises:
|
|
185
|
+
ValueError: (If using a version of google-auth without should_use_client_cert and
|
|
186
|
+
GOOGLE_API_USE_CLIENT_CERTIFICATE is set to an unexpected value.)
|
|
187
|
+
"""
|
|
188
|
+
# check if google-auth version supports should_use_client_cert for automatic mTLS enablement
|
|
189
|
+
if hasattr(mtls, "should_use_client_cert"): # pragma: NO COVER
|
|
190
|
+
return mtls.should_use_client_cert()
|
|
191
|
+
else: # pragma: NO COVER
|
|
192
|
+
# if unsupported, fallback to reading from env var
|
|
193
|
+
use_client_cert_str = os.getenv(
|
|
194
|
+
"GOOGLE_API_USE_CLIENT_CERTIFICATE", "false"
|
|
195
|
+
).lower()
|
|
196
|
+
if use_client_cert_str not in ("true", "false"):
|
|
197
|
+
raise ValueError(
|
|
198
|
+
"Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be"
|
|
199
|
+
" either `true` or `false`"
|
|
200
|
+
)
|
|
201
|
+
return use_client_cert_str == "true"
|
|
202
|
+
|
|
175
203
|
@classmethod
|
|
176
204
|
def from_service_account_info(cls, info: dict, *args, **kwargs):
|
|
177
205
|
"""Creates an instance of this client using the provided credentials
|
|
@@ -518,12 +546,8 @@ class DatabaseAdminClient(metaclass=DatabaseAdminClientMeta):
|
|
|
518
546
|
)
|
|
519
547
|
if client_options is None:
|
|
520
548
|
client_options = client_options_lib.ClientOptions()
|
|
521
|
-
use_client_cert =
|
|
549
|
+
use_client_cert = DatabaseAdminClient._use_client_cert_effective()
|
|
522
550
|
use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto")
|
|
523
|
-
if use_client_cert not in ("true", "false"):
|
|
524
|
-
raise ValueError(
|
|
525
|
-
"Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`"
|
|
526
|
-
)
|
|
527
551
|
if use_mtls_endpoint not in ("auto", "never", "always"):
|
|
528
552
|
raise MutualTLSChannelError(
|
|
529
553
|
"Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`"
|
|
@@ -531,7 +555,7 @@ class DatabaseAdminClient(metaclass=DatabaseAdminClientMeta):
|
|
|
531
555
|
|
|
532
556
|
# Figure out the client cert source to use.
|
|
533
557
|
client_cert_source = None
|
|
534
|
-
if use_client_cert
|
|
558
|
+
if use_client_cert:
|
|
535
559
|
if client_options.client_cert_source:
|
|
536
560
|
client_cert_source = client_options.client_cert_source
|
|
537
561
|
elif mtls.has_default_client_cert_source():
|
|
@@ -563,20 +587,14 @@ class DatabaseAdminClient(metaclass=DatabaseAdminClientMeta):
|
|
|
563
587
|
google.auth.exceptions.MutualTLSChannelError: If GOOGLE_API_USE_MTLS_ENDPOINT
|
|
564
588
|
is not any of ["auto", "never", "always"].
|
|
565
589
|
"""
|
|
566
|
-
use_client_cert =
|
|
567
|
-
"GOOGLE_API_USE_CLIENT_CERTIFICATE", "false"
|
|
568
|
-
).lower()
|
|
590
|
+
use_client_cert = DatabaseAdminClient._use_client_cert_effective()
|
|
569
591
|
use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto").lower()
|
|
570
592
|
universe_domain_env = os.getenv("GOOGLE_CLOUD_UNIVERSE_DOMAIN")
|
|
571
|
-
if use_client_cert not in ("true", "false"):
|
|
572
|
-
raise ValueError(
|
|
573
|
-
"Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`"
|
|
574
|
-
)
|
|
575
593
|
if use_mtls_endpoint not in ("auto", "never", "always"):
|
|
576
594
|
raise MutualTLSChannelError(
|
|
577
595
|
"Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`"
|
|
578
596
|
)
|
|
579
|
-
return use_client_cert
|
|
597
|
+
return use_client_cert, use_mtls_endpoint, universe_domain_env
|
|
580
598
|
|
|
581
599
|
@staticmethod
|
|
582
600
|
def _get_client_cert_source(provided_cert_source, use_cert_flag):
|
|
@@ -81,9 +81,10 @@ class DatabaseAdminTransport(abc.ABC):
|
|
|
81
81
|
credentials identify the application to the service; if none
|
|
82
82
|
are specified, the client will attempt to ascertain the
|
|
83
83
|
credentials from the environment.
|
|
84
|
-
credentials_file (Optional[str]): A file with credentials that can
|
|
84
|
+
credentials_file (Optional[str]): Deprecated. A file with credentials that can
|
|
85
85
|
be loaded with :func:`google.auth.load_credentials_from_file`.
|
|
86
|
-
This argument is mutually exclusive with credentials.
|
|
86
|
+
This argument is mutually exclusive with credentials. This argument will be
|
|
87
|
+
removed in the next major version of this library.
|
|
87
88
|
scopes (Optional[Sequence[str]]): A list of scopes.
|
|
88
89
|
quota_project_id (Optional[str]): An optional project to use for billing
|
|
89
90
|
and quota.
|
|
@@ -169,9 +169,10 @@ class DatabaseAdminGrpcTransport(DatabaseAdminTransport):
|
|
|
169
169
|
are specified, the client will attempt to ascertain the
|
|
170
170
|
credentials from the environment.
|
|
171
171
|
This argument is ignored if a ``channel`` instance is provided.
|
|
172
|
-
credentials_file (Optional[str]): A file with credentials that can
|
|
172
|
+
credentials_file (Optional[str]): Deprecated. A file with credentials that can
|
|
173
173
|
be loaded with :func:`google.auth.load_credentials_from_file`.
|
|
174
174
|
This argument is ignored if a ``channel`` instance is provided.
|
|
175
|
+
This argument will be removed in the next major version of this library.
|
|
175
176
|
scopes (Optional(Sequence[str])): A list of scopes. This argument is
|
|
176
177
|
ignored if a ``channel`` instance is provided.
|
|
177
178
|
channel (Optional[Union[grpc.Channel, Callable[..., grpc.Channel]]]):
|
|
@@ -276,6 +277,7 @@ class DatabaseAdminGrpcTransport(DatabaseAdminTransport):
|
|
|
276
277
|
options=[
|
|
277
278
|
("grpc.max_send_message_length", -1),
|
|
278
279
|
("grpc.max_receive_message_length", -1),
|
|
280
|
+
("grpc.keepalive_time_ms", 120000),
|
|
279
281
|
],
|
|
280
282
|
)
|
|
281
283
|
|
|
@@ -305,9 +307,10 @@ class DatabaseAdminGrpcTransport(DatabaseAdminTransport):
|
|
|
305
307
|
credentials identify this application to the service. If
|
|
306
308
|
none are specified, the client will attempt to ascertain
|
|
307
309
|
the credentials from the environment.
|
|
308
|
-
credentials_file (Optional[str]): A file with credentials that can
|
|
310
|
+
credentials_file (Optional[str]): Deprecated. A file with credentials that can
|
|
309
311
|
be loaded with :func:`google.auth.load_credentials_from_file`.
|
|
310
|
-
This argument is mutually exclusive with credentials.
|
|
312
|
+
This argument is mutually exclusive with credentials. This argument will be
|
|
313
|
+
removed in the next major version of this library.
|
|
311
314
|
scopes (Optional[Sequence[str]]): A optional list of scopes needed for this
|
|
312
315
|
service. These are only used when credentials are not specified and
|
|
313
316
|
are passed to :func:`google.auth.default`.
|
|
@@ -166,8 +166,9 @@ class DatabaseAdminGrpcAsyncIOTransport(DatabaseAdminTransport):
|
|
|
166
166
|
credentials identify this application to the service. If
|
|
167
167
|
none are specified, the client will attempt to ascertain
|
|
168
168
|
the credentials from the environment.
|
|
169
|
-
credentials_file (Optional[str]): A file with credentials that can
|
|
170
|
-
be loaded with :func:`google.auth.load_credentials_from_file`.
|
|
169
|
+
credentials_file (Optional[str]): Deprecated. A file with credentials that can
|
|
170
|
+
be loaded with :func:`google.auth.load_credentials_from_file`. This argument will be
|
|
171
|
+
removed in the next major version of this library.
|
|
171
172
|
scopes (Optional[Sequence[str]]): A optional list of scopes needed for this
|
|
172
173
|
service. These are only used when credentials are not specified and
|
|
173
174
|
are passed to :func:`google.auth.default`.
|
|
@@ -218,9 +219,10 @@ class DatabaseAdminGrpcAsyncIOTransport(DatabaseAdminTransport):
|
|
|
218
219
|
are specified, the client will attempt to ascertain the
|
|
219
220
|
credentials from the environment.
|
|
220
221
|
This argument is ignored if a ``channel`` instance is provided.
|
|
221
|
-
credentials_file (Optional[str]): A file with credentials that can
|
|
222
|
+
credentials_file (Optional[str]): Deprecated. A file with credentials that can
|
|
222
223
|
be loaded with :func:`google.auth.load_credentials_from_file`.
|
|
223
224
|
This argument is ignored if a ``channel`` instance is provided.
|
|
225
|
+
This argument will be removed in the next major version of this library.
|
|
224
226
|
scopes (Optional[Sequence[str]]): A optional list of scopes needed for this
|
|
225
227
|
service. These are only used when credentials are not specified and
|
|
226
228
|
are passed to :func:`google.auth.default`.
|
|
@@ -325,6 +327,7 @@ class DatabaseAdminGrpcAsyncIOTransport(DatabaseAdminTransport):
|
|
|
325
327
|
options=[
|
|
326
328
|
("grpc.max_send_message_length", -1),
|
|
327
329
|
("grpc.max_receive_message_length", -1),
|
|
330
|
+
("grpc.keepalive_time_ms", 120000),
|
|
328
331
|
],
|
|
329
332
|
)
|
|
330
333
|
|
|
@@ -1622,9 +1622,10 @@ class DatabaseAdminRestTransport(_BaseDatabaseAdminRestTransport):
|
|
|
1622
1622
|
are specified, the client will attempt to ascertain the
|
|
1623
1623
|
credentials from the environment.
|
|
1624
1624
|
|
|
1625
|
-
credentials_file (Optional[str]): A file with credentials that can
|
|
1625
|
+
credentials_file (Optional[str]): Deprecated. A file with credentials that can
|
|
1626
1626
|
be loaded with :func:`google.auth.load_credentials_from_file`.
|
|
1627
|
-
This argument is ignored if ``channel`` is provided.
|
|
1627
|
+
This argument is ignored if ``channel`` is provided. This argument will be
|
|
1628
|
+
removed in the next major version of this library.
|
|
1628
1629
|
scopes (Optional(Sequence[str])): A list of scopes. This argument is
|
|
1629
1630
|
ignored if ``channel`` is provided.
|
|
1630
1631
|
client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Copyright 2025 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
|
+
from google.cloud.spanner_admin_instance_v1 import gapic_version as package_version
|
|
17
|
+
|
|
18
|
+
import google.api_core as api_core
|
|
19
|
+
import sys
|
|
20
|
+
|
|
21
|
+
__version__ = package_version.__version__
|
|
22
|
+
|
|
23
|
+
if sys.version_info >= (3, 8): # pragma: NO COVER
|
|
24
|
+
from importlib import metadata
|
|
25
|
+
else: # pragma: NO COVER
|
|
26
|
+
# TODO(https://github.com/googleapis/python-api-core/issues/835): Remove
|
|
27
|
+
# this code path once we drop support for Python 3.7
|
|
28
|
+
import importlib_metadata as metadata
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
from .services.instance_admin import InstanceAdminClient
|
|
32
|
+
from .services.instance_admin import InstanceAdminAsyncClient
|
|
33
|
+
|
|
34
|
+
from .types.common import OperationProgress
|
|
35
|
+
from .types.common import ReplicaSelection
|
|
36
|
+
from .types.common import FulfillmentPeriod
|
|
37
|
+
from .types.spanner_instance_admin import AutoscalingConfig
|
|
38
|
+
from .types.spanner_instance_admin import CreateInstanceConfigMetadata
|
|
39
|
+
from .types.spanner_instance_admin import CreateInstanceConfigRequest
|
|
40
|
+
from .types.spanner_instance_admin import CreateInstanceMetadata
|
|
41
|
+
from .types.spanner_instance_admin import CreateInstancePartitionMetadata
|
|
42
|
+
from .types.spanner_instance_admin import CreateInstancePartitionRequest
|
|
43
|
+
from .types.spanner_instance_admin import CreateInstanceRequest
|
|
44
|
+
from .types.spanner_instance_admin import DeleteInstanceConfigRequest
|
|
45
|
+
from .types.spanner_instance_admin import DeleteInstancePartitionRequest
|
|
46
|
+
from .types.spanner_instance_admin import DeleteInstanceRequest
|
|
47
|
+
from .types.spanner_instance_admin import FreeInstanceMetadata
|
|
48
|
+
from .types.spanner_instance_admin import GetInstanceConfigRequest
|
|
49
|
+
from .types.spanner_instance_admin import GetInstancePartitionRequest
|
|
50
|
+
from .types.spanner_instance_admin import GetInstanceRequest
|
|
51
|
+
from .types.spanner_instance_admin import Instance
|
|
52
|
+
from .types.spanner_instance_admin import InstanceConfig
|
|
53
|
+
from .types.spanner_instance_admin import InstancePartition
|
|
54
|
+
from .types.spanner_instance_admin import ListInstanceConfigOperationsRequest
|
|
55
|
+
from .types.spanner_instance_admin import ListInstanceConfigOperationsResponse
|
|
56
|
+
from .types.spanner_instance_admin import ListInstanceConfigsRequest
|
|
57
|
+
from .types.spanner_instance_admin import ListInstanceConfigsResponse
|
|
58
|
+
from .types.spanner_instance_admin import ListInstancePartitionOperationsRequest
|
|
59
|
+
from .types.spanner_instance_admin import ListInstancePartitionOperationsResponse
|
|
60
|
+
from .types.spanner_instance_admin import ListInstancePartitionsRequest
|
|
61
|
+
from .types.spanner_instance_admin import ListInstancePartitionsResponse
|
|
62
|
+
from .types.spanner_instance_admin import ListInstancesRequest
|
|
63
|
+
from .types.spanner_instance_admin import ListInstancesResponse
|
|
64
|
+
from .types.spanner_instance_admin import MoveInstanceMetadata
|
|
65
|
+
from .types.spanner_instance_admin import MoveInstanceRequest
|
|
66
|
+
from .types.spanner_instance_admin import MoveInstanceResponse
|
|
67
|
+
from .types.spanner_instance_admin import ReplicaComputeCapacity
|
|
68
|
+
from .types.spanner_instance_admin import ReplicaInfo
|
|
69
|
+
from .types.spanner_instance_admin import UpdateInstanceConfigMetadata
|
|
70
|
+
from .types.spanner_instance_admin import UpdateInstanceConfigRequest
|
|
71
|
+
from .types.spanner_instance_admin import UpdateInstanceMetadata
|
|
72
|
+
from .types.spanner_instance_admin import UpdateInstancePartitionMetadata
|
|
73
|
+
from .types.spanner_instance_admin import UpdateInstancePartitionRequest
|
|
74
|
+
from .types.spanner_instance_admin import UpdateInstanceRequest
|
|
75
|
+
|
|
76
|
+
if hasattr(api_core, "check_python_version") and hasattr(
|
|
77
|
+
api_core, "check_dependency_versions"
|
|
78
|
+
): # pragma: NO COVER
|
|
79
|
+
api_core.check_python_version("google.cloud.spanner_admin_instance_v1") # type: ignore
|
|
80
|
+
api_core.check_dependency_versions("google.cloud.spanner_admin_instance_v1") # type: ignore
|
|
81
|
+
else: # pragma: NO COVER
|
|
82
|
+
# An older version of api_core is installed which does not define the
|
|
83
|
+
# functions above. We do equivalent checks manually.
|
|
84
|
+
try:
|
|
85
|
+
import warnings
|
|
86
|
+
import sys
|
|
87
|
+
|
|
88
|
+
_py_version_str = sys.version.split()[0]
|
|
89
|
+
_package_label = "google.cloud.spanner_admin_instance_v1"
|
|
90
|
+
if sys.version_info < (3, 9):
|
|
91
|
+
warnings.warn(
|
|
92
|
+
"You are using a non-supported Python version "
|
|
93
|
+
+ f"({_py_version_str}). Google will not post any further "
|
|
94
|
+
+ f"updates to {_package_label} supporting this Python version. "
|
|
95
|
+
+ "Please upgrade to the latest Python version, or at "
|
|
96
|
+
+ f"least to Python 3.9, and then update {_package_label}.",
|
|
97
|
+
FutureWarning,
|
|
98
|
+
)
|
|
99
|
+
if sys.version_info[:2] == (3, 9):
|
|
100
|
+
warnings.warn(
|
|
101
|
+
f"You are using a Python version ({_py_version_str}) "
|
|
102
|
+
+ f"which Google will stop supporting in {_package_label} in "
|
|
103
|
+
+ "January 2026. Please "
|
|
104
|
+
+ "upgrade to the latest Python version, or at "
|
|
105
|
+
+ "least to Python 3.10, before then, and "
|
|
106
|
+
+ f"then update {_package_label}.",
|
|
107
|
+
FutureWarning,
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
def parse_version_to_tuple(version_string: str):
|
|
111
|
+
"""Safely converts a semantic version string to a comparable tuple of integers.
|
|
112
|
+
Example: "4.25.8" -> (4, 25, 8)
|
|
113
|
+
Ignores non-numeric parts and handles common version formats.
|
|
114
|
+
Args:
|
|
115
|
+
version_string: Version string in the format "x.y.z" or "x.y.z<suffix>"
|
|
116
|
+
Returns:
|
|
117
|
+
Tuple of integers for the parsed version string.
|
|
118
|
+
"""
|
|
119
|
+
parts = []
|
|
120
|
+
for part in version_string.split("."):
|
|
121
|
+
try:
|
|
122
|
+
parts.append(int(part))
|
|
123
|
+
except ValueError:
|
|
124
|
+
# If it's a non-numeric part (e.g., '1.0.0b1' -> 'b1'), stop here.
|
|
125
|
+
# This is a simplification compared to 'packaging.parse_version', but sufficient
|
|
126
|
+
# for comparing strictly numeric semantic versions.
|
|
127
|
+
break
|
|
128
|
+
return tuple(parts)
|
|
129
|
+
|
|
130
|
+
def _get_version(dependency_name):
|
|
131
|
+
try:
|
|
132
|
+
version_string: str = metadata.version(dependency_name)
|
|
133
|
+
parsed_version = parse_version_to_tuple(version_string)
|
|
134
|
+
return (parsed_version, version_string)
|
|
135
|
+
except Exception:
|
|
136
|
+
# Catch exceptions from metadata.version() (e.g., PackageNotFoundError)
|
|
137
|
+
# or errors during parse_version_to_tuple
|
|
138
|
+
return (None, "--")
|
|
139
|
+
|
|
140
|
+
_dependency_package = "google.protobuf"
|
|
141
|
+
_next_supported_version = "4.25.8"
|
|
142
|
+
_next_supported_version_tuple = (4, 25, 8)
|
|
143
|
+
_recommendation = " (we recommend 6.x)"
|
|
144
|
+
(_version_used, _version_used_string) = _get_version(_dependency_package)
|
|
145
|
+
if _version_used and _version_used < _next_supported_version_tuple:
|
|
146
|
+
warnings.warn(
|
|
147
|
+
f"Package {_package_label} depends on "
|
|
148
|
+
+ f"{_dependency_package}, currently installed at version "
|
|
149
|
+
+ f"{_version_used_string}. Future updates to "
|
|
150
|
+
+ f"{_package_label} will require {_dependency_package} at "
|
|
151
|
+
+ f"version {_next_supported_version} or higher{_recommendation}."
|
|
152
|
+
+ " Please ensure "
|
|
153
|
+
+ "that either (a) your Python environment doesn't pin the "
|
|
154
|
+
+ f"version of {_dependency_package}, so that updates to "
|
|
155
|
+
+ f"{_package_label} can require the higher version, or "
|
|
156
|
+
+ "(b) you manually update your Python environment to use at "
|
|
157
|
+
+ f"least version {_next_supported_version} of "
|
|
158
|
+
+ f"{_dependency_package}.",
|
|
159
|
+
FutureWarning,
|
|
160
|
+
)
|
|
161
|
+
except Exception:
|
|
162
|
+
warnings.warn(
|
|
163
|
+
"Could not determine the version of Python "
|
|
164
|
+
+ "currently being used. To continue receiving "
|
|
165
|
+
+ "updates for {_package_label}, ensure you are "
|
|
166
|
+
+ "using a supported version of Python; see "
|
|
167
|
+
+ "https://devguide.python.org/versions/"
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
__all__ = (
|
|
171
|
+
"InstanceAdminAsyncClient",
|
|
172
|
+
"AutoscalingConfig",
|
|
173
|
+
"CreateInstanceConfigMetadata",
|
|
174
|
+
"CreateInstanceConfigRequest",
|
|
175
|
+
"CreateInstanceMetadata",
|
|
176
|
+
"CreateInstancePartitionMetadata",
|
|
177
|
+
"CreateInstancePartitionRequest",
|
|
178
|
+
"CreateInstanceRequest",
|
|
179
|
+
"DeleteInstanceConfigRequest",
|
|
180
|
+
"DeleteInstancePartitionRequest",
|
|
181
|
+
"DeleteInstanceRequest",
|
|
182
|
+
"FreeInstanceMetadata",
|
|
183
|
+
"FulfillmentPeriod",
|
|
184
|
+
"GetInstanceConfigRequest",
|
|
185
|
+
"GetInstancePartitionRequest",
|
|
186
|
+
"GetInstanceRequest",
|
|
187
|
+
"Instance",
|
|
188
|
+
"InstanceAdminClient",
|
|
189
|
+
"InstanceConfig",
|
|
190
|
+
"InstancePartition",
|
|
191
|
+
"ListInstanceConfigOperationsRequest",
|
|
192
|
+
"ListInstanceConfigOperationsResponse",
|
|
193
|
+
"ListInstanceConfigsRequest",
|
|
194
|
+
"ListInstanceConfigsResponse",
|
|
195
|
+
"ListInstancePartitionOperationsRequest",
|
|
196
|
+
"ListInstancePartitionOperationsResponse",
|
|
197
|
+
"ListInstancePartitionsRequest",
|
|
198
|
+
"ListInstancePartitionsResponse",
|
|
199
|
+
"ListInstancesRequest",
|
|
200
|
+
"ListInstancesResponse",
|
|
201
|
+
"MoveInstanceMetadata",
|
|
202
|
+
"MoveInstanceRequest",
|
|
203
|
+
"MoveInstanceResponse",
|
|
204
|
+
"OperationProgress",
|
|
205
|
+
"ReplicaComputeCapacity",
|
|
206
|
+
"ReplicaInfo",
|
|
207
|
+
"ReplicaSelection",
|
|
208
|
+
"UpdateInstanceConfigMetadata",
|
|
209
|
+
"UpdateInstanceConfigRequest",
|
|
210
|
+
"UpdateInstanceMetadata",
|
|
211
|
+
"UpdateInstancePartitionMetadata",
|
|
212
|
+
"UpdateInstancePartitionRequest",
|
|
213
|
+
"UpdateInstanceRequest",
|
|
214
|
+
)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Copyright 2025 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.61.0" # {x-release-please-version}
|
|
@@ -178,6 +178,34 @@ class InstanceAdminClient(metaclass=InstanceAdminClientMeta):
|
|
|
178
178
|
_DEFAULT_ENDPOINT_TEMPLATE = "spanner.{UNIVERSE_DOMAIN}"
|
|
179
179
|
_DEFAULT_UNIVERSE = "googleapis.com"
|
|
180
180
|
|
|
181
|
+
@staticmethod
|
|
182
|
+
def _use_client_cert_effective():
|
|
183
|
+
"""Returns whether client certificate should be used for mTLS if the
|
|
184
|
+
google-auth version supports should_use_client_cert automatic mTLS enablement.
|
|
185
|
+
|
|
186
|
+
Alternatively, read from the GOOGLE_API_USE_CLIENT_CERTIFICATE env var.
|
|
187
|
+
|
|
188
|
+
Returns:
|
|
189
|
+
bool: whether client certificate should be used for mTLS
|
|
190
|
+
Raises:
|
|
191
|
+
ValueError: (If using a version of google-auth without should_use_client_cert and
|
|
192
|
+
GOOGLE_API_USE_CLIENT_CERTIFICATE is set to an unexpected value.)
|
|
193
|
+
"""
|
|
194
|
+
# check if google-auth version supports should_use_client_cert for automatic mTLS enablement
|
|
195
|
+
if hasattr(mtls, "should_use_client_cert"): # pragma: NO COVER
|
|
196
|
+
return mtls.should_use_client_cert()
|
|
197
|
+
else: # pragma: NO COVER
|
|
198
|
+
# if unsupported, fallback to reading from env var
|
|
199
|
+
use_client_cert_str = os.getenv(
|
|
200
|
+
"GOOGLE_API_USE_CLIENT_CERTIFICATE", "false"
|
|
201
|
+
).lower()
|
|
202
|
+
if use_client_cert_str not in ("true", "false"):
|
|
203
|
+
raise ValueError(
|
|
204
|
+
"Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be"
|
|
205
|
+
" either `true` or `false`"
|
|
206
|
+
)
|
|
207
|
+
return use_client_cert_str == "true"
|
|
208
|
+
|
|
181
209
|
@classmethod
|
|
182
210
|
def from_service_account_info(cls, info: dict, *args, **kwargs):
|
|
183
211
|
"""Creates an instance of this client using the provided credentials
|
|
@@ -402,12 +430,8 @@ class InstanceAdminClient(metaclass=InstanceAdminClientMeta):
|
|
|
402
430
|
)
|
|
403
431
|
if client_options is None:
|
|
404
432
|
client_options = client_options_lib.ClientOptions()
|
|
405
|
-
use_client_cert =
|
|
433
|
+
use_client_cert = InstanceAdminClient._use_client_cert_effective()
|
|
406
434
|
use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto")
|
|
407
|
-
if use_client_cert not in ("true", "false"):
|
|
408
|
-
raise ValueError(
|
|
409
|
-
"Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`"
|
|
410
|
-
)
|
|
411
435
|
if use_mtls_endpoint not in ("auto", "never", "always"):
|
|
412
436
|
raise MutualTLSChannelError(
|
|
413
437
|
"Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`"
|
|
@@ -415,7 +439,7 @@ class InstanceAdminClient(metaclass=InstanceAdminClientMeta):
|
|
|
415
439
|
|
|
416
440
|
# Figure out the client cert source to use.
|
|
417
441
|
client_cert_source = None
|
|
418
|
-
if use_client_cert
|
|
442
|
+
if use_client_cert:
|
|
419
443
|
if client_options.client_cert_source:
|
|
420
444
|
client_cert_source = client_options.client_cert_source
|
|
421
445
|
elif mtls.has_default_client_cert_source():
|
|
@@ -447,20 +471,14 @@ class InstanceAdminClient(metaclass=InstanceAdminClientMeta):
|
|
|
447
471
|
google.auth.exceptions.MutualTLSChannelError: If GOOGLE_API_USE_MTLS_ENDPOINT
|
|
448
472
|
is not any of ["auto", "never", "always"].
|
|
449
473
|
"""
|
|
450
|
-
use_client_cert =
|
|
451
|
-
"GOOGLE_API_USE_CLIENT_CERTIFICATE", "false"
|
|
452
|
-
).lower()
|
|
474
|
+
use_client_cert = InstanceAdminClient._use_client_cert_effective()
|
|
453
475
|
use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto").lower()
|
|
454
476
|
universe_domain_env = os.getenv("GOOGLE_CLOUD_UNIVERSE_DOMAIN")
|
|
455
|
-
if use_client_cert not in ("true", "false"):
|
|
456
|
-
raise ValueError(
|
|
457
|
-
"Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`"
|
|
458
|
-
)
|
|
459
477
|
if use_mtls_endpoint not in ("auto", "never", "always"):
|
|
460
478
|
raise MutualTLSChannelError(
|
|
461
479
|
"Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`"
|
|
462
480
|
)
|
|
463
|
-
return use_client_cert
|
|
481
|
+
return use_client_cert, use_mtls_endpoint, universe_domain_env
|
|
464
482
|
|
|
465
483
|
@staticmethod
|
|
466
484
|
def _get_client_cert_source(provided_cert_source, use_cert_flag):
|