From 024bf890cbe0ca54de1d166df77db194dc6ca658 Mon Sep 17 00:00:00 2001 From: Christophe Taton Date: Wed, 23 May 2018 11:34:26 -0700 Subject: [PATCH] Update Endpoints gRPC bookstore example - Now works with Python2 and Python3 - Updated ProtoBuf/gRPC generated code Signed-off-by: Christophe Taton --- endpoints/bookstore-grpc/README.md | 4 +- endpoints/bookstore-grpc/bookstore.py | 6 +- endpoints/bookstore-grpc/bookstore_client.py | 5 +- .../{generated_pb2 => }/bookstore_pb2.py | 469 ++++-------------- .../bookstore-grpc/bookstore_pb2_grpc.py | 170 +++++++ endpoints/bookstore-grpc/bookstore_server.py | 13 +- .../bookstore-grpc/generated_pb2/__init__.py | 0 endpoints/bookstore-grpc/requirements.txt | 6 +- 8 files changed, 296 insertions(+), 377 deletions(-) rename endpoints/bookstore-grpc/{generated_pb2 => }/bookstore_pb2.py (51%) create mode 100644 endpoints/bookstore-grpc/bookstore_pb2_grpc.py delete mode 100644 endpoints/bookstore-grpc/generated_pb2/__init__.py diff --git a/endpoints/bookstore-grpc/README.md b/endpoints/bookstore-grpc/README.md index 3d543029609..bcd49c635cd 100644 --- a/endpoints/bookstore-grpc/README.md +++ b/endpoints/bookstore-grpc/README.md @@ -55,8 +55,8 @@ gRPC libraries and tools are installed, run: --include_imports \ --include_source_info \ --proto_path=. \ - --python_out=generated_pb2 \ - --grpc_python_out=generated_pb2 \ + --python_out=. \ + --grpc_python_out=. \ --descriptor_set_out=api_descriptor.pb \ bookstore.proto diff --git a/endpoints/bookstore-grpc/bookstore.py b/endpoints/bookstore-grpc/bookstore.py index 69010c4a019..a32be906d47 100644 --- a/endpoints/bookstore-grpc/bookstore.py +++ b/endpoints/bookstore-grpc/bookstore.py @@ -14,6 +14,8 @@ import threading +import six + class ShelfInfo(object): """The contents of a single shelf.""" @@ -33,7 +35,7 @@ def __init__(self): def list_shelf(self): with self._lock: - return [s._shelf for (_, s) in self._shelves.iteritems()] + return [s._shelf for (_, s) in six.iteritems(self._shelves)] def create_shelf(self, shelf): with self._lock: @@ -54,7 +56,7 @@ def delete_shelf(self, shelf_id): def list_books(self, shelf_id): with self._lock: return [book for ( - _, book) in self._shelves[shelf_id]._books.iteritems()] + _, book) in six.iteritems(self._shelves[shelf_id]._books)] def create_book(self, shelf_id, book): with self._lock: diff --git a/endpoints/bookstore-grpc/bookstore_client.py b/endpoints/bookstore-grpc/bookstore_client.py index a0d8a1f4ff1..37d31e11183 100644 --- a/endpoints/bookstore-grpc/bookstore_client.py +++ b/endpoints/bookstore-grpc/bookstore_client.py @@ -17,10 +17,9 @@ import argparse from google.protobuf import empty_pb2 - import grpc -from generated_pb2 import bookstore_pb2 +import bookstore_pb2_grpc def run(host, port, api_key, auth_token, timeout): @@ -28,7 +27,7 @@ def run(host, port, api_key, auth_token, timeout): channel = grpc.insecure_channel('{}:{}'.format(host, port)) - stub = bookstore_pb2.BookstoreStub(channel) + stub = bookstore_pb2_grpc.BookstoreStub(channel) metadata = [] if api_key: metadata.append(('x-api-key', api_key)) diff --git a/endpoints/bookstore-grpc/generated_pb2/bookstore_pb2.py b/endpoints/bookstore-grpc/bookstore_pb2.py similarity index 51% rename from endpoints/bookstore-grpc/generated_pb2/bookstore_pb2.py rename to endpoints/bookstore-grpc/bookstore_pb2.py index e3bb62070d9..e652efe28ce 100644 --- a/endpoints/bookstore-grpc/generated_pb2/bookstore_pb2.py +++ b/endpoints/bookstore-grpc/bookstore_pb2.py @@ -23,7 +23,6 @@ serialized_pb=_b('\n\x0f\x62ookstore.proto\x12\x1c\x65ndpoints.examples.bookstore\x1a\x1bgoogle/protobuf/empty.proto\"\"\n\x05Shelf\x12\n\n\x02id\x18\x01 \x01(\x03\x12\r\n\x05theme\x18\x02 \x01(\t\"1\n\x04\x42ook\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0e\n\x06\x61uthor\x18\x02 \x01(\t\x12\r\n\x05title\x18\x03 \x01(\t\"K\n\x13ListShelvesResponse\x12\x34\n\x07shelves\x18\x01 \x03(\x0b\x32#.endpoints.examples.bookstore.Shelf\"H\n\x12\x43reateShelfRequest\x12\x32\n\x05shelf\x18\x01 \x01(\x0b\x32#.endpoints.examples.bookstore.Shelf\" \n\x0fGetShelfRequest\x12\r\n\x05shelf\x18\x01 \x01(\x03\"#\n\x12\x44\x65leteShelfRequest\x12\r\n\x05shelf\x18\x01 \x01(\x03\"!\n\x10ListBooksRequest\x12\r\n\x05shelf\x18\x01 \x01(\x03\"F\n\x11ListBooksResponse\x12\x31\n\x05\x62ooks\x18\x01 \x03(\x0b\x32\".endpoints.examples.bookstore.Book\"T\n\x11\x43reateBookRequest\x12\r\n\x05shelf\x18\x01 \x01(\x03\x12\x30\n\x04\x62ook\x18\x02 \x01(\x0b\x32\".endpoints.examples.bookstore.Book\"-\n\x0eGetBookRequest\x12\r\n\x05shelf\x18\x01 \x01(\x03\x12\x0c\n\x04\x62ook\x18\x02 \x01(\x03\"0\n\x11\x44\x65leteBookRequest\x12\r\n\x05shelf\x18\x01 \x01(\x03\x12\x0c\n\x04\x62ook\x18\x02 \x01(\x03\x32\x99\x06\n\tBookstore\x12Z\n\x0bListShelves\x12\x16.google.protobuf.Empty\x1a\x31.endpoints.examples.bookstore.ListShelvesResponse\"\x00\x12\x66\n\x0b\x43reateShelf\x12\x30.endpoints.examples.bookstore.CreateShelfRequest\x1a#.endpoints.examples.bookstore.Shelf\"\x00\x12`\n\x08GetShelf\x12-.endpoints.examples.bookstore.GetShelfRequest\x1a#.endpoints.examples.bookstore.Shelf\"\x00\x12Y\n\x0b\x44\x65leteShelf\x12\x30.endpoints.examples.bookstore.DeleteShelfRequest\x1a\x16.google.protobuf.Empty\"\x00\x12n\n\tListBooks\x12..endpoints.examples.bookstore.ListBooksRequest\x1a/.endpoints.examples.bookstore.ListBooksResponse\"\x00\x12\x63\n\nCreateBook\x12/.endpoints.examples.bookstore.CreateBookRequest\x1a\".endpoints.examples.bookstore.Book\"\x00\x12]\n\x07GetBook\x12,.endpoints.examples.bookstore.GetBookRequest\x1a\".endpoints.examples.bookstore.Book\"\x00\x12W\n\nDeleteBook\x12/.endpoints.examples.bookstore.DeleteBookRequest\x1a\x16.google.protobuf.Empty\"\x00\x42;\n\'com.google.endpoints.examples.bookstoreB\x0e\x42ookstoreProtoP\x01\x62\x06proto3') , dependencies=[google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,]) -_sym_db.RegisterFileDescriptor(DESCRIPTOR) @@ -41,14 +40,14 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='theme', full_name='endpoints.examples.bookstore.Shelf.theme', 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, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -79,21 +78,21 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='author', full_name='endpoints.examples.bookstore.Book.author', 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, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='title', full_name='endpoints.examples.bookstore.Book.title', 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, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -124,7 +123,7 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -155,7 +154,7 @@ has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -186,7 +185,7 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -217,7 +216,7 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -248,7 +247,7 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -279,7 +278,7 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -310,14 +309,14 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='book', full_name='endpoints.examples.bookstore.CreateBookRequest.book', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -348,14 +347,14 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='book', full_name='endpoints.examples.bookstore.GetBookRequest.book', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -386,14 +385,14 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='book', full_name='endpoints.examples.bookstore.DeleteBookRequest.book', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -425,6 +424,7 @@ DESCRIPTOR.message_types_by_name['CreateBookRequest'] = _CREATEBOOKREQUEST DESCRIPTOR.message_types_by_name['GetBookRequest'] = _GETBOOKREQUEST DESCRIPTOR.message_types_by_name['DeleteBookRequest'] = _DELETEBOOKREQUEST +_sym_db.RegisterFileDescriptor(DESCRIPTOR) Shelf = _reflection.GeneratedProtocolMessageType('Shelf', (_message.Message,), dict( DESCRIPTOR = _SHELF, @@ -506,350 +506,91 @@ DESCRIPTOR.has_options = True DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\'com.google.endpoints.examples.bookstoreB\016BookstoreProtoP\001')) -import grpc -from grpc.beta import implementations as beta_implementations -from grpc.beta import interfaces as beta_interfaces -from grpc.framework.common import cardinality -from grpc.framework.interfaces.face import utilities as face_utilities - - -class BookstoreStub(object): - """A simple Bookstore API. - - The API manages shelves and books resources. Shelves contain books. - """ - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.ListShelves = channel.unary_unary( - '/endpoints.examples.bookstore.Bookstore/ListShelves', - request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - response_deserializer=ListShelvesResponse.FromString, - ) - self.CreateShelf = channel.unary_unary( - '/endpoints.examples.bookstore.Bookstore/CreateShelf', - request_serializer=CreateShelfRequest.SerializeToString, - response_deserializer=Shelf.FromString, - ) - self.GetShelf = channel.unary_unary( - '/endpoints.examples.bookstore.Bookstore/GetShelf', - request_serializer=GetShelfRequest.SerializeToString, - response_deserializer=Shelf.FromString, - ) - self.DeleteShelf = channel.unary_unary( - '/endpoints.examples.bookstore.Bookstore/DeleteShelf', - request_serializer=DeleteShelfRequest.SerializeToString, - response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - ) - self.ListBooks = channel.unary_unary( - '/endpoints.examples.bookstore.Bookstore/ListBooks', - request_serializer=ListBooksRequest.SerializeToString, - response_deserializer=ListBooksResponse.FromString, - ) - self.CreateBook = channel.unary_unary( - '/endpoints.examples.bookstore.Bookstore/CreateBook', - request_serializer=CreateBookRequest.SerializeToString, - response_deserializer=Book.FromString, - ) - self.GetBook = channel.unary_unary( - '/endpoints.examples.bookstore.Bookstore/GetBook', - request_serializer=GetBookRequest.SerializeToString, - response_deserializer=Book.FromString, - ) - self.DeleteBook = channel.unary_unary( - '/endpoints.examples.bookstore.Bookstore/DeleteBook', - request_serializer=DeleteBookRequest.SerializeToString, - response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - ) - - -class BookstoreServicer(object): - """A simple Bookstore API. - - The API manages shelves and books resources. Shelves contain books. - """ - - def ListShelves(self, request, context): - """Returns a list of all shelves in the bookstore. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def CreateShelf(self, request, context): - """Creates a new shelf in the bookstore. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def GetShelf(self, request, context): - """Returns a specific bookstore shelf. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def DeleteShelf(self, request, context): - """Deletes a shelf, including all books that are stored on the shelf. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def ListBooks(self, request, context): - """Returns a list of books on a shelf. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def CreateBook(self, request, context): - """Creates a new book. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def GetBook(self, request, context): - """Returns a specific book. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def DeleteBook(self, request, context): - """Deletes a book from a shelf. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - -def add_BookstoreServicer_to_server(servicer, server): - rpc_method_handlers = { - 'ListShelves': grpc.unary_unary_rpc_method_handler( - servicer.ListShelves, - request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - response_serializer=ListShelvesResponse.SerializeToString, - ), - 'CreateShelf': grpc.unary_unary_rpc_method_handler( - servicer.CreateShelf, - request_deserializer=CreateShelfRequest.FromString, - response_serializer=Shelf.SerializeToString, - ), - 'GetShelf': grpc.unary_unary_rpc_method_handler( - servicer.GetShelf, - request_deserializer=GetShelfRequest.FromString, - response_serializer=Shelf.SerializeToString, - ), - 'DeleteShelf': grpc.unary_unary_rpc_method_handler( - servicer.DeleteShelf, - request_deserializer=DeleteShelfRequest.FromString, - response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - ), - 'ListBooks': grpc.unary_unary_rpc_method_handler( - servicer.ListBooks, - request_deserializer=ListBooksRequest.FromString, - response_serializer=ListBooksResponse.SerializeToString, - ), - 'CreateBook': grpc.unary_unary_rpc_method_handler( - servicer.CreateBook, - request_deserializer=CreateBookRequest.FromString, - response_serializer=Book.SerializeToString, - ), - 'GetBook': grpc.unary_unary_rpc_method_handler( - servicer.GetBook, - request_deserializer=GetBookRequest.FromString, - response_serializer=Book.SerializeToString, - ), - 'DeleteBook': grpc.unary_unary_rpc_method_handler( - servicer.DeleteBook, - request_deserializer=DeleteBookRequest.FromString, - response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'endpoints.examples.bookstore.Bookstore', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) - - -class BetaBookstoreServicer(object): - """The Beta API is deprecated for 0.15.0 and later. - - It is recommended to use the GA API (classes and functions in this - file not marked beta) for all further purposes. This class was generated - only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" - """A simple Bookstore API. - - The API manages shelves and books resources. Shelves contain books. - """ - def ListShelves(self, request, context): - """Returns a list of all shelves in the bookstore. - """ - context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) - def CreateShelf(self, request, context): - """Creates a new shelf in the bookstore. - """ - context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) - def GetShelf(self, request, context): - """Returns a specific bookstore shelf. - """ - context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) - def DeleteShelf(self, request, context): - """Deletes a shelf, including all books that are stored on the shelf. - """ - context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) - def ListBooks(self, request, context): - """Returns a list of books on a shelf. - """ - context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) - def CreateBook(self, request, context): - """Creates a new book. - """ - context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) - def GetBook(self, request, context): - """Returns a specific book. - """ - context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) - def DeleteBook(self, request, context): - """Deletes a book from a shelf. - """ - context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) - - -class BetaBookstoreStub(object): - """The Beta API is deprecated for 0.15.0 and later. - - It is recommended to use the GA API (classes and functions in this - file not marked beta) for all further purposes. This class was generated - only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" - """A simple Bookstore API. - - The API manages shelves and books resources. Shelves contain books. - """ - def ListShelves(self, request, timeout, metadata=None, with_call=False, protocol_options=None): - """Returns a list of all shelves in the bookstore. - """ - raise NotImplementedError() - ListShelves.future = None - def CreateShelf(self, request, timeout, metadata=None, with_call=False, protocol_options=None): - """Creates a new shelf in the bookstore. - """ - raise NotImplementedError() - CreateShelf.future = None - def GetShelf(self, request, timeout, metadata=None, with_call=False, protocol_options=None): - """Returns a specific bookstore shelf. - """ - raise NotImplementedError() - GetShelf.future = None - def DeleteShelf(self, request, timeout, metadata=None, with_call=False, protocol_options=None): - """Deletes a shelf, including all books that are stored on the shelf. - """ - raise NotImplementedError() - DeleteShelf.future = None - def ListBooks(self, request, timeout, metadata=None, with_call=False, protocol_options=None): - """Returns a list of books on a shelf. - """ - raise NotImplementedError() - ListBooks.future = None - def CreateBook(self, request, timeout, metadata=None, with_call=False, protocol_options=None): - """Creates a new book. - """ - raise NotImplementedError() - CreateBook.future = None - def GetBook(self, request, timeout, metadata=None, with_call=False, protocol_options=None): - """Returns a specific book. - """ - raise NotImplementedError() - GetBook.future = None - def DeleteBook(self, request, timeout, metadata=None, with_call=False, protocol_options=None): - """Deletes a book from a shelf. - """ - raise NotImplementedError() - DeleteBook.future = None - - -def beta_create_Bookstore_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None): - """The Beta API is deprecated for 0.15.0 and later. - - It is recommended to use the GA API (classes and functions in this - file not marked beta) for all further purposes. This function was - generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" - request_deserializers = { - ('endpoints.examples.bookstore.Bookstore', 'CreateBook'): CreateBookRequest.FromString, - ('endpoints.examples.bookstore.Bookstore', 'CreateShelf'): CreateShelfRequest.FromString, - ('endpoints.examples.bookstore.Bookstore', 'DeleteBook'): DeleteBookRequest.FromString, - ('endpoints.examples.bookstore.Bookstore', 'DeleteShelf'): DeleteShelfRequest.FromString, - ('endpoints.examples.bookstore.Bookstore', 'GetBook'): GetBookRequest.FromString, - ('endpoints.examples.bookstore.Bookstore', 'GetShelf'): GetShelfRequest.FromString, - ('endpoints.examples.bookstore.Bookstore', 'ListBooks'): ListBooksRequest.FromString, - ('endpoints.examples.bookstore.Bookstore', 'ListShelves'): google_dot_protobuf_dot_empty__pb2.Empty.FromString, - } - response_serializers = { - ('endpoints.examples.bookstore.Bookstore', 'CreateBook'): Book.SerializeToString, - ('endpoints.examples.bookstore.Bookstore', 'CreateShelf'): Shelf.SerializeToString, - ('endpoints.examples.bookstore.Bookstore', 'DeleteBook'): google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - ('endpoints.examples.bookstore.Bookstore', 'DeleteShelf'): google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - ('endpoints.examples.bookstore.Bookstore', 'GetBook'): Book.SerializeToString, - ('endpoints.examples.bookstore.Bookstore', 'GetShelf'): Shelf.SerializeToString, - ('endpoints.examples.bookstore.Bookstore', 'ListBooks'): ListBooksResponse.SerializeToString, - ('endpoints.examples.bookstore.Bookstore', 'ListShelves'): ListShelvesResponse.SerializeToString, - } - method_implementations = { - ('endpoints.examples.bookstore.Bookstore', 'CreateBook'): face_utilities.unary_unary_inline(servicer.CreateBook), - ('endpoints.examples.bookstore.Bookstore', 'CreateShelf'): face_utilities.unary_unary_inline(servicer.CreateShelf), - ('endpoints.examples.bookstore.Bookstore', 'DeleteBook'): face_utilities.unary_unary_inline(servicer.DeleteBook), - ('endpoints.examples.bookstore.Bookstore', 'DeleteShelf'): face_utilities.unary_unary_inline(servicer.DeleteShelf), - ('endpoints.examples.bookstore.Bookstore', 'GetBook'): face_utilities.unary_unary_inline(servicer.GetBook), - ('endpoints.examples.bookstore.Bookstore', 'GetShelf'): face_utilities.unary_unary_inline(servicer.GetShelf), - ('endpoints.examples.bookstore.Bookstore', 'ListBooks'): face_utilities.unary_unary_inline(servicer.ListBooks), - ('endpoints.examples.bookstore.Bookstore', 'ListShelves'): face_utilities.unary_unary_inline(servicer.ListShelves), - } - server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout) - return beta_implementations.server(method_implementations, options=server_options) - - -def beta_create_Bookstore_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None): - """The Beta API is deprecated for 0.15.0 and later. - - It is recommended to use the GA API (classes and functions in this - file not marked beta) for all further purposes. This function was - generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" - request_serializers = { - ('endpoints.examples.bookstore.Bookstore', 'CreateBook'): CreateBookRequest.SerializeToString, - ('endpoints.examples.bookstore.Bookstore', 'CreateShelf'): CreateShelfRequest.SerializeToString, - ('endpoints.examples.bookstore.Bookstore', 'DeleteBook'): DeleteBookRequest.SerializeToString, - ('endpoints.examples.bookstore.Bookstore', 'DeleteShelf'): DeleteShelfRequest.SerializeToString, - ('endpoints.examples.bookstore.Bookstore', 'GetBook'): GetBookRequest.SerializeToString, - ('endpoints.examples.bookstore.Bookstore', 'GetShelf'): GetShelfRequest.SerializeToString, - ('endpoints.examples.bookstore.Bookstore', 'ListBooks'): ListBooksRequest.SerializeToString, - ('endpoints.examples.bookstore.Bookstore', 'ListShelves'): google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - } - response_deserializers = { - ('endpoints.examples.bookstore.Bookstore', 'CreateBook'): Book.FromString, - ('endpoints.examples.bookstore.Bookstore', 'CreateShelf'): Shelf.FromString, - ('endpoints.examples.bookstore.Bookstore', 'DeleteBook'): google_dot_protobuf_dot_empty__pb2.Empty.FromString, - ('endpoints.examples.bookstore.Bookstore', 'DeleteShelf'): google_dot_protobuf_dot_empty__pb2.Empty.FromString, - ('endpoints.examples.bookstore.Bookstore', 'GetBook'): Book.FromString, - ('endpoints.examples.bookstore.Bookstore', 'GetShelf'): Shelf.FromString, - ('endpoints.examples.bookstore.Bookstore', 'ListBooks'): ListBooksResponse.FromString, - ('endpoints.examples.bookstore.Bookstore', 'ListShelves'): ListShelvesResponse.FromString, - } - cardinalities = { - 'CreateBook': cardinality.Cardinality.UNARY_UNARY, - 'CreateShelf': cardinality.Cardinality.UNARY_UNARY, - 'DeleteBook': cardinality.Cardinality.UNARY_UNARY, - 'DeleteShelf': cardinality.Cardinality.UNARY_UNARY, - 'GetBook': cardinality.Cardinality.UNARY_UNARY, - 'GetShelf': cardinality.Cardinality.UNARY_UNARY, - 'ListBooks': cardinality.Cardinality.UNARY_UNARY, - 'ListShelves': cardinality.Cardinality.UNARY_UNARY, - } - stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size) - return beta_implementations.dynamic_stub(channel, 'endpoints.examples.bookstore.Bookstore', cardinalities, options=stub_options) + +_BOOKSTORE = _descriptor.ServiceDescriptor( + name='Bookstore', + full_name='endpoints.examples.bookstore.Bookstore', + file=DESCRIPTOR, + index=0, + options=None, + serialized_start=678, + serialized_end=1471, + methods=[ + _descriptor.MethodDescriptor( + name='ListShelves', + full_name='endpoints.examples.bookstore.Bookstore.ListShelves', + index=0, + containing_service=None, + input_type=google_dot_protobuf_dot_empty__pb2._EMPTY, + output_type=_LISTSHELVESRESPONSE, + options=None, + ), + _descriptor.MethodDescriptor( + name='CreateShelf', + full_name='endpoints.examples.bookstore.Bookstore.CreateShelf', + index=1, + containing_service=None, + input_type=_CREATESHELFREQUEST, + output_type=_SHELF, + options=None, + ), + _descriptor.MethodDescriptor( + name='GetShelf', + full_name='endpoints.examples.bookstore.Bookstore.GetShelf', + index=2, + containing_service=None, + input_type=_GETSHELFREQUEST, + output_type=_SHELF, + options=None, + ), + _descriptor.MethodDescriptor( + name='DeleteShelf', + full_name='endpoints.examples.bookstore.Bookstore.DeleteShelf', + index=3, + containing_service=None, + input_type=_DELETESHELFREQUEST, + output_type=google_dot_protobuf_dot_empty__pb2._EMPTY, + options=None, + ), + _descriptor.MethodDescriptor( + name='ListBooks', + full_name='endpoints.examples.bookstore.Bookstore.ListBooks', + index=4, + containing_service=None, + input_type=_LISTBOOKSREQUEST, + output_type=_LISTBOOKSRESPONSE, + options=None, + ), + _descriptor.MethodDescriptor( + name='CreateBook', + full_name='endpoints.examples.bookstore.Bookstore.CreateBook', + index=5, + containing_service=None, + input_type=_CREATEBOOKREQUEST, + output_type=_BOOK, + options=None, + ), + _descriptor.MethodDescriptor( + name='GetBook', + full_name='endpoints.examples.bookstore.Bookstore.GetBook', + index=6, + containing_service=None, + input_type=_GETBOOKREQUEST, + output_type=_BOOK, + options=None, + ), + _descriptor.MethodDescriptor( + name='DeleteBook', + full_name='endpoints.examples.bookstore.Bookstore.DeleteBook', + index=7, + containing_service=None, + input_type=_DELETEBOOKREQUEST, + output_type=google_dot_protobuf_dot_empty__pb2._EMPTY, + options=None, + ), +]) +_sym_db.RegisterServiceDescriptor(_BOOKSTORE) + +DESCRIPTOR.services_by_name['Bookstore'] = _BOOKSTORE + # @@protoc_insertion_point(module_scope) diff --git a/endpoints/bookstore-grpc/bookstore_pb2_grpc.py b/endpoints/bookstore-grpc/bookstore_pb2_grpc.py new file mode 100644 index 00000000000..d2bfc7a1af7 --- /dev/null +++ b/endpoints/bookstore-grpc/bookstore_pb2_grpc.py @@ -0,0 +1,170 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc + +import bookstore_pb2 as bookstore__pb2 +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 + + +class BookstoreStub(object): + """A simple Bookstore API. + + The API manages shelves and books resources. Shelves contain books. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.ListShelves = channel.unary_unary( + '/endpoints.examples.bookstore.Bookstore/ListShelves', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=bookstore__pb2.ListShelvesResponse.FromString, + ) + self.CreateShelf = channel.unary_unary( + '/endpoints.examples.bookstore.Bookstore/CreateShelf', + request_serializer=bookstore__pb2.CreateShelfRequest.SerializeToString, + response_deserializer=bookstore__pb2.Shelf.FromString, + ) + self.GetShelf = channel.unary_unary( + '/endpoints.examples.bookstore.Bookstore/GetShelf', + request_serializer=bookstore__pb2.GetShelfRequest.SerializeToString, + response_deserializer=bookstore__pb2.Shelf.FromString, + ) + self.DeleteShelf = channel.unary_unary( + '/endpoints.examples.bookstore.Bookstore/DeleteShelf', + request_serializer=bookstore__pb2.DeleteShelfRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + self.ListBooks = channel.unary_unary( + '/endpoints.examples.bookstore.Bookstore/ListBooks', + request_serializer=bookstore__pb2.ListBooksRequest.SerializeToString, + response_deserializer=bookstore__pb2.ListBooksResponse.FromString, + ) + self.CreateBook = channel.unary_unary( + '/endpoints.examples.bookstore.Bookstore/CreateBook', + request_serializer=bookstore__pb2.CreateBookRequest.SerializeToString, + response_deserializer=bookstore__pb2.Book.FromString, + ) + self.GetBook = channel.unary_unary( + '/endpoints.examples.bookstore.Bookstore/GetBook', + request_serializer=bookstore__pb2.GetBookRequest.SerializeToString, + response_deserializer=bookstore__pb2.Book.FromString, + ) + self.DeleteBook = channel.unary_unary( + '/endpoints.examples.bookstore.Bookstore/DeleteBook', + request_serializer=bookstore__pb2.DeleteBookRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + + +class BookstoreServicer(object): + """A simple Bookstore API. + + The API manages shelves and books resources. Shelves contain books. + """ + + def ListShelves(self, request, context): + """Returns a list of all shelves in the bookstore. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateShelf(self, request, context): + """Creates a new shelf in the bookstore. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetShelf(self, request, context): + """Returns a specific bookstore shelf. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteShelf(self, request, context): + """Deletes a shelf, including all books that are stored on the shelf. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListBooks(self, request, context): + """Returns a list of books on a shelf. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateBook(self, request, context): + """Creates a new book. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetBook(self, request, context): + """Returns a specific book. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteBook(self, request, context): + """Deletes a book from a shelf. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_BookstoreServicer_to_server(servicer, server): + rpc_method_handlers = { + 'ListShelves': grpc.unary_unary_rpc_method_handler( + servicer.ListShelves, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=bookstore__pb2.ListShelvesResponse.SerializeToString, + ), + 'CreateShelf': grpc.unary_unary_rpc_method_handler( + servicer.CreateShelf, + request_deserializer=bookstore__pb2.CreateShelfRequest.FromString, + response_serializer=bookstore__pb2.Shelf.SerializeToString, + ), + 'GetShelf': grpc.unary_unary_rpc_method_handler( + servicer.GetShelf, + request_deserializer=bookstore__pb2.GetShelfRequest.FromString, + response_serializer=bookstore__pb2.Shelf.SerializeToString, + ), + 'DeleteShelf': grpc.unary_unary_rpc_method_handler( + servicer.DeleteShelf, + request_deserializer=bookstore__pb2.DeleteShelfRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'ListBooks': grpc.unary_unary_rpc_method_handler( + servicer.ListBooks, + request_deserializer=bookstore__pb2.ListBooksRequest.FromString, + response_serializer=bookstore__pb2.ListBooksResponse.SerializeToString, + ), + 'CreateBook': grpc.unary_unary_rpc_method_handler( + servicer.CreateBook, + request_deserializer=bookstore__pb2.CreateBookRequest.FromString, + response_serializer=bookstore__pb2.Book.SerializeToString, + ), + 'GetBook': grpc.unary_unary_rpc_method_handler( + servicer.GetBook, + request_deserializer=bookstore__pb2.GetBookRequest.FromString, + response_serializer=bookstore__pb2.Book.SerializeToString, + ), + 'DeleteBook': grpc.unary_unary_rpc_method_handler( + servicer.DeleteBook, + request_deserializer=bookstore__pb2.DeleteBookRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'endpoints.examples.bookstore.Bookstore', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) diff --git a/endpoints/bookstore-grpc/bookstore_server.py b/endpoints/bookstore-grpc/bookstore_server.py index de83d5cf45d..97d85ad198e 100644 --- a/endpoints/bookstore-grpc/bookstore_server.py +++ b/endpoints/bookstore-grpc/bookstore_server.py @@ -15,18 +15,21 @@ """The Python gRPC Bookstore Server Example.""" import argparse +from concurrent import futures import time from google.protobuf import struct_pb2 +import grpc import bookstore -from generated_pb2 import bookstore_pb2 +import bookstore_pb2 +import bookstore_pb2_grpc import status _ONE_DAY_IN_SECONDS = 60 * 60 * 24 -class BookstoreServicer(bookstore_pb2.BetaBookstoreServicer): +class BookstoreServicer(bookstore_pb2_grpc.BookstoreServicer): """Implements the bookstore API server.""" def __init__(self, store): self._store = store @@ -98,9 +101,11 @@ def create_sample_bookstore(): def serve(port, shutdown_grace_duration): """Configures and runs the bookstore API server.""" + server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) + store = create_sample_bookstore() - server = bookstore_pb2.beta_create_Bookstore_server( - BookstoreServicer(store)) + bookstore_pb2_grpc.add_BookstoreServicer_to_server( + BookstoreServicer(store), server) server.add_insecure_port('[::]:{}'.format(port)) server.start() diff --git a/endpoints/bookstore-grpc/generated_pb2/__init__.py b/endpoints/bookstore-grpc/generated_pb2/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/endpoints/bookstore-grpc/requirements.txt b/endpoints/bookstore-grpc/requirements.txt index 6c3ceb7c94b..e1c139acee8 100644 --- a/endpoints/bookstore-grpc/requirements.txt +++ b/endpoints/bookstore-grpc/requirements.txt @@ -1,2 +1,4 @@ -grpcio==1.10.0 -google-auth==1.4.1 +grpcio>=1.10.0 +grpcio-tools>=1.10.0 +google-auth>=1.4.1 +six>=1.11