from SALOME_NamingServicePy import *
from SALOME_ComponentPy import *
import SALOME_PyNode
+from collections import defaultdict
from SALOME_utilities import *
from Utils_Identity import getShortHostName
from launchConfigureParser import verbose
from KernelBasis import VerbosityActivated
+class ScriptExecInfo:
+ @classmethod
+ def GetRepresentationOfTimeDelta(cls,endTime, startTime):
+ if endTime is None and startTime is None:
+ return "not measured"
+ td = endTime - startTime
+ import time
+ ts_of_td = time.gmtime(td.total_seconds())
+ return "{}.{:06d}".format(time.strftime("%H:%M:%S",ts_of_td),td.microseconds)
+
+ def __init__(self):
+ self._start_exec_time = None
+ self._end_exec_time = None
+ self._start_input_time = None
+ self._end_input_time = None
+ self._start_output_time = None
+ self._end_output_time = None
+
+ @property
+ def startInputTime(self):
+ return self._start_input_time
+
+ @startInputTime.setter
+ def startInputTime(self,value):
+ self._start_input_time = value
+
+ @property
+ def endInputTime(self):
+ return self._end_input_time
+
+ @endInputTime.setter
+ def endInputTime(self,value):
+ self._end_input_time = value
+
+ @property
+ def startExecTime(self):
+ return self._start_exec_time
+
+ @startExecTime.setter
+ def startExecTime(self,value):
+ self._start_exec_time = value
+
+ @property
+ def endExecTime(self):
+ return self._end_exec_time
+
+ @endExecTime.setter
+ def endExecTime(self,value):
+ self._end_exec_time = value
+
+ @property
+ def startOutputTime(self):
+ return self._start_output_time
+
+ @startOutputTime.setter
+ def startOutputTime(self,value):
+ self._start_output_time = value
+
+ @property
+ def endOutputTime(self):
+ return self._end_output_time
+
+ @endOutputTime.setter
+ def endOutputTime(self,value):
+ self._end_output_time = value
+
+ @property
+ def execTimeStr(self):
+ return ScriptExecInfo.GetRepresentationOfTimeDelta(self.endExecTime,self.startExecTime)
+
+ @property
+ def inputTimeStr(self):
+ return ScriptExecInfo.GetRepresentationOfTimeDelta(self.endInputTime,self.startInputTime)
+
+ def __str__(self):
+ return """start exec time = {self.startExecTime}
+end exec time = {self.endExecTime}
+exec_time = {self.execTimeStr}
+input unpickling and ev load from disk time = {self.inputTimeStr}
+output serialization and ev write to disk time = {self.inputTimeStr}""".format(**locals())
+
+class ScriptInfo:
+ def __init__(self, nodeName):
+ self._node_name = nodeName
+ self._code = ""
+ self._exec = defaultdict(ScriptExecInfo)
+
+ @property
+ def execs(self):
+ return self._exec
+
+ @property
+ def nodeName(self):
+ return self._node_name
+
+ @property
+ def code(self):
+ return self._code
+
+ @code.setter
+ def code(self,value):
+ self._code = value
+
+ def __str__(self):
+ return """code = {self.code}\nexecs = {self.execs}""".format(**locals())
+
+ def __repr__(self):
+ return """ScriptInfo \"{self.nodeName}\"""".format(**locals())
+
#=============================================================================
#define an implementation of the container interface for embedding in Container implemented in C++
self._orb = CORBA.ORB_init(argv, CORBA.ORB_ID)
self._poa = self._orb.resolve_initial_references("RootPOA")
self._containerName = containerName
+ self._dbg_info = []
if verbose(): print("SALOME_Container.SALOME_Container_i : _containerName ",self._containerName)
self._container = self._orb.string_to_object(containerIORStr)
return 1,"".join(l)
def create_pyscriptnode(self,nodeName,code):
+ import pickle
try:
+ self._dbg_info.append( ScriptInfo(nodeName) )
node=SALOME_PyNode.PyScriptNode_i(nodeName,code,self._poa,self)
+ node.setIDInContainer(len(self._dbg_info)-1)
+ self.addInfoOnLevel1(node.getIDInContainer(),"code",code)
id_o = self._poa.activate_object(node)
comp_o = self._poa.id_to_reference(id_o)
comp_iors = self._orb.object_to_string(comp_o)
if VerbosityActivated():
import salome_utils
salome_utils.positionVerbosityOfLoggerRegardingState()
+
+ def addInfoOnLevel1(self, pos, key, value):
+ setattr(self._dbg_info[pos],key,value)
+
+ def addInfoOnLevel2(self, pos0, pos1, key, value):
+ setattr(self._dbg_info[pos0].execs[pos1],key,value)
+
+ def addTimeInfoOnLevel2(self, pos0, pos1, key):
+ from datetime import datetime
+ self.addInfoOnLevel2(pos0, pos1, key,datetime.now())
+
+ def getAllInfo(self):
+ import pickle
+ return pickle.dumps( self._dbg_info )