google-cloud-spanner 3.67.0__tar.gz → 3.69.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 (271) hide show
  1. {google_cloud_spanner-3.67.0/google_cloud_spanner.egg-info → google_cloud_spanner-3.69.0}/PKG-INFO +13 -7
  2. {google_cloud_spanner-3.67.0/google/cloud/spanner_admin_instance → google_cloud_spanner-3.69.0/google/cloud/spanner}/gapic_version.py +1 -1
  3. {google_cloud_spanner-3.67.0/google/cloud/spanner_admin_database_v1 → google_cloud_spanner-3.69.0/google/cloud/spanner_admin_database}/gapic_version.py +1 -1
  4. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/__init__.py +4 -4
  5. {google_cloud_spanner-3.67.0/google/cloud/spanner_admin_database → google_cloud_spanner-3.69.0/google/cloud/spanner_admin_database_v1}/gapic_version.py +1 -1
  6. {google_cloud_spanner-3.67.0/google/cloud/spanner → google_cloud_spanner-3.69.0/google/cloud/spanner_admin_instance}/gapic_version.py +1 -1
  7. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance_v1/__init__.py +4 -4
  8. google_cloud_spanner-3.69.0/google/cloud/spanner_admin_instance_v1/gapic_version.py +16 -0
  9. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_dbapi/partition_helper.py +1 -20
  10. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_dbapi/version.py +1 -1
  11. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/_async/streamed.py +33 -10
  12. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/_helpers.py +88 -47
  13. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/data_types.py +6 -2
  14. google_cloud_spanner-3.69.0/google/cloud/spanner_v1/gapic_version.py +16 -0
  15. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/streamed.py +31 -12
  16. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0/google_cloud_spanner.egg-info}/PKG-INFO +13 -7
  17. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google_cloud_spanner.egg-info/requires.txt +13 -8
  18. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/setup.py +20 -8
  19. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/mockserver_tests/test_dbapi_partition_query.py +1 -2
  20. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/_async/test_database_api.py +4 -1
  21. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/_helpers.py +5 -2
  22. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/conftest.py +5 -0
  23. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/_async/test_client.py +3 -1
  24. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/_async/test_client_extra.py +24 -8
  25. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/_async/test_session.py +17 -6
  26. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/conftest.py +18 -0
  27. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/gapic/conftest.py +8 -4
  28. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/spanner_dbapi/test_partition_helper.py +2 -3
  29. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test__helpers.py +136 -5
  30. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_client.py +3 -1
  31. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_metrics.py +3 -4
  32. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_session.py +19 -4
  33. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_spanner.py +47 -187
  34. google_cloud_spanner-3.67.0/google/cloud/spanner_admin_instance_v1/gapic_version.py +0 -16
  35. google_cloud_spanner-3.67.0/google/cloud/spanner_v1/gapic_version.py +0 -16
  36. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/LICENSE +0 -0
  37. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/MANIFEST.in +0 -0
  38. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/README.rst +0 -0
  39. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/aio/_cross_sync/__init__.py +0 -0
  40. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/aio/_cross_sync/_decorators.py +0 -0
  41. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/aio/_cross_sync/_mapping_meta.py +0 -0
  42. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/aio/_cross_sync/cross_sync.py +0 -0
  43. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner/__init__.py +0 -0
  44. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner/py.typed +0 -0
  45. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database/__init__.py +0 -0
  46. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database/py.typed +0 -0
  47. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/gapic_metadata.json +0 -0
  48. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/py.typed +0 -0
  49. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/services/__init__.py +0 -0
  50. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/services/database_admin/__init__.py +0 -0
  51. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/services/database_admin/async_client.py +0 -0
  52. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/services/database_admin/client.py +0 -0
  53. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/services/database_admin/pagers.py +0 -0
  54. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/services/database_admin/transports/__init__.py +0 -0
  55. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/services/database_admin/transports/base.py +0 -0
  56. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/services/database_admin/transports/grpc.py +0 -0
  57. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/services/database_admin/transports/grpc_asyncio.py +0 -0
  58. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/services/database_admin/transports/rest.py +0 -0
  59. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/services/database_admin/transports/rest_base.py +0 -0
  60. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/types/__init__.py +0 -0
  61. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/types/backup.py +0 -0
  62. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/types/backup_schedule.py +0 -0
  63. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/types/common.py +0 -0
  64. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_database_v1/types/spanner_database_admin.py +0 -0
  65. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance/__init__.py +0 -0
  66. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance/py.typed +0 -0
  67. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance_v1/gapic_metadata.json +0 -0
  68. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance_v1/py.typed +0 -0
  69. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance_v1/services/__init__.py +0 -0
  70. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/__init__.py +0 -0
  71. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/async_client.py +0 -0
  72. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/client.py +0 -0
  73. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/pagers.py +0 -0
  74. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/__init__.py +0 -0
  75. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/base.py +0 -0
  76. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/grpc.py +0 -0
  77. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/grpc_asyncio.py +0 -0
  78. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/rest.py +0 -0
  79. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/rest_base.py +0 -0
  80. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance_v1/types/__init__.py +0 -0
  81. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance_v1/types/common.py +0 -0
  82. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_admin_instance_v1/types/spanner_instance_admin.py +0 -0
  83. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_dbapi/__init__.py +0 -0
  84. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_dbapi/_helpers.py +0 -0
  85. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_dbapi/batch_dml_executor.py +0 -0
  86. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_dbapi/checksum.py +0 -0
  87. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_dbapi/client_side_statement_executor.py +0 -0
  88. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_dbapi/client_side_statement_parser.py +0 -0
  89. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_dbapi/connection.py +0 -0
  90. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_dbapi/cursor.py +0 -0
  91. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_dbapi/exceptions.py +0 -0
  92. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_dbapi/parse_utils.py +0 -0
  93. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_dbapi/parsed_statement.py +0 -0
  94. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_dbapi/parser.py +0 -0
  95. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_dbapi/transaction_helper.py +0 -0
  96. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_dbapi/types.py +0 -0
  97. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_dbapi/utils.py +0 -0
  98. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/__init__.py +0 -0
  99. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/_async/_helpers.py +0 -0
  100. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/_async/batch.py +0 -0
  101. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/_async/client.py +0 -0
  102. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/_async/database.py +0 -0
  103. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/_async/database_sessions_manager.py +0 -0
  104. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/_async/instance.py +0 -0
  105. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/_async/pool.py +0 -0
  106. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/_async/session.py +0 -0
  107. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/_async/snapshot.py +0 -0
  108. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/_async/testing/__init__.py +0 -0
  109. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/_async/testing/database_test.py +0 -0
  110. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/_async/testing/interceptors.py +0 -0
  111. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/_async/transaction.py +0 -0
  112. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/_opentelemetry_tracing.py +0 -0
  113. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/backup.py +0 -0
  114. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/batch.py +0 -0
  115. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/client.py +0 -0
  116. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/database.py +0 -0
  117. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/database_sessions_manager.py +0 -0
  118. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/exceptions.py +0 -0
  119. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/gapic_metadata.json +0 -0
  120. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/instance.py +0 -0
  121. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/keyset.py +0 -0
  122. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/merged_result_set.py +0 -0
  123. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/metrics/constants.py +0 -0
  124. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/metrics/metrics_capture.py +0 -0
  125. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/metrics/metrics_exporter.py +0 -0
  126. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/metrics/metrics_interceptor.py +0 -0
  127. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/metrics/metrics_tracer.py +0 -0
  128. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/metrics/metrics_tracer_factory.py +0 -0
  129. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/metrics/spanner_metrics_tracer_factory.py +0 -0
  130. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/param_types.py +0 -0
  131. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/pool.py +0 -0
  132. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/py.typed +0 -0
  133. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/request_id_header.py +0 -0
  134. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/services/__init__.py +0 -0
  135. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/services/spanner/__init__.py +0 -0
  136. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/services/spanner/async_client.py +0 -0
  137. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/services/spanner/client.py +0 -0
  138. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/services/spanner/pagers.py +0 -0
  139. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/services/spanner/transports/__init__.py +0 -0
  140. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/services/spanner/transports/base.py +0 -0
  141. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/services/spanner/transports/grpc.py +0 -0
  142. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/services/spanner/transports/grpc_asyncio.py +0 -0
  143. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/services/spanner/transports/rest.py +0 -0
  144. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/services/spanner/transports/rest_base.py +0 -0
  145. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/session.py +0 -0
  146. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/snapshot.py +0 -0
  147. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/snapshot_helpers.py +0 -0
  148. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/table.py +0 -0
  149. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/testing/__init__.py +0 -0
  150. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/testing/database_test.py +0 -0
  151. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/testing/interceptors.py +0 -0
  152. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/testing/mock_database_admin.py +0 -0
  153. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/testing/mock_spanner.py +0 -0
  154. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/testing/spanner_database_admin_pb2_grpc.py +0 -0
  155. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/testing/spanner_pb2_grpc.py +0 -0
  156. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/transaction.py +0 -0
  157. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/types/__init__.py +0 -0
  158. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/types/change_stream.py +0 -0
  159. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/types/commit_response.py +0 -0
  160. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/types/keys.py +0 -0
  161. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/types/location.py +0 -0
  162. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/types/mutation.py +0 -0
  163. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/types/query_plan.py +0 -0
  164. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/types/result_set.py +0 -0
  165. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/types/spanner.py +0 -0
  166. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/types/transaction.py +0 -0
  167. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google/cloud/spanner_v1/types/type.py +0 -0
  168. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google_cloud_spanner.egg-info/SOURCES.txt +0 -0
  169. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google_cloud_spanner.egg-info/dependency_links.txt +0 -0
  170. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google_cloud_spanner.egg-info/not-zip-safe +0 -0
  171. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/google_cloud_spanner.egg-info/top_level.txt +0 -0
  172. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/setup.cfg +0 -0
  173. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/__init__.py +0 -0
  174. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/_builders.py +0 -0
  175. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/_fixtures.py +0 -0
  176. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/_helpers.py +0 -0
  177. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/mockserver_tests/__init__.py +0 -0
  178. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/mockserver_tests/mock_server_test_base.py +0 -0
  179. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/mockserver_tests/test_aborted_transaction.py +0 -0
  180. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/mockserver_tests/test_basics.py +0 -0
  181. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/mockserver_tests/test_dbapi_autocommit.py +0 -0
  182. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/mockserver_tests/test_dbapi_inline_begin.py +0 -0
  183. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/mockserver_tests/test_dbapi_isolation_level.py +0 -0
  184. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/mockserver_tests/test_request_id_header.py +0 -0
  185. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/mockserver_tests/test_tags.py +0 -0
  186. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/__init__.py +0 -0
  187. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/_async/__init__.py +0 -0
  188. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/_async/conftest.py +0 -0
  189. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/_async/pytest.ini +0 -0
  190. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/_sample_data.py +0 -0
  191. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/test_backup_api.py +0 -0
  192. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/test_database_api.py +0 -0
  193. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/test_dbapi.py +0 -0
  194. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/test_instance_api.py +0 -0
  195. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/test_metrics.py +0 -0
  196. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/test_observability_options.py +0 -0
  197. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/test_session_api.py +0 -0
  198. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/test_streaming_chunking.py +0 -0
  199. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/test_table_api.py +0 -0
  200. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/testdata/descriptors.pb +0 -0
  201. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/testdata/singer.proto +0 -0
  202. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/testdata/singer_pb2.py +0 -0
  203. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/utils/__init__.py +0 -0
  204. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/utils/clear_streaming.py +0 -0
  205. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/utils/populate_streaming.py +0 -0
  206. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/utils/scrub_instances.py +0 -0
  207. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/system/utils/streaming_utils.py +0 -0
  208. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/__init__.py +0 -0
  209. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/_async/test_batch.py +0 -0
  210. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/_async/test_database.py +0 -0
  211. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/_async/test_database_extra.py +0 -0
  212. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/_async/test_helpers_extra.py +0 -0
  213. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/_async/test_instance_extra.py +0 -0
  214. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/_async/test_pool.py +0 -0
  215. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/_async/test_sessions_manager_extra.py +0 -0
  216. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/_async/test_snapshot.py +0 -0
  217. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/_async/test_streamed.py +0 -0
  218. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/_async/test_streamed_extra.py +0 -0
  219. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/_async/test_transaction.py +0 -0
  220. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/_async/test_transaction_extra.py +0 -0
  221. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/gapic/__init__.py +0 -0
  222. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/gapic/spanner_admin_database_v1/__init__.py +0 -0
  223. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/gapic/spanner_admin_database_v1/test_database_admin.py +0 -0
  224. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/gapic/spanner_admin_instance_v1/__init__.py +0 -0
  225. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/gapic/spanner_admin_instance_v1/test_instance_admin.py +0 -0
  226. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/gapic/spanner_v1/__init__.py +0 -0
  227. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/gapic/spanner_v1/test_spanner.py +0 -0
  228. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/spanner_dbapi/__init__.py +0 -0
  229. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/spanner_dbapi/test__helpers.py +0 -0
  230. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/spanner_dbapi/test_batch_dml_executor.py +0 -0
  231. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/spanner_dbapi/test_checksum.py +0 -0
  232. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/spanner_dbapi/test_client_side_statement_executor.py +0 -0
  233. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/spanner_dbapi/test_connect.py +0 -0
  234. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/spanner_dbapi/test_connection.py +0 -0
  235. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/spanner_dbapi/test_cursor.py +0 -0
  236. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/spanner_dbapi/test_globals.py +0 -0
  237. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/spanner_dbapi/test_parse_utils.py +0 -0
  238. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/spanner_dbapi/test_parser.py +0 -0
  239. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/spanner_dbapi/test_transaction_helper.py +0 -0
  240. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/spanner_dbapi/test_types.py +0 -0
  241. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/spanner_dbapi/test_utils.py +0 -0
  242. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/streaming-read-acceptance-test.json +0 -0
  243. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test__opentelemetry_tracing.py +0 -0
  244. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_atomic_counter.py +0 -0
  245. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_backup.py +0 -0
  246. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_batch.py +0 -0
  247. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_client_context.py +0 -0
  248. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_database.py +0 -0
  249. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_database_session_manager.py +0 -0
  250. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_datatypes.py +0 -0
  251. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_decorators_extra.py +0 -0
  252. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_exceptions.py +0 -0
  253. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_instance.py +0 -0
  254. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_keyset.py +0 -0
  255. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_merged_result_set.py +0 -0
  256. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_metrics_capture.py +0 -0
  257. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_metrics_concurrency.py +0 -0
  258. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_metrics_exporter.py +0 -0
  259. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_metrics_interceptor.py +0 -0
  260. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_metrics_tracer.py +0 -0
  261. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_metrics_tracer_factory.py +0 -0
  262. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_packaging.py +0 -0
  263. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_param_types.py +0 -0
  264. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_pool.py +0 -0
  265. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_snapshot.py +0 -0
  266. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_spanner_metrics_tracer_factory.py +0 -0
  267. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_streamed.py +0 -0
  268. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_table.py +0 -0
  269. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/test_transaction.py +0 -0
  270. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/testdata/singer.proto +0 -0
  271. {google_cloud_spanner-3.67.0 → google_cloud_spanner-3.69.0}/tests/unit/testdata/singer_pb2.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: google-cloud-spanner
