Merge pull request #3317 from grpc/release-0_11

Bring 0.11 into master
pull/3322/head
Nicolas Noble 9 years ago
commit 855dbf189b
  1. 3
      examples/python/helloworld/README.md
  2. 9
      examples/python/helloworld/greeter_client.py
  3. 6
      examples/python/helloworld/greeter_server.py
  4. 36
      examples/python/route_guide/README.md
  5. 21
      examples/python/route_guide/route_guide_client.py
  6. 267
      examples/python/route_guide/route_guide_pb2.py
  7. 6
      examples/python/route_guide/route_guide_server.py
  8. 2
      examples/python/route_guide/run_codegen.sh
  9. 10
      gRPC.podspec
  10. 2
      src/python/grpcio/commands.py
  11. 18
      src/python/grpcio/grpc/beta/_server.py
  12. 6
      src/python/grpcio/grpc/beta/_stub.py
  13. 1
      src/python/grpcio/requirements.txt
  14. 2
      src/python/grpcio/setup.py
  15. 4
      src/python/grpcio_health_checking/setup.py
  16. 5
      src/python/grpcio_test/requirements.txt
  17. 4
      src/python/grpcio_test/setup.py
  18. 2
      tools/distrib/python/docgen.py

@ -91,9 +91,6 @@ Which internally invokes the proto-compiler as:
$ protoc -I ../../protos --python_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_python_plugin` ../../protos/helloworld.proto $ protoc -I ../../protos --python_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_python_plugin` ../../protos/helloworld.proto
``` ```
Optionally, you can just skip the code generation step as the generated python module has already
been generated for you (helloworld_pb2.py).
### The client ### The client
Client-side code can be found in [greeter_client.py](greeter_client.py). Client-side code can be found in [greeter_client.py](greeter_client.py).

@ -29,15 +29,18 @@
"""The Python implementation of the GRPC helloworld.Greeter client.""" """The Python implementation of the GRPC helloworld.Greeter client."""
from grpc.beta import implementations
import helloworld_pb2 import helloworld_pb2
_TIMEOUT_SECONDS = 10 _TIMEOUT_SECONDS = 10
def run(): def run():
with helloworld_pb2.early_adopter_create_Greeter_stub('localhost', 50051) as stub: channel = implementations.insecure_channel('localhost', 50051)
response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'), _TIMEOUT_SECONDS) stub = helloworld_pb2.beta_create_Greeter_stub(channel)
print "Greeter client received: " + response.message response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'), _TIMEOUT_SECONDS)
print "Greeter client received: " + response.message
if __name__ == '__main__': if __name__ == '__main__':

@ -36,15 +36,15 @@ import helloworld_pb2
_ONE_DAY_IN_SECONDS = 60 * 60 * 24 _ONE_DAY_IN_SECONDS = 60 * 60 * 24
class Greeter(helloworld_pb2.EarlyAdopterGreeterServicer): class Greeter(helloworld_pb2.BetaGreeterServicer):
def SayHello(self, request, context): def SayHello(self, request, context):
return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name) return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name)
def serve(): def serve():
server = helloworld_pb2.early_adopter_create_Greeter_server( server = helloworld_pb2.beta_create_Greeter_server(Greeter())
Greeter(), 50051, None, None) server.add_insecure_port('[::]:50051')
server.start() server.start()
try: try:
while True: while True:

