-# Copyright (C) 2009-2014 EDF R&D
+# Copyright (C) 2009-2023 EDF
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
"""
import re, os, sys
-from gener import Component, Invalid, makedirs
+from module_generator.gener import Component, Invalid, makedirs
-from pyth_tmpl import pyinitEXEService, pyinitCEXEService, pyinitService
-import aster_tmpl
-from aster_tmpl import asterCEXEService, asterEXEService
-from aster_tmpl import asterService, asterEXECompo, asterCEXECompo, asterCompo
-from aster_tmpl import comm, make_etude, cexe, exeaster
-from aster_tmpl import container, component
+from module_generator.pyth_tmpl import pyinitEXEService, pyinitCEXEService, pyinitService
+from module_generator import aster_tmpl
+from module_generator.aster_tmpl import asterCEXEService, asterEXEService
+from module_generator.aster_tmpl import asterService, asterEXECompo, asterCEXECompo, asterCompo
+from module_generator.aster_tmpl import comm, make_etude, cexe, exeaster
+from module_generator.aster_tmpl import container, component
+from module_generator.aster_tmpl import cmake_src_compo_aster, cmake_src_compo_aster_lib
class ASTERComponent(Component):
"""
exe_path="launch.sh",
argv=["-memjeveux","4"])
"""
- def __init__(self, name, services=None, libs="", rlibs="", aster_dir="",
- python_path=None, argv=None, kind="lib", exe_path=None):
+ def __init__(self, name, services=None, libs="", rlibs="", aster_dir="",
+ python_path=None, argv=None, kind="lib", exe_path=None, aster_version_type="stable"):
"""initialise component attributes"""
self.aster_dir = aster_dir
self.python_path = python_path or []
self.argv = argv or []
self.exe_path = exe_path
+ self.aster_version_type = aster_version_type
Component.__init__(self, name, services, impl="ASTER", libs=libs,
rlibs=rlibs, kind=kind)
if not found:
serv.inport.insert(0, ("jdc", "string"))
+ def libraryName(self):
+ """ Name of the target library
+ No library for an aster component
+ """
+ return ""
+
def getAsterPythonPath(self):
"""Directory of aster python modules
"""
return aster_python_path
- def getConfig(self, gen):
- """Content of the config.txt file
- """
- path_compo=os.path.join(os.path.abspath(gen.module.prefix),'lib',
- 'python%s.%s' % (sys.version_info[0], sys.version_info[1]),
- 'site-packages','salome','%s_component.py'%self.name)
- conf="""ENV_SH | env | - | $ASTER_VERSION_DIR/share/aster/profile.sh
-BINELE | bin | - | $ASTER_VERSION_DIR/share/aster/elements
-SRCPY | src | - | %s
-ARGPYT | exec | - | %s
-""" % (self.getAsterPythonPath(), path_compo)
-
- return conf
-
def makeCompo(self, gen):
"""drive the generation of SALOME module files and code files
depending on the choosen component kind
#on suppose que les composants ASTER sont homogenes (utilisent meme install)
gen.aster = self.aster_dir
- #get ASTER version
- f = os.path.join(self.aster_dir, self.getAsterPythonPath(), 'Accas', 'properties.py')
- self.version=(0,0,0)
- if os.path.isfile(f):
- mydict = {}
- execfile(f, mydict)
- v,r,p = mydict['version'].split('.')
- self.version=(int(v),int(r),int(p))
-
if self.kind == "lib":
- return {"Makefile.am":gen.makeMakefile(self.getMakefileItems(gen)),
+ f = self.name+".py"
+ return {"CMakeLists.txt":cmake_src_compo_aster_lib.substitute(sources=f),
filename:self.makeaster(gen)}
elif self.kind == "cexe":
fdict=self.makecexepath(gen)
- d= {"Makefile.am":gen.makeMakefile(self.getMakefileItems(gen)),
+ sources = self.name + ".py\n " + self.name + "_container.py"
+ d= {"CMakeLists.txt":cmake_src_compo_aster.substitute(
+ sources=sources,
+ module=gen.module.name,
+ resources=self.name+"_config.txt",
+ scripts=self.name+".exe"),
self.name+".exe":cexe.substitute(compoexe=self.exe_path),
filename:self.makecexeaster(gen)
}
return d
elif self.kind == "exe":
fdict=self.makeexepath(gen)
- d= {"Makefile.am":gen.makeMakefile(self.getMakefileItems(gen)),
+ sources = self.name + "_module.py\n "
+ sources = sources + self.name + "_component.py"
+ d= {"CMakeLists.txt":cmake_src_compo_aster.substitute(
+ sources=sources,
+ module=gen.module.name,
+ resources=self.name+"_config.txt",
+ scripts=self.name+".exe"),
self.name+".exe":exeaster.substitute(compoexe=self.exe_path),
self.name+"_module.py":self.makeexeaster(gen)
}
d.update(fdict)
return d
- def getMakefileItems(self,gen):
- makefileItems={"header":"include $(top_srcdir)/adm_local/make_common_starter.am"}
- if self.kind == "lib":
- makefileItems["salomepython_PYTHON"]=[self.name+".py"]
- elif self.kind == "exe":
- makefileItems["salomepython_PYTHON"]=[self.name+"_module.py",self.name+"_component.py"]
- if self.version < (10,1,2):
- makefileItems["salomepython_PYTHON"].append("E_SUPERV.py")
- makefileItems["dist_salomescript_SCRIPTS"]=[self.name+".exe"]
- makefileItems["salomeres_DATA"]=[self.name+"_config.txt"]
- elif self.kind == "cexe":
- makefileItems["salomepython_PYTHON"]=[self.name+".py",self.name+"_container.py"]
- if self.version < (10,1,2):
- makefileItems["salomepython_PYTHON"].append("E_SUPERV.py")
- makefileItems["dist_salomescript_SCRIPTS"]=[self.name+".exe"]
- makefileItems["salomeres_DATA"]=[self.name+"_config.txt"]
- return makefileItems
-
-
def makeexepath(self, gen):
"""standalone component: generate files for calculation code"""
fdict={}
-
- if self.version < (10,1,2):
- #patch to E_SUPERV.py
- fil = open(os.path.join(self.aster_dir, "bibpyt", "Execution", "E_SUPERV.py"))
- esuperv = fil.read()
- fil.close()
- esuperv = re.sub("def Execute\(self\)", "def Execute(self, params)", esuperv)
- esuperv = re.sub("j=self.JdC", "self.jdc=j=self.JdC", esuperv)
- esuperv = re.sub("\*\*args", "context_ini=params, **args", esuperv)
- esuperv = re.sub("def main\(self\)", "def main(self,params={})", esuperv)
- esuperv = re.sub("return self.Execute\(\)", "return self.Execute(params)", esuperv)
- fdict["E_SUPERV.py"]=esuperv
-
#use a specific main program (modification of config.txt file)
config = ""
path_config = os.path.join(self.aster_dir, "config.txt")
if os.path.exists(path_config) :
- # old aster version - old mechanism kept for compatibility
fil = open(path_config)
config = fil.read()
fil.close()
- config = re.sub(" profile.sh", os.path.join(self.aster_dir, "profile.sh"), config)
- path=os.path.join(os.path.abspath(gen.module.prefix),'lib',
- 'python%s.%s' % (sys.version_info[0], sys.version_info[1]),
- 'site-packages','salome','%s_component.py'%self.name)
- config = re.sub("Execution\/E_SUPERV.py", path, config)
+# config = re.sub(" profile.sh", os.path.join(self.aster_dir, "profile.sh"), config)
+# path=os.path.join(os.path.abspath(gen.module.prefix),'lib',
+# 'python%s.%s' % (sys.version_info[0], sys.version_info[1]),
+# 'site-packages','salome','%s_component.py'%self.name)
+# config = re.sub("Execution\/E_SUPERV.py", path, config)
else :
- # getConfig doesn't work with older versions of aster
- config = self.getConfig(gen)
+ config = "# a completer:%s n'existe pas" % path_config
fdict["%s_config.txt" % self.name] = config
fdict["%s_component.py" % self.name] = component.substitute(component=self.name)
"""specific container: generate files"""
fdict={}
-
- if self.version < (10,1,2):
- #patch to E_SUPERV.py
- fil = open(os.path.join(self.aster_dir, "bibpyt", "Execution", "E_SUPERV.py"))
- esuperv = fil.read()
- fil.close()
- esuperv = re.sub("def Execute\(self\)", "def Execute(self, params)", esuperv)
- esuperv = re.sub("j=self.JdC", "self.jdc=j=self.JdC", esuperv)
- esuperv = re.sub("\*\*args", "context_ini=params, **args", esuperv)
- esuperv = re.sub("def main\(self\)", "def main(self,params={})", esuperv)
- esuperv = re.sub("return self.Execute\(\)", "return self.Execute(params)", esuperv)
- fdict["E_SUPERV.py"]=esuperv
-
- #use a specific main program
- config = ""
- path_config = os.path.join(self.aster_dir, "config.txt")
- if os.path.exists(path_config) :
- # old aster version - old mechanism kept for compatibility
- fil = open(path_config)
- config = fil.read()
- fil.close()
- config = re.sub(" profile.sh", os.path.join(self.aster_dir, "profile.sh"), config)
- path=os.path.join(os.path.abspath(gen.module.prefix),'lib',
- 'python%s.%s' % (sys.version_info[0], sys.version_info[1]),
- 'site-packages','salome','%s_container.py' % self.name)
- config = re.sub("Execution\/E_SUPERV.py", path, config)
- else :
- # getConfig doesn't work with older versions of aster
- config = self.getConfig(gen)
-
fdict["%s_container.py" % self.name] = container
- fdict["%s_config.txt" % self.name] = config
-
return fdict
def getImportESuperv(self):
- importesuperv=""
- if self.version < (10,1,2):
- importesuperv="from E_SUPERV import SUPERV"
- else :
- importesuperv="""sys.path=["%s"]+sys.path
+ importesuperv="""
+VERS="%s"
+import os.path as osp
+from asrun.run import AsRunFactory
+from asrun.config import AsterConfig
+
+run = AsRunFactory()
+path = run.get_version_path(VERS)
+cfg = AsterConfig(osp.join(path, 'config.txt'))
+pypath = cfg['REPPY'][0]
+
+sys.path.insert(0, pypath)
from Execution.E_SUPERV import SUPERV
-""" % self.getAsterPythonPath()
+""" % self.aster_version_type
return importesuperv
if typ=="file":continue #files are not passed through service interface
params.append(name)
if typ == "pyobj":
- datas.append('"%s":cPickle.loads(%s)' % (name, name))
+ datas.append('"%s":pickle.loads(%s)' % (name, name))
else:
datas.append('"%s":%s' % (name, name))
#ajout de l'adresse du composant
if typ=="file":continue #files are not passed through service interface
params.append(name)
if typ == "pyobj":
- datas.append('cPickle.dumps(j.g_context["%s"],-1)'%name)
+ datas.append('pickle.dumps(j.g_context["%s"],-1)'%name)
else:
datas.append('j.g_context["%s"]'%name)
outparams = ",".join(params)
if typ=="file":continue #files are not passed through service interface
params.append(name)
if typ == "pyobj":
- datas.append('"%s":cPickle.loads(%s)' % (name, name))
+ datas.append('"%s":pickle.loads(%s)' % (name, name))
else:
datas.append('"%s":%s' % (name, name))
#ajout de l'adresse du composant
for name, typ in serv.outport:
params.append(name)
if typ == "pyobj":
- datas.append('cPickle.dumps(j.g_context["%s"],-1)'%name)
+ datas.append('pickle.dumps(j.g_context["%s"],-1)'%name)
else:
datas.append('j.g_context["%s"]'%name)
outparams = ",".join(params)
if typ=="file":continue #files are not passed through service interface
params.append(name)
if typ == "pyobj":
- datas.append('"%s":cPickle.loads(%s)' % (name, name))
+ datas.append('"%s":pickle.loads(%s)' % (name, name))
else:
datas.append('"%s":%s' % (name, name))
#ajout de l'adresse du composant
for name, typ in serv.outport:
params.append(name)
if typ == "pyobj":
- datas.append('cPickle.dumps(j.g_context["%s"],-1)'%name)
+ datas.append('pickle.dumps(j.g_context["%s"],-1)'%name)
else:
datas.append('j.g_context["%s"]'%name)
outparams = ",".join(params)