Skip to content

Commit

Permalink
feat: Add String type with Utf8Raw encoding to Bigtable API (#968)
Browse files Browse the repository at this point in the history
* 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>
  • Loading branch information
gcf-owl-bot[bot] and gcf-owl-bot[bot] committed May 30, 2024
1 parent 6ef122a commit 2a2bbfd
Show file tree
Hide file tree
Showing 5 changed files with 115 additions and 214 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -904,8 +904,7 @@ def __call__(
# Jsonify the request body

body = json_format.MessageToJson(
transcoded_request["body"],
use_integers_for_enums=True,
transcoded_request["body"], use_integers_for_enums=True
)
uri = transcoded_request["uri"]
method = transcoded_request["method"]
Expand Down
66 changes: 62 additions & 4 deletions google/cloud/bigtable_admin_v2/types/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,12 @@ class Type(proto.Message):
original typed value? Note that Bigtable will always sort data
based on the raw encoded value, *not* the decoded type.
- Example: STRING values sort in the same order as their UTF-8
- Example: BYTES values sort in the same order as their raw
encodings.
- Counterexample: Encoding INT64 to a fixed-width STRING does
*not* preserve sort order when dealing with negative numbers.
INT64(1) > INT64(-1), but STRING("-00001") > STRING("00001).
- The overall encoding chain sorts naturally if *every* link
- The overall encoding chain has this property if *every* link
does.
- Self-delimiting: If we concatenate two encoded values, can we
Expand All @@ -65,8 +65,8 @@ class Type(proto.Message):
by a sign.
- Counterexample: If we concatenate two UTF-8 encoded STRINGs,
we have no way to tell where the first one ends.
- The overall encoding chain is self-delimiting if *any* link
is.
- The overall encoding chain has this property if *any* link
does.
- Compatibility: Which other systems have matching encoding
schemes? For example, does this encoding have a GoogleSQL
Expand All @@ -83,6 +83,10 @@ class Type(proto.Message):
bytes_type (google.cloud.bigtable_admin_v2.types.Type.Bytes):
Bytes
This field is a member of `oneof`_ ``kind``.
string_type (google.cloud.bigtable_admin_v2.types.Type.String):
String
This field is a member of `oneof`_ ``kind``.
int64_type (google.cloud.bigtable_admin_v2.types.Type.Int64):
Int64
Expand Down Expand Up @@ -137,6 +141,54 @@ class Raw(proto.Message):
message="Type.Bytes.Encoding",
)

class String(proto.Message):
r"""String Values of type ``String`` are stored in
``Value.string_value``.
Attributes:
encoding (google.cloud.bigtable_admin_v2.types.Type.String.Encoding):
The encoding to use when converting to/from
lower level types.
"""

class Encoding(proto.Message):
r"""Rules used to convert to/from lower level types.
.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields
Attributes:
utf8_raw (google.cloud.bigtable_admin_v2.types.Type.String.Encoding.Utf8Raw):
Use ``Utf8Raw`` encoding.
This field is a member of `oneof`_ ``encoding``.
"""

class Utf8Raw(proto.Message):
r"""UTF-8 encoding
- Natural sort? No (ASCII characters only)
- Self-delimiting? No
- Compatibility?
- BigQuery Federation ``TEXT`` encoding
- HBase ``Bytes.toBytes``
- Java ``String#getBytes(StandardCharsets.UTF_8)``
"""

utf8_raw: "Type.String.Encoding.Utf8Raw" = proto.Field(
proto.MESSAGE,
number=1,
oneof="encoding",
message="Type.String.Encoding.Utf8Raw",
)

encoding: "Type.String.Encoding" = proto.Field(
proto.MESSAGE,
number=1,
message="Type.String.Encoding",
)

class Int64(proto.Message):
r"""Int64 Values of type ``Int64`` are stored in ``Value.int_value``.
Expand Down Expand Up @@ -250,6 +302,12 @@ class Sum(proto.Message):
oneof="kind",
message=Bytes,
)
string_type: String = proto.Field(
proto.MESSAGE,
number=2,
oneof="kind",
message=String,
)
int64_type: Int64 = proto.Field(
proto.MESSAGE,
number=5,
Expand Down
100 changes: 20 additions & 80 deletions tests/unit/gapic/bigtable_admin_v2/test_bigtable_instance_admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -9652,10 +9652,7 @@ def test_create_instance_rest_required_fields(
request = request_type(**request_init)
pb_request = request_type.pb(request)
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -9981,10 +9978,7 @@ def test_get_instance_rest_required_fields(
request = request_type(**request_init)
pb_request = request_type.pb(request)
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -10287,10 +10281,7 @@ def test_list_instances_rest_required_fields(
request = request_type(**request_init)
pb_request = request_type.pb(request)
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -10603,10 +10594,7 @@ def test_update_instance_rest_required_fields(request_type=instance.Instance):
request = request_type(**request_init)
pb_request = request_type.pb(request)
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -10930,10 +10918,7 @@ def test_partial_update_instance_rest_required_fields(
request = request_type(**request_init)
pb_request = request_type.pb(request)
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -11237,10 +11222,7 @@ def test_delete_instance_rest_required_fields(
request = request_type(**request_init)
pb_request = request_type.pb(request)
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -11615,10 +11597,7 @@ def test_create_cluster_rest_required_fields(
request = request_type(**request_init)
pb_request = request_type.pb(request)
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -11953,10 +11932,7 @@ def test_get_cluster_rest_required_fields(
request = request_type(**request_init)
pb_request = request_type.pb(request)
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -12260,10 +12236,7 @@ def test_list_clusters_rest_required_fields(
request = request_type(**request_init)
pb_request = request_type.pb(request)
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -12825,10 +12798,7 @@ def test_partial_update_cluster_rest_required_fields(
request = request_type(**request_init)
pb_request = request_type.pb(request)
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -13137,10 +13107,7 @@ def test_delete_cluster_rest_required_fields(
request = request_type(**request_init)
pb_request = request_type.pb(request)
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -13523,10 +13490,7 @@ def test_create_app_profile_rest_required_fields(
request = request_type(**request_init)
pb_request = request_type.pb(request)
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -13871,10 +13835,7 @@ def test_get_app_profile_rest_required_fields(
request = request_type(**request_init)
pb_request = request_type.pb(request)
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -14181,10 +14142,7 @@ def test_list_app_profiles_rest_required_fields(
request = request_type(**request_init)
pb_request = request_type.pb(request)
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -14653,10 +14611,7 @@ def test_update_app_profile_rest_required_fields(
request = request_type(**request_init)
pb_request = request_type.pb(request)
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -14984,10 +14939,7 @@ def test_delete_app_profile_rest_required_fields(
request = request_type(**request_init)
pb_request = request_type.pb(request)
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -15302,10 +15254,7 @@ def test_get_iam_policy_rest_required_fields(
request = request_type(**request_init)
pb_request = request
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -15601,10 +15550,7 @@ def test_set_iam_policy_rest_required_fields(
request = request_type(**request_init)
pb_request = request
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -15911,10 +15857,7 @@ def test_test_iam_permissions_rest_required_fields(
request = request_type(**request_init)
pb_request = request
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down Expand Up @@ -16227,10 +16170,7 @@ def test_list_hot_tablets_rest_required_fields(
request = request_type(**request_init)
pb_request = request_type.pb(request)
jsonified_request = json.loads(
json_format.MessageToJson(
pb_request,
use_integers_for_enums=False,
)
json_format.MessageToJson(pb_request, use_integers_for_enums=False)
)

# verify fields with default values are dropped
Expand Down
Loading

0 comments on commit 2a2bbfd

Please sign in to comment.