3
- Version: 3.67.0
3
+ Version: 3.69.0
4
4
  Summary: Google Cloud Spanner API client library
5
5
  Home-page: https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-spanner
6
6
  Author: Google LLC
@@ -21,25 +21,31 @@ Classifier: Operating System :: OS Independent
21
21
  Classifier: Topic :: Internet
22
22
  Requires-Python: >=3.10
23
23
  License-File: LICENSE
24
- Requires-Dist: google-api-core[grpc]<3.0.0,>=2.17.1
24
+ Requires-Dist: google-api-core[grpc]<3.0.0,>=2.24.2
25
25
  Requires-Dist: google-auth!=2.24.0,!=2.25.0,<3.0.0,>=2.14.1
26
26
  Requires-Dist: google-cloud-core<3.0.0,>=2.0.0
27
27
  Requires-Dist: grpcio<2.0.0,>=1.49.1
28
28
  Requires-Dist: grpcio<2.0.0,>=1.75.1; python_version >= "3.14"
29
- Requires-Dist: grpc-google-iam-v1<1.0.0,>=0.12.4
30
- Requires-Dist: proto-plus<2.0.0,>=1.22.3
31
- Requires-Dist: proto-plus<2.0.0,>=1.25.0; python_version >= "3.13"
32
- Requires-Dist: protobuf<8.0.0,>=4.25.8
29
+ Requires-Dist: grpc-google-iam-v1<1.0.0,>=0.14.2
30
+ Requires-Dist: proto-plus<2.0.0,>=1.26.1
31
+ Requires-Dist: protobuf<8.0.0,>=6.33.5
33
32
  Requires-Dist: grpc-interceptor>=0.15.4
