From 21ccd0c943e3d6b3cf704d7057ec1f99494d0c78 Mon Sep 17 00:00:00 2001 From: Piyush Date: Fri, 19 Jun 2020 22:31:37 +0530 Subject: [PATCH] Add support for spec compatible URLs in server generated code and update to protoc 3.12.4. --- clientcompat/pycompat/clientcompat_pb2.py | 25 ++-- clientcompat/pycompat/pycompat.py | 4 +- example/service_pb2.py | 13 +- install_proto.bash | 12 +- .../empty_service/empty_service_pb2.py | 2 + .../google_protobuf_imports/service_pb2.py | 3 + .../twirptest/importable/importable_pb2.py | 4 + internal/twirptest/importer/importer_pb2.py | 3 + .../importer_local_msgdef_pb2.py | 2 + .../importer_local/importer_local_pb2.py | 3 + internal/twirptest/importmapping/x/x_pb2.py | 3 + internal/twirptest/importmapping/y/y_pb2.py | 2 + internal/twirptest/multiple/multiple1_pb2.py | 4 + internal/twirptest/multiple/multiple2_pb2.py | 5 + .../no_package_name/no_package_name_pb2.py | 4 + .../no_package_name_importer_pb2.py | 3 + internal/twirptest/proto/proto_pb2.py | 4 + .../service_method_same_name_pb2.py | 4 + internal/twirptest/service_pb2.py | 13 +- .../snake_case_names/compatibility_test.go | 76 ++++++++++++ .../snake_case_names/snake_case_names.pb.go | 13 +- .../snake_case_names/snake_case_names.proto | 2 +- .../snake_case_names.twirp.go | 111 +++++++++--------- .../snake_case_names/snake_case_names_pb2.py | 30 +++-- .../snake_case_names_pb2_twirp.py | 6 +- .../source_relative/source_relative_pb2.py | 4 + protoc-gen-twirp/generator.go | 37 ++++-- 27 files changed, 281 insertions(+), 111 deletions(-) create mode 100644 internal/twirptest/snake_case_names/compatibility_test.go diff --git a/clientcompat/pycompat/clientcompat_pb2.py b/clientcompat/pycompat/clientcompat_pb2.py index 51269ad2..0fa3e95e 100644 --- a/clientcompat/pycompat/clientcompat_pb2.py +++ b/clientcompat/pycompat/clientcompat_pb2.py @@ -18,6 +18,7 @@ package='twirp.clientcompat', syntax='proto3', serialized_options=b'Z\014clientcompat', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x12\x63lientcompat.proto\x12\x12twirp.clientcompat\"\x07\n\x05\x45mpty\"\x10\n\x03Req\x12\t\n\x01v\x18\x01 \x01(\t\"\x11\n\x04Resp\x12\t\n\x01v\x18\x01 \x01(\x05\"\xb9\x01\n\x13\x43lientCompatMessage\x12\x17\n\x0fservice_address\x18\x01 \x01(\t\x12K\n\x06method\x18\x02 \x01(\x0e\x32;.twirp.clientcompat.ClientCompatMessage.CompatServiceMethod\x12\x0f\n\x07request\x18\x03 \x01(\x0c\"+\n\x13\x43ompatServiceMethod\x12\x08\n\x04NOOP\x10\x00\x12\n\n\x06METHOD\x10\x01\x32\x90\x01\n\rCompatService\x12;\n\x06Method\x12\x17.twirp.clientcompat.Req\x1a\x18.twirp.clientcompat.Resp\x12\x42\n\nNoopMethod\x12\x19.twirp.clientcompat.Empty\x1a\x19.twirp.clientcompat.EmptyB\x0eZ\x0c\x63lientcompatb\x06proto3' ) @@ -28,15 +29,18 @@ full_name='twirp.clientcompat.ClientCompatMessage.CompatServiceMethod', filename=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name='NOOP', index=0, number=0, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='METHOD', index=1, number=1, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, @@ -52,6 +56,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -76,6 +81,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='v', full_name='twirp.clientcompat.Req.v', index=0, @@ -83,7 +89,7 @@ has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -107,6 +113,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='v', full_name='twirp.clientcompat.Resp.v', index=0, @@ -114,7 +121,7 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -138,6 +145,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='service_address', full_name='twirp.clientcompat.ClientCompatMessage.service_address', index=0, @@ -145,21 +153,21 @@ has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='method', full_name='twirp.clientcompat.ClientCompatMessage.method', index=1, number=2, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='request', full_name='twirp.clientcompat.ClientCompatMessage.request', index=2, number=3, type=12, cpp_type=9, label=1, has_default_value=False, default_value=b"", message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -222,6 +230,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=277, serialized_end=421, methods=[ @@ -233,6 +242,7 @@ input_type=_REQ, output_type=_RESP, serialized_options=None, + create_key=_descriptor._internal_create_key, ), _descriptor.MethodDescriptor( name='NoopMethod', @@ -242,6 +252,7 @@ input_type=_EMPTY, output_type=_EMPTY, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_COMPATSERVICE) diff --git a/clientcompat/pycompat/pycompat.py b/clientcompat/pycompat/pycompat.py index 29f01d7d..49876185 100755 --- a/clientcompat/pycompat/pycompat.py +++ b/clientcompat/pycompat/pycompat.py @@ -25,14 +25,14 @@ def main(): client = clientcompat_pb2_twirp.CompatServiceClient(req.service_address) try: resp = do_request(client, req) - sys.stdout.write(resp.SerializeToString()) + sys.stdout.write(resp.SerializeToString().decode(encoding="utf-8")) except clientcompat_pb2_twirp.TwirpException as e: sys.stderr.write(e.code) def read_request(): input_str = sys.stdin.read() - return clientcompat_pb2.ClientCompatMessage.FromString(input_str) + return clientcompat_pb2.ClientCompatMessage.FromString(input_str.encode(encoding="utf-8")) def do_request(client, req): diff --git a/example/service_pb2.py b/example/service_pb2.py index acc7c3d6..fc265e50 100644 --- a/example/service_pb2.py +++ b/example/service_pb2.py @@ -18,6 +18,7 @@ package='twitch.twirp.example', syntax='proto3', serialized_options=b'Z\007example', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\rservice.proto\x12\x14twitch.twirp.example\"0\n\x03Hat\x12\x0c\n\x04size\x18\x01 \x01(\x05\x12\r\n\x05\x63olor\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\"\x16\n\x04Size\x12\x0e\n\x06inches\x18\x01 \x01(\x05\x32O\n\x0bHaberdasher\x12@\n\x07MakeHat\x12\x1a.twitch.twirp.example.Size\x1a\x19.twitch.twirp.example.HatB\tZ\x07\x65xampleb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='size', full_name='twitch.twirp.example.Hat.size', index=0, @@ -37,21 +39,21 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='color', full_name='twitch.twirp.example.Hat.color', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='name', full_name='twitch.twirp.example.Hat.name', index=2, number=3, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -75,6 +77,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='inches', full_name='twitch.twirp.example.Size.inches', index=0, @@ -82,7 +85,7 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -126,6 +129,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=113, serialized_end=192, methods=[ @@ -137,6 +141,7 @@ input_type=_SIZE, output_type=_HAT, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_HABERDASHER) diff --git a/install_proto.bash b/install_proto.bash index 26e6b63f..f806ee5a 100755 --- a/install_proto.bash +++ b/install_proto.bash @@ -18,10 +18,10 @@ PROTOC_EXISTS=$? if [ $PROTOC_EXISTS -eq 0 ]; then echo "Protoc already installed" PROTOC_VERSION=`protoc --version` - if [ "$PROTOC_VERSION" == "libprotoc 3.11.0" ]; then + if [ "$PROTOC_VERSION" == "libprotoc 3.12.4" ]; then exit 0 fi - echo "libprotoc 3.11.0 required, but found: $PROTOC_VERSION" + echo "libprotoc 3.12.4 required, but found: $PROTOC_VERSION" exit 1 fi @@ -30,8 +30,8 @@ if [ "$(uname)" == "Darwin" ]; then elif [ `whoami` == "root" ]; then mkdir -p /usr/local/src/protoc pushd /usr/local/src/protoc - wget https://github.com/google/protobuf/releases/download/v3.11.0/protoc-3.11.0-linux-x86_64.zip -O /usr/local/src/protoc-3.11.0-linux-x86_64.zip - unzip -x ../protoc-3.11.0-linux-x86_64.zip + wget https://github.com/google/protobuf/releases/download/v3.12.4/protoc-3.12.4-linux-x86_64.zip -O /usr/local/src/protoc-3.12.4-linux-x86_64.zip + unzip -x ../protoc-3.12.4-linux-x86_64.zip if [ ! -e /usr/local/bin/protoc ]; then ln -s `pwd`/bin/protoc /usr/local/bin/protoc fi @@ -41,8 +41,8 @@ elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then sudo chmod a+w /usr/local/src mkdir -p /usr/local/src/protoc pushd /usr/local/src/protoc - wget https://github.com/google/protobuf/releases/download/v3.11.0/protoc-3.11.0-linux-x86_64.zip -O /usr/local/src/protoc-3.11.0-linux-x86_64.zip - unzip -x ../protoc-3.11.0-linux-x86_64.zip + wget https://github.com/google/protobuf/releases/download/v3.12.4/protoc-3.12.4-linux-x86_64.zip -O /usr/local/src/protoc-3.12.4-linux-x86_64.zip + unzip -x ../protoc-3.12.4-linux-x86_64.zip if [ ! -e /usr/local/bin/protoc ]; then sudo ln -s `pwd`/bin/protoc /usr/local/bin/protoc fi diff --git a/internal/twirptest/empty_service/empty_service_pb2.py b/internal/twirptest/empty_service/empty_service_pb2.py index c0ca7c84..d10a0b05 100644 --- a/internal/twirptest/empty_service/empty_service_pb2.py +++ b/internal/twirptest/empty_service/empty_service_pb2.py @@ -18,6 +18,7 @@ package='twirp.internal.twirptest.emptyservice', syntax='proto3', serialized_options=b'Z\rempty_service', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x13\x65mpty_service.proto\x12%twirp.internal.twirptest.emptyservice2\x07\n\x05\x45mptyB\x0fZ\rempty_serviceb\x06proto3' ) @@ -34,6 +35,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=62, serialized_end=69, methods=[ diff --git a/internal/twirptest/google_protobuf_imports/service_pb2.py b/internal/twirptest/google_protobuf_imports/service_pb2.py index bd6a0258..a5affa13 100644 --- a/internal/twirptest/google_protobuf_imports/service_pb2.py +++ b/internal/twirptest/google_protobuf_imports/service_pb2.py @@ -20,6 +20,7 @@ package='twirp.internal.twirptest.use_empty', syntax='proto3', serialized_options=b'Z\027google_protobuf_imports', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\rservice.proto\x12\"twirp.internal.twirptest.use_empty\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1egoogle/protobuf/wrappers.proto2C\n\x03Svc\x12<\n\x04Send\x12\x1c.google.protobuf.StringValue\x1a\x16.google.protobuf.EmptyB\x19Z\x17google_protobuf_importsb\x06proto3' , dependencies=[google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,]) @@ -37,6 +38,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=114, serialized_end=181, methods=[ @@ -48,6 +50,7 @@ input_type=google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE, output_type=google_dot_protobuf_dot_empty__pb2._EMPTY, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC) diff --git a/internal/twirptest/importable/importable_pb2.py b/internal/twirptest/importable/importable_pb2.py index 209eeb06..f6e17f3e 100644 --- a/internal/twirptest/importable/importable_pb2.py +++ b/internal/twirptest/importable/importable_pb2.py @@ -18,6 +18,7 @@ package='twirp.internal.twirptest.importable', syntax='proto3', serialized_options=b'Z\nimportable', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x10importable.proto\x12#twirp.internal.twirptest.importable\"\x05\n\x03Msg2a\n\x03Svc\x12Z\n\x04Send\x12(.twirp.internal.twirptest.importable.Msg\x1a(.twirp.internal.twirptest.importable.MsgB\x0cZ\nimportableb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -66,6 +68,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=64, serialized_end=161, methods=[ @@ -77,6 +80,7 @@ input_type=_MSG, output_type=_MSG, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC) diff --git a/internal/twirptest/importer/importer_pb2.py b/internal/twirptest/importer/importer_pb2.py index cb5670a3..22af28db 100644 --- a/internal/twirptest/importer/importer_pb2.py +++ b/internal/twirptest/importer/importer_pb2.py @@ -19,6 +19,7 @@ package='twirp.internal.twirptest.importer', syntax='proto3', serialized_options=b'Z\010importer', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x0eimporter.proto\x12!twirp.internal.twirptest.importer\x1aHgithub.com/twitchtv/twirp/internal/twirptest/importable/importable.proto2b\n\x04Svc2\x12Z\n\x04Send\x12(.twirp.internal.twirptest.importable.Msg\x1a(.twirp.internal.twirptest.importable.MsgB\nZ\x08importerb\x06proto3' , dependencies=[github_dot_com_dot_twitchtv_dot_twirp_dot_internal_dot_twirptest_dot_importable_dot_importable__pb2.DESCRIPTOR,]) @@ -36,6 +37,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=127, serialized_end=225, methods=[ @@ -47,6 +49,7 @@ input_type=github_dot_com_dot_twitchtv_dot_twirp_dot_internal_dot_twirptest_dot_importable_dot_importable__pb2._MSG, output_type=github_dot_com_dot_twitchtv_dot_twirp_dot_internal_dot_twirptest_dot_importable_dot_importable__pb2._MSG, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC2) diff --git a/internal/twirptest/importer_local/importer_local_msgdef_pb2.py b/internal/twirptest/importer_local/importer_local_msgdef_pb2.py index b4c115f8..6b5a9383 100644 --- a/internal/twirptest/importer_local/importer_local_msgdef_pb2.py +++ b/internal/twirptest/importer_local/importer_local_msgdef_pb2.py @@ -18,6 +18,7 @@ package='twirp.internal.twirptest.importer_local', syntax='proto3', serialized_options=b'Z;github.com/twitchtv/twirp/internal/twirptest/importer_local', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x1bimporter_local_msgdef.proto\x12\'twirp.internal.twirptest.importer_local\"\x05\n\x03MsgB=Z;github.com/twitchtv/twirp/internal/twirptest/importer_localb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ diff --git a/internal/twirptest/importer_local/importer_local_pb2.py b/internal/twirptest/importer_local/importer_local_pb2.py index 6404c952..1942346d 100644 --- a/internal/twirptest/importer_local/importer_local_pb2.py +++ b/internal/twirptest/importer_local/importer_local_pb2.py @@ -19,6 +19,7 @@ package='twirp.internal.twirptest.importer_local', syntax='proto3', serialized_options=b'Z;github.com/twitchtv/twirp/internal/twirptest/importer_local', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x14importer_local.proto\x12\'twirp.internal.twirptest.importer_local\x1a\x1bimporter_local_msgdef.proto2i\n\x03Svc\x12\x62\n\x04Send\x12,.twirp.internal.twirptest.importer_local.Msg\x1a,.twirp.internal.twirptest.importer_local.MsgB=Z;github.com/twitchtv/twirp/internal/twirptest/importer_localb\x06proto3' , dependencies=[importer__local__msgdef__pb2.DESCRIPTOR,]) @@ -36,6 +37,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=94, serialized_end=199, methods=[ @@ -47,6 +49,7 @@ input_type=importer__local__msgdef__pb2._MSG, output_type=importer__local__msgdef__pb2._MSG, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC) diff --git a/internal/twirptest/importmapping/x/x_pb2.py b/internal/twirptest/importmapping/x/x_pb2.py index 452fad75..c7ad5863 100644 --- a/internal/twirptest/importmapping/x/x_pb2.py +++ b/internal/twirptest/importmapping/x/x_pb2.py @@ -19,6 +19,7 @@ package='twirp.internal.twirptest.importmapping.x', syntax='proto3', serialized_options=b'Z\001x', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\tx/x.proto\x12(twirp.internal.twirptest.importmapping.x\x1a\ty/y.proto2n\n\x04Svc1\x12\x66\n\x04Send\x12..twirp.internal.twirptest.importmapping.y.MsgY\x1a..twirp.internal.twirptest.importmapping.y.MsgYB\x03Z\x01xb\x06proto3' , dependencies=[y_dot_y__pb2.DESCRIPTOR,]) @@ -36,6 +37,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=66, serialized_end=176, methods=[ @@ -47,6 +49,7 @@ input_type=y_dot_y__pb2._MSGY, output_type=y_dot_y__pb2._MSGY, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC1) diff --git a/internal/twirptest/importmapping/y/y_pb2.py b/internal/twirptest/importmapping/y/y_pb2.py index f037d0d2..dfd2867c 100644 --- a/internal/twirptest/importmapping/y/y_pb2.py +++ b/internal/twirptest/importmapping/y/y_pb2.py @@ -18,6 +18,7 @@ package='twirp.internal.twirptest.importmapping.y', syntax='proto3', serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\ty/y.proto\x12(twirp.internal.twirptest.importmapping.y\"\x06\n\x04MsgYb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ diff --git a/internal/twirptest/multiple/multiple1_pb2.py b/internal/twirptest/multiple/multiple1_pb2.py index 956e442b..fe61582b 100644 --- a/internal/twirptest/multiple/multiple1_pb2.py +++ b/internal/twirptest/multiple/multiple1_pb2.py @@ -18,6 +18,7 @@ package='twirp.internal.twirptest.multiple', syntax='proto3', serialized_options=b'Z\010multiple', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x0fmultiple1.proto\x12!twirp.internal.twirptest.multiple\"\x06\n\x04Msg12`\n\x04Svc1\x12X\n\x04Send\x12\'.twirp.internal.twirptest.multiple.Msg1\x1a\'.twirp.internal.twirptest.multiple.Msg1B\nZ\x08multipleb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -66,6 +68,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=62, serialized_end=158, methods=[ @@ -77,6 +80,7 @@ input_type=_MSG1, output_type=_MSG1, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC1) diff --git a/internal/twirptest/multiple/multiple2_pb2.py b/internal/twirptest/multiple/multiple2_pb2.py index 408cdf0d..0c1c6e30 100644 --- a/internal/twirptest/multiple/multiple2_pb2.py +++ b/internal/twirptest/multiple/multiple2_pb2.py @@ -19,6 +19,7 @@ package='twirp.internal.twirptest.multiple', syntax='proto3', serialized_options=b'Z\010multiple', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x0fmultiple2.proto\x12!twirp.internal.twirptest.multiple\x1a\x0fmultiple1.proto\"\x06\n\x04Msg22\xcc\x01\n\x04Svc2\x12X\n\x04Send\x12\'.twirp.internal.twirptest.multiple.Msg2\x1a\'.twirp.internal.twirptest.multiple.Msg2\x12j\n\x16SamePackageProtoImport\x12\'.twirp.internal.twirptest.multiple.Msg1\x1a\'.twirp.internal.twirptest.multiple.Msg1B\nZ\x08multipleb\x06proto3' , dependencies=[multiple1__pb2.DESCRIPTOR,]) @@ -32,6 +33,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -68,6 +70,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=80, serialized_end=284, methods=[ @@ -79,6 +82,7 @@ input_type=_MSG2, output_type=_MSG2, serialized_options=None, + create_key=_descriptor._internal_create_key, ), _descriptor.MethodDescriptor( name='SamePackageProtoImport', @@ -88,6 +92,7 @@ input_type=multiple1__pb2._MSG1, output_type=multiple1__pb2._MSG1, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC2) diff --git a/internal/twirptest/no_package_name/no_package_name_pb2.py b/internal/twirptest/no_package_name/no_package_name_pb2.py index 9250af2c..dd267724 100644 --- a/internal/twirptest/no_package_name/no_package_name_pb2.py +++ b/internal/twirptest/no_package_name/no_package_name_pb2.py @@ -18,6 +18,7 @@ package='', syntax='proto3', serialized_options=b'Z\017no_package_name', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x15no_package_name.proto\"\x05\n\x03Msg2\x19\n\x03Svc\x12\x12\n\x04Send\x12\x04.Msg\x1a\x04.MsgB\x11Z\x0fno_package_nameb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -66,6 +68,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=32, serialized_end=57, methods=[ @@ -77,6 +80,7 @@ input_type=_MSG, output_type=_MSG, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC) diff --git a/internal/twirptest/no_package_name_importer/no_package_name_importer_pb2.py b/internal/twirptest/no_package_name_importer/no_package_name_importer_pb2.py index d05a2e33..77d3405f 100644 --- a/internal/twirptest/no_package_name_importer/no_package_name_importer_pb2.py +++ b/internal/twirptest/no_package_name_importer/no_package_name_importer_pb2.py @@ -19,6 +19,7 @@ package='', syntax='proto3', serialized_options=b'Z\030no_package_name_importer', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x1eno_package_name_importer.proto\x1aRgithub.com/twitchtv/twirp/internal/twirptest/no_package_name/no_package_name.proto2\x1c\n\x04Svc2\x12\x14\n\x06Method\x12\x04.Msg\x1a\x04.MsgB\x1aZ\x18no_package_name_importerb\x06proto3' , dependencies=[github_dot_com_dot_twitchtv_dot_twirp_dot_internal_dot_twirptest_dot_no__package__name_dot_no__package__name__pb2.DESCRIPTOR,]) @@ -36,6 +37,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=118, serialized_end=146, methods=[ @@ -47,6 +49,7 @@ input_type=github_dot_com_dot_twitchtv_dot_twirp_dot_internal_dot_twirptest_dot_no__package__name_dot_no__package__name__pb2._MSG, output_type=github_dot_com_dot_twitchtv_dot_twirp_dot_internal_dot_twirptest_dot_no__package__name_dot_no__package__name__pb2._MSG, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC2) diff --git a/internal/twirptest/proto/proto_pb2.py b/internal/twirptest/proto/proto_pb2.py index 2baacaf3..abeaedd2 100644 --- a/internal/twirptest/proto/proto_pb2.py +++ b/internal/twirptest/proto/proto_pb2.py @@ -18,6 +18,7 @@ package='twirp.internal.twirptest.proto', syntax='proto3', serialized_options=b'Z\005proto', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x0bproto.proto\x12\x1etwirp.internal.twirptest.proto\"\x05\n\x03Msg2W\n\x03Svc\x12P\n\x04Send\x12#.twirp.internal.twirptest.proto.Msg\x1a#.twirp.internal.twirptest.proto.MsgB\x07Z\x05protob\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -66,6 +68,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=54, serialized_end=141, methods=[ @@ -77,6 +80,7 @@ input_type=_MSG, output_type=_MSG, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_SVC) diff --git a/internal/twirptest/service_method_same_name/service_method_same_name_pb2.py b/internal/twirptest/service_method_same_name/service_method_same_name_pb2.py index 73b6fecb..a8e55f60 100644 --- a/internal/twirptest/service_method_same_name/service_method_same_name_pb2.py +++ b/internal/twirptest/service_method_same_name/service_method_same_name_pb2.py @@ -18,6 +18,7 @@ package='', syntax='proto3', serialized_options=b'Z\030service_method_same_name', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x1eservice_method_same_name.proto\"\x05\n\x03Msg2\x1c\n\x04\x45\x63ho\x12\x14\n\x04\x45\x63ho\x12\x04.Msg\x1a\x04.Msg\"\x00\x42\x1aZ\x18service_method_same_nameb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -66,6 +68,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=41, serialized_end=69, methods=[ @@ -77,6 +80,7 @@ input_type=_MSG, output_type=_MSG, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_ECHO) diff --git a/internal/twirptest/service_pb2.py b/internal/twirptest/service_pb2.py index 2b3b592f..669c3f4b 100644 --- a/internal/twirptest/service_pb2.py +++ b/internal/twirptest/service_pb2.py @@ -18,6 +18,7 @@ package='twirp.internal.twirptest', syntax='proto3', serialized_options=b'Z\ttwirptest', + create_key=_descriptor._internal_create_key, serialized_pb=b'\n\rservice.proto\x12\x18twirp.internal.twirptest\"0\n\x03Hat\x12\x0c\n\x04size\x18\x01 \x01(\x05\x12\r\n\x05\x63olor\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\"\x16\n\x04Size\x12\x0e\n\x06inches\x18\x01 \x01(\x05\x32W\n\x0bHaberdasher\x12H\n\x07MakeHat\x12\x1e.twirp.internal.twirptest.Size\x1a\x1d.twirp.internal.twirptest.HatB\x0bZ\ttwirptestb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='size', full_name='twirp.internal.twirptest.Hat.size', index=0, @@ -37,21 +39,21 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='color', full_name='twirp.internal.twirptest.Hat.color', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='name', full_name='twirp.internal.twirptest.Hat.name', index=2, number=3, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -75,6 +77,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='inches', full_name='twirp.internal.twirptest.Size.inches', index=0, @@ -82,7 +85,7 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -126,6 +129,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=117, serialized_end=204, methods=[ @@ -137,6 +141,7 @@ input_type=_SIZE, output_type=_HAT, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_HABERDASHER) diff --git a/internal/twirptest/snake_case_names/compatibility_test.go b/internal/twirptest/snake_case_names/compatibility_test.go new file mode 100644 index 00000000..cea9fcdf --- /dev/null +++ b/internal/twirptest/snake_case_names/compatibility_test.go @@ -0,0 +1,76 @@ +// Copyright 2019 Twitch Interactive, Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"). You may not +// use this file except in compliance with the License. A copy of the License is +// located at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// or in the "license" file accompanying this file. This file is distributed on +// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +// express or implied. See the License for the specific language governing +// permissions and limitations under the License. + +package snake_case_names + +import ( + context "context" + http "net/http" + "net/http/httptest" + "testing" +) + +type HaberdasherService struct{} + +func (h *HaberdasherService) MakeHatV1(ctx context.Context, s *MakeHatArgsV1_SizeV1) (*MakeHatArgsV1_HatV1, error) { + return &MakeHatArgsV1_HatV1{ + Size: s.Inches, + }, nil +} + +// When the proto definition contains service and/or method names with underscores (not following proto naming +// best practices), Go clients will mistakenly convert routes into it's CamelCased versions, but clients in other +// languages may keep the literal casing of the routes. This test makes a go client that would send CamelCased routes +// and checks that the generated Go server remains backwards compatible and is able to handle those routes. +func TestServiceMethodNamesCamelCase(t *testing.T) { + s := httptest.NewServer(NewHaberdasherV1Server(&HaberdasherService{}, nil)) + defer s.Close() + + client := NewHaberdasherV1ProtobufClient(s.URL, http.DefaultClient) + + hat, err := client.MakeHatV1(context.Background(), &MakeHatArgsV1_SizeV1{Inches: 1}) + if err != nil { + t.Fatalf("go protobuf client err=%q", err) + } + if hat.Size != 1 { + t.Errorf("wrong hat size returned") + } +} + +type compatibilityTestClient struct { + client *http.Client +} + +func (t compatibilityTestClient) Do(req *http.Request) (*http.Response, error) { + req.URL.Path = "/twirp/twirp.internal.twirptest.snake_case_names.Haberdasher_v1/MakeHat_v1" + return t.client.Do(req) +} + +// When the proto definition contains service and/or method names with underscores (not following proto naming +// best practices), Go clients will mistakenly convert routes into it's CamelCased versions, but clients in other +// languages may keep the literal casing of the routes. This test makes a fake client that would send literal routes +// and checks that the generated Go server is still able to handle those routes. +func TestServiceMethodNamesUnderscores(t *testing.T) { + s := httptest.NewServer(NewHaberdasherV1Server(&HaberdasherService{}, nil)) + defer s.Close() + + client := NewHaberdasherV1ProtobufClient(s.URL, compatibilityTestClient{client: http.DefaultClient}) + hat, err := client.MakeHatV1(context.Background(), &MakeHatArgsV1_SizeV1{Inches: 1}) + if err != nil { + t.Fatalf("compatible protobuf client err=%q", err) + } + if hat.Size != 1 { + t.Errorf("wrong hat size returned") + } + +} diff --git a/internal/twirptest/snake_case_names/snake_case_names.pb.go b/internal/twirptest/snake_case_names/snake_case_names.pb.go index c2aa46dd..87979454 100644 --- a/internal/twirptest/snake_case_names/snake_case_names.pb.go +++ b/internal/twirptest/snake_case_names/snake_case_names.pb.go @@ -157,7 +157,7 @@ func init() { func init() { proto.RegisterFile("snake_case_names.proto", fileDescriptor_c768f27eb22a6056) } var fileDescriptor_c768f27eb22a6056 = []byte{ - // 224 bytes of a gzipped FileDescriptorProto + // 225 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x2b, 0xce, 0x4b, 0xcc, 0x4e, 0x8d, 0x4f, 0x4e, 0x2c, 0x4e, 0x8d, 0xcf, 0x4b, 0xcc, 0x4d, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xd2, 0x2c, 0x29, 0xcf, 0x2c, 0x2a, 0xd0, 0xcb, 0xcc, 0x2b, 0x49, 0x2d, 0xca, @@ -167,9 +167,10 @@ var fileDescriptor_c768f27eb22a6056 = []byte{ 0x4a, 0x30, 0x2a, 0x30, 0x6a, 0xb0, 0x06, 0x81, 0xd9, 0x42, 0x22, 0x5c, 0xac, 0xc9, 0xf9, 0x39, 0xf9, 0x45, 0x12, 0x4c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x10, 0x0e, 0x48, 0x25, 0xc8, 0x38, 0x09, 0x66, 0xb0, 0x20, 0x98, 0x2d, 0xa5, 0xc8, 0xc5, 0x1e, 0x9c, 0x59, 0x95, 0x0a, 0x32, 0x48, 0x8c, - 0x8b, 0x2d, 0x33, 0x2f, 0x39, 0x23, 0xb5, 0x18, 0x6a, 0x14, 0x94, 0x67, 0xb4, 0x90, 0x91, 0x8b, - 0xdb, 0x23, 0x31, 0x29, 0xb5, 0x28, 0x25, 0xb1, 0x38, 0x23, 0xb5, 0x48, 0x68, 0x22, 0x23, 0x17, - 0x17, 0xd4, 0x35, 0x20, 0x6d, 0x8e, 0x7a, 0x44, 0xfb, 0x43, 0x0f, 0xd5, 0x13, 0x7a, 0x50, 0x9b, - 0xa5, 0x1c, 0xc8, 0x37, 0x02, 0xe2, 0x08, 0x27, 0xa1, 0x28, 0x01, 0x74, 0x95, 0x49, 0x6c, 0xe0, - 0x60, 0x36, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xe5, 0x7b, 0xaf, 0xa9, 0x80, 0x01, 0x00, 0x00, + 0x8b, 0x2d, 0x33, 0x2f, 0x39, 0x23, 0xb5, 0x18, 0x6a, 0x14, 0x94, 0x67, 0xb4, 0x84, 0x91, 0x8b, + 0xcf, 0x23, 0x31, 0x29, 0xb5, 0x28, 0x25, 0xb1, 0x38, 0x23, 0xb5, 0x08, 0xa4, 0x74, 0x22, 0x23, + 0x17, 0x17, 0xd4, 0x41, 0x20, 0xae, 0xa3, 0x1e, 0xd1, 0x5e, 0xd1, 0x43, 0xf5, 0x87, 0x1e, 0xd4, + 0x72, 0x29, 0x07, 0xf2, 0x8d, 0x80, 0x38, 0xc2, 0x49, 0x28, 0x4a, 0x00, 0x5d, 0x65, 0x12, 0x1b, + 0x38, 0xa4, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x3c, 0xa6, 0x01, 0xae, 0x83, 0x01, 0x00, + 0x00, } diff --git a/internal/twirptest/snake_case_names/snake_case_names.proto b/internal/twirptest/snake_case_names/snake_case_names.proto index 02359a7d..b6c98d7a 100644 --- a/internal/twirptest/snake_case_names/snake_case_names.proto +++ b/internal/twirptest/snake_case_names/snake_case_names.proto @@ -18,6 +18,6 @@ message MakeHatArgs_v1 { } // A Haberdasher makes hats for clients. -service Haberdasher { +service Haberdasher_v1 { rpc MakeHat_v1 (MakeHatArgs_v1.Size_v1) returns (MakeHatArgs_v1.Hat_v1); } diff --git a/internal/twirptest/snake_case_names/snake_case_names.twirp.go b/internal/twirptest/snake_case_names/snake_case_names.twirp.go index cd5a890a..1358799f 100644 --- a/internal/twirptest/snake_case_names/snake_case_names.twirp.go +++ b/internal/twirptest/snake_case_names/snake_case_names.twirp.go @@ -32,28 +32,28 @@ import io "io" import json "encoding/json" import url "net/url" -// ===================== -// Haberdasher Interface -// ===================== +// ======================= +// HaberdasherV1 Interface +// ======================= // A Haberdasher makes hats for clients. -type Haberdasher interface { +type HaberdasherV1 interface { MakeHatV1(context.Context, *MakeHatArgsV1_SizeV1) (*MakeHatArgsV1_HatV1, error) } -// =========================== -// Haberdasher Protobuf Client -// =========================== +// ============================= +// HaberdasherV1 Protobuf Client +// ============================= -type haberdasherProtobufClient struct { +type haberdasherV1ProtobufClient struct { client HTTPClient urls [1]string opts twirp.ClientOptions } -// NewHaberdasherProtobufClient creates a Protobuf client that implements the Haberdasher interface. +// NewHaberdasherV1ProtobufClient creates a Protobuf client that implements the HaberdasherV1 interface. // It communicates using Protobuf and can be configured with a custom HTTPClient. -func NewHaberdasherProtobufClient(addr string, client HTTPClient, opts ...twirp.ClientOption) Haberdasher { +func NewHaberdasherV1ProtobufClient(addr string, client HTTPClient, opts ...twirp.ClientOption) HaberdasherV1 { if c, ok := client.(*http.Client); ok { client = withoutRedirects(c) } @@ -63,21 +63,21 @@ func NewHaberdasherProtobufClient(addr string, client HTTPClient, opts ...twirp. o(&clientOpts) } - prefix := urlBase(addr) + HaberdasherPathPrefix + prefix := urlBase(addr) + HaberdasherV1PathPrefix urls := [1]string{ prefix + "MakeHatV1", } - return &haberdasherProtobufClient{ + return &haberdasherV1ProtobufClient{ client: client, urls: urls, opts: clientOpts, } } -func (c *haberdasherProtobufClient) MakeHatV1(ctx context.Context, in *MakeHatArgsV1_SizeV1) (*MakeHatArgsV1_HatV1, error) { +func (c *haberdasherV1ProtobufClient) MakeHatV1(ctx context.Context, in *MakeHatArgsV1_SizeV1) (*MakeHatArgsV1_HatV1, error) { ctx = ctxsetters.WithPackageName(ctx, "twirp.internal.twirptest.snake_case_names") - ctx = ctxsetters.WithServiceName(ctx, "Haberdasher") + ctx = ctxsetters.WithServiceName(ctx, "HaberdasherV1") ctx = ctxsetters.WithMethodName(ctx, "MakeHatV1") out := new(MakeHatArgsV1_HatV1) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[0], in, out) @@ -95,19 +95,19 @@ func (c *haberdasherProtobufClient) MakeHatV1(ctx context.Context, in *MakeHatAr return out, nil } -// ======================= -// Haberdasher JSON Client -// ======================= +// ========================= +// HaberdasherV1 JSON Client +// ========================= -type haberdasherJSONClient struct { +type haberdasherV1JSONClient struct { client HTTPClient urls [1]string opts twirp.ClientOptions } -// NewHaberdasherJSONClient creates a JSON client that implements the Haberdasher interface. +// NewHaberdasherV1JSONClient creates a JSON client that implements the HaberdasherV1 interface. // It communicates using JSON and can be configured with a custom HTTPClient. -func NewHaberdasherJSONClient(addr string, client HTTPClient, opts ...twirp.ClientOption) Haberdasher { +func NewHaberdasherV1JSONClient(addr string, client HTTPClient, opts ...twirp.ClientOption) HaberdasherV1 { if c, ok := client.(*http.Client); ok { client = withoutRedirects(c) } @@ -117,21 +117,21 @@ func NewHaberdasherJSONClient(addr string, client HTTPClient, opts ...twirp.Clie o(&clientOpts) } - prefix := urlBase(addr) + HaberdasherPathPrefix + prefix := urlBase(addr) + HaberdasherV1PathPrefix urls := [1]string{ prefix + "MakeHatV1", } - return &haberdasherJSONClient{ + return &haberdasherV1JSONClient{ client: client, urls: urls, opts: clientOpts, } } -func (c *haberdasherJSONClient) MakeHatV1(ctx context.Context, in *MakeHatArgsV1_SizeV1) (*MakeHatArgsV1_HatV1, error) { +func (c *haberdasherV1JSONClient) MakeHatV1(ctx context.Context, in *MakeHatArgsV1_SizeV1) (*MakeHatArgsV1_HatV1, error) { ctx = ctxsetters.WithPackageName(ctx, "twirp.internal.twirptest.snake_case_names") - ctx = ctxsetters.WithServiceName(ctx, "Haberdasher") + ctx = ctxsetters.WithServiceName(ctx, "HaberdasherV1") ctx = ctxsetters.WithMethodName(ctx, "MakeHatV1") out := new(MakeHatArgsV1_HatV1) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[0], in, out) @@ -149,37 +149,37 @@ func (c *haberdasherJSONClient) MakeHatV1(ctx context.Context, in *MakeHatArgsV1 return out, nil } -// ========================== -// Haberdasher Server Handler -// ========================== +// ============================ +// HaberdasherV1 Server Handler +// ============================ -type haberdasherServer struct { - Haberdasher +type haberdasherV1Server struct { + HaberdasherV1 hooks *twirp.ServerHooks } -func NewHaberdasherServer(svc Haberdasher, hooks *twirp.ServerHooks) TwirpServer { - return &haberdasherServer{ - Haberdasher: svc, - hooks: hooks, +func NewHaberdasherV1Server(svc HaberdasherV1, hooks *twirp.ServerHooks) TwirpServer { + return &haberdasherV1Server{ + HaberdasherV1: svc, + hooks: hooks, } } // writeError writes an HTTP response with a valid Twirp error format, and triggers hooks. // If err is not a twirp.Error, it will get wrapped with twirp.InternalErrorWith(err) -func (s *haberdasherServer) writeError(ctx context.Context, resp http.ResponseWriter, err error) { +func (s *haberdasherV1Server) writeError(ctx context.Context, resp http.ResponseWriter, err error) { writeError(ctx, resp, err, s.hooks) } -// HaberdasherPathPrefix is used for all URL paths on a twirp Haberdasher server. -// Requests are always: POST HaberdasherPathPrefix/method +// HaberdasherV1PathPrefix is used for all URL paths on a twirp HaberdasherV1 server. +// Requests are always: POST HaberdasherV1PathPrefix/method // It can be used in an HTTP mux to route twirp requests along with non-twirp requests on other routes. -const HaberdasherPathPrefix = "/twirp/twirp.internal.twirptest.snake_case_names.Haberdasher/" +const HaberdasherV1PathPrefix = "/twirp/twirp.internal.twirptest.snake_case_names.HaberdasherV1/" -func (s *haberdasherServer) ServeHTTP(resp http.ResponseWriter, req *http.Request) { +func (s *haberdasherV1Server) ServeHTTP(resp http.ResponseWriter, req *http.Request) { ctx := req.Context() ctx = ctxsetters.WithPackageName(ctx, "twirp.internal.twirptest.snake_case_names") - ctx = ctxsetters.WithServiceName(ctx, "Haberdasher") + ctx = ctxsetters.WithServiceName(ctx, "HaberdasherV1") ctx = ctxsetters.WithResponseWriter(ctx, resp) var err error @@ -197,7 +197,7 @@ func (s *haberdasherServer) ServeHTTP(resp http.ResponseWriter, req *http.Reques } switch req.URL.Path { - case "/twirp/twirp.internal.twirptest.snake_case_names.Haberdasher/MakeHatV1": + case "/twirp/twirp.internal.twirptest.snake_case_names.Haberdasher_v1/MakeHat_v1", "/twirp/twirp.internal.twirptest.snake_case_names.HaberdasherV1/MakeHatV1": s.serveMakeHatV1(ctx, resp, req) return default: @@ -208,7 +208,7 @@ func (s *haberdasherServer) ServeHTTP(resp http.ResponseWriter, req *http.Reques } } -func (s *haberdasherServer) serveMakeHatV1(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *haberdasherV1Server) serveMakeHatV1(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -226,7 +226,7 @@ func (s *haberdasherServer) serveMakeHatV1(ctx context.Context, resp http.Respon } } -func (s *haberdasherServer) serveMakeHatV1JSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *haberdasherV1Server) serveMakeHatV1JSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error ctx = ctxsetters.WithMethodName(ctx, "MakeHatV1") ctx, err = callRequestRouted(ctx, s.hooks) @@ -246,7 +246,7 @@ func (s *haberdasherServer) serveMakeHatV1JSON(ctx context.Context, resp http.Re var respContent *MakeHatArgsV1_HatV1 func() { defer ensurePanicResponses(ctx, resp, s.hooks) - respContent, err = s.Haberdasher.MakeHatV1(ctx, reqContent) + respContent, err = s.HaberdasherV1.MakeHatV1(ctx, reqContent) }() if err != nil { @@ -281,7 +281,7 @@ func (s *haberdasherServer) serveMakeHatV1JSON(ctx context.Context, resp http.Re callResponseSent(ctx, s.hooks) } -func (s *haberdasherServer) serveMakeHatV1Protobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *haberdasherV1Server) serveMakeHatV1Protobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error ctx = ctxsetters.WithMethodName(ctx, "MakeHatV1") ctx, err = callRequestRouted(ctx, s.hooks) @@ -305,7 +305,7 @@ func (s *haberdasherServer) serveMakeHatV1Protobuf(ctx context.Context, resp htt var respContent *MakeHatArgsV1_HatV1 func() { defer ensurePanicResponses(ctx, resp, s.hooks) - respContent, err = s.Haberdasher.MakeHatV1(ctx, reqContent) + respContent, err = s.HaberdasherV1.MakeHatV1(ctx, reqContent) }() if err != nil { @@ -337,16 +337,16 @@ func (s *haberdasherServer) serveMakeHatV1Protobuf(ctx context.Context, resp htt callResponseSent(ctx, s.hooks) } -func (s *haberdasherServer) ServiceDescriptor() ([]byte, int) { +func (s *haberdasherV1Server) ServiceDescriptor() ([]byte, int) { return twirpFileDescriptor0, 0 } -func (s *haberdasherServer) ProtocGenTwirpVersion() string { +func (s *haberdasherV1Server) ProtocGenTwirpVersion() string { return "v5.12.1" } -func (s *haberdasherServer) PathPrefix() string { - return HaberdasherPathPrefix +func (s *haberdasherV1Server) PathPrefix() string { + return HaberdasherV1PathPrefix } // ===== @@ -865,7 +865,7 @@ func callClientError(ctx context.Context, h *twirp.ClientHooks, err twirp.Error) } var twirpFileDescriptor0 = []byte{ - // 224 bytes of a gzipped FileDescriptorProto + // 225 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x2b, 0xce, 0x4b, 0xcc, 0x4e, 0x8d, 0x4f, 0x4e, 0x2c, 0x4e, 0x8d, 0xcf, 0x4b, 0xcc, 0x4d, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xd2, 0x2c, 0x29, 0xcf, 0x2c, 0x2a, 0xd0, 0xcb, 0xcc, 0x2b, 0x49, 0x2d, 0xca, @@ -875,9 +875,10 @@ var twirpFileDescriptor0 = []byte{ 0x4a, 0x30, 0x2a, 0x30, 0x6a, 0xb0, 0x06, 0x81, 0xd9, 0x42, 0x22, 0x5c, 0xac, 0xc9, 0xf9, 0x39, 0xf9, 0x45, 0x12, 0x4c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x10, 0x0e, 0x48, 0x25, 0xc8, 0x38, 0x09, 0x66, 0xb0, 0x20, 0x98, 0x2d, 0xa5, 0xc8, 0xc5, 0x1e, 0x9c, 0x59, 0x95, 0x0a, 0x32, 0x48, 0x8c, - 0x8b, 0x2d, 0x33, 0x2f, 0x39, 0x23, 0xb5, 0x18, 0x6a, 0x14, 0x94, 0x67, 0xb4, 0x90, 0x91, 0x8b, - 0xdb, 0x23, 0x31, 0x29, 0xb5, 0x28, 0x25, 0xb1, 0x38, 0x23, 0xb5, 0x48, 0x68, 0x22, 0x23, 0x17, - 0x17, 0xd4, 0x35, 0x20, 0x6d, 0x8e, 0x7a, 0x44, 0xfb, 0x43, 0x0f, 0xd5, 0x13, 0x7a, 0x50, 0x9b, - 0xa5, 0x1c, 0xc8, 0x37, 0x02, 0xe2, 0x08, 0x27, 0xa1, 0x28, 0x01, 0x74, 0x95, 0x49, 0x6c, 0xe0, - 0x60, 0x36, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xe5, 0x7b, 0xaf, 0xa9, 0x80, 0x01, 0x00, 0x00, + 0x8b, 0x2d, 0x33, 0x2f, 0x39, 0x23, 0xb5, 0x18, 0x6a, 0x14, 0x94, 0x67, 0xb4, 0x84, 0x91, 0x8b, + 0xcf, 0x23, 0x31, 0x29, 0xb5, 0x28, 0x25, 0xb1, 0x38, 0x23, 0xb5, 0x08, 0xa4, 0x74, 0x22, 0x23, + 0x17, 0x17, 0xd4, 0x41, 0x20, 0xae, 0xa3, 0x1e, 0xd1, 0x5e, 0xd1, 0x43, 0xf5, 0x87, 0x1e, 0xd4, + 0x72, 0x29, 0x07, 0xf2, 0x8d, 0x80, 0x38, 0xc2, 0x49, 0x28, 0x4a, 0x00, 0x5d, 0x65, 0x12, 0x1b, + 0x38, 0xa4, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x3c, 0xa6, 0x01, 0xae, 0x83, 0x01, 0x00, + 0x00, } diff --git a/internal/twirptest/snake_case_names/snake_case_names_pb2.py b/internal/twirptest/snake_case_names/snake_case_names_pb2.py index 49561fff..930e485c 100644 --- a/internal/twirptest/snake_case_names/snake_case_names_pb2.py +++ b/internal/twirptest/snake_case_names/snake_case_names_pb2.py @@ -18,7 +18,8 @@ package='twirp.internal.twirptest.snake_case_names', syntax='proto3', serialized_options=b'Z\020snake_case_names', - serialized_pb=b'\n\x16snake_case_names.proto\x12)twirp.internal.twirptest.snake_case_names\"`\n\x0eMakeHatArgs_v1\x1a\x33\n\x06Hat_v1\x12\x0c\n\x04size\x18\x01 \x01(\x05\x12\r\n\x05\x63olor\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x1a\x19\n\x07Size_v1\x12\x0e\n\x06inches\x18\x01 \x01(\x05\x32\xa1\x01\n\x0bHaberdasher\x12\x91\x01\n\nMakeHat_v1\x12\x41.twirp.internal.twirptest.snake_case_names.MakeHatArgs_v1.Size_v1\x1a@.twirp.internal.twirptest.snake_case_names.MakeHatArgs_v1.Hat_v1B\x12Z\x10snake_case_namesb\x06proto3' + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x16snake_case_names.proto\x12)twirp.internal.twirptest.snake_case_names\"`\n\x0eMakeHatArgs_v1\x1a\x33\n\x06Hat_v1\x12\x0c\n\x04size\x18\x01 \x01(\x05\x12\r\n\x05\x63olor\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x1a\x19\n\x07Size_v1\x12\x0e\n\x06inches\x18\x01 \x01(\x05\x32\xa4\x01\n\x0eHaberdasher_v1\x12\x91\x01\n\nMakeHat_v1\x12\x41.twirp.internal.twirptest.snake_case_names.MakeHatArgs_v1.Size_v1\x1a@.twirp.internal.twirptest.snake_case_names.MakeHatArgs_v1.Hat_v1B\x12Z\x10snake_case_namesb\x06proto3' ) @@ -30,6 +31,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='size', full_name='twirp.internal.twirptest.snake_case_names.MakeHatArgs_v1.Hat_v1.size', index=0, @@ -37,21 +39,21 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='color', full_name='twirp.internal.twirptest.snake_case_names.MakeHatArgs_v1.Hat_v1.color', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='name', full_name='twirp.internal.twirptest.snake_case_names.MakeHatArgs_v1.Hat_v1.name', index=2, number=3, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -74,6 +76,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='inches', full_name='twirp.internal.twirptest.snake_case_names.MakeHatArgs_v1.Size_v1.inches', index=0, @@ -81,7 +84,7 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -104,6 +107,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -152,27 +156,29 @@ DESCRIPTOR._options = None -_HABERDASHER = _descriptor.ServiceDescriptor( - name='Haberdasher', - full_name='twirp.internal.twirptest.snake_case_names.Haberdasher', +_HABERDASHER_V1 = _descriptor.ServiceDescriptor( + name='Haberdasher_v1', + full_name='twirp.internal.twirptest.snake_case_names.Haberdasher_v1', file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=168, - serialized_end=329, + serialized_end=332, methods=[ _descriptor.MethodDescriptor( name='MakeHat_v1', - full_name='twirp.internal.twirptest.snake_case_names.Haberdasher.MakeHat_v1', + full_name='twirp.internal.twirptest.snake_case_names.Haberdasher_v1.MakeHat_v1', index=0, containing_service=None, input_type=_MAKEHATARGS_V1_SIZE_V1, output_type=_MAKEHATARGS_V1_HAT_V1, serialized_options=None, + create_key=_descriptor._internal_create_key, ), ]) -_sym_db.RegisterServiceDescriptor(_HABERDASHER) +_sym_db.RegisterServiceDescriptor(_HABERDASHER_V1) -DESCRIPTOR.services_by_name['Haberdasher'] = _HABERDASHER +DESCRIPTOR.services_by_name['Haberdasher_v1'] = _HABERDASHER_V1 # @@protoc_insertion_point(module_scope) diff --git a/internal/twirptest/snake_case_names/snake_case_names_pb2_twirp.py b/internal/twirptest/snake_case_names/snake_case_names_pb2_twirp.py index 5db323af..0b3c94c6 100644 --- a/internal/twirptest/snake_case_names/snake_case_names_pb2_twirp.py +++ b/internal/twirptest/snake_case_names/snake_case_names_pb2_twirp.py @@ -38,13 +38,13 @@ def from_http_err(cls, err): meta = {} return cls(code, msg, meta) -class HaberdasherClient(object): +class HaberdasherV1Client(object): """ A Haberdasher makes hats for clients. """ def __init__(self, server_address): - """Creates a new client for the Haberdasher service. + """Creates a new client for the HaberdasherV1 service. Args: server_address: The address of the server to send requests to, in @@ -54,7 +54,7 @@ def __init__(self, server_address): self.__target = server_address else: self.__target = server_address.encode('ascii') - self.__service_name = "twirp.internal.twirptest.snake_case_names.Haberdasher" + self.__service_name = "twirp.internal.twirptest.snake_case_names.HaberdasherV1" def __make_request(self, body, full_method): req = Request( diff --git a/internal/twirptest/source_relative/source_relative_pb2.py b/internal/twirptest/source_relative/source_relative_pb2.py index eaaa7a80..4fd6ebfc 100644 --- a/internal/twirptest/source_relative/source_relative_pb2.py +++ b/internal/twirptest/source_relative/source_relative_pb2.py @@ -18,6 +18,7 @@ package='twirp.internal.twirptest.source_relative', syntax='proto3', serialized_options=b'ZZ