X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FContainer%2FSALOME_PyNode.py;h=64ba692392e743c1618a67e74f55776cff6f05fd;hb=dc4b16b9dd53dd42139fd22ef26556861db58989;hp=2f8418fab82fc6e5542bbeda8755434c9251c68e;hpb=853b75d6629174b13b922ec398e5d423cbc82dd4;p=modules%2Fkernel.git diff --git a/src/Container/SALOME_PyNode.py b/src/Container/SALOME_PyNode.py index 2f8418fab..64ba69239 100644 --- a/src/Container/SALOME_PyNode.py +++ b/src/Container/SALOME_PyNode.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: iso-8859-1 -*- -# Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -24,9 +24,9 @@ # Module : SALOME # $Header$ # -import sys,traceback,string +import sys,traceback import linecache -import cPickle +import pickle import Engines__POA import SALOME__POA import SALOME @@ -47,7 +47,7 @@ class Generic(SALOME__POA.GenericObj): self.poa.deactivate_object(oid) def Destroy(self): - print "WARNING SALOME::GenericObj::Destroy() function is obsolete! Use UnRegister() instead." + print("WARNING SALOME::GenericObj::Destroy() function is obsolete! Use UnRegister() instead.") self.UnRegister() class PyNode_i (Engines__POA.PyNode,Generic): @@ -58,19 +58,31 @@ class PyNode_i (Engines__POA.PyNode,Generic): self.nodeName=nodeName self.code=code self.my_container=my_container._container - linecache.cache[nodeName]=0,None,string.split(code,'\n'),nodeName + linecache.cache[nodeName]=0,None,code.split('\n'),nodeName ccode=compile(code,nodeName,'exec') self.context={} self.context["my_container"] = self.my_container - exec ccode in self.context + exec(ccode, self.context) + + def defineNewCustomVar(self,varName,valueOfVar): + self.context[varName] = pickle.loads(valueOfVar) + pass + + def executeAnotherPieceOfCode(self,code): + """Called for initialization of container lodging self.""" + try: + ccode=compile(code,self.nodeName,'exec') + exec(ccode, self.context) + except: + 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): """Execute the function funcName found in local context with pickled args (argsin)""" try: - argsin,kws=cPickle.loads(argsin) + argsin,kws=pickle.loads(argsin) func=self.context[funcName] argsout=func(*argsin,**kws) - argsout=cPickle.dumps(argsout,-1) + argsout=pickle.dumps(argsout,-1) return argsout except: exc_typ,exc_val,exc_fr=sys.exc_info() @@ -85,31 +97,42 @@ class PyScriptNode_i (Engines__POA.PyScriptNode,Generic): self.nodeName=nodeName self.code=code self.my_container=my_container._container - linecache.cache[nodeName]=0,None,string.split(code,'\n'),nodeName + linecache.cache[nodeName]=0,None,code.split('\n'),nodeName self.ccode=compile(code,nodeName,'exec') self.context={} self.context["my_container"] = self.my_container + def defineNewCustomVar(self,varName,valueOfVar): + self.context[varName] = pickle.loads(valueOfVar) + pass + def executeAnotherPieceOfCode(self,code): """Called for initialization of container lodging self.""" try: ccode=compile(code,self.nodeName,'exec') - exec ccode in self.context + exec(ccode, self.context) except: 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: + 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): """Execute the script stored in attribute ccode with pickled args (argsin)""" try: - argsname,kws=cPickle.loads(argsin) + argsname,kws=pickle.loads(argsin) self.context.update(kws) - exec self.ccode in self.context + exec(self.ccode, self.context) argsout=[] for arg in outargsname: - if not self.context.has_key(arg): + if arg not in self.context: raise KeyError("There is no variable %s in context" % arg) argsout.append(self.context[arg]) - argsout=cPickle.dumps(tuple(argsout),-1) + argsout=pickle.dumps(tuple(argsout),-1) return argsout except: exc_typ,exc_val,exc_fr=sys.exc_info()