google-cloud-bigtable 2.44.0__tar.gz → 2.45.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 (266) hide show
  1. {google_cloud_bigtable-2.44.0/google_cloud_bigtable.egg-info → google_cloud_bigtable-2.45.0}/PKG-INFO +1 -1
  2. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/gapic_version.py +1 -1
  3. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/table.py +94 -208
  4. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin/gapic_version.py +1 -1
  5. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/gapic_version.py +1 -1
  6. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/gapic_version.py +1 -1
  7. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0/google_cloud_bigtable.egg-info}/PKG-INFO +1 -1
  8. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/v2_client/test_data_api.py +39 -66
  9. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/test_table.py +207 -640
  10. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/LICENSE +0 -0
  11. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/MANIFEST.in +0 -0
  12. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/README.rst +0 -0
  13. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/__init__.py +0 -0
  14. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/app_profile.py +0 -0
  15. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/backup.py +0 -0
  16. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/batcher.py +0 -0
  17. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/client.py +0 -0
  18. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/cluster.py +0 -0
  19. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/column_family.py +0 -0
  20. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/__init__.py +0 -0
  21. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_async/__init__.py +0 -0
  22. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_async/_mutate_rows.py +0 -0
  23. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_async/_read_rows.py +0 -0
  24. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_async/_swappable_channel.py +0 -0
  25. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_async/client.py +0 -0
  26. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_async/metrics_interceptor.py +0 -0
  27. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_async/mutations_batcher.py +0 -0
  28. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_cross_sync/__init__.py +0 -0
  29. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_cross_sync/_decorators.py +0 -0
  30. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_cross_sync/_mapping_meta.py +0 -0
  31. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_cross_sync/cross_sync.py +0 -0
  32. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_helpers.py +0 -0
  33. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_metrics/__init__.py +0 -0
  34. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_metrics/data_model.py +0 -0
  35. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_metrics/handlers/_base.py +0 -0
  36. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_metrics/handlers/gcp_exporter.py +0 -0
  37. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_metrics/handlers/opentelemetry.py +0 -0
  38. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_metrics/metrics_controller.py +0 -0
  39. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_metrics/tracked_retry.py +0 -0
  40. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_sync_autogen/_mutate_rows.py +0 -0
  41. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_sync_autogen/_read_rows.py +0 -0
  42. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_sync_autogen/_swappable_channel.py +0 -0
  43. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_sync_autogen/client.py +0 -0
  44. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_sync_autogen/metrics_interceptor.py +0 -0
  45. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/_sync_autogen/mutations_batcher.py +0 -0
  46. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/exceptions.py +0 -0
  47. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/execute_query/__init__.py +0 -0
  48. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/execute_query/_async/__init__.py +0 -0
  49. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/execute_query/_async/execute_query_iterator.py +0 -0
  50. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/execute_query/_byte_cursor.py +0 -0
  51. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/execute_query/_checksum.py +0 -0
  52. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/execute_query/_parameters_formatting.py +0 -0
  53. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/execute_query/_query_result_parsing_utils.py +0 -0
  54. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/execute_query/_reader.py +0 -0
  55. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/execute_query/_sync_autogen/execute_query_iterator.py +0 -0
  56. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/execute_query/metadata.py +0 -0
  57. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/execute_query/values.py +0 -0
  58. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/mutations.py +0 -0
  59. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/read_modify_write_rules.py +0 -0
  60. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/read_rows_query.py +0 -0
  61. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/row.py +0 -0
  62. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/data/row_filters.py +0 -0
  63. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/encryption_info.py +0 -0
  64. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/enums.py +0 -0
  65. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/error.py +0 -0
  66. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/helpers.py +0 -0
  67. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/instance.py +0 -0
  68. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/policy.py +0 -0
  69. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/py.typed +0 -0
  70. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/row.py +0 -0
  71. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/row_data.py +0 -0
  72. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/row_filters.py +0 -0
  73. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/row_merger.py +0 -0
  74. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable/row_set.py +0 -0
  75. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin/__init__.py +0 -0
  76. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin/py.typed +0 -0
  77. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/__init__.py +0 -0
  78. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/_compat.py +0 -0
  79. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/gapic_metadata.json +0 -0
  80. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/overlay/__init__.py +0 -0
  81. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/overlay/services/__init__.py +0 -0
  82. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/overlay/services/bigtable_table_admin/__init__.py +0 -0
  83. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/overlay/services/bigtable_table_admin/async_client.py +0 -0
  84. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/overlay/services/bigtable_table_admin/client.py +0 -0
  85. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/overlay/types/__init__.py +0 -0
  86. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/overlay/types/async_consistency.py +0 -0
  87. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/overlay/types/async_restore_table.py +0 -0
  88. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/overlay/types/consistency.py +0 -0
  89. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/overlay/types/restore_table.py +0 -0
  90. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/overlay/types/wait_for_consistency_request.py +0 -0
  91. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/py.typed +0 -0
  92. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/__init__.py +0 -0
  93. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_instance_admin/__init__.py +0 -0
  94. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_instance_admin/async_client.py +0 -0
  95. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_instance_admin/client.py +0 -0
  96. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_instance_admin/pagers.py +0 -0
  97. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_instance_admin/transports/__init__.py +0 -0
  98. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_instance_admin/transports/base.py +0 -0
  99. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_instance_admin/transports/grpc.py +0 -0
  100. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_instance_admin/transports/grpc_asyncio.py +0 -0
  101. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_instance_admin/transports/rest.py +0 -0
  102. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_instance_admin/transports/rest_base.py +0 -0
  103. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_table_admin/__init__.py +0 -0
  104. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_table_admin/async_client.py +0 -0
  105. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_table_admin/client.py +0 -0
  106. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_table_admin/pagers.py +0 -0
  107. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_table_admin/transports/__init__.py +0 -0
  108. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_table_admin/transports/base.py +0 -0
  109. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_table_admin/transports/grpc.py +0 -0
  110. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_table_admin/transports/grpc_asyncio.py +0 -0
  111. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_table_admin/transports/rest.py +0 -0
  112. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/services/bigtable_table_admin/transports/rest_base.py +0 -0
  113. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/types/__init__.py +0 -0
  114. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/types/bigtable_instance_admin.py +0 -0
  115. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/types/bigtable_table_admin.py +0 -0
  116. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/types/common.py +0 -0
  117. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/types/instance.py +0 -0
  118. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/types/table.py +0 -0
  119. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/types/types.py +0 -0
  120. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/utils/__init__.py +0 -0
  121. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_admin_v2/utils/oneof_message.py +0 -0
  122. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/__init__.py +0 -0
  123. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/_compat.py +0 -0
  124. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/gapic_metadata.json +0 -0
  125. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/py.typed +0 -0
  126. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/services/__init__.py +0 -0
  127. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/services/bigtable/__init__.py +0 -0
  128. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/services/bigtable/async_client.py +0 -0
  129. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/services/bigtable/client.py +0 -0
  130. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/services/bigtable/transports/__init__.py +0 -0
  131. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/services/bigtable/transports/base.py +0 -0
  132. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/services/bigtable/transports/grpc.py +0 -0
  133. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/services/bigtable/transports/grpc_asyncio.py +0 -0
  134. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/services/bigtable/transports/rest.py +0 -0
  135. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/services/bigtable/transports/rest_base.py +0 -0
  136. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/types/__init__.py +0 -0
  137. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/types/bigtable.py +0 -0
  138. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/types/data.py +0 -0
  139. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/types/feature_flags.py +0 -0
  140. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/types/peer_info.py +0 -0
  141. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/types/request_stats.py +0 -0
  142. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/types/response_params.py +0 -0
  143. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/types/session.py +0 -0
  144. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google/cloud/bigtable_v2/types/types.py +0 -0
  145. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google_cloud_bigtable.egg-info/SOURCES.txt +0 -0
  146. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google_cloud_bigtable.egg-info/dependency_links.txt +0 -0
  147. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google_cloud_bigtable.egg-info/not-zip-safe +0 -0
  148. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google_cloud_bigtable.egg-info/requires.txt +0 -0
  149. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/google_cloud_bigtable.egg-info/top_level.txt +0 -0
  150. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/setup.cfg +0 -0
  151. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/setup.py +0 -0
  152. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/__init__.py +0 -0
  153. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/__init__.py +0 -0
  154. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/admin_overlay/__init__.py +0 -0
  155. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/admin_overlay/conftest.py +0 -0
  156. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/admin_overlay/test_system_async.py +0 -0
  157. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/admin_overlay/test_system_autogen.py +0 -0
  158. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/conftest.py +0 -0
  159. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/cross_sync/test_cases/async_to_sync.yaml +0 -0
  160. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/cross_sync/test_cases/cross_sync_files.yaml +0 -0
  161. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/cross_sync/test_cases/rm_aio.yaml +0 -0
  162. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/cross_sync/test_cases/strip_async_conditional_branches.yaml +0 -0
  163. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/cross_sync/test_cases/symbol_replacer.yaml +0 -0
  164. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/cross_sync/test_cross_sync_e2e.py +0 -0
  165. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/data/__init__.py +0 -0
  166. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/data/test_metrics_async.py +0 -0
  167. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/data/test_metrics_autogen.py +0 -0
  168. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/data/test_system_async.py +0 -0
  169. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/data/test_system_autogen.py +0 -0
  170. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/utils.py +0 -0
  171. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/v2_client/__init__.py +0 -0
  172. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/v2_client/_helpers.py +0 -0
  173. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/v2_client/conftest.py +0 -0
  174. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/v2_client/test_instance_admin.py +0 -0
  175. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/system/v2_client/test_table_admin.py +0 -0
  176. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/__init__.py +0 -0
  177. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/admin_overlay/my_oneof_message.py +0 -0
  178. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/admin_overlay/test_admin_packaging.py +0 -0
  179. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/admin_overlay/test_async_client.py +0 -0
  180. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/admin_overlay/test_async_consistency.py +0 -0
  181. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/admin_overlay/test_async_restore_table.py +0 -0
  182. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/admin_overlay/test_client.py +0 -0
  183. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/admin_overlay/test_consistency.py +0 -0
  184. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/admin_overlay/test_oneof_message.py +0 -0
  185. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/admin_overlay/test_restore_table.py +0 -0
  186. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/conftest.py +0 -0
  187. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/__init__.py +0 -0
  188. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_async/__init__.py +0 -0
  189. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_async/test__mutate_rows.py +0 -0
  190. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_async/test__read_rows.py +0 -0
  191. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_async/test__swappable_channel.py +0 -0
  192. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_async/test_client.py +0 -0
  193. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_async/test_metrics_interceptor.py +0 -0
  194. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_async/test_mutations_batcher.py +0 -0
  195. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_async/test_read_rows_acceptance.py +0 -0
  196. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_cross_sync/test_cross_sync.py +0 -0
  197. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_cross_sync/test_cross_sync_decorators.py +0 -0
  198. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_metrics/__init__.py +0 -0
  199. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_metrics/test_data_model.py +0 -0
  200. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_metrics/test_gcp_exporter_handler.py +0 -0
  201. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_metrics/test_metrics_controller.py +0 -0
  202. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_metrics/test_opentelemetry_handler.py +0 -0
  203. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_metrics/test_tracked_retry.py +0 -0
  204. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_sync_autogen/__init__.py +0 -0
  205. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_sync_autogen/test__mutate_rows.py +0 -0
  206. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_sync_autogen/test__read_rows.py +0 -0
  207. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_sync_autogen/test__swappable_channel.py +0 -0
  208. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_sync_autogen/test_client.py +0 -0
  209. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_sync_autogen/test_metrics_interceptor.py +0 -0
  210. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_sync_autogen/test_mutations_batcher.py +0 -0
  211. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/_sync_autogen/test_read_rows_acceptance.py +0 -0
  212. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/execute_query/__init__.py +0 -0
  213. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/execute_query/_async/__init__.py +0 -0
  214. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/execute_query/_async/test_query_iterator.py +0 -0
  215. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/execute_query/_sync_autogen/__init__.py +0 -0
  216. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/execute_query/_sync_autogen/test_query_iterator.py +0 -0
  217. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/execute_query/resources/README.md +0 -0
  218. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/execute_query/resources/__init__.py +0 -0
  219. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/execute_query/resources/descriptors.pb +0 -0
  220. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/execute_query/resources/singer.proto +0 -0
  221. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/execute_query/resources/singer_pb2.py +0 -0
  222. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/execute_query/sql_helpers.py +0 -0
  223. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/execute_query/test_byte_cursor.py +0 -0
  224. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/execute_query/test_checksum.py +0 -0
  225. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/execute_query/test_execute_query_parameters_parsing.py +0 -0
  226. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/execute_query/test_metadata.py +0 -0
  227. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/execute_query/test_query_result_parsing_utils.py +0 -0
  228. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/execute_query/test_query_result_row_reader.py +0 -0
  229. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/read-rows-acceptance-test.json +0 -0
  230. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/test__helpers.py +0 -0
  231. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/test_exceptions.py +0 -0
  232. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/test_helpers.py +0 -0
  233. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/test_mutations.py +0 -0
  234. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/test_read_modify_write_rules.py +0 -0
  235. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/test_read_rows_query.py +0 -0
  236. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/test_row.py +0 -0
  237. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/test_row_filters.py +0 -0
  238. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/data/test_sync_up_to_date.py +0 -0
  239. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/gapic/__init__.py +0 -0
  240. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/gapic/bigtable_admin_v2/__init__.py +0 -0
  241. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/gapic/bigtable_admin_v2/test_bigtable_instance_admin.py +0 -0
  242. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/gapic/bigtable_admin_v2/test_bigtable_table_admin.py +0 -0
  243. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/gapic/bigtable_admin_v2/test_compat.py +0 -0
  244. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/gapic/bigtable_v2/__init__.py +0 -0
  245. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/gapic/bigtable_v2/test_bigtable.py +0 -0
  246. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/gapic/bigtable_v2/test_compat.py +0 -0
  247. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/test_packaging.py +0 -0
  248. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/test_sql_routing_parameters.py +0 -0
  249. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/__init__.py +0 -0
  250. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/_testing.py +0 -0
  251. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/read-rows-acceptance-test.json +0 -0
  252. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/test_app_profile.py +0 -0
  253. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/test_backup.py +0 -0
  254. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/test_batcher.py +0 -0
  255. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/test_client.py +0 -0
  256. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/test_cluster.py +0 -0
  257. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/test_column_family.py +0 -0
  258. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/test_encryption_info.py +0 -0
  259. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/test_error.py +0 -0
  260. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/test_instance.py +0 -0
  261. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/test_policy.py +0 -0
  262. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/test_row.py +0 -0
  263. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/test_row_data.py +0 -0
  264. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/test_row_filters.py +0 -0
  265. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/test_row_merger.py +0 -0
  266. {google_cloud_bigtable-2.44.0 → google_cloud_bigtable-2.45.0}/tests/unit/v2_client/test_row_set.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: google-cloud-bigtable
