2 Module that defines PYComponent for SALOME components implemented in Python
4 from gener import Component, Invalid
5 from pyth_tmpl import pyinitService, pyService, pyCompoEXE, pyCompo
6 from pyth_tmpl import pycompoEXEMakefile, pycompoMakefile
8 class PYComponent(Component):
9 def __init__(self, name, services=None, python_path=None, kind="lib",
11 self.python_path = python_path or []
12 Component.__init__(self, name, services, impl="PY", kind=kind,
16 Component.validate(self)
18 if self.kind not in kinds:
19 raise Invalid("kind must be one of %s" % kinds)
21 def makeCompo(self, gen):
22 pyfile = "%s.py" % self.name
23 sources = " ".join(self.sources)
24 if self.kind == "lib":
25 return {"Makefile.am":pycompoMakefile.substitute(module=gen.module.name,
28 pyfile:self.makepy(gen)
30 if self.kind == "exe":
31 return {"Makefile.am":pycompoEXEMakefile.substitute(module=gen.module.name,
34 self.name+".exe":self.makepyexe(gen),
37 def makepy(self, gen):
41 for serv in self.services:
42 defs.append(serv.defs)
45 for name, typ in serv.inport:
48 pyparams.append(" %s=cPickle.loads(%s)" %(name, name))
49 inparams = ",".join(params)
50 convertinparams = '\n'.join(pyparams)
54 for name, typ in serv.outport:
57 pyparams.append(" %s=cPickle.dumps(%s,-1)" %(name, name))
58 outparams = ",".join(params)
59 convertoutparams = '\n'.join(pyparams)
60 service = pyService.substitute(component=self.name, service=serv.name, inparams=inparams,
61 outparams=outparams, body=serv.body,
62 convertinparams=convertinparams,
63 convertoutparams=convertoutparams)
65 for name, typ, dep in serv.instream:
66 streams.append(' calcium.create_calcium_port(self.proxy,"%s","%s","IN","%s")'% (name, typ, dep))
67 instream = "\n".join(streams)
69 for name, typ, dep in serv.outstream:
70 streams.append(' calcium.create_calcium_port(self.proxy,"%s","%s","OUT","%s")'% (name, typ, dep))
71 outstream = "\n".join(streams)
73 init = pyinitService.substitute(component=self.name, service=serv.name,
74 instream=instream, outstream=outstream)
75 services.append(service)
78 python_path = ",".join([repr(p) for p in self.python_path])
79 return pyCompo.substitute(component=self.name, module=gen.module.name,
80 servicesdef="\n".join(defs), servicesimpl="\n".join(services),
81 initservice='\n'.join(inits),
82 python_path=python_path)
84 def makepyexe(self, gen):
88 for serv in self.services:
89 defs.append(serv.defs)
92 for name, typ in serv.inport:
95 pyparams.append(" %s=cPickle.loads(%s)" %(name, name))
96 inparams = ",".join(params)
97 convertinparams = '\n'.join(pyparams)
101 for name, typ in serv.outport:
104 pyparams.append(" %s=cPickle.dumps(%s,-1)" %(name, name))
105 outparams = ",".join(params)
106 convertoutparams = '\n'.join(pyparams)
107 service = pyService.substitute(component=self.name, service=serv.name,
108 inparams=inparams, outparams=outparams,
110 convertinparams=convertinparams,
111 convertoutparams=convertoutparams,
114 for name, typ, dep in serv.instream:
115 streams.append(' calcium.create_calcium_port(self.proxy,"%s","%s","IN","%s")'% (name, typ, dep))
116 instream = "\n".join(streams)
118 for name, typ, dep in serv.outstream:
119 streams.append(' calcium.create_calcium_port(self.proxy,"%s","%s","OUT","%s")'% (name, typ, dep))
120 outstream = "\n".join(streams)
122 init = pyinitService.substitute(component=self.name, service=serv.name,
123 instream=instream, outstream=outstream)
124 services.append(service)
127 python_path = ",".join([repr(p) for p in self.python_path])
128 return pyCompoEXE.substitute(component=self.name, module=gen.module.name,
129 servicesdef="\n".join(defs),
130 servicesimpl="\n".join(services),
131 initservice='\n'.join(inits),
132 python_path=python_path)