34
33
  Requires-Dist: sqlparse>=0.4.4
35
34
  Requires-Dist: opentelemetry-api>=1.22.0
36
35
  Requires-Dist: opentelemetry-sdk>=1.22.0
37
36
  Requires-Dist: opentelemetry-semantic-conventions>=0.43b0
38
37
  Requires-Dist: opentelemetry-resourcedetector-gcp>=1.8.0a0
39
- Requires-Dist: google-cloud-monitoring>=2.16.0
38
+ Requires-Dist: google-cloud-monitoring>=2.28.0
40
39
  Requires-Dist: mmh3>=4.1.0
41
40
  Provides-Extra: libcst
42
41
  Requires-Dist: libcst>=0.2.5; extra == "libcst"
42
+ Provides-Extra: test
43
+ Requires-Dist: pytest; extra == "test"
44
+ Requires-Dist: mock; extra == "test"
45
+ Requires-Dist: asyncmock; extra == "test"
46
+ Requires-Dist: pytest-cov; extra == "test"
47
+ Requires-Dist: pytest-asyncio; extra == "test"
48
+ Requires-Dist: pytest-xdist; extra == "test"
43
49
  Dynamic: author
44
50
  Dynamic: author-email
45
51
  Dynamic: classifier
@@ -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__ = "3.67.0" # {x-release-please-version}
16
+ __version__ = "3.69.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__ = "3.67.0" # {x-release-please-version}
16
+ __version__ = "3.69.0" # {x-release-please-version}
@@ -119,7 +119,7 @@ else: # pragma: NO COVER
119
119
 