3
- Version: 2.44.0
3
+ Version: 2.45.0
4
4
  Summary: Google Cloud Bigtable API client library
5
5
  Home-page: https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-bigtable
6
6
  Author: Google LLC
@@ -13,4 +13,4 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
  #
16
- __version__ = "2.44.0" # {x-release-please-version}
16
+ __version__ = "2.45.0" # {x-release-please-version}
@@ -17,18 +17,18 @@
17
17
  import warnings
18
18
  from typing import Set
19
19
 
20
- from google.api_core import timeout
21
20
  from google.api_core.exceptions import (
22
21
  Aborted,
23
22
  DeadlineExceeded,
23
+ GoogleAPICallError,
24
24
  InternalServerError,
25
25
  NotFound,
26
- RetryError,
27
26
  ServiceUnavailable,
28
27
  )
29
28
  from google.api_core.gapic_v1.method import DEFAULT
30
29
  from google.api_core.retry import Retry, if_exception_type
31
30
  from google.cloud._helpers import _to_bytes # type: ignore
31
+ from google.rpc import code_pb2, status_pb2
32
32
 
33
33
  from google.cloud.bigtable import enums
34
34
  from google.cloud.bigtable.backup import Backup
@@ -38,13 +38,18 @@ from google.cloud.bigtable.batcher import (
38
38
  MutationsBatcher,
39
39
  )