@ -29,7 +29,7 @@ Then change your current directory to `examples/python/route_guide`:
$ cd examples/python/route_guide $ cd examples/python/route_guide
``` ```
You also should have the relevant tools installed to generate the server and client interface code - if you don't already, follow the setup instructions in [the Python quick start guide](../python). You also should have the relevant tools installed to generate the server and client interface code - if you don't already, follow the setup instructions in [the Python quick start guide](../helloworld).
## Defining the service ## Defining the service
@ -99,12 +99,11 @@ $ protoc -I ../../protos --python_out=. --grpc_out=. --plugin=protoc-gen-grpc=`w
Note that as we've already provided a version of the generated code in the example repository, running this command regenerates the appropriate file rather than creates a new one. The generated code file is called `route_guide_pb2.py` and contains: Note that as we've already provided a version of the generated code in the example repository, running this command regenerates the appropriate file rather than creates a new one. The generated code file is called `route_guide_pb2.py` and contains:
- classes for the messages defined in route_guide.proto - classes for the messages defined in route_guide.proto
- abstract classes for the service defined in route_guide.proto - abstract classes for the service defined in route_guide.proto
- `EarlyAdopterRouteGuideServicer`, which defines the interface for implementations of the RouteGuide service - `BetaRouteGuideServicer`, which defines the interface for implementations of the RouteGuide service
- `EarlyAdopterRouteGuideServer`, which may be started and stopped - `BetaRouteGuideStub`, which can be used by clients to invoke RouteGuide RPCs
- `EarlyAdopterRouteGuideStub`, which can be used by clients to invoke RouteGuide RPCs
- functions for application use - functions for application use
- `early_adopter_create_RouteGuide_server`, which creates a gRPC server given an `EarlyAdopterRouteGuideServicer` object - `beta_create_RouteGuide_server`, which creates a gRPC server given a `BetaRouteGuideServicer` object
- `early_adopter_create_RouteGuide_stub`, which can be used by clients to create a stub object - `beta_create_RouteGuide_stub`, which can be used by clients to create a stub object
<a name="server"></a> <a name="server"></a>
## Creating the server ## Creating the server
@ -119,11 +118,11 @@ You can find the example `RouteGuide` server in [route_guide_server.py](route_gu
### Implementing RouteGuide ### Implementing RouteGuide
`route_guide_server.py` has a `RouteGuideServicer` class that implements the generated interface `route_guide_pb2.EarlyAdopterRouteGuideServicer`: `route_guide_server.py` has a `RouteGuideServicer` class that implements the generated interface `route_guide_pb2.BetaRouteGuideServicer`:
```python ```python
# RouteGuideServicer provides an implementation of the methods of the RouteGuide service. # RouteGuideServicer provides an implementation of the methods of the RouteGuide service.
class RouteGuideServicer(route_guide_pb2.EarlyAdopterRouteGuideServicer): class RouteGuideServicer(route_guide_pb2.BetaRouteGuideServicer):
``` ```
`RouteGuideServicer` implements all the `RouteGuide` service methods. `RouteGuideServicer` implements all the `RouteGuide` service methods.
@ -141,7 +140,7 @@ Let's look at the simplest type first, `GetFeature`, which just gets a `Point` f
return feature return feature
``` ```
The method is passed a `route_guide_pb2.Point` request for the RPC, and an `RpcContext` object that provides RPC-specific information such as timeout limits. It returns a `route_guide_pb2.Feature` response. The method is passed a `route_guide_pb2.Point` request for the RPC, and a `ServicerContext` object that provides RPC-specific information such as timeout limits. It returns a `route_guide_pb2.Feature` response.
#### Response-streaming RPC #### Response-streaming RPC
@ -212,8 +211,8 @@ Once you have implemented all the `RouteGuide` methods, the next step is to star
```python ```python
def serve(): def serve():
server = route_guide_pb2.early_adopter_create_RouteGuide_server( server = route_guide_pb2.beta_create_RouteGuide_server(RouteGuideServicer())
RouteGuideServicer(), 50051, None, None) server.add_insecure_port('[::]:50051')
server.start() server.start()
``` ```
@ -228,17 +227,14 @@ You can see the complete example client code in [route_guide_client.py](route_gu
To call service methods, we first need to create a *stub*. To call service methods, we first need to create a *stub*.
We use the `early_adopter_create_RouteGuide_stub` function of the `route_guide_pb2` module, generated from our .proto. We use the `beta_create_RouteGuide_stub` function of the `route_guide_pb2` module, generated from our .proto.
```python ```python
stub = RouteGuide::Stub.new('localhost', 50051) channel = implementations.insecure_channel('localhost', 50051)
stub = beta_create_RouteGuide_stub(channel)
``` ```
The returned object implements all the methods defined by the `EarlyAdopterRouteGuideStub` interface, and is also a [context manager](https://docs.python.org/2/library/stdtypes.html#typecontextmanager). All RPCs invoked on the stub must be invoked within the stub's context, so it is common for stubs to be created and used with a [with statement](https://docs.python.org/2/reference/compound_stmts.html#the-with-statement): The returned object implements all the methods defined by the `BetaRouteGuideStub` interface.
```python
with route_guide_pb2.early_adopter_create_RouteGuide_stub('localhost', 50051) as stub:
```
### Calling service methods ### Calling service methods
@ -255,7 +251,7 @@ feature = stub.GetFeature(point, timeout_in_seconds)
An asynchronous call to `GetFeature` is similar, but like calling a local method asynchronously in a thread pool: An asynchronous call to `GetFeature` is similar, but like calling a local method asynchronously in a thread pool:
```python ```python
feature_future = stub.GetFeature.async(point, timeout_in_seconds) feature_future = stub.GetFeature.future(point, timeout_in_seconds)
feature = feature_future.result() feature = feature_future.result()
``` ```
@ -276,7 +272,7 @@ route_summary = stub.RecordRoute(point_sequence, timeout_in_seconds)
``` ```
```python ```python
route_summary_future = stub.RecordRoute.async(point_sequence, timeout_in_seconds) route_summary_future = stub.RecordRoute.future(point_sequence, timeout_in_seconds)
route_summary = route_summary_future.result() route_summary = route_summary_future.result()
``` ```

@ -32,6 +32,8 @@
import random import random
import time import time
from grpc.beta import implementations
import route_guide_pb2 import route_guide_pb2
import route_guide_resources import route_guide_resources
@ -115,15 +117,16 @@ def guide_route_chat(stub):
def run(): def run():
with route_guide_pb2.early_adopter_create_RouteGuide_stub('localhost', 50051) as stub: channel = implementations.insecure_channel('localhost', 50051)
print "-------------- GetFeature --------------" stub = route_guide_pb2.beta_create_RouteGuide_stub(channel)
guide_get_feature(stub) print "-------------- GetFeature --------------"
print "-------------- ListFeatures --------------" guide_get_feature(stub)
guide_list_features(stub) print "-------------- ListFeatures --------------"
print "-------------- RecordRoute --------------" guide_list_features(stub)
guide_record_route(stub) print "-------------- RecordRoute --------------"
print "-------------- RouteChat --------------" guide_record_route(stub)
guide_route_chat(stub) print "-------------- RouteChat --------------"
guide_route_chat(stub)
if __name__ == '__main__': if __name__ == '__main__':

@ -1,8 +1,6 @@
# Generated by the protocol buffer compiler. DO NOT EDIT! # Generated by the protocol buffer compiler. DO NOT EDIT!
# source: route_guide.proto # source: route_guide.proto
import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message from google.protobuf import message as _message
from google.protobuf import reflection as _reflection from google.protobuf import reflection as _reflection
@ -17,8 +15,9 @@ _sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor.FileDescriptor( DESCRIPTOR = _descriptor.FileDescriptor(
name='route_guide.proto', name='route_guide.proto',
package='', package='routeguide',
serialized_pb=_b('\n\x11route_guide.proto\",\n\x05Point\x12\x10\n\x08latitude\x18\x01 \x01(\x05\x12\x11\n\tlongitude\x18\x02 \x01(\x05\"3\n\tRectangle\x12\x12\n\x02lo\x18\x01 \x01(\x0b\x32\x06.Point\x12\x12\n\x02hi\x18\x02 \x01(\x0b\x32\x06.Point\"1\n\x07\x46\x65\x61ture\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x18\n\x08location\x18\x02 \x01(\x0b\x32\x06.Point\"6\n\tRouteNote\x12\x18\n\x08location\x18\x01 \x01(\x0b\x32\x06.Point\x12\x0f\n\x07message\x18\x02 \x01(\t\"b\n\x0cRouteSummary\x12\x13\n\x0bpoint_count\x18\x01 \x01(\x05\x12\x15\n\rfeature_count\x18\x02 \x01(\x05\x12\x10\n\x08\x64istance\x18\x03 \x01(\x05\x12\x14\n\x0c\x65lapsed_time\x18\x04 \x01(\x05\x32\xad\x01\n\nRouteGuide\x12 \n\nGetFeature\x12\x06.Point\x1a\x08.Feature\"\x00\x12(\n\x0cListFeatures\x12\n.Rectangle\x1a\x08.Feature\"\x00\x30\x01\x12(\n\x0bRecordRoute\x12\x06.Point\x1a\r.RouteSummary\"\x00(\x01\x12)\n\tRouteChat\x12\n.RouteNote\x1a\n.RouteNote\"\x00(\x01\x30\x01') syntax='proto3',
serialized_pb=b'\n\x11route_guide.proto\x12\nrouteguide\",\n\x05Point\x12\x10\n\x08latitude\x18\x01 \x01(\x05\x12\x11\n\tlongitude\x18\x02 \x01(\x05\"I\n\tRectangle\x12\x1d\n\x02lo\x18\x01 \x01(\x0b\x32\x11.routeguide.Point\x12\x1d\n\x02hi\x18\x02 \x01(\x0b\x32\x11.routeguide.Point\"<\n\x07\x46\x65\x61ture\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x08location\x18\x02 \x01(\x0b\x32\x11.routeguide.Point\"A\n\tRouteNote\x12#\n\x08location\x18\x01 \x01(\x0b\x32\x11.routeguide.Point\x12\x0f\n\x07message\x18\x02 \x01(\t\"b\n\x0cRouteSummary\x12\x13\n\x0bpoint_count\x18\x01 \x01(\x05\x12\x15\n\rfeature_count\x18\x02 \x01(\x05\x12\x10\n\x08\x64istance\x18\x03 \x01(\x05\x12\x14\n\x0c\x65lapsed_time\x18\x04 \x01(\x05\x32\x85\x02\n\nRouteGuide\x12\x36\n\nGetFeature\x12\x11.routeguide.Point\x1a\x13.routeguide.Feature\"\x00\x12>\n\x0cListFeatures\x12\x15.routeguide.Rectangle\x1a\x13.routeguide.Feature\"\x00\x30\x01\x12>\n\x0bRecordRoute\x12\x11.routeguide.Point\x1a\x18.routeguide.RouteSummary\"\x00(\x01\x12?\n\tRouteChat\x12\x15.routeguide.RouteNote\x1a\x15.routeguide.RouteNote\"\x00(\x01\x30\x01\x42\x0f\n\x07\x65x.grpc\xa2\x02\x03RTGb\x06proto3'
) )
_sym_db.RegisterFileDescriptor(DESCRIPTOR) _sym_db.RegisterFileDescriptor(DESCRIPTOR)
@ -27,20 +26,20 @@ _sym_db.RegisterFileDescriptor(DESCRIPTOR)
_POINT = _descriptor.Descriptor( _POINT = _descriptor.Descriptor(
name='Point', name='Point',
full_name='Point', full_name='routeguide.Point',
filename=None, filename=None,
file=DESCRIPTOR, file=DESCRIPTOR,
containing_type=None, containing_type=None,
fields=[ fields=[
_descriptor.FieldDescriptor( _descriptor.FieldDescriptor(
name='latitude', full_name='Point.latitude', index=0, name='latitude', full_name='routeguide.Point.latitude', index=0,
number=1, type=5, cpp_type=1, label=1, number=1, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0, has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None, message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None, is_extension=False, extension_scope=None,
options=None), options=None),
_descriptor.FieldDescriptor( _descriptor.FieldDescriptor(
name='longitude', full_name='Point.longitude', index=1, name='longitude', full_name='routeguide.Point.longitude', index=1,
number=2, type=5, cpp_type=1, label=1, number=2, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0, has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None, message_type=None, enum_type=None, containing_type=None,
@ -54,30 +53,31 @@ _POINT = _descriptor.Descriptor(
], ],
options=None, options=None,
is_extendable=False, is_extendable=False,
syntax='proto3',
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=21, serialized_start=33,
serialized_end=65, serialized_end=77,
) )
_RECTANGLE = _descriptor.Descriptor( _RECTANGLE = _descriptor.Descriptor(
name='Rectangle', name='Rectangle',
full_name='Rectangle', full_name='routeguide.Rectangle',
filename=None, filename=None,
file=DESCRIPTOR, file=DESCRIPTOR,
containing_type=None, containing_type=None,
fields=[ fields=[
_descriptor.FieldDescriptor( _descriptor.FieldDescriptor(
name='lo', full_name='Rectangle.lo', index=0, name='lo', full_name='routeguide.Rectangle.lo', index=0,
number=1, type=11, cpp_type=10, label=1, number=1, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None, has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None, message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None, is_extension=False, extension_scope=None,
options=None), options=None),
_descriptor.FieldDescriptor( _descriptor.FieldDescriptor(
name='hi', full_name='Rectangle.hi', index=1, name='hi', full_name='routeguide.Rectangle.hi', index=1,
number=2, type=11, cpp_type=10, label=1, number=2, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None, has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None, message_type=None, enum_type=None, containing_type=None,
@ -91,30 +91,31 @@ _RECTANGLE = _descriptor.Descriptor(
], ],
options=None, options=None,
is_extendable=False, is_extendable=False,
syntax='proto3',
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=67, serialized_start=79,
serialized_end=118, serialized_end=152,
) )
_FEATURE = _descriptor.Descriptor( _FEATURE = _descriptor.Descriptor(
name='Feature', name='Feature',
full_name='Feature', full_name='routeguide.Feature',
filename=None, filename=None,
file=DESCRIPTOR, file=DESCRIPTOR,
containing_type=None, containing_type=None,
fields=[ fields=[
_descriptor.FieldDescriptor( _descriptor.FieldDescriptor(
name='name', full_name='Feature.name', index=0, name='name', full_name='routeguide.Feature.name', index=0,
number=1, type=9, cpp_type=9, label=1, number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'), has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None, message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None, is_extension=False, extension_scope=None,
options=None), options=None),
_descriptor.FieldDescriptor( _descriptor.FieldDescriptor(
name='location', full_name='Feature.location', index=1, name='location', full_name='routeguide.Feature.location', index=1,
number=2, type=11, cpp_type=10, label=1, number=2, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None, has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None, message_type=None, enum_type=None, containing_type=None,
@ -128,32 +129,33 @@ _FEATURE = _descriptor.Descriptor(
], ],
options=None, options=None,
is_extendable=False, is_extendable=False,
syntax='proto3',
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=120, serialized_start=154,
serialized_end=169, serialized_end=214,
) )
_ROUTENOTE = _descriptor.Descriptor( _ROUTENOTE = _descriptor.Descriptor(
name='RouteNote', name='RouteNote',
full_name='RouteNote', full_name='routeguide.RouteNote',
filename=None, filename=None,
file=DESCRIPTOR, file=DESCRIPTOR,
containing_type=None, containing_type=None,
fields=[ fields=[
_descriptor.FieldDescriptor( _descriptor.FieldDescriptor(
name='location', full_name='RouteNote.location', index=0, name='location', full_name='routeguide.RouteNote.location', index=0,
number=1, type=11, cpp_type=10, label=1, number=1, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None, has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None, message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None, is_extension=False, extension_scope=None,
options=None), options=None),
_descriptor.FieldDescriptor( _descriptor.FieldDescriptor(
name='message', full_name='RouteNote.message', index=1, name='message', full_name='routeguide.RouteNote.message', index=1,
number=2, type=9, cpp_type=9, label=1, number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'), has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None, message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None, is_extension=False, extension_scope=None,
options=None), options=None),
@ -165,44 +167,45 @@ _ROUTENOTE = _descriptor.Descriptor(
], ],
options=None, options=None,
is_extendable=False, is_extendable=False,
syntax='proto3',
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=171, serialized_start=216,
serialized_end=225, serialized_end=281,
) )
_ROUTESUMMARY = _descriptor.Descriptor( _ROUTESUMMARY = _descriptor.Descriptor(
name='RouteSummary', name='RouteSummary',
full_name='RouteSummary', full_name='routeguide.RouteSummary',
filename=None, filename=None,
file=DESCRIPTOR, file=DESCRIPTOR,
containing_type=None, containing_type=None,
fields=[ fields=[
_descriptor.FieldDescriptor( _descriptor.FieldDescriptor(
name='point_count', full_name='RouteSummary.point_count', index=0, name='point_count', full_name='routeguide.RouteSummary.point_count', index=0,
number=1, type=5, cpp_type=1, label=1, number=1, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0, has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None, message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None, is_extension=False, extension_scope=None,
options=None), options=None),
_descriptor.FieldDescriptor( _descriptor.FieldDescriptor(
name='feature_count', full_name='RouteSummary.feature_count', index=1, name='feature_count', full_name='routeguide.RouteSummary.feature_count', index=1,
number=2, type=5, cpp_type=1, label=1, number=2, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0, has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None, message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None, is_extension=False, extension_scope=None,
options=None), options=None),
_descriptor.FieldDescriptor( _descriptor.FieldDescriptor(
name='distance', full_name='RouteSummary.distance', index=2, name='distance', full_name='routeguide.RouteSummary.distance', index=2,
number=3, type=5, cpp_type=1, label=1, number=3, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0, has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None, message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None, is_extension=False, extension_scope=None,
options=None), options=None),
_descriptor.FieldDescriptor( _descriptor.FieldDescriptor(
name='elapsed_time', full_name='RouteSummary.elapsed_time', index=3, name='elapsed_time', full_name='routeguide.RouteSummary.elapsed_time', index=3,
number=4, type=5, cpp_type=1, label=1, number=4, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0, has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None, message_type=None, enum_type=None, containing_type=None,
@ -216,11 +219,12 @@ _ROUTESUMMARY = _descriptor.Descriptor(
], ],
options=None, options=None,
is_extendable=False, is_extendable=False,
syntax='proto3',
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=227, serialized_start=283,
serialized_end=325, serialized_end=381,
) )
_RECTANGLE.fields_by_name['lo'].message_type = _POINT _RECTANGLE.fields_by_name['lo'].message_type = _POINT
@ -236,58 +240,61 @@ DESCRIPTOR.message_types_by_name['RouteSummary'] = _ROUTESUMMARY
Point = _reflection.GeneratedProtocolMessageType('Point', (_message.Message,), dict( Point = _reflection.GeneratedProtocolMessageType('Point', (_message.Message,), dict(
DESCRIPTOR = _POINT, DESCRIPTOR = _POINT,
__module__ = 'route_guide_pb2' __module__ = 'route_guide_pb2'
# @@protoc_insertion_point(class_scope:Point) # @@protoc_insertion_point(class_scope:routeguide.Point)
)) ))
_sym_db.RegisterMessage(Point) _sym_db.RegisterMessage(Point)
Rectangle = _reflection.GeneratedProtocolMessageType('Rectangle', (_message.Message,), dict( Rectangle = _reflection.GeneratedProtocolMessageType('Rectangle', (_message.Message,), dict(
DESCRIPTOR = _RECTANGLE, DESCRIPTOR = _RECTANGLE,
__module__ = 'route_guide_pb2' __module__ = 'route_guide_pb2'
# @@protoc_insertion_point(class_scope:Rectangle) # @@protoc_insertion_point(class_scope:routeguide.Rectangle)
)) ))
_sym_db.RegisterMessage(Rectangle) _sym_db.RegisterMessage(Rectangle)
Feature = _reflection.GeneratedProtocolMessageType('Feature', (_message.Message,), dict( Feature = _reflection.GeneratedProtocolMessageType('Feature', (_message.Message,), dict(
DESCRIPTOR = _FEATURE, DESCRIPTOR = _FEATURE,
__module__ = 'route_guide_pb2' __module__ = 'route_guide_pb2'
# @@protoc_insertion_point(class_scope:Feature) # @@protoc_insertion_point(class_scope:routeguide.Feature)
)) ))
_sym_db.RegisterMessage(Feature) _sym_db.RegisterMessage(Feature)
RouteNote = _reflection.GeneratedProtocolMessageType('RouteNote', (_message.Message,), dict( RouteNote = _reflection.GeneratedProtocolMessageType('RouteNote', (_message.Message,), dict(
DESCRIPTOR = _ROUTENOTE, DESCRIPTOR = _ROUTENOTE,
__module__ = 'route_guide_pb2' __module__ = 'route_guide_pb2'
# @@protoc_insertion_point(class_scope:RouteNote) # @@protoc_insertion_point(class_scope:routeguide.RouteNote)
)) ))
_sym_db.RegisterMessage(RouteNote) _sym_db.RegisterMessage(RouteNote)
RouteSummary = _reflection.GeneratedProtocolMessageType('RouteSummary', (_message.Message,), dict( RouteSummary = _reflection.GeneratedProtocolMessageType('RouteSummary', (_message.Message,), dict(
DESCRIPTOR = _ROUTESUMMARY, DESCRIPTOR = _ROUTESUMMARY,
__module__ = 'route_guide_pb2' __module__ = 'route_guide_pb2'
# @@protoc_insertion_point(class_scope:RouteSummary) # @@protoc_insertion_point(class_scope:routeguide.RouteSummary)
)) ))
_sym_db.RegisterMessage(RouteSummary) _sym_db.RegisterMessage(RouteSummary)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), b'\n\007ex.grpc\242\002\003RTG')
import abc import abc
from grpc._adapter import fore from grpc.beta import implementations as beta_implementations
from grpc._adapter import rear from grpc.early_adopter import implementations as early_adopter_implementations
from grpc.framework.assembly import implementations from grpc.framework.alpha import utilities as alpha_utilities
from grpc.framework.assembly import utilities from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities
class EarlyAdopterRouteGuideServicer(object): class EarlyAdopterRouteGuideServicer(object):
"""<fill me in later!>""" """<fill me in later!>"""
__metaclass__ = abc.ABCMeta __metaclass__ = abc.ABCMeta
@abc.abstractmethod @abc.abstractmethod
def GetFeature(self, request): def GetFeature(self, request, context):
raise NotImplementedError() raise NotImplementedError()
@abc.abstractmethod @abc.abstractmethod
def ListFeatures(self, request): def ListFeatures(self, request, context):
raise NotImplementedError() raise NotImplementedError()
@abc.abstractmethod @abc.abstractmethod
def RecordRoute(self, request_iterator): def RecordRoute(self, request_iterator, context):
raise NotImplementedError() raise NotImplementedError()
@abc.abstractmethod @abc.abstractmethod
def RouteChat(self, request_iterator): def RouteChat(self, request_iterator, context):
raise NotImplementedError() raise NotImplementedError()
class EarlyAdopterRouteGuideServer(object): class EarlyAdopterRouteGuideServer(object):
"""<fill me in later!>""" """<fill me in later!>"""
@ -317,54 +324,158 @@ class EarlyAdopterRouteGuideStub(object):
def RouteChat(self, request_iterator): def RouteChat(self, request_iterator):
raise NotImplementedError() raise NotImplementedError()
RouteChat.async = None RouteChat.async = None
def early_adopter_create_RouteGuide_server(servicer, port, root_certificates, key_chain_pairs): def early_adopter_create_RouteGuide_server(servicer, port, private_key=None, certificate_chain=None):
method_implementations = { import route_guide_pb2
"GetFeature": utilities.unary_unary_inline(servicer.GetFeature), import route_guide_pb2
"ListFeatures": utilities.unary_stream_inline(servicer.ListFeatures), import route_guide_pb2
"RecordRoute": utilities.stream_unary_inline(servicer.RecordRoute), import route_guide_pb2
"RouteChat": utilities.stream_stream_inline(servicer.RouteChat), import route_guide_pb2
import route_guide_pb2
import route_guide_pb2
import route_guide_pb2
method_service_descriptions = {
"GetFeature": alpha_utilities.unary_unary_service_description(
servicer.GetFeature,
route_guide_pb2.Point.FromString,
route_guide_pb2.Feature.SerializeToString,
),
"ListFeatures": alpha_utilities.unary_stream_service_description(
servicer.ListFeatures,
route_guide_pb2.Rectangle.FromString,
route_guide_pb2.Feature.SerializeToString,
),
"RecordRoute": alpha_utilities.stream_unary_service_description(
servicer.RecordRoute,
route_guide_pb2.Point.FromString,
route_guide_pb2.RouteSummary.SerializeToString,
),
"RouteChat": alpha_utilities.stream_stream_service_description(
servicer.RouteChat,
route_guide_pb2.RouteNote.FromString,
route_guide_pb2.RouteNote.SerializeToString,
),
}
return early_adopter_implementations.server("routeguide.RouteGuide", method_service_descriptions, port, private_key=private_key, certificate_chain=certificate_chain)
def early_adopter_create_RouteGuide_stub(host, port, metadata_transformer=None, secure=False, root_certificates=None, private_key=None, certificate_chain=None, server_host_override=None):
import route_guide_pb2
import route_guide_pb2
import route_guide_pb2
import route_guide_pb2
import route_guide_pb2
import route_guide_pb2
import route_guide_pb2
import route_guide_pb2
method_invocation_descriptions = {
"GetFeature": alpha_utilities.unary_unary_invocation_description(
route_guide_pb2.Point.SerializeToString,
route_guide_pb2.Feature.FromString,
),
"ListFeatures": alpha_utilities.unary_stream_invocation_description(
route_guide_pb2.Rectangle.SerializeToString,
route_guide_pb2.Feature.FromString,
),
"RecordRoute": alpha_utilities.stream_unary_invocation_description(
route_guide_pb2.Point.SerializeToString,
route_guide_pb2.RouteSummary.FromString,
),
"RouteChat": alpha_utilities.stream_stream_invocation_description(
route_guide_pb2.RouteNote.SerializeToString,
route_guide_pb2.RouteNote.FromString,
),
} }
return early_adopter_implementations.stub("routeguide.RouteGuide", method_invocation_descriptions, host, port, metadata_transformer=metadata_transformer, secure=secure, root_certificates=root_certificates, private_key=private_key, certificate_chain=certificate_chain, server_host_override=server_host_override)
class BetaRouteGuideServicer(object):
"""<fill me in later!>"""
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def GetFeature(self, request, context):
raise NotImplementedError()
@abc.abstractmethod
def ListFeatures(self, request, context):
raise NotImplementedError()
@abc.abstractmethod
def RecordRoute(self, request_iterator, context):
raise NotImplementedError()
@abc.abstractmethod
def RouteChat(self, request_iterator, context):
raise NotImplementedError()
class BetaRouteGuideStub(object):
"""The interface to which stubs will conform."""
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def GetFeature(self, request, timeout):
raise NotImplementedError()
GetFeature.future = None
@abc.abstractmethod
def ListFeatures(self, request, timeout):
raise NotImplementedError()
@abc.abstractmethod
def RecordRoute(self, request_iterator, timeout):
raise NotImplementedError()
RecordRoute.future = None
@abc.abstractmethod
def RouteChat(self, request_iterator, timeout):
raise NotImplementedError()
def beta_create_RouteGuide_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None):
import route_guide_pb2
import route_guide_pb2
import route_guide_pb2
import route_guide_pb2
import route_guide_pb2 import route_guide_pb2
import route_guide_pb2 import route_guide_pb2
import route_guide_pb2 import route_guide_pb2
import route_guide_pb2 import route_guide_pb2
request_deserializers = { request_deserializers = {
"GetFeature": route_guide_pb2.Point.FromString, ('routeguide.RouteGuide', 'GetFeature'): route_guide_pb2.Point.FromString,
"ListFeatures": route_guide_pb2.Rectangle.FromString, ('routeguide.RouteGuide', 'ListFeatures'): route_guide_pb2.Rectangle.FromString,
"RecordRoute": route_guide_pb2.Point.FromString, ('routeguide.RouteGuide', 'RecordRoute'): route_guide_pb2.Point.FromString,
"RouteChat": route_guide_pb2.RouteNote.FromString, ('routeguide.RouteGuide', 'RouteChat'): route_guide_pb2.RouteNote.FromString,
} }
response_serializers = { response_serializers = {
"GetFeature": lambda x: x.SerializeToString(), ('routeguide.RouteGuide', 'GetFeature'): route_guide_pb2.Feature.SerializeToString,
"ListFeatures": lambda x: x.SerializeToString(), ('routeguide.RouteGuide', 'ListFeatures'): route_guide_pb2.Feature.SerializeToString,
"RecordRoute": lambda x: x.SerializeToString(), ('routeguide.RouteGuide', 'RecordRoute'): route_guide_pb2.RouteSummary.SerializeToString,
"RouteChat": lambda x: x.SerializeToString(), ('routeguide.RouteGuide', 'RouteChat'): route_guide_pb2.RouteNote.SerializeToString,
} }
link = fore.activated_fore_link(port, request_deserializers, response_serializers, root_certificates, key_chain_pairs)
return implementations.assemble_service(method_implementations, link)
def early_adopter_create_RouteGuide_stub(host, port):
method_implementations = { method_implementations = {
"GetFeature": utilities.unary_unary_inline(None), ('routeguide.RouteGuide', 'GetFeature'): face_utilities.unary_unary_inline(servicer.GetFeature),
"ListFeatures": utilities.unary_stream_inline(None), ('routeguide.RouteGuide', 'ListFeatures'): face_utilities.unary_stream_inline(servicer.ListFeatures),
"RecordRoute": utilities.stream_unary_inline(None), ('routeguide.RouteGuide', 'RecordRoute'): face_utilities.stream_unary_inline(servicer.RecordRoute),
"RouteChat": utilities.stream_stream_inline(None), ('routeguide.RouteGuide', 'RouteChat'): face_utilities.stream_stream_inline(servicer.RouteChat),
} }
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_RouteGuide_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None):
import route_guide_pb2 import route_guide_pb2
import route_guide_pb2 import route_guide_pb2
import route_guide_pb2 import route_guide_pb2
import route_guide_pb2 import route_guide_pb2
import route_guide_pb2
import route_guide_pb2
import route_guide_pb2
import route_guide_pb2
request_serializers = {
('routeguide.RouteGuide', 'GetFeature'): route_guide_pb2.Point.SerializeToString,
('routeguide.RouteGuide', 'ListFeatures'): route_guide_pb2.Rectangle.SerializeToString,
('routeguide.RouteGuide', 'RecordRoute'): route_guide_pb2.Point.SerializeToString,
('routeguide.RouteGuide', 'RouteChat'): route_guide_pb2.RouteNote.SerializeToString,
}
response_deserializers = { response_deserializers = {
"GetFeature": route_guide_pb2.Feature.FromString, ('routeguide.RouteGuide', 'GetFeature'): route_guide_pb2.Feature.FromString,
"ListFeatures": route_guide_pb2.Feature.FromString, ('routeguide.RouteGuide', 'ListFeatures'): route_guide_pb2.Feature.FromString,
"RecordRoute": route_guide_pb2.RouteSummary.FromString, ('routeguide.RouteGuide', 'RecordRoute'): route_guide_pb2.RouteSummary.FromString,
"RouteChat": route_guide_pb2.RouteNote.FromString, ('routeguide.RouteGuide', 'RouteChat'): route_guide_pb2.RouteNote.FromString,
} }
request_serializers = { cardinalities = {
"GetFeature": lambda x: x.SerializeToString(), 'GetFeature': cardinality.Cardinality.UNARY_UNARY,
"ListFeatures": lambda x: x.SerializeToString(), 'ListFeatures': cardinality.Cardinality.UNARY_STREAM,
"RecordRoute": lambda x: x.SerializeToString(), 'RecordRoute': cardinality.Cardinality.STREAM_UNARY,
"RouteChat": lambda x: x.SerializeToString(), 'RouteChat': cardinality.Cardinality.STREAM_STREAM,
} }
link = rear.activated_rear_link(host, port, request_serializers, response_deserializers) 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 implementations.assemble_dynamic_inline_stub(method_implementations, link) return beta_implementations.dynamic_stub(channel, 'routeguide.RouteGuide', cardinalities, options=stub_options)
# @@protoc_insertion_point(module_scope) # @@protoc_insertion_point(module_scope)

@ -65,7 +65,7 @@ def get_distance(start, end):
R = 6371000; # metres R = 6371000; # metres
return R * c; return R * c;
class RouteGuideServicer(route_guide_pb2.EarlyAdopterRouteGuideServicer): class RouteGuideServicer(route_guide_pb2.BetaRouteGuideServicer):
"""Provides methods that implement functionality of route guide server.""" """Provides methods that implement functionality of route guide server."""
def __init__(self): def __init__(self):
@ -121,8 +121,8 @@ class RouteGuideServicer(route_guide_pb2.EarlyAdopterRouteGuideServicer):
def serve(): def serve():
server = route_guide_pb2.early_adopter_create_RouteGuide_server( server = route_guide_pb2.beta_create_RouteGuide_server(RouteGuideServicer())
RouteGuideServicer(), 50051, None, None) server.add_insecure_port('[::]:50051')
server.start() server.start()
try: try:
while True: while True:

@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash
# Runs the protoc with gRPC plugin to generate protocol messages and gRPC stubs. # Runs the protoc with gRPC plugin to generate protocol messages and gRPC stubs.
protoc -I . --python_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_python_plugin` route_guide.proto protoc -I ../../protos --python_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_python_plugin` ../../protos/route_guide.proto

@ -36,17 +36,17 @@
Pod::Spec.new do |s| Pod::Spec.new do |s|
s.name = 'gRPC' s.name = 'gRPC'
s.version = '0.7.0' s.version = '0.11.0'
s.summary = 'gRPC client library for iOS/OSX' s.summary = 'gRPC client library for iOS/OSX'
s.homepage = 'http://www.grpc.io' s.homepage = 'http://www.grpc.io'
s.license = 'New BSD' s.license = 'New BSD'
s.authors = { 'The gRPC contributors' => 'grpc-packages@google.com' } s.authors = { 'The gRPC contributors' => 'grpc-packages@google.com' }
# s.source = { :git => 'https://github.com/grpc/grpc.git', # s.source = { :git => 'https://github.com/grpc/grpc.git',
# :tag => 'release-0_10_0-objectivec-0.6.0' } # :tag => 'release-0_11_0-objectivec-0.11.0' }
s.ios.deployment_target = '6.0' s.ios.deployment_target = '7.1'
s.osx.deployment_target = '10.8' s.osx.deployment_target = '10.9'
s.requires_arc = true s.requires_arc = true
objc_dir = 'src/objective-c' objc_dir = 'src/objective-c'
@ -585,6 +585,6 @@ Pod::Spec.new do |s|
ss.dependency 'gRPC/GRPCClient' ss.dependency 'gRPC/GRPCClient'
ss.dependency 'gRPC/RxLibrary' ss.dependency 'gRPC/RxLibrary'
ss.dependency 'Protobuf', '~> 3.0.0-alpha-3' ss.dependency 'Protobuf', '~> 3.0.0-alpha-4'
end end
end end

@ -64,7 +64,7 @@ class SphinxDocumentation(setuptools.Command):
import sphinx.apidoc import sphinx.apidoc
metadata = self.distribution.metadata metadata = self.distribution.metadata
src_dir = os.path.join( src_dir = os.path.join(
os.getcwd(), self.distribution.package_dir['grpc']) os.getcwd(), self.distribution.package_dir[''], 'grpc')
sys.path.append(src_dir) sys.path.append(src_dir)
sphinx.apidoc.main([ sphinx.apidoc.main([
'', '--force', '--full', '-H', metadata.name, '-A', metadata.author, '', '--force', '--full', '-H', metadata.name, '-A', metadata.author,

@ -86,13 +86,13 @@ class Server(interfaces.Server):
return self._grpc_link.add_port( return self._grpc_link.add_port(
address, server_credentials._intermediary_low_credentials) # pylint: disable=protected-access address, server_credentials._intermediary_low_credentials) # pylint: disable=protected-access
def start(self): def _start(self):
self._grpc_link.join_link(self._end_link) self._grpc_link.join_link(self._end_link)
self._end_link.join_link(self._grpc_link) self._end_link.join_link(self._grpc_link)
self._grpc_link.start() self._grpc_link.start()
self._end_link.start() self._end_link.start()
def stop(self, grace): def _stop(self, grace):
stop_event = threading.Event() stop_event = threading.Event()
if 0 < grace: if 0 < grace:
disassembly_thread = threading.Thread( disassembly_thread = threading.Thread(
@ -105,6 +105,20 @@ class Server(interfaces.Server):
_disassemble(self._grpc_link, self._end_link, self._pool, stop_event, 0) _disassemble(self._grpc_link, self._end_link, self._pool, stop_event, 0)
return stop_event return stop_event
def start(self):
self._start()
def stop(self, grace):
return self._stop(grace)
def __enter__(self):
self._start()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self._stop(0).wait()
return False
def server( def server(
implementations, multi_implementation, request_deserializers, implementations, multi_implementation, request_deserializers,

@ -49,6 +49,12 @@ class _AutoIntermediary(object):
def __getattr__(self, attr): def __getattr__(self, attr):
return getattr(self._delegate, attr) return getattr(self._delegate, attr)
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
return False
def __del__(self): def __del__(self):
self._on_deletion() self._on_deletion()

@ -1,3 +1,2 @@
enum34==1.0.4 enum34==1.0.4
futures==2.2.0 futures==2.2.0
protobuf==3.0.0a3

@ -104,7 +104,7 @@ _COMMAND_CLASS = {
setuptools.setup( setuptools.setup(
name='grpcio', name='grpcio',
version='0.11.0', version='0.11.0b0',
ext_modules=_EXTENSION_MODULES, ext_modules=_EXTENSION_MODULES,
packages=list(_PACKAGES), packages=list(_PACKAGES),
package_dir=_PACKAGE_DIRECTORIES, package_dir=_PACKAGE_DIRECTORIES,

@ -51,7 +51,7 @@ _PACKAGE_DIRECTORIES = {
} }
_INSTALL_REQUIRES = ( _INSTALL_REQUIRES = (
'grpcio>=0.10.0a0', 'grpcio>=0.11.0b0',
) )
_SETUP_REQUIRES = _INSTALL_REQUIRES _SETUP_REQUIRES = _INSTALL_REQUIRES
@ -63,7 +63,7 @@ _COMMAND_CLASS = {
setuptools.setup( setuptools.setup(
name='grpcio_health_checking', name='grpcio_health_checking',
version='0.10.0a0', version='0.11.0b0',
packages=list(_PACKAGES), packages=list(_PACKAGES),
package_dir=_PACKAGE_DIRECTORIES, package_dir=_PACKAGE_DIRECTORIES,
install_requires=_INSTALL_REQUIRES, install_requires=_INSTALL_REQUIRES,

@ -1,5 +1,6 @@
grpcio>=0.11.0b0
oauth2client>=1.4.7
protobuf>=3.0.0a3
pytest>=2.6 pytest>=2.6
pytest-cov>=2.0 pytest-cov>=2.0
pytest-xdist>=1.11 pytest-xdist>=1.11
oauth2client>=1.4.7
grpcio>=0.10.0a0

@ -71,7 +71,7 @@ _SETUP_REQUIRES = (
_INSTALL_REQUIRES = ( _INSTALL_REQUIRES = (
'oauth2client>=1.4.7', 'oauth2client>=1.4.7',
'grpcio>=0.10.0a0', 'grpcio>=0.11.0b0',
) )
_COMMAND_CLASS = { _COMMAND_CLASS = {
@ -80,7 +80,7 @@ _COMMAND_CLASS = {
setuptools.setup( setuptools.setup(
name='grpcio_test', name='grpcio_test',
version='0.10.0a0', version='0.11.0b0',
packages=_PACKAGES, packages=_PACKAGES,
package_dir=_PACKAGE_DIRECTORIES, package_dir=_PACKAGE_DIRECTORIES,
package_data=_PACKAGE_DATA, package_data=_PACKAGE_DATA,

@ -81,7 +81,7 @@ if args.submit:
assert args.doc_branch assert args.doc_branch
github_user = args.gh_user github_user = args.gh_user
github_repository_owner = ( github_repository_owner = (
args.gh_repo_owner if args.gh_repo_owner else gh_user) args.gh_repo_owner if args.gh_repo_owner else args.gh_user)
# Create a temporary directory out of tree, checkout gh-pages from the # Create a temporary directory out of tree, checkout gh-pages from the
# specified repository, edit it, and push it. It's up to the user to then go # specified repository, edit it, and push it. It's up to the user to then go
# onto GitHub and make a PR against grpc/grpc:gh-pages. # onto GitHub and make a PR against grpc/grpc:gh-pages.

Loading…
Cancel
Save