updated open_xml functionality, grpc open_xml can optionally start now, added opened files to grpc get_sessions
This commit is contained in:
parent
0a689a3e96
commit
f39b7e9f96
6 changed files with 29 additions and 16 deletions
|
@ -880,17 +880,18 @@ class CoreGrpcClient(object):
|
||||||
with open(file_path, "w") as xml_file:
|
with open(file_path, "w") as xml_file:
|
||||||
xml_file.write(response.data)
|
xml_file.write(response.data)
|
||||||
|
|
||||||
def open_xml(self, file_path):
|
def open_xml(self, file_path, start=False):
|
||||||
"""
|
"""
|
||||||
Load a local scenario XML file to open as a new session.
|
Load a local scenario XML file to open as a new session.
|
||||||
|
|
||||||
:param str file_path: path of scenario XML file
|
:param str file_path: path of scenario XML file
|
||||||
|
:param bool start: True to start session, False otherwise
|
||||||
:return: response with opened session id
|
:return: response with opened session id
|
||||||
:rtype: core_pb2.OpenXmlResponse
|
:rtype: core_pb2.OpenXmlResponse
|
||||||
"""
|
"""
|
||||||
with open(file_path, "r") as xml_file:
|
with open(file_path, "r") as xml_file:
|
||||||
data = xml_file.read()
|
data = xml_file.read()
|
||||||
request = core_pb2.OpenXmlRequest(data=data)
|
request = core_pb2.OpenXmlRequest(data=data, start=start, file=file_path)
|
||||||
return self.stub.OpenXml(request)
|
return self.stub.OpenXml(request)
|
||||||
|
|
||||||
def emane_link(self, session_id, nem_one, nem_two, linked):
|
def emane_link(self, session_id, nem_one, nem_two, linked):
|
||||||
|
|
|
@ -305,7 +305,10 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
||||||
for session_id in self.coreemu.sessions:
|
for session_id in self.coreemu.sessions:
|
||||||
session = self.coreemu.sessions[session_id]
|
session = self.coreemu.sessions[session_id]
|
||||||
session_summary = core_pb2.SessionSummary(
|
session_summary = core_pb2.SessionSummary(
|
||||||
id=session_id, state=session.state, nodes=session.get_node_count()
|
id=session_id,
|
||||||
|
state=session.state,
|
||||||
|
nodes=session.get_node_count(),
|
||||||
|
file=session.file_name,
|
||||||
)
|
)
|
||||||
sessions.append(session_summary)
|
sessions.append(session_summary)
|
||||||
return core_pb2.GetSessionsResponse(sessions=sessions)
|
return core_pb2.GetSessionsResponse(sessions=sessions)
|
||||||
|
@ -1555,19 +1558,22 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
||||||
"""
|
"""
|
||||||
logging.debug("open xml: %s", request)
|
logging.debug("open xml: %s", request)
|
||||||
session = self.coreemu.create_session()
|
session = self.coreemu.create_session()
|
||||||
session.set_state(EventTypes.CONFIGURATION_STATE)
|
|
||||||
|
|
||||||
_, temp_path = tempfile.mkstemp()
|
temp = tempfile.NamedTemporaryFile(delete=False)
|
||||||
with open(temp_path, "w") as xml_file:
|
temp.write(request.data.encode("utf-8"))
|
||||||
xml_file.write(request.data)
|
temp.close()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
session.open_xml(temp_path, start=True)
|
session.open_xml(temp.name, request.start)
|
||||||
|
session.name = os.path.basename(request.file)
|
||||||
|
session.file_name = request.file
|
||||||
return core_pb2.OpenXmlResponse(session_id=session.id, result=True)
|
return core_pb2.OpenXmlResponse(session_id=session.id, result=True)
|
||||||
except IOError:
|
except IOError:
|
||||||
logging.exception("error opening session file")
|
logging.exception("error opening session file")
|
||||||
self.coreemu.delete_session(session.id)
|
self.coreemu.delete_session(session.id)
|
||||||
context.abort(grpc.StatusCode.INVALID_ARGUMENT, "invalid xml file")
|
context.abort(grpc.StatusCode.INVALID_ARGUMENT, "invalid xml file")
|
||||||
|
finally:
|
||||||
|
os.unlink(temp.name)
|
||||||
|
|
||||||
def GetInterfaces(self, request, context):
|
def GetInterfaces(self, request, context):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -944,7 +944,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
||||||
if os.path.splitext(file_name)[1].lower() == ".xml":
|
if os.path.splitext(file_name)[1].lower() == ".xml":
|
||||||
session = self.coreemu.create_session(master=False)
|
session = self.coreemu.create_session(master=False)
|
||||||
try:
|
try:
|
||||||
session.open_xml(file_name, start=True)
|
session.open_xml(file_name)
|
||||||
except Exception:
|
except Exception:
|
||||||
self.coreemu.delete_session(session.id)
|
self.coreemu.delete_session(session.id)
|
||||||
raise
|
raise
|
||||||
|
|
|
@ -820,19 +820,24 @@ class Session(object):
|
||||||
:param bool start: instantiate session if true, false otherwise
|
:param bool start: instantiate session if true, false otherwise
|
||||||
:return: nothing
|
:return: nothing
|
||||||
"""
|
"""
|
||||||
|
logging.info("opening xml: %s", file_name)
|
||||||
|
|
||||||
# clear out existing session
|
# clear out existing session
|
||||||
self.clear()
|
self.clear()
|
||||||
|
|
||||||
if start:
|
if start:
|
||||||
self.set_state(EventTypes.CONFIGURATION_STATE)
|
state = EventTypes.CONFIGURATION_STATE
|
||||||
|
else:
|
||||||
|
state = EventTypes.DEFINITION_STATE
|
||||||
|
self.set_state(state)
|
||||||
|
self.name = os.path.basename(file_name)
|
||||||
|
self.file_name = file_name
|
||||||
|
|
||||||
# write out xml file
|
# write out xml file
|
||||||
CoreXmlReader(self).read(file_name)
|
CoreXmlReader(self).read(file_name)
|
||||||
|
|
||||||
# start session if needed
|
# start session if needed
|
||||||
if start:
|
if start:
|
||||||
self.name = os.path.basename(file_name)
|
|
||||||
self.file_name = file_name
|
|
||||||
self.instantiate()
|
self.instantiate()
|
||||||
|
|
||||||
def save_xml(self, file_name):
|
def save_xml(self, file_name):
|
||||||
|
|
|
@ -304,10 +304,8 @@ class CoreXmlWriter(object):
|
||||||
default_options = self.session.options.default_values()
|
default_options = self.session.options.default_values()
|
||||||
for _id in default_options:
|
for _id in default_options:
|
||||||
default_value = default_options[_id]
|
default_value = default_options[_id]
|
||||||
# TODO: should we just save the current config regardless, since it may change?
|
value = options_config.get(_id, default_value)
|
||||||
value = options_config[_id]
|
add_configuration(option_elements, _id, value)
|
||||||
if value != default_value:
|
|
||||||
add_configuration(option_elements, _id, value)
|
|
||||||
|
|
||||||
if option_elements.getchildren():
|
if option_elements.getchildren():
|
||||||
self.scenario.append(option_elements)
|
self.scenario.append(option_elements)
|
||||||
|
|
|
@ -631,6 +631,8 @@ message SaveXmlResponse {
|
||||||
|
|
||||||
message OpenXmlRequest {
|
message OpenXmlRequest {
|
||||||
string data = 1;
|
string data = 1;
|
||||||
|
bool start = 2;
|
||||||
|
string file = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message OpenXmlResponse {
|
message OpenXmlResponse {
|
||||||
|
@ -798,6 +800,7 @@ message SessionSummary {
|
||||||
int32 id = 1;
|
int32 id = 1;
|
||||||
SessionState.Enum state = 2;
|
SessionState.Enum state = 2;
|
||||||
int32 nodes = 3;
|
int32 nodes = 3;
|
||||||
|
string file = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Node {
|
message Node {
|
||||||
|
|
Loading…
Reference in a new issue