grpc for Humans. grpc reflection support client
Project description
grpc requests
GRPC for Humans
from grpc_requests import Client
client = Client.get_by_endpoint("localhost:50051")
assert client.service_names == ["helloworld.Greeter"]
request_data = {"name": 'sinsky'}
result = client.request("helloworld.Greeter", "SayHello", request_data)
print(result) # {"message":"Hellow sinsky"}
Feature
- connect server using reflection
- no need stub class request grpc
- support all unary & stream method
- support tls
install
pip install grpc_requests
use it like RPC!
from grpc_requests import Client
client = Client.get_by_endpoint("localhost:50051")
# if you want connect tls
# client = Client.get_by_endpoint("localhost:443",ssl=True)
assert client.service_names == ["helloworld.Greeter",'grpc.health.v1.Health']
health = client.service('grpc.health.v1.Health')
assert health.method_names == ('Check', 'Watch')
result = health.Check()
assert result == {'status': 'SERVING'}
greeter = client.service("helloworld.Greeter")
request_data = {"name": 'sinsky'}
result = greeter.SayHello(request_data)
results = greeter.SayHelloGroup(request_data)
requests_data = [{"name": 'sinsky'}]
result = greeter.HelloEveryone(requests_data)
results = greeter.SayHelloOneByOne(requests_data)
example
request unary-unary
service = "helloworld.Greeter"
unary_unary_method = 'SayHello'
request_data = {"name": 'sinsky'} # You Don't Need Stub!
result = client.request(service, unary_unary_method, request_data)
assert dict == type(result) # result is dict Type!!! not Stub Object!
assert {"message":"Hellow sinsky"} == result
# or
request_data = {"name": 'sinsky'} # You Don't Need Stub!
# any one know this method is unary-unary
result = client.unary_unary(service, unary_unary_method, request_data)
assert dict == type(result) # result is dict Type!!! not Stub Object!
assert {"message":"Hellow sinsky"} == result
request unary-stream
unary_stream_method = 'SayHelloGroup'
unary_stream_results = client.request(service, unary_unary_method, request_data)
assert all([dict == type(result) for result in unary_stream_results])
assert [{"message":"Hellow sinsky"}] == list(unary_stream_results)
# or
unary_stream_results = client.unary_stream(service, unary_unary_method, request_data)
assert all([dict == type(result) for result in unary_stream_results])
assert [{"message":"Hellow sinsky"}] == list(unary_stream_results)
request stream-unary
requests_data = [request_data] # iterator
stream_unary_method = 'HelloEveryone'
result_stream_unary = client.request(service, stream_unary_method, requests_data)
assert dict == type(result) # result is dict Type!!! not Stub Object!
# or
result_stream_unary = client.stream_unary(service, stream_unary_method, requests_data)
assert dict == type(result) # result is dict Type!!! not Stub Object!
request stream-stream
requests_data = [request_data] # iterator
stream_stream_method = 'SayHelloOneByOne'
result = client.request(service, stream_stream_method,requests_data )
assert all([dict == type(result) for result in unary_stream_results])
# or
result = client.stream_stream(service, stream_stream_method,requests_data )
assert all([dict == type(result) for result in unary_stream_results])
using Stub
from grpc_requests import Client
from helloworld_pb2 import HelloRequest
port = '50051'
host = "localhost"
endpoint = f"{host}:{port}"
client = Client.get_by_endpoint(endpoint)
print(client.service_names) # ["helloworld.Greeter"]
service = "helloworld.Greeter"
method = 'SayHello'
result = client.unary_unary(service, method, HelloRequest(name='sinsky'))
print(type(result)) # result is dict Type!!! not Stub Object!
print(result) # {"message":"Hellow sinsky"}
# or get raw response data
result = client.unary_unary(service, method, HelloRequest(name='sinsky'),raw_output=True)
print(type(result)) # HelloReply stub class
Road map
- support no reflection server
Relation Project
- homi : micro grpc framework like flask. easy to use!
Change Logs
- 0.0.1
- sync proto using reflection
- auto convert request(response) from(to) dict
- support unary-unary
- 0.0.2
- support all method type
- add request test case
- 0.0.3
- Feature
- dynamic request method
- service client
- Feature
- 0.0.5
- Change
- response filed get orginal proto field(before returend lowerCamelCase)
- Change
- 0.0.6
- Feature
- support tls connect
- Feature
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
grpc_requests-0.0.6.tar.gz
(11.4 kB
view hashes)
Built Distribution
Close
Hashes for grpc_requests-0.0.6-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 33085085fd13d5ba451c7aa10276f3af8f2c7c8ff08fd20ebd46fd441bfc4f49 |
|
MD5 | a5107e3b4c1141d571a4a73e8f5db47a |
|
BLAKE2b-256 | 857f9a762bcd729e8438eb4dd55bb14584a5975f8a0ed5255cc41cc6d059ac73 |