modifications to support optional geo position edits for nodes and to account for geo updates to sdt

This commit is contained in:
Blake Harnden 2020-03-02 10:01:36 -08:00
parent 9535d40b70
commit ff3b20a962
6 changed files with 51 additions and 22 deletions

View file

@ -475,9 +475,10 @@ class CoreGrpcClient:
self,
session_id: int,
node_id: int,
position: core_pb2.Position,
position: core_pb2.Position = None,
icon: str = None,
source: str = None,
geo: core_pb2.Geo = None,
) -> core_pb2.EditNodeResponse:
"""
Edit a node, currently only changes position.
@ -487,6 +488,7 @@ class CoreGrpcClient:
:param position: position to set node to
:param icon: path to icon for gui to use for node
:param source: application source editing node
:param geo: lon,lat,alt location for node
:return: response with result of success or failure
:raises grpc.RpcError: when session or node doesn't exist
"""
@ -496,6 +498,7 @@ class CoreGrpcClient:
position=position,
icon=icon,
source=source,
geo=geo,
)
return self.stub.EditNode(request)

View file

@ -44,7 +44,9 @@ def add_node_data(node_proto: core_pb2.Node) -> Tuple[NodeTypes, int, NodeOption
position = node_proto.position
options.set_position(position.x, position.y)
options.set_location(position.lat, position.lon, position.alt)
if node_proto.HasField("geo"):
geo = node_proto.geo
options.set_location(geo.lat, geo.lon, geo.alt)
return _type, _id, options

View file

@ -688,21 +688,26 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
node = self.get_node(session, request.node_id, context)
options = NodeOptions()
options.icon = request.icon
x = request.position.x
y = request.position.y
options.set_position(x, y)
lat = request.position.lat
lon = request.position.lon
alt = request.position.alt
options.set_location(lat, lon, alt)
if request.HasField("position"):
x = request.position.x
y = request.position.y
options.set_position(x, y)
lat, lon, alt = None, None, None
has_geo = request.HasField("geo")
if has_geo:
lat = request.geo.lat
lon = request.geo.lon
alt = request.geo.alt
options.set_location(lat, lon, alt)
result = True
try:
session.edit_node(node.id, options)
source = None
if request.source:
source = request.source
node_data = node.data(0, source=source)
session.broadcast_node(node_data)
if not has_geo:
node_data = node.data(0, source=source)
session.broadcast_node(node_data)
except CoreError:
result = False
return core_pb2.EditNodeResponse(result=result)