]> SALOME platform Git repositories - tools/yacsgen.git/blob - module_generator/pycompo.py
Salome HOME
CCAR: split file __init__.py into several files : templates + implementation specific
[tools/yacsgen.git] / module_generator / pycompo.py
1 """
2   Module that defines PYComponent for SALOME components implemented in Python
3 """
4 from gener import Component, Invalid
5 from pyth_tmpl import pyinitService, pyService, pyCompoEXE, pyCompo
6 from pyth_tmpl import pycompoEXEMakefile, pycompoMakefile
7
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)
12
13   def validate(self):
14     Component.validate(self)
15     kinds = ("lib","exe")
16     if self.kind not in kinds:
17       raise Invalid("kind must be one of %s" % kinds)
18
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),
27               }
28
29   def makepy(self, gen):
30     services = []
31     inits = []
32     defs = []
33     for serv in self.services:
34       defs.append(serv.defs)
35       params = []
36       pyparams = []
37       for name, typ in serv.inport:
38         params.append(name)
39         if typ == "pyobj":
40           pyparams.append("      %s=cPickle.loads(%s)" %(name, name))
41       inparams = ",".join(params)
42       convertinparams = '\n'.join(pyparams)
43
44       params = []
45       pyparams = []
46       for name, typ in serv.outport:
47         params.append(name)
48         if typ == "pyobj":
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)
56       streams = []
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)
60       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)
64
65       init = pyinitService.substitute(component=self.name, service=serv.name,
66                                       instream=instream, outstream=outstream)
67       services.append(service)
68       inits.append(init)
69
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)
75
76   def makepyexe(self, gen):
77     services = []
78     inits = []
79     defs = []
80     for serv in self.services:
81       defs.append(serv.defs)
82       params = []
83       pyparams = []
84       for name, typ in serv.inport:
85         params.append(name)
86         if typ == "pyobj":
87           pyparams.append("      %s=cPickle.loads(%s)" %(name, name))
88       inparams = ",".join(params)
89       convertinparams = '\n'.join(pyparams)
90
91       params = []
92       pyparams = []
93       for name, typ in serv.outport:
94         params.append(name)
95         if typ == "pyobj":
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, 
101                                      body=serv.body, 
102                                      convertinparams=convertinparams,
103                                      convertoutparams=convertoutparams,
104                                     )
105       streams = []
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)
109       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)
113
114       init = pyinitService.substitute(component=self.name, service=serv.name,
115                                       instream=instream, outstream=outstream)
116       services.append(service)
117       inits.append(init)
118
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)
125
126
127