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"):
10 self.python_path = python_path or []
11 Component.__init__(self, name, services, impl="PY", kind=kind)
14 Component.validate(self)
16 if self.kind not in kinds:
17 raise Invalid("kind must be one of %s" % kinds)
19 def makeCompo(self, gen):
20 pyfile = "%s.py" % self.name
21 if self.kind == "lib":
22 return {"Makefile.am":pycompoMakefile.substitute(module=gen.module.name,
23 component=self.name), pyfile:self.makepy(gen)}
24 if self.kind == "exe":
25 return {"Makefile.am":pycompoEXEMakefile.substitute(module=gen.module.name,
26 component=self.name), self.name+".exe":self.makepyexe(gen),
29 def makepy(self, gen):
33 for serv in self.services:
34 defs.append(serv.defs)
37 for name, typ in serv.inport:
40 pyparams.append(" %s=cPickle.loads(%s)" %(name, name))
41 inparams = ",".join(params)
42 convertinparams = '\n'.join(pyparams)
46 for name, typ in serv.outport:
49 pyparams.append(" %s=cPickle.dumps(%s,-1)" %(name, name))
50 outparams = ",".join(params)
51 convertoutparams = '\n'.join(pyparams)
52 service = pyService.substitute(component=self.name, service=serv.name, inparams=inparams,
53 outparams=outparams, body=serv.body,
54 convertinparams=convertinparams,
55 convertoutparams=convertoutparams)
57 for name, typ, dep in serv.instream:
58 streams.append(' calcium.create_calcium_port(self.proxy,"%s","%s","IN","%s")'% (name, typ, dep))
59 instream = "\n".join(streams)
61 for name, typ, dep in serv.outstream:
62 streams.append(' calcium.create_calcium_port(self.proxy,"%s","%s","OUT","%s")'% (name, typ, dep))
63 outstream = "\n".join(streams)
65 init = pyinitService.substitute(component=self.name, service=serv.name,
66 instream=instream, outstream=outstream)
67 services.append(service)
70 python_path = ",".join([repr(p) for p in self.python_path])
71 return pyCompo.substitute(component=self.name, module=gen.module.name,
72 servicesdef="\n".join(defs), servicesimpl="\n".join(services),
73 initservice='\n'.join(inits),
74 python_path=python_path)
76 def makepyexe(self, gen):
80 for serv in self.services:
81 defs.append(serv.defs)
84 for name, typ in serv.inport:
87 pyparams.append(" %s=cPickle.loads(%s)" %(name, name))
88 inparams = ",".join(params)
89 convertinparams = '\n'.join(pyparams)
93 for name, typ in serv.outport:
96 pyparams.append(" %s=cPickle.dumps(%s,-1)" %(name, name))
97 outparams = ",".join(params)
98 convertoutparams = '\n'.join(pyparams)
99 service = pyService.substitute(component=self.name, service=serv.name,
100 inparams=inparams, outparams=outparams,
102 convertinparams=convertinparams,
103 convertoutparams=convertoutparams,
106 for name, typ, dep in serv.instream:
107 streams.append(' calcium.create_calcium_port(self.proxy,"%s","%s","IN","%s")'% (name, typ, dep))
108 instream = "\n".join(streams)
110 for name, typ, dep in serv.outstream:
111 streams.append(' calcium.create_calcium_port(self.proxy,"%s","%s","OUT","%s")'% (name, typ, dep))
112 outstream = "\n".join(streams)
114 init = pyinitService.substitute(component=self.name, service=serv.name,
115 instream=instream, outstream=outstream)
116 services.append(service)
119 python_path = ",".join([repr(p) for p in self.python_path])
120 return pyCompoEXE.substitute(component=self.name, module=gen.module.name,
121 servicesdef="\n".join(defs),
122 servicesimpl="\n".join(services),
123 initservice='\n'.join(inits),
124 python_path=python_path)