40
40
  from google.cloud.bigtable.column_family import ColumnFamily, _gc_rule_from_pb
41
+ from google.cloud.bigtable.data._helpers import TABLE_DEFAULT
42
+ from google.cloud.bigtable.data.exceptions import (
43
+ MutationsExceptionGroup,
44
+ RetryExceptionGroup,
45
+ )
46
+ from google.cloud.bigtable.data.mutations import RowMutationEntry
41
47
  from google.cloud.bigtable.encryption_info import EncryptionInfo
42
48
  from google.cloud.bigtable.policy import Policy
43
49
  from google.cloud.bigtable.row import AppendRow, ConditionalRow, DirectRow
44
50
  from google.cloud.bigtable.row_data import (
45
51
  DEFAULT_RETRY_READ_ROWS,
46
52
  PartialRowsData,
47
- _retriable_internal_server_error,
48
53
  )
49
54
  from google.cloud.bigtable.row_set import RowRange, RowSet
50
55
  from google.cloud.bigtable_admin_v2 import BaseBigtableTableAdminClient
@@ -563,7 +568,7 @@ class Table(object):
563
568
  default value :attr:`DEFAULT_RETRY_READ_ROWS` can be used and
564
569
  modified with the :meth:`~google.api_core.retry.Retry.with_delay`
