core-extra/daemon/core/grpc/client.py

97 lines
2.8 KiB
Python

from __future__ import print_function
import logging
from contextlib import contextmanager
import grpc
import core_pb2
import core_pb2_grpc
def update_proto(obj, **kwargs):
for key in kwargs:
value = kwargs[key]
if value is not None:
logging.info("setting proto key(%s) value(%s)", key, value)
setattr(obj, key, value)
class CoreApiClient(object):
def __init__(self, address="localhost:50051"):
self.address = address
self.stub = None
def create_session(self):
return self.stub.CreateSession(core_pb2.CreateSessionRequest())
def get_sessions(self):
return self.stub.GetSessions(core_pb2.SessionsRequest())
def get_session(self, _id):
request = core_pb2.SessionRequest()
request.id = _id
return self.stub.GetSession(request)
def get_session_options(self, _id):
request = core_pb2.SessionOptionsRequest()
request.id = _id
return self.stub.GetSessionOptions(request)
def get_session_location(self, _id):
request = core_pb2.GetSessionLocationRequest()
request.id = _id
return self.stub.GetSessionLocation(request)
def set_session_location(self, _id, x=None, y=None , z=None, lat=None, lon=None, alt=None, scale=None):
request = core_pb2.SetSessionLocationRequest()
request.id = _id
update_proto(request.position, x=x, y=y, z=z, lat=lat, lon=lon, alt=alt)
update_proto(request, scale=scale)
return self.stub.SetSessionLocation(request)
@contextmanager
def connect(self):
channel = grpc.insecure_channel(self.address)
try:
self.stub = core_pb2_grpc.CoreApiStub(channel)
yield channel
finally:
channel.close()
def main():
client = CoreApiClient()
with client.connect():
# create session
response = client.create_session()
print("created session: %s" % response)
response = client.get_sessions()
print("core client received: %s" % response)
if len(response.sessions) > 0:
session_data = response.sessions[0]
# set session location
response = client.set_session_location(
session_data.id,
x=0, y=0, z=None,
lat=47.57917, lon=-122.13232, alt=2.0,
scale=150000.0
)
print("set location response: %s" % response)
# get session
session = client.get_session(session_data.id)
print(session)
# get options
print(client.get_session_options(session_data.id))
# get location
print(client.get_session_location(session_data.id))
if __name__ == "__main__":
logging.basicConfig()
main()