-#! /usr/bin/env python
# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2023 CEA, EDF, OPEN CASCADE
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
self.cnt=1
def Register(self):
+ #print("Register called : %d"%self.cnt)
self.cnt+=1
def UnRegister(self):
+ #print("UnRegister called : %d"%self.cnt)
self.cnt-=1
if self.cnt <= 0:
oid=self.poa.servant_to_id(self)
print("WARNING SALOME::GenericObj::Destroy() function is obsolete! Use UnRegister() instead.")
self.UnRegister()
+ def __del__(self):
+ #print("Destuctor called")
+ pass
+
class PyNode_i (Engines__POA.PyNode,Generic):
"""The implementation of the PyNode CORBA IDL"""
def __init__(self, nodeName,code,poa,my_container):
self.context["my_container"] = self.my_container
exec(ccode, self.context)
+ def getContainer(self):
+ return self.my_container
+
+ def getCode(self):
+ return self.code
+
+ def getName(self):
+ return self.nodeName
+
def defineNewCustomVar(self,varName,valueOfVar):
self.context[varName] = pickle.loads(valueOfVar)
pass
try:
ccode=compile(code,self.nodeName,'exec')
exec(ccode, self.context)
- except:
+ except Exception:
raise SALOME.SALOME_Exception(SALOME.ExceptionStruct(SALOME.BAD_PARAM,"","PyScriptNode (%s) : code to be executed \"%s\"" %(self.nodeName,code),0))
def execute(self,funcName,argsin):
argsout=func(*argsin,**kws)
argsout=pickle.dumps(argsout,-1)
return argsout
- except:
+ except Exception:
exc_typ,exc_val,exc_fr=sys.exc_info()
l=traceback.format_exception(exc_typ,exc_val,exc_fr)
raise SALOME.SALOME_Exception(SALOME.ExceptionStruct(SALOME.BAD_PARAM,"".join(l),"PyNode: %s, function: %s" % (self.nodeName,funcName),0))
+class SenderByte_i(SALOME__POA.SenderByte,Generic):
+ def __init__(self,poa,bytesToSend):
+ Generic.__init__(self,poa)
+ self.bytesToSend = bytesToSend
+
+ def getSize(self):
+ return len(self.bytesToSend)
+
+ def sendPart(self,n1,n2):
+ return self.bytesToSend[n1:n2]
+
+class SeqByteReceiver:
+ CHUNK_SIZE = 2000000000
+ def __init__(self,sender):
+ self._obj = sender
+ def __del__(self):
+ self._obj.UnRegister()
+ pass
+ def data(self):
+ size = self._obj.getSize()
+ if size <= SeqByteReceiver.CHUNK_SIZE:
+ return self.fetchOneShot( size )
+ else:
+ return self.fetchByChunks( size )
+ def fetchOneShot(self,size):
+ return self._obj.sendPart(0,size)
+ def fetchByChunks(self,size):
+ data_for_split_case = bytes(0)
+ EFF_CHUNK_SIZE = SeqByteReceiver.CHUNK_SIZE // 8
+ iStart = 0 ; iEnd = EFF_CHUNK_SIZE
+ while iStart!=iEnd and iEnd <= size:
+ part = self._obj.sendPart(iStart,iEnd)
+ data_for_split_case = bytes(0).join( [data_for_split_case,part] )
+ iStart = iEnd; iEnd = min(iStart + EFF_CHUNK_SIZE,size)
+ return data_for_split_case
+
class PyScriptNode_i (Engines__POA.PyScriptNode,Generic):
"""The implementation of the PyScriptNode CORBA IDL that executes a script"""
def __init__(self, nodeName,code,poa,my_container):
self.context={}
self.context["my_container"] = self.my_container
+ def getContainer(self):
+ return self.my_container
+
+ def getCode(self):
+ return self.code
+
+ def getName(self):
+ return self.nodeName
+
def defineNewCustomVar(self,varName,valueOfVar):
self.context[varName] = pickle.loads(valueOfVar)
pass
try:
ccode=compile(code,self.nodeName,'exec')
exec(ccode, self.context)
- except:
+ except Exception:
raise SALOME.SALOME_Exception(SALOME.ExceptionStruct(SALOME.BAD_PARAM,"","PyScriptNode (%s) : code to be executed \"%s\"" %(self.nodeName,code),0))
def assignNewCompiledCode(self,codeStr):
try:
self.code=codeStr
self.ccode=compile(codeStr,self.nodeName,'exec')
- except:
+ except Exception:
raise SALOME.SALOME_Exception(SALOME.ExceptionStruct(SALOME.BAD_PARAM,"","PyScriptNode.assignNewCompiledCode (%s) : code to be executed \"%s\"" %(self.nodeName,codeStr),0))
def execute(self,outargsname,argsin):
argsout.append(self.context[arg])
argsout=pickle.dumps(tuple(argsout),-1)
return argsout
- except:
+ except Exception:
exc_typ,exc_val,exc_fr=sys.exc_info()
l=traceback.format_exception(exc_typ,exc_val,exc_fr)
raise SALOME.SALOME_Exception(SALOME.ExceptionStruct(SALOME.BAD_PARAM,"".join(l),"PyScriptNode: %s, outargsname: %s" % (self.nodeName,outargsname),0))
+
+ def executeFirst(self,argsin):
+ """ Same than first part of self.execute to reduce memory peak."""
+ import time
+ try:
+ data = None
+ if True: # to force call of SeqByteReceiver's destructor
+ argsInPy = SeqByteReceiver( argsin )
+ data = argsInPy.data()
+ _,kws=pickle.loads(data)
+ self.context.update(kws)
+ except Exception:
+ exc_typ,exc_val,exc_fr=sys.exc_info()
+ l=traceback.format_exception(exc_typ,exc_val,exc_fr)
+ raise SALOME.SALOME_Exception(SALOME.ExceptionStruct(SALOME.BAD_PARAM,"".join(l),"PyScriptNode:First %s" % (self.nodeName),0))
+
+ def executeSecond(self,outargsname):
+ """ Same than second part of self.execute to reduce memory peak."""
+ try:
+ exec(self.ccode, self.context)
+ argsout=[]
+ for arg in outargsname:
+ if arg not in self.context:
+ raise KeyError("There is no variable %s in context" % arg)
+ argsout.append(self.context[arg])
+ argsout=pickle.dumps(tuple(argsout),-1)
+ ret = SenderByte_i( self.poa,argsout )
+ id_o = self.poa.activate_object(ret)
+ retObj = self.poa.id_to_reference(id_o)
+ return retObj._narrow( SALOME.SenderByte )
+ except Exception:
+ exc_typ,exc_val,exc_fr=sys.exc_info()
+ l=traceback.format_exception(exc_typ,exc_val,exc_fr)
+ raise SALOME.SALOME_Exception(SALOME.ExceptionStruct(SALOME.BAD_PARAM,"".join(l),"PyScriptNode:Second %s, outargsname: %s" % (self.nodeName,outargsname),0))
+
+ def getValueOfVarInContext(self,varName):
+ try:
+ return pickle.dumps(self.context[varName],-1)
+ except Exception:
+ exc_typ,exc_val,exc_fr=sys.exc_info()
+ l=traceback.format_exception(exc_typ,exc_val,exc_fr)
+ raise SALOME.SALOME_Exception(SALOME.ExceptionStruct(SALOME.BAD_PARAM,"".join(l),"PyScriptNode: %s" %self.nodeName,0))
+ pass
+
+ def assignVarInContext(self, varName, value):
+ try:
+ self.context[varName][0] = pickle.loads(value)
+ except Exception:
+ exc_typ,exc_val,exc_fr=sys.exc_info()
+ l=traceback.format_exception(exc_typ,exc_val,exc_fr)
+ raise SALOME.SALOME_Exception(SALOME.ExceptionStruct(SALOME.BAD_PARAM,"".join(l),"PyScriptNode: %s" %self.nodeName,0))
+ pass
+
+ def callMethodOnVarInContext(self, varName, methodName, args):
+ try:
+ return pickle.dumps( getattr(self.context[varName][0],methodName)(*pickle.loads(args)),-1 )
+ except Exception:
+ exc_typ,exc_val,exc_fr=sys.exc_info()
+ l=traceback.format_exception(exc_typ,exc_val,exc_fr)
+ raise SALOME.SALOME_Exception(SALOME.ExceptionStruct(SALOME.BAD_PARAM,"".join(l),"PyScriptNode: %s" %self.nodeName,0))
+ pass