565
570
  method or the :meth:`~google.api_core.retry.Retry.with_deadline`
566
- method.
571
+ method. Custom on_error and predicate values will be ignored.
567
572
 
568
573
  :rtype: :class:`.PartialRowData`, :data:`NoneType <types.NoneType>`
569
574
  :returns: The contents of the row if any chunks were returned in
@@ -634,7 +639,7 @@ class Table(object):
634
639
  default value :attr:`DEFAULT_RETRY_READ_ROWS` can be used and
635
640
  modified with the :meth:`~google.api_core.retry.Retry.with_delay`
636
641
  method or the :meth:`~google.api_core.retry.Retry.with_deadline`
637
- method.
642
+ method. Custom on_error and predicate values will be ignored.
638
643
 
639
644
  :rtype: :class:`.PartialRowsData`
640
645
  :returns: A :class:`.PartialRowsData` a generator for consuming
@@ -715,6 +720,9 @@ class Table(object):
715
720
  specify a ``retry`` strategy of "do-nothing", a deadline of ``0.0``
716
721
  can be specified.
717
722
 
723
+ If a deadline of ``None`` is specified, the deadline defaults to
724
+ a table-default of 600 seconds (10 minutes).
725
+
718
726
  :type rows: list
719
727
  :param rows: List or other iterable of :class:`.DirectRow` instances.
720
728
 
@@ -723,7 +731,8 @@ class Table(object):
723
731
  (Optional) Retry delay and deadline arguments. To override, the
724
732
  default value :attr:`DEFAULT_RETRY` can be used and modified with
725
733
  the :meth:`~google.api_core.retry.Retry.with_delay` method or the
726
- :meth:`~google.api_core.retry.Retry.with_deadline` method.
734
+ :meth:`~google.api_core.retry.Retry.with_deadline` method. Custom
735
+ on_error and predicate values will be ignored.
727
736
 
728
737
  :type timeout: float
729
738
  :param timeout: number of seconds bounding retries for the call
@@ -732,18 +741,90 @@ class Table(object):
732
741
  :returns: A list of response statuses (`google.rpc.status_pb2.Status`)
733
742
  corresponding to success or failure of each row mutation
734
743
  sent. These will be in the same order as the `rows`.
