Skip to content

Commit 2a2bbfd

Browse files
feat: Add String type with Utf8Raw encoding to Bigtable API (#968)
* feat: Add String type with Utf8Raw encoding to Bigtable API Bigtable will allow users to configure the type of a column family with string type PiperOrigin-RevId: 636631633 Source-Link: googleapis/googleapis@89a8364 Source-Link: googleapis/googleapis-gen@d776700 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiZDc3NjcwMDdlYWUwZmU4Nzc1NWIyMWNmZTU2OWI4Nzc5ZjAyMTUxYyJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
1 parent 6ef122a commit 2a2bbfd

File tree

5 files changed

+115
-214
lines changed

5 files changed

+115
-214
lines changed

google/cloud/bigtable_admin_v2/services/bigtable_instance_admin/transports/rest.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -904,8 +904,7 @@ def __call__(
904904
# Jsonify the request body
905905

906906
body = json_format.MessageToJson(
907-
transcoded_request["body"],
908-
use_integers_for_enums=True,
907+
transcoded_request["body"], use_integers_for_enums=True
909908
)
910909
uri = transcoded_request["uri"]
911910
method = transcoded_request["method"]

google/cloud/bigtable_admin_v2/types/types.py

Lines changed: 62 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,12 @@ class Type(proto.Message):
4949
original typed value? Note that Bigtable will always sort data
5050
based on the raw encoded value, *not* the decoded type.
5151
52-
- Example: STRING values sort in the same order as their UTF-8
52+
- Example: BYTES values sort in the same order as their raw
5353
encodings.
5454
- Counterexample: Encoding INT64 to a fixed-width STRING does
5555
*not* preserve sort order when dealing with negative numbers.
5656
INT64(1) > INT64(-1), but STRING("-00001") > STRING("00001).
57-
- The overall encoding chain sorts naturally if *every* link
57+
- The overall encoding chain has this property if *every* link
5858
does.
5959
6060
- Self-delimiting: If we concatenate two encoded values, can we
@@ -65,8 +65,8 @@ class Type(proto.Message):
6565
by a sign.
6666
- Counterexample: If we concatenate two UTF-8 encoded STRINGs,
6767
we have no way to tell where the first one ends.
68-
- The overall encoding chain is self-delimiting if *any* link
69-
is.
68+
- The overall encoding chain has this property if *any* link
69+
does.
7070
7171
- Compatibility: Which other systems have matching encoding
7272
schemes? For example, does this encoding have a GoogleSQL
@@ -83,6 +83,10 @@ class Type(proto.Message):
8383
bytes_type (google.cloud.bigtable_admin_v2.types.Type.Bytes):
8484
Bytes
8585
86+
This field is a member of `oneof`_ ``kind``.
87+
string_type (google.cloud.bigtable_admin_v2.types.Type.String):
88+
String
89+
8690
This field is a member of `oneof`_ ``kind``.
8791
int64_type (google.cloud.bigtable_admin_v2.types.Type.Int64):
8892
Int64
@@ -137,6 +141,54 @@ class Raw(proto.Message):
137141
message="Type.Bytes.Encoding",
138142
)
139143

144+
class String(proto.Message):
145+
r"""String Values of type ``String`` are stored in
146+
``Value.string_value``.
147+
148+
Attributes:
149+
encoding (google.cloud.bigtable_admin_v2.types.Type.String.Encoding):
150+
The encoding to use when converting to/from
151+
lower level types.
152+
"""
153+
154+
class Encoding(proto.Message):
155+
r"""Rules used to convert to/from lower level types.
156+
157+
.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields
158+
159+
Attributes:
160+
utf8_raw (google.cloud.bigtable_admin_v2.types.Type.String.Encoding.Utf8Raw):
161+
Use ``Utf8Raw`` encoding.
162+
163+
This field is a member of `oneof`_ ``encoding``.
164+
"""
165+
166+
class Utf8Raw(proto.Message):
167+
r"""UTF-8 encoding
168+
169+
- Natural sort? No (ASCII characters only)
170+
- Self-delimiting? No
171+
- Compatibility?
172+
173+
- BigQuery Federation ``TEXT`` encoding
174+
- HBase ``Bytes.toBytes``
175+
- Java ``String#getBytes(StandardCharsets.UTF_8)``
176+
177+
"""
178+
179+
utf8_raw: "Type.String.Encoding.Utf8Raw" = proto.Field(
180+
proto.MESSAGE,
181+
number=1,
182+
oneof="encoding",
183+
message="Type.String.Encoding.Utf8Raw",
184+
)
185+
186+
encoding: "Type.String.Encoding" = proto.Field(
187+
proto.MESSAGE,
188+
number=1,
189+
message="Type.String.Encoding",
190+
)
191+
140192
class Int64(proto.Message):
141193
r"""Int64 Values of type ``Int64`` are stored in ``Value.int_value``.
142194
@@ -250,6 +302,12 @@ class Sum(proto.Message):
250302
oneof="kind",
251303
message=Bytes,
252304
)
305+
string_type: String = proto.Field(
306+
proto.MESSAGE,
307+
number=2,
308+
oneof="kind",
309+
message=String,
310+
)
253311
int64_type: Int64 = proto.Field(
254312
proto.MESSAGE,
255313
number=5,

tests/unit/gapic/bigtable_admin_v2/test_bigtable_instance_admin.py

Lines changed: 20 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -9652,10 +9652,7 @@ def test_create_instance_rest_required_fields(
96529652
request = request_type(**request_init)
96539653
pb_request = request_type.pb(request)
96549654
jsonified_request = json.loads(
9655-
json_format.MessageToJson(
9656-
pb_request,
9657-
use_integers_for_enums=False,
9658-
)
9655+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
96599656
)
96609657

96619658
# verify fields with default values are dropped
@@ -9981,10 +9978,7 @@ def test_get_instance_rest_required_fields(
99819978
request = request_type(**request_init)
99829979
pb_request = request_type.pb(request)
99839980
jsonified_request = json.loads(
9984-
json_format.MessageToJson(
9985-
pb_request,
9986-
use_integers_for_enums=False,
9987-
)
9981+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
99889982
)
99899983

99909984
# verify fields with default values are dropped
@@ -10287,10 +10281,7 @@ def test_list_instances_rest_required_fields(
1028710281
request = request_type(**request_init)
1028810282
pb_request = request_type.pb(request)
1028910283
jsonified_request = json.loads(
10290-
json_format.MessageToJson(
10291-
pb_request,
10292-
use_integers_for_enums=False,
10293-
)
10284+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1029410285
)
1029510286

1029610287
# verify fields with default values are dropped
@@ -10603,10 +10594,7 @@ def test_update_instance_rest_required_fields(request_type=instance.Instance):
1060310594
request = request_type(**request_init)
1060410595
pb_request = request_type.pb(request)
1060510596
jsonified_request = json.loads(
10606-
json_format.MessageToJson(
10607-
pb_request,
10608-
use_integers_for_enums=False,
10609-
)
10597+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1061010598
)
1061110599

1061210600
# verify fields with default values are dropped
@@ -10930,10 +10918,7 @@ def test_partial_update_instance_rest_required_fields(
1093010918
request = request_type(**request_init)
1093110919
pb_request = request_type.pb(request)
1093210920
jsonified_request = json.loads(
10933-
json_format.MessageToJson(
10934-
pb_request,
10935-
use_integers_for_enums=False,
10936-
)
10921+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1093710922
)
1093810923

1093910924
# verify fields with default values are dropped
@@ -11237,10 +11222,7 @@ def test_delete_instance_rest_required_fields(
1123711222
request = request_type(**request_init)
1123811223
pb_request = request_type.pb(request)
1123911224
jsonified_request = json.loads(
11240-
json_format.MessageToJson(
11241-
pb_request,
11242-
use_integers_for_enums=False,
11243-
)
11225+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1124411226
)
1124511227

1124611228
# verify fields with default values are dropped
@@ -11615,10 +11597,7 @@ def test_create_cluster_rest_required_fields(
1161511597
request = request_type(**request_init)
1161611598
pb_request = request_type.pb(request)
1161711599
jsonified_request = json.loads(
11618-
json_format.MessageToJson(
11619-
pb_request,
11620-
use_integers_for_enums=False,
11621-
)
11600+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1162211601
)
1162311602

1162411603
# verify fields with default values are dropped
@@ -11953,10 +11932,7 @@ def test_get_cluster_rest_required_fields(
1195311932
request = request_type(**request_init)
1195411933
pb_request = request_type.pb(request)
1195511934
jsonified_request = json.loads(
11956-
json_format.MessageToJson(
11957-
pb_request,
11958-
use_integers_for_enums=False,
11959-
)
11935+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1196011936
)
1196111937

1196211938
# verify fields with default values are dropped
@@ -12260,10 +12236,7 @@ def test_list_clusters_rest_required_fields(
1226012236
request = request_type(**request_init)
1226112237
pb_request = request_type.pb(request)
1226212238
jsonified_request = json.loads(
12263-
json_format.MessageToJson(
12264-
pb_request,
12265-
use_integers_for_enums=False,
12266-
)
12239+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1226712240
)
1226812241

1226912242
# verify fields with default values are dropped
@@ -12825,10 +12798,7 @@ def test_partial_update_cluster_rest_required_fields(
1282512798
request = request_type(**request_init)
1282612799
pb_request = request_type.pb(request)
1282712800
jsonified_request = json.loads(
12828-
json_format.MessageToJson(
12829-
pb_request,
12830-
use_integers_for_enums=False,
12831-
)
12801+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1283212802
)
1283312803

1283412804
# verify fields with default values are dropped
@@ -13137,10 +13107,7 @@ def test_delete_cluster_rest_required_fields(
1313713107
request = request_type(**request_init)
1313813108
pb_request = request_type.pb(request)
1313913109
jsonified_request = json.loads(
13140-
json_format.MessageToJson(
13141-
pb_request,
13142-
use_integers_for_enums=False,
13143-
)
13110+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1314413111
)
1314513112

1314613113
# verify fields with default values are dropped
@@ -13523,10 +13490,7 @@ def test_create_app_profile_rest_required_fields(
1352313490
request = request_type(**request_init)
1352413491
pb_request = request_type.pb(request)
1352513492
jsonified_request = json.loads(
13526-
json_format.MessageToJson(
13527-
pb_request,
13528-
use_integers_for_enums=False,
13529-
)
13493+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1353013494
)
1353113495

1353213496
# verify fields with default values are dropped
@@ -13871,10 +13835,7 @@ def test_get_app_profile_rest_required_fields(
1387113835
request = request_type(**request_init)
1387213836
pb_request = request_type.pb(request)
1387313837
jsonified_request = json.loads(
13874-
json_format.MessageToJson(
13875-
pb_request,
13876-
use_integers_for_enums=False,
13877-
)
13838+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1387813839
)
1387913840

1388013841
# verify fields with default values are dropped
@@ -14181,10 +14142,7 @@ def test_list_app_profiles_rest_required_fields(
1418114142
request = request_type(**request_init)
1418214143
pb_request = request_type.pb(request)
1418314144
jsonified_request = json.loads(
14184-
json_format.MessageToJson(
14185-
pb_request,
14186-
use_integers_for_enums=False,
14187-
)
14145+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1418814146
)
1418914147

1419014148
# verify fields with default values are dropped
@@ -14653,10 +14611,7 @@ def test_update_app_profile_rest_required_fields(
1465314611
request = request_type(**request_init)
1465414612
pb_request = request_type.pb(request)
1465514613
jsonified_request = json.loads(
14656-
json_format.MessageToJson(
14657-
pb_request,
14658-
use_integers_for_enums=False,
14659-
)
14614+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1466014615
)
1466114616

1466214617
# verify fields with default values are dropped
@@ -14984,10 +14939,7 @@ def test_delete_app_profile_rest_required_fields(
1498414939
request = request_type(**request_init)
1498514940
pb_request = request_type.pb(request)
1498614941
jsonified_request = json.loads(
14987-
json_format.MessageToJson(
14988-
pb_request,
14989-
use_integers_for_enums=False,
14990-
)
14942+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1499114943
)
1499214944

1499314945
# verify fields with default values are dropped
@@ -15302,10 +15254,7 @@ def test_get_iam_policy_rest_required_fields(
1530215254
request = request_type(**request_init)
1530315255
pb_request = request
1530415256
jsonified_request = json.loads(
15305-
json_format.MessageToJson(
15306-
pb_request,
15307-
use_integers_for_enums=False,
15308-
)
15257+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1530915258
)
1531015259

1531115260
# verify fields with default values are dropped
@@ -15601,10 +15550,7 @@ def test_set_iam_policy_rest_required_fields(
1560115550
request = request_type(**request_init)
1560215551
pb_request = request
1560315552
jsonified_request = json.loads(
15604-
json_format.MessageToJson(
15605-
pb_request,
15606-
use_integers_for_enums=False,
15607-
)
15553+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1560815554
)
1560915555

1561015556
# verify fields with default values are dropped
@@ -15911,10 +15857,7 @@ def test_test_iam_permissions_rest_required_fields(
1591115857
request = request_type(**request_init)
1591215858
pb_request = request
1591315859
jsonified_request = json.loads(
15914-
json_format.MessageToJson(
15915-
pb_request,
15916-
use_integers_for_enums=False,
15917-
)
15860+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1591815861
)
1591915862

1592015863
# verify fields with default values are dropped
@@ -16227,10 +16170,7 @@ def test_list_hot_tablets_rest_required_fields(
1622716170
request = request_type(**request_init)
1622816171
pb_request = request_type.pb(request)
1622916172
jsonified_request = json.loads(
16230-
json_format.MessageToJson(
16231-
pb_request,
16232-
use_integers_for_enums=False,
16233-
)
16173+
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
1623416174
)
1623516175

1623616176
# verify fields with default values are dropped

0 commit comments

Comments
 (0)