120
120
  def parse_version_to_tuple(version_string: str):
121
121
  """Safely converts a semantic version string to a comparable tuple of integers.
122
- Example: "4.25.8" -> (4, 25, 8)
122
+ Example: "6.33.5" -> (6, 33, 5)
123
123
  Ignores non-numeric parts and handles common version formats.
124
124
  Args:
125
125
  version_string: Version string in the format "x.y.z" or "x.y.z<suffix>"
@@ -148,9 +148,9 @@ else: # pragma: NO COVER
148
148
  return (None, "--")
149
149
 
150
150
  _dependency_package = "google.protobuf"
151
- _next_supported_version = "4.25.8"
152
- _next_supported_version_tuple = (4, 25, 8)
153
- _recommendation = " (we recommend 6.x)"
151
+ _next_supported_version = "6.33.5"
152
+ _next_supported_version_tuple = (6, 33, 5)
153
+ _recommendation = " (we recommend 7.x)"
154
154
  (_version_used, _version_used_string) = _get_version(_dependency_package)
155
155
  if _version_used and _version_used < _next_supported_version_tuple:
156
156
  warnings.warn(
@@ -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__ = "3.67.0" # {x-release-please-version}
16
+ __version__ = "3.69.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__ = "3.67.0" # {x-release-please-version}
16
+ __version__ = "3.69.0" # {x-release-please-version}
@@ -91,7 +91,7 @@ else: # pragma: NO COVER
91
91
 
92
92
  def parse_version_to_tuple(version_string: str):
93
93
  """Safely converts a semantic version string to a comparable tuple of integers.
94
- Example: "4.25.8" -> (4, 25, 8)
94
+ Example: "6.33.5" -> (6, 33, 5)
95
95
  Ignores non-numeric parts and handles common version formats.
96
96
  Args:
97
97
  version_string: Version string in the format "x.y.z" or "x.y.z<suffix>"
@@ -120,9 +120,9 @@ else: # pragma: NO COVER
120
120
  return (None, "--")
121
121
 
122
122
  _dependency_package = "google.protobuf"
123
- _next_supported_version = "4.25.8"
124
- _next_supported_version_tuple = (4, 25, 8)
125
- _recommendation = " (we recommend 6.x)"
123
+ _next_supported_version = "6.33.5"
124
+ _next_supported_version_tuple = (6, 33, 5)
125
+ _recommendation = " (we recommend 7.x)"
126
126
  (_version_used, _version_used_string) = _get_version(_dependency_package)
127
127
  if _version_used and _version_used < _next_supported_version_tuple:
128
128
  warnings.warn(
@@ -0,0 +1,16 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright 2026 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.69.0" # {x-release-please-version}
@@ -90,23 +90,6 @@ def _deserialize_value(val: Any) -> Any:
90
90
  return val
91
91
 
92
92
 
93
- def _unpack_value_pb(value):
94
- which = value.WhichOneof("kind")
95
- if which == "null_value":
96
- return None
97
- elif which == "number_value":
98
- return value.number_value
99
- elif which == "string_value":
100
- return value.string_value
101
- elif which == "bool_value":
102
- return value.bool_value
103
- elif which == "struct_value":
104
- return {k: _unpack_value_pb(v) for k, v in value.struct_value.fields.items()}
105
- elif which == "list_value":
106
- return [_unpack_value_pb(v) for v in value.list_value.values]
107
- return None
108
-
109
-
110
93
  def decode_from_string(encoded_partition_id):
111
94
  gzip_bytes = base64.b64decode(bytes(encoded_partition_id, "utf-8"))
112
95
  partition_id_bytes = gzip.decompress(gzip_bytes)
@@ -124,9 +107,7 @@ def decode_from_string(encoded_partition_id):
124
107
  if "query" in partition_result and "params" in partition_result["query"]:
125
108
  params_pb = partition_result["query"]["params"]
126
109
  if params_pb:
127
- partition_result["query"]["params"] = {
128
- k: _unpack_value_pb(v) for k, v in params_pb.fields.items()
129
- }
110
+ partition_result["query"]["params"] = MessageToDict(params_pb)
130
111
 
131
112
  return PartitionId(btid, partition_result)
132
113
 
@@ -15,6 +15,6 @@
15
15
  import platform
16
16
 
17
17
  PY_VERSION = platform.python_version()
18
- __version__ = "3.67.0"
18
+ __version__ = "3.69.0"
19
19
  VERSION = __version__
20
20
  DEFAULT_USER_AGENT = "gl-dbapi/" + VERSION
@@ -129,16 +129,39 @@ class StreamedResultSet(object):
129
129
  decoders = self._decoders
130
130
  width = len(self.fields)
131
131
  index = len(self._current_row)
132
- for value in values:
133
- if self._lazy_decode:
134
- self._current_row.append(value)
135
- else:
136
- self._current_row.append(_parse_nullable(value, decoders[index]))
137
- index += 1
138
- if index == width:
139
- self._rows.append(self._current_row)
140
- self._current_row = []
141
- index = 0
132
+ current_row = self._current_row
133
+ rows = self._rows
134
+
135
+ current_row_append = current_row.append
136
+ rows_append = rows.append
137
+
138
+ if self._lazy_decode:
139
+ for value in values:
140
+ current_row_append(value)
141
+ index += 1
142
+ if index == width:
143
+ rows_append(current_row)
144
+ current_row = []
145
+ current_row_append = current_row.append
146
+ index = 0
147
+ else:
148
+ for value in values:
149
+ # Note: We manually check value.HasField("null_value") here instead of
150
+ # wrapping every decoder in _parse_nullable to avoid the overhead of
151
+ # an extra Python function call layer for every cell value decoded in this loop.
152
+ # If the nullable check logic is updated in _parse_nullable, update this check.
153
+ if value.HasField("null_value"):
154
+ current_row_append(None)
155
+ else:
156
+ current_row_append(decoders[index](value))
157
+ index += 1
158
+ if index == width:
159
+ rows_append(current_row)
160
+ current_row = []
161
+ current_row_append = current_row.append
162
+ index = 0
163
+
164
+ self._current_row = current_row
142
165
 
143
166
  @CrossSync.convert
144
167
  async def _consume_next(self):
@@ -19,6 +19,7 @@ import datetime
19
19
  import decimal
20
20
  import logging
21
21
  import math
22
+ import operator
22
23
  import threading
23
24
  import time
24
25
  import uuid
@@ -26,7 +27,6 @@ from contextlib import contextmanager
26
27
 
27
28
  from google.api_core import datetime_helpers
28
29
  from google.api_core.exceptions import Aborted
29
- from google.cloud._helpers import _date_from_iso8601_date
30
30
  from google.protobuf.internal.enum_type_wrapper import EnumTypeWrapper
31
31
  from google.protobuf.message import DecodeError, Message
32
32
  from google.protobuf.struct_pb2 import ListValue, Value
@@ -465,6 +465,12 @@ def _parse_value_pb(value_pb, field_type, field_name, column_info=None):
465
465
  return _parse_nullable(value_pb, decoder)
466
466
 
467
467
 
468
+ _date_fromisoformat = datetime.date.fromisoformat
469
+ _Decimal = decimal.Decimal
470
+ _json_from_str = JsonObject.from_str
471
+ _uuid_UUID = uuid.UUID
472
+
473
+
468
474
  def _get_type_decoder(field_type, field_name, column_info=None):
469
475
  """Returns a function that converts a Value protobuf to cell data.
470
476
 
@@ -489,28 +495,30 @@ def _get_type_decoder(field_type, field_name, column_info=None):
489
495
  """
490
496
 
491
497
  type_code = field_type.code
498
+ # Note: STRING and BOOL use operator.attrgetter because direct attribute extraction
499
+ # is faster in Python. Other types require type transformation, so they use lambdas.
492
500
  if type_code == TypeCode.STRING:
493
- return _parse_string
501
+ return operator.attrgetter("string_value")
494
502
  elif type_code == TypeCode.BYTES:
495
- return _parse_bytes
503
+ return lambda value_pb: value_pb.string_value.encode("utf8")
496
504
  elif type_code == TypeCode.BOOL:
497
- return _parse_bool
505
+ return operator.attrgetter("bool_value")
498
506
  elif type_code == TypeCode.INT64:
499
- return _parse_int64
507
+ return lambda value_pb: int(value_pb.string_value)
500
508
  elif type_code == TypeCode.FLOAT64:
501
509
  return _parse_float
502
510
  elif type_code == TypeCode.FLOAT32:
503
511
  return _parse_float
504
512
  elif type_code == TypeCode.DATE:
505
- return _parse_date
513
+ return lambda value_pb: _date_fromisoformat(value_pb.string_value)
506
514
  elif type_code == TypeCode.TIMESTAMP:
507
515
  return _parse_timestamp
508
516
  elif type_code == TypeCode.NUMERIC:
509
- return _parse_numeric
517
+ return lambda value_pb: _Decimal(value_pb.string_value)
510
518
  elif type_code == TypeCode.JSON:
511
- return _parse_json
519
+ return lambda value_pb: _json_from_str(value_pb.string_value)
512
520
  elif type_code == TypeCode.UUID:
513
- return _parse_uuid
521
+ return lambda value_pb: _uuid_UUID(value_pb.string_value)
514
522
  elif type_code == TypeCode.PROTO:
515
523
  return lambda value_pb: _parse_proto(value_pb, column_info, field_name)
516
524
  elif type_code == TypeCode.ENUM:
@@ -553,48 +561,81 @@ def _parse_list_value_pbs(rows, row_type):
553
561
  return result
554
562
 
555
563
 
556
- def _parse_string(value_pb) -> str:
557
- return value_pb.string_value
558
-
559
-
560
- def _parse_bytes(value_pb):
561
- return value_pb.string_value.encode("utf8")
562
-
563
-
564
- def _parse_bool(value_pb) -> bool:
565
- return value_pb.bool_value
566
-
567
-
568
- def _parse_int64(value_pb) -> int:
569
- return int(value_pb.string_value)
570
-
571
-
572
564
  def _parse_float(value_pb) -> float:
573
- if value_pb.HasField("string_value"):
574
- return float(value_pb.string_value)
575
- else:
576
- return value_pb.number_value
577
-
578
-
579
- def _parse_date(value_pb):
580
- return _date_from_iso8601_date(value_pb.string_value)
565
+ # Note: Storing val = value_pb.string_value and doing a truthiness check is faster
566
+ # than calling value_pb.HasField("string_value") because it avoids the C-extension
567
+ # method lookup/call overhead and accesses the attribute only once.
568
+ val = value_pb.string_value
569
+ return float(val) if val else value_pb.number_value
570
+
571
+
572
+ _POWERS_OF_10 = (
573
+ 1,
574
+ 10,
575
+ 100,
576
+ 1000,
577
+ 10000,
578
+ 100000,
579
+ 1000000,
580
+ 10000000,
581
+ 100000000,
582
+ 1000000000,
583
+ )
581
584
 
582
585
 
583
586
  def _parse_timestamp(value_pb):
584
- DatetimeWithNanoseconds = datetime_helpers.DatetimeWithNanoseconds
585
- return DatetimeWithNanoseconds.from_rfc3339(value_pb.string_value)
586
-
587
-
588
- def _parse_numeric(value_pb):
589
- return decimal.Decimal(value_pb.string_value)
590
-
591
-
592
- def _parse_json(value_pb):
593
- return JsonObject.from_str(value_pb.string_value)
594
-
595
-
596
- def _parse_uuid(value_pb):
597
- return uuid.UUID(value_pb.string_value)
587
+ val = value_pb.string_value
588
+ try:
589
+ if len(val) < 20 or val[10] != "T":
590
+ raise ValueError()
591
+ no_fraction = val[:19]
592
+ bare = datetime.datetime.fromisoformat(no_fraction)
593
+ if val[19] == ".":
594
+ if val.endswith("Z"):
595
+ offset = "Z"
596
+ fraction = val[20:-1]
597
+ elif val[-6] in ("+", "-"):
598
+ offset = val[-6:]
599
+ fraction = val[20:-6]
600
+ else:
601
+ raise ValueError()
602
+ if not fraction or len(fraction) > 9 or not fraction.isdigit():
603
+ raise ValueError()
604
+ scale = 9 - len(fraction)
605
+ nanos = int(fraction) * _POWERS_OF_10[scale]
606
+ else:
607
+ nanos = 0
608
+ if val.endswith("Z"):
609
+ offset = "Z"
610
+ elif val[-6] in ("+", "-"):
611
+ offset = val[-6:]
612
+ else:
613
+ raise ValueError()
614
+
615
+ if offset != "Z":
616
+ sign = offset[0]
617
+ hours = int(offset[1:3])
618
+ minutes = int(offset[4:6])
619
+ if offset[3] != ":":
620
+ raise ValueError()
621
+ delta = datetime.timedelta(hours=hours, minutes=minutes)
622
+ if sign == "-":
623
+ delta = -delta
624
+ tzinfo = datetime.timezone(delta)
625
+ bare = bare.replace(tzinfo=tzinfo).astimezone(datetime.timezone.utc)
626
+
627
+ return datetime_helpers.DatetimeWithNanoseconds(
628
+ bare.year,
629
+ bare.month,
630
+ bare.day,
631
+ bare.hour,
632
+ bare.minute,
633
+ bare.second,
634
+ nanosecond=nanos,
635
+ tzinfo=datetime.timezone.utc,
636
+ )
637
+ except (IndexError, ValueError) as e:
638
+ raise ValueError("Timestamp: {} does not match pattern".format(val)) from e
598
639
 
599
640
 
600
641
  def _parse_proto(value_pb, column_info, field_name):
@@ -99,6 +99,11 @@ class JsonObject(dict):
99
99
  return json.dumps(self, sort_keys=True, separators=(",", ":"))
100
100
 
101
101
 
102
+ _INTERVAL_PATTERN = re.compile(
103
+ r"^P(-?\d+Y)?(-?\d+M)?(-?\d+D)?(T(-?\d+H)?(-?\d+M)?(-?((\d+([.,]\d{1,9})?)|([.,]\d{1,9}))S)?)?$"
104
+ )
105
+
106
+
102
107
  @dataclass
103
108
  class Interval:
104
109
  """Represents a Spanner INTERVAL type.
@@ -187,8 +192,7 @@ class Interval:
187
192
  @classmethod
188
193
  def from_str(cls, s: str) -> "Interval":
189
194
  """Parse an ISO8601 duration format string into an Interval."""
190
- pattern = r"^P(-?\d+Y)?(-?\d+M)?(-?\d+D)?(T(-?\d+H)?(-?\d+M)?(-?((\d+([.,]\d{1,9})?)|([.,]\d{1,9}))S)?)?$"
191
- match = re.match(pattern, s)
195
+ match = _INTERVAL_PATTERN.match(s)
192
196
  if not match or len(s) == 1:
193
197
  raise ValueError(f"Invalid interval format: {s}")
194
198
 
@@ -0,0 +1,16 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright 2026 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.69.0" # {x-release-please-version}
@@ -35,8 +35,7 @@ class StreamedResultSet(object):
35
35
  instances.
36
36
 
37
37
  :type source: :class:`~google.cloud.spanner_v1.snapshot.Snapshot`
38
- :param source: Deprecated. Snapshot from which the result set was fetched.
39
- """
38
+ :param source: Deprecated. Snapshot from which the result set was fetched."""
40
39
 
41
40
  def __init__(
42
41
  self,
@@ -117,16 +116,36 @@ class StreamedResultSet(object):
117
116
  decoders = self._decoders
118
117
  width = len(self.fields)
119
118
  index = len(self._current_row)
120
- for value in values:
121
- if self._lazy_decode:
122
- self._current_row.append(value)
123
- else:
124
- self._current_row.append(_parse_nullable(value, decoders[index]))
125
- index += 1
126
- if index == width:
127
- self._rows.append(self._current_row)
128
- self._current_row = []
129
- index = 0
119
+ current_row = self._current_row
120
+ rows = self._rows
121
+ current_row_append = current_row.append
122
+ rows_append = rows.append
123
+ if self._lazy_decode:
124
+ for value in values:
125
+ current_row_append(value)
126
+ index += 1
127
+ if index == width:
128
+ rows_append(current_row)
129
+ current_row = []
130
+ current_row_append = current_row.append
131
+ index = 0
132
+ else:
133
+ for value in values:
134
+ # Note: We manually check value.HasField("null_value") here instead of
135
+ # wrapping every decoder in _parse_nullable to avoid the overhead of
136
+ # an extra Python function call layer for every cell value decoded in this loop.
137
+ # If the nullable check logic is updated in _parse_nullable, update this check.
138
+ if value.HasField("null_value"):
139
+ current_row_append(None)
140
+ else:
141
+ current_row_append(decoders[index](value))
142
+ index += 1
143
+ if index == width:
144
+ rows_append(current_row)
145
+ current_row = []
146
+ current_row_append = current_row.append
147
+ index = 0
148
+ self._current_row = current_row
130
149
 
131
150
  def _consume_next(self):
132
151
  """Consume the next partial result set from the stream.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: google-cloud-spanner
3
- Version: 3.67.0
3
+ Version: 3.69.0
4
4
  Summary: Google Cloud Spanner API client library
5
5
  Home-page: https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-spanner
6
6
  Author: Google LLC
@@ -21,25 +21,31 @@ Classifier: Operating System :: OS Independent
21
21
  Classifier: Topic :: Internet
22
22
  Requires-Python: >=3.10
23
23
  License-File: LICENSE
24
- Requires-Dist: google-api-core[grpc]<3.0.0,>=2.17.1
24
+ Requires-Dist: google-api-core[grpc]<3.0.0,>=2.24.2
25
25
  Requires-Dist: google-auth!=2.24.0,!=2.25.0,<3.0.0,>=2.14.1
26
26
  Requires-Dist: google-cloud-core<3.0.0,>=2.0.0
27
27
  Requires-Dist: grpcio<2.0.0,>=1.49.1
28
28
  Requires-Dist: grpcio<2.0.0,>=1.75.1; python_version >= "3.14"
29
- Requires-Dist: grpc-google-iam-v1<1.0.0,>=0.12.4
30
- Requires-Dist: proto-plus<2.0.0,>=1.22.3
31
- Requires-Dist: proto-plus<2.0.0,>=1.25.0; python_version >= "3.13"
32
- Requires-Dist: protobuf<8.0.0,>=4.25.8
29
+ Requires-Dist: grpc-google-iam-v1<1.0.0,>=0.14.2
30
+ Requires-Dist: proto-plus<2.0.0,>=1.26.1
31
+ Requires-Dist: protobuf<8.0.0,>=6.33.5
33
32
  Requires-Dist: grpc-interceptor>=0.15.4
34
33
  Requires-Dist: sqlparse>=0.4.4
35
34
  Requires-Dist: opentelemetry-api>=1.22.0
36
35
  Requires-Dist: opentelemetry-sdk>=1.22.0
37
36
  Requires-Dist: opentelemetry-semantic-conventions>=0.43b0
38
37
  Requires-Dist: opentelemetry-resourcedetector-gcp>=1.8.0a0
39
- Requires-Dist: google-cloud-monitoring>=2.16.0
38
+ Requires-Dist: google-cloud-monitoring>=2.28.0
40
39
  Requires-Dist: mmh3>=4.1.0
41
40
  Provides-Extra: libcst
42
41
  Requires-Dist: libcst>=0.2.5; extra == "libcst"
42
+ Provides-Extra: test
43
+ Requires-Dist: pytest; extra == "test"
44
+ Requires-Dist: mock; extra == "test"
45
+ Requires-Dist: asyncmock; extra == "test"
46
+ Requires-Dist: pytest-cov; extra == "test"
47
+ Requires-Dist: pytest-asyncio; extra == "test"
48
+ Requires-Dist: pytest-xdist; extra == "test"
43
49
  Dynamic: author
44
50
  Dynamic: author-email
45
51
  Dynamic: classifier
@@ -1,24 +1,29 @@
1
- google-api-core[grpc]<3.0.0,>=2.17.1
1
+ google-api-core[grpc]<3.0.0,>=2.24.2
2
2
  google-auth!=2.24.0,!=2.25.0,<3.0.0,>=2.14.1
3
3
  google-cloud-core<3.0.0,>=2.0.0
4
4
  grpcio<2.0.0,>=1.49.1
5
- grpc-google-iam-v1<1.0.0,>=0.12.4
6
- proto-plus<2.0.0,>=1.22.3
7
- protobuf<8.0.0,>=4.25.8
5
+ grpc-google-iam-v1<1.0.0,>=0.14.2
6
+ proto-plus<2.0.0,>=1.26.1
7
+ protobuf<8.0.0,>=6.33.5
8
8
  grpc-interceptor>=0.15.4
9
9
  sqlparse>=0.4.4
10
10
  opentelemetry-api>=1.22.0
11
11
  opentelemetry-sdk>=1.22.0
12
12
  opentelemetry-semantic-conventions>=0.43b0
13
13
  opentelemetry-resourcedetector-gcp>=1.8.0a0
14
- google-cloud-monitoring>=2.16.0
14
+ google-cloud-monitoring>=2.28.0
15
15
  mmh3>=4.1.0
16
16
 
17
- [:python_version >= "3.13"]
18
- proto-plus<2.0.0,>=1.25.0
19
-
20
17
  [:python_version >= "3.14"]
21
18
  grpcio<2.0.0,>=1.75.1
22
19
 
23
20
  [libcst]
24
21
  libcst>=0.2.5
22
+
23
+ [test]
24
+ pytest
25
+ mock
26
+ asyncmock
27
+ pytest-cov
28
+ pytest-asyncio
29
+ pytest-xdist
@@ -29,7 +29,10 @@ description = "Google Cloud Spanner API client library"
29
29
  version = None
30
30
 
31
31
  with open(os.path.join(package_root, "google/cloud/spanner/gapic_version.py")) as fp:
32
- version_candidates = re.findall(r"(?<=\")\d+.\d+.\d+(?=\")", fp.read())
32
+ version_candidates = re.findall(
33
+ r"(?<=\")\d+\.\d+\.\d+[^\"\s]*(?=\")",
34
+ fp.read(),
35
+ )
33
36
  assert len(version_candidates) == 1
34
37
  version = version_candidates[0]
35
38
 
@@ -39,17 +42,16 @@ else:
39
42
  release_status = "Development Status :: 5 - Production/Stable"
40
43
 
41
44
  dependencies = [
42
- "google-api-core[grpc] >= 2.17.1, <3.0.0",
45
+ "google-api-core[grpc] >= 2.24.2, <3.0.0",
43
46
  # Exclude incompatible versions of `google-auth`
44
47
  # See https://github.com/googleapis/google-cloud-python/issues/12364
45
48
  "google-auth >= 2.14.1, <3.0.0,!=2.24.0,!=2.25.0",
46
49
  "google-cloud-core >= 2.0.0, < 3.0.0",
47
50
  "grpcio >= 1.49.1, < 2.0.0",
48
51
  "grpcio >= 1.75.1, < 2.0.0; python_version >= '3.14'",
49
- "grpc-google-iam-v1 >= 0.12.4, <1.0.0",
50
- "proto-plus >= 1.22.3, <2.0.0",
51
- "proto-plus >= 1.25.0, <2.0.0; python_version >= '3.13'",
52
- "protobuf >= 4.25.8, < 8.0.0",
52
+ "grpc-google-iam-v1 >= 0.14.2, <1.0.0",
53
+ "proto-plus >= 1.26.1, <2.0.0",
54
+ "protobuf >= 6.33.5, < 8.0.0",
53
55
  "grpc-interceptor >= 0.15.4",
54
56
  "sqlparse >= 0.4.4",
55
57
  # Make OpenTelemetry a core dependency
@@ -57,10 +59,20 @@ dependencies = [
57
59
  "opentelemetry-sdk >= 1.22.0",
58
60
  "opentelemetry-semantic-conventions >= 0.43b0",
59
61
  "opentelemetry-resourcedetector-gcp >= 1.8.0a0",
60
- "google-cloud-monitoring >= 2.16.0",
62
+ "google-cloud-monitoring >= 2.28.0",
61
63
  "mmh3 >= 4.1.0",
62
64
  ]
63
- extras = {"libcst": "libcst >= 0.2.5"}
65
+ extras = {
66
+ "libcst": "libcst >= 0.2.5",
67
+ "test": [
68
+ "pytest",
69
+ "mock",
70
+ "asyncmock",
71
+ "pytest-cov",
72
+ "pytest-asyncio",
73
+ "pytest-xdist",
74
+ ],
75
+ }
64
76
 
65
77
  url = "https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-spanner"
66
78