744
+
745
+ :raise: ValueError: If a row entry has no mutations, or too many mutations
735
746
  """
736
747
  if timeout is DEFAULT:
737
748
  timeout = self.mutation_timeout
738
749
 
739
- retryable_mutate_rows = _RetryableMutateRowsWorker(
740
- self._instance._client,
741
- self.name,
742
- rows,
743
- app_profile_id=self._app_profile_id,
744
- timeout=timeout,
750
+ retryable_errors = RETRYABLE_MUTATION_ERRORS
751
+
752
+ # The data client cannot take in zero or null values for deadline, so we set it to
753
+ # the default if that is the case.
754
+ if retry is None:
755
+ operation_timeout = TABLE_DEFAULT.MUTATE_ROWS
756
+ retryable_errors = []
757
+ elif retry.deadline is None:
758
+ operation_timeout = TABLE_DEFAULT.MUTATE_ROWS
759
+
760
+ # To adhere to the retry strategy of do-nothing being achievable with a deadline
761
+ # of 0.0, we modify the retryable errors to be empty if such a deadline is passed.
762
+ elif retry.deadline == 0:
763
+ operation_timeout = TABLE_DEFAULT.MUTATE_ROWS
764
+ retryable_errors = []
765
+ else:
766
+ operation_timeout = retry.deadline
767
+
768
+ attempt_timeout = timeout
769
+ mutation_entries = []
770
+ for row in rows:
771
+ if not isinstance(row, DirectRow):
772
+ raise TypeError(
773
+ "Bulk processing can not be applied for conditional or append mutations."
774
+ )
775
+ if row.table is not None and row.table.name != self.name:
776
+ raise TableMismatchError(
777
+ "Row %s is a part of %s table. Current table: %s"
778
+ % (row.row_key, row.table.name, self.name)
779
+ )
780
+ mutation_entries.append(RowMutationEntry(row.row_key, row._get_mutations()))
781
+ return_statuses = [
782
+ status_pb2.Status(code=code_pb2.OK) for _ in range(len(mutation_entries))
783
+ ] # By default, return status OKs for everything
784
+
785
+ try:
786
+ self._table_impl.bulk_mutate_rows(
787
+ mutation_entries,
788
+ operation_timeout=operation_timeout,
789
+ attempt_timeout=attempt_timeout,
790
+ retryable_errors=retryable_errors,
791
+ )
792
+ except MutationsExceptionGroup as mut_exc_group:
793
+ # We exception handle as follows:
794
+ #
795
+ # 1. Each exception in the error group is a FailedMutationEntryError, and its
796
+ # cause is either a singular exception or a RetryExceptionGroup consisting of
797
+ # multiple exceptions.
798
+ #
799
+ # 2. In the case of a singular exception, if the error does not have a gRPC status
800
+ # code, we return a status code of UNKNOWN.
801
+ #
802
+ # 3. In the case of a RetryExceptionGroup, we use terminal exception in the exception
803
+ # group and process that.
804
+ for error in mut_exc_group.exceptions:
805
+ cause = error.__cause__
806
+ if isinstance(cause, RetryExceptionGroup):
807
+ return_statuses[error.index] = self._get_status(
808
+ cause.exceptions[-1]
809
+ )
810
+ else:
811
+ return_statuses[error.index] = self._get_status(cause)
812
+
813
+ return return_statuses
814
+
815
+ @staticmethod
816
+ def _get_status(error):
817
+ if isinstance(error, GoogleAPICallError) and error.grpc_status_code is not None:
818
+ return status_pb2.Status(
819
+ code=error.grpc_status_code.value[0],
820
+ message=error.message,
821
+ details=error.details,
822
+ )
823
+
824
+ return status_pb2.Status(
825
+ code=code_pb2.UNKNOWN,
826
+ message=str(error),
745
827
  )
746
- return retryable_mutate_rows(retry=retry)
747
828
 
748
829
  def sample_row_keys(self):
749
830
  """Read a sample of row keys in the table.
@@ -1078,133 +1159,6 @@ class Table(object):
1078
1159
  )
1079
1160
 
1080
1161
 
1081
- class _RetryableMutateRowsWorker(object):
1082
- """A callable worker that can retry to mutate rows with transient errors.
1083
-
1084
- This class is a callable that can retry mutating rows that result in
1085
- transient errors. After all rows are successful or none of the rows
1086
- are retryable, any subsequent call on this callable will be a no-op.
1087
- """
1088
-
1089
- def __init__(self, client, table_name, rows, app_profile_id=None, timeout=None):
1090
- self.client = client
1091
- self.table_name = table_name
1092
- self.rows = rows
1093
- self.app_profile_id = app_profile_id
1094
- self.responses_statuses = [None] * len(self.rows)
1095
- self.timeout = timeout
1096
-
1097
- def __call__(self, retry=DEFAULT_RETRY):
1098
- """Attempt to mutate all rows and retry rows with transient errors.
1099
-
1100
- Will retry the rows with transient errors until all rows succeed or
1101
- ``deadline`` specified in the `retry` is reached.
1102
-
1103
- :rtype: list
1104
- :returns: A list of response statuses (`google.rpc.status_pb2.Status`)
1105
- corresponding to success or failure of each row mutation
1106
- sent. These will be in the same order as the ``rows``.
1107
- """
1108
- mutate_rows = self._do_mutate_retryable_rows
1109
- if retry:
1110
- mutate_rows = retry(self._do_mutate_retryable_rows)
1111
-
1112
- try:
1113
- mutate_rows()
1114
- except (_BigtableRetryableError, RetryError):
1115
- # - _BigtableRetryableError raised when no retry strategy is used
1116
- # and a retryable error on a mutation occurred.
1117
- # - RetryError raised when retry deadline is reached.
1118
- # In both cases, just return current `responses_statuses`.
1119
- pass
1120
-
1121
- return self.responses_statuses
1122
-
1123
- @staticmethod
1124
- def _is_retryable(status):
1125
- return status is None or status.code in RETRYABLE_CODES
1126
-
1127
- def _do_mutate_retryable_rows(self):
1128
- """Mutate all the rows that are eligible for retry.
1129
-
1130
- A row is eligible for retry if it has not been tried or if it resulted
1131
- in a transient error in a previous call.
1132
-
1133
- :rtype: list
1134
- :return: The responses statuses, which is a list of
1135
- :class:`~google.rpc.status_pb2.Status`.
1136
- :raises: One of the following:
1137
-
1138
- * :exc:`~.table._BigtableRetryableError` if any
1139
- row returned a transient error.
1140
- * :exc:`RuntimeError` if the number of responses doesn't
1141
- match the number of rows that were retried
1142
- """
1143
- retryable_rows = []
1144
- index_into_all_rows = []
1145
- for index, status in enumerate(self.responses_statuses):
1146
- if self._is_retryable(status):
1147
- retryable_rows.append(self.rows[index])
1148
- index_into_all_rows.append(index)
1149
-
1150
- if not retryable_rows:
1151
- # All mutations are either successful or non-retryable now.
1152
- return self.responses_statuses
1153
-
1154
- entries = _compile_mutation_entries(self.table_name, retryable_rows)
1155
- data_client = self.client.table_data_client
1156
-
1157
- kwargs = {}
1158
- if self.timeout is not None:
1159
- kwargs["timeout"] = timeout.ExponentialTimeout(deadline=self.timeout)
1160
-
1161
- try:
1162
- responses = data_client.mutate_rows(
1163
- table_name=self.table_name,
1164
- entries=entries,
1165
- app_profile_id=self.app_profile_id,
1166
- retry=None,
1167
- **kwargs,
1168
- )
1169
- except RETRYABLE_MUTATION_ERRORS as exc:
1170
- # If an exception, considered retryable by `RETRYABLE_MUTATION_ERRORS`, is
1171
- # returned from the initial call, consider
1172
- # it to be retryable. Wrap as a Bigtable Retryable Error.
1173
- # For InternalServerError, it is only retriable if the message is related to RST Stream messages
1174
- if _retriable_internal_server_error(exc) or not isinstance(
1175
- exc, InternalServerError
1176
- ):
1177
- raise _BigtableRetryableError
1178
- else:
1179
- # re-raise the original exception
1180
- raise
1181
-
1182
- num_responses = 0
1183
- num_retryable_responses = 0
1184
- for response in responses:
1185
- for entry in response.entries:
1186
- num_responses += 1
1187
- index = index_into_all_rows[entry.index]
1188
- self.responses_statuses[index] = entry.status
1189
- if self._is_retryable(entry.status):
1190
- num_retryable_responses += 1
1191
- if entry.status.code == 0:
1192
- self.rows[index].clear()
1193
-
1194
- if len(retryable_rows) != num_responses:
1195
- raise RuntimeError(
1196
- "Unexpected number of responses",
1197
- num_responses,
1198
- "Expected",
1199
- len(retryable_rows),
1200
- )
1201
-
1202
- if num_retryable_responses:
1203
- raise _BigtableRetryableError
1204
-
1205
- return self.responses_statuses
1206
-
1207
-
1208
1162
  class ClusterState(object):
1209
1163
  """Representation of a Cluster State.
1210
1164
 
@@ -1351,71 +1305,3 @@ def _create_row_request(
1351
1305
  row_set._update_message_request(message)
1352
1306
 
1353
1307
  return message
1354
-
1355
-
1356
- def _compile_mutation_entries(table_name, rows):
1357
- """Create list of mutation entries
1358
-
1359
- :type table_name: str
1360
- :param table_name: The name of the table to write to.
1361
-
1362
- :type rows: list
1363
- :param rows: List or other iterable of :class:`.DirectRow` instances.
1364
-
1365
- :rtype: List[:class:`data_messages_v2_pb2.MutateRowsRequest.Entry`]
1366
- :returns: entries corresponding to the inputs.
1367
- :raises: :exc:`~.table.TooManyMutationsError` if the number of mutations is
1368
- greater than the max ({})
1369
- """.format(_MAX_BULK_MUTATIONS)
1370
- entries = []
1371
- mutations_count = 0
1372
- entry_klass = data_messages_v2_pb2.MutateRowsRequest.Entry
1373
-
1374
- for row in rows:
1375
- _check_row_table_name(table_name, row)
1376
- _check_row_type(row)
1377
- mutations = row._get_mutation_pbs()
1378
- entries.append(entry_klass(row_key=row.row_key, mutations=mutations))
1379
- mutations_count += len(mutations)
1380
-
1381
- if mutations_count > _MAX_BULK_MUTATIONS:
1382
- raise TooManyMutationsError(
1383
- "Maximum number of mutations is %s" % (_MAX_BULK_MUTATIONS,)
1384
- )
1385
- return entries
1386
-
1387
-
1388
- def _check_row_table_name(table_name, row):
1389
- """Checks that a row belongs to a table.
1390
-
1391
- :type table_name: str
1392
- :param table_name: The name of the table.
1393
-
1394
- :type row: :class:`~google.cloud.bigtable.row.Row`
1395
- :param row: An instance of :class:`~google.cloud.bigtable.row.Row`
1396
- subclasses.
1397
-
1398
- :raises: :exc:`~.table.TableMismatchError` if the row does not belong to
1399
- the table.
1400
- """
1401
- if row.table is not None and row.table.name != table_name:
1402
- raise TableMismatchError(
1403
- "Row %s is a part of %s table. Current table: %s"
1404
- % (row.row_key, row.table.name, table_name)
1405
- )
1406
-
1407
-
1408
- def _check_row_type(row):
1409
- """Checks that a row is an instance of :class:`.DirectRow`.
1410
-
1411
- :type row: :class:`~google.cloud.bigtable.row.Row`
1412
- :param row: An instance of :class:`~google.cloud.bigtable.row.Row`
1413
- subclasses.
1414
-
1415
- :raises: :class:`TypeError <exceptions.TypeError>` if the row is not an
1416
- instance of DirectRow.
1417
- """
1418
- if not isinstance(row, DirectRow):
1419
- raise TypeError(
1420
- "Bulk processing can not be applied for conditional or append mutations."
1421
- )
@@ -13,4 +13,4 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
  #
16
- __version__ = "2.44.0" # {x-release-please-version}
16
+ __version__ = "2.45.0" # {x-release-please-version}
@@ -13,4 +13,4 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
  #
16
- __version__ = "2.44.0" # {x-release-please-version}
16
+ __version__ = "2.45.0" # {x-release-please-version}
@@ -13,4 +13,4 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
  #
16
- __version__ = "2.44.0" # {x-release-please-version}
16
+ __version__ = "2.45.0" # {x-release-please-version}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: google-cloud-bigtable
3
- Version: 2.44.0
3
+ Version: 2.45.0
4
4
  Summary: Google Cloud Bigtable API client library
5
5
  Home-page: https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-bigtable
6
6
  Author: Google LLC
@@ -275,43 +275,12 @@ def test_table_mutate_rows(data_table, rows_to_delete):
275
275
  assert row2_data.cells[COLUMN_FAMILY_ID1][COL_NAME1][0].value == CELL_VAL4
276
276
 
277
277
 
278
- def _add_test_error_handler(retry):
279
- """Overwrites the current on_error function to assert that backoff values are within expected bounds."""
280
- import time
281
-
282
- curr_time = time.monotonic()
283
- times_triggered = 0
284
-
285
- # Assert that the retry handler works properly.
286
- def test_error_handler(exc):
287
- nonlocal curr_time, times_triggered
288
- next_time = time.monotonic()
289
- if times_triggered >= 1:
290
- gap = next_time - curr_time
291
-
292
- # Exponential backoff = uniform randomness from 0 to max_gap
293
- max_gap = min(
294
- retry._initial * retry._multiplier**times_triggered,
295
- retry._maximum,
296
- )
297
- # Allow a small tolerance margin (1.0s) for OS sleep scheduling latency
298
- assert gap <= max_gap + 1.0
299
- times_triggered += 1
300
- curr_time = next_time
301
-
302
- retry._on_error = test_error_handler
303
-
304
-
305
278
  def test_table_mutate_rows_retries_timeout(data_table, rows_to_delete):
306
- import copy
307
-
308
279
  import mock
309
- from google.api_core import retry as retries
310
- from google.api_core.exceptions import InvalidArgument
311
280
  from google.rpc.code_pb2 import Code
312
281
  from google.rpc.status_pb2 import Status
313
282
 
314
- from google.cloud.bigtable.table import DEFAULT_RETRY, _BigtableRetryableError
283
+ from google.cloud.bigtable.table import DEFAULT_RETRY
315
284
  from google.cloud.bigtable_v2 import MutateRowsResponse
316
285
 
317
286
  # Simulate a server error on row 2, and a normal response on row 1, followed by a bunch of error
@@ -346,6 +315,9 @@ def test_table_mutate_rows_retries_timeout(data_table, rows_to_delete):
346
315
 
347
316
  final_success_response = [MutateRowsResponse(entries=[MutateRowsResponse.Entry()])]
348
317
 
318
+ # Explicit timestamp ensures mutations are idempotent and eligible for retry.
319
+ timestamp = datetime(2023, 1, 1, tzinfo=timezone.utc)
320
+
349
321
  with mock.patch.object(
350
322
  data_table._instance._client.table_data_client, "mutate_rows"
351
323
  ) as mutate_mock:
@@ -358,16 +330,13 @@ def test_table_mutate_rows_retries_timeout(data_table, rows_to_delete):
358
330
 
359
331
  row = data_table.direct_row(ROW_KEY)
360
332
  rows_to_delete.append(row)
361
- row.set_cell(COLUMN_FAMILY_ID1, COL_NAME1, CELL_VAL1)
333
+ row.set_cell(COLUMN_FAMILY_ID1, COL_NAME1, CELL_VAL1, timestamp=timestamp)
362
334
 
363
335
  row_2 = data_table.direct_row(ROW_KEY_ALT)
364
336
  rows_to_delete.append(row_2)
365
- row_2.set_cell(COLUMN_FAMILY_ID1, COL_NAME1, CELL_VAL1)
337
+ row_2.set_cell(COLUMN_FAMILY_ID1, COL_NAME1, CELL_VAL1, timestamp=timestamp)
366
338
 
367
- # Testing the default retry
368
- default_retry_copy = copy.copy(DEFAULT_RETRY)
369
- _add_test_error_handler(default_retry_copy)
370
- statuses = data_table.mutate_rows([row, row_2], retry=default_retry_copy)
339
+ statuses = data_table.mutate_rows([row, row_2])
371
340
  assert statuses[0].code == Code.OK
372
341
  assert statuses[1].code == Code.OK
373
342
 
@@ -381,34 +350,41 @@ def test_table_mutate_rows_retries_timeout(data_table, rows_to_delete):
381
350
 
382
351
  row = data_table.direct_row(ROW_KEY)
383
352
  rows_to_delete.append(row)
384
- row.set_cell(COLUMN_FAMILY_ID1, COL_NAME1, CELL_VAL1)
353
+ row.set_cell(COLUMN_FAMILY_ID1, COL_NAME1, CELL_VAL1, timestamp=timestamp)
385
354
 
386
355
  row_2 = data_table.direct_row(ROW_KEY_ALT)
387
356
  rows_to_delete.append(row_2)
388
- row_2.set_cell(COLUMN_FAMILY_ID1, COL_NAME1, CELL_VAL1)
357
+ row_2.set_cell(COLUMN_FAMILY_ID1, COL_NAME1, CELL_VAL1, timestamp=timestamp)
389
358
 
390
- # Testing the default retry
391
- default_retry_copy = copy.copy(DEFAULT_RETRY)
392
- _add_test_error_handler(default_retry_copy)
393
- statuses = data_table.mutate_rows([row, row_2], retry=default_retry_copy)
359
+ statuses = data_table.mutate_rows([row, row_2])
394
360
  assert statuses[0].code == Code.OK
395
- assert statuses[1].code == Code.INTERNAL
361
+ assert statuses[1].code == Code.DEADLINE_EXCEEDED
396
362
 
397
- # Because of the way the retriable mutate worker class works, unusual things can happen
398
- # when passing in custom retry predicates.
399
- row = data_table.direct_row(ROW_KEY)
400
- rows_to_delete.append(row)
363
+ # Retries with deadline 0 should do nothing.
364
+ with mock.patch.object(
365
+ data_table._instance._client.table_data_client, "mutate_rows"
366
+ ) as mutate_mock:
367
+ mutate_mock.side_effect = [
368
+ initial_error_response,
369
+ followup_error_response,
370
+ followup_error_response,
371
+ final_success_response,
372
+ ]
401
373
 
402
- row_2 = data_table.direct_row(ROW_KEY_ALT)
403
- rows_to_delete.append(row_2)
374
+ row = data_table.direct_row(ROW_KEY)
375
+ rows_to_delete.append(row)
376
+ row.set_cell(COLUMN_FAMILY_ID1, COL_NAME1, CELL_VAL1, timestamp=timestamp)
404
377
 
405
- retry = DEFAULT_RETRY.with_predicate(
406
- retries.if_exception_type(_BigtableRetryableError, InvalidArgument)
407
- )
408
- _add_test_error_handler(retry)
409
- statuses = data_table.mutate_rows([row, row_2], retry=retry)
410
- assert statuses[0] is None
411
- assert statuses[1] is None
378
+ row_2 = data_table.direct_row(ROW_KEY_ALT)
379
+ rows_to_delete.append(row_2)
380
+ row_2.set_cell(COLUMN_FAMILY_ID1, COL_NAME1, CELL_VAL1, timestamp=timestamp)
381
+
382
+ do_nothing_retry = DEFAULT_RETRY.with_deadline(0.0)
383
+
384
+ statuses = data_table.mutate_rows([row, row_2], retry=do_nothing_retry)
385
+ assert statuses[0].code == Code.OK
386
+ assert statuses[1].code == Code.INTERNAL
387
+ mutate_mock.assert_called_once()
412
388
 
413
389
 
414
390
  def _populate_table(
@@ -496,26 +472,23 @@ def test_table_mutate_rows_integers(data_table, rows_to_delete):
496
472
 
497
473
 
498
474
  def test_table_mutate_rows_input_errors(data_table, rows_to_delete):
499
- from google.api_core.exceptions import InvalidArgument
500
-
501
- from google.cloud.bigtable.table import _MAX_BULK_MUTATIONS, TooManyMutationsError
475
+ from google.cloud.bigtable.table import _MAX_BULK_MUTATIONS
502
476
 
503
477
  row = data_table.direct_row(ROW_KEY)
504
478
  rows_to_delete.append(row)
505
479
 
506
- # Mutate row with 0 mutations gives an API error from the service, not
507
- # from the client library.
508
- with pytest.raises(InvalidArgument):
480
+ # Mutate row with 0 mutations gives a ValueError from the client library.
481
+ with pytest.raises(ValueError):
509
482
  data_table.mutate_rows([row])
510
483
 
511
484
  row.clear()
512
485
 
513
- # Mutate row with >100k mutations gives a TooManyMutationsError from the
486
+ # Mutate row with >100k mutations gives a ValueError from the
514
487
  # client library.
515
488
  for _ in range(0, _MAX_BULK_MUTATIONS + 1):
516
489
  row.set_cell(COLUMN_FAMILY_ID1, COL_NAME1, CELL_VAL1)
517
490
 
518
- with pytest.raises(TooManyMutationsError):
491
+ with pytest.raises(ValueError):
519
492
  data_table.mutate_rows([row])
520
493
 
521
494