Salome HOME
PN bug
[tools/eficas.git] / Tests / testelem / cata3.py
1 from Accas import SIMP,FACT,OPER,ASSD,AsException,AsType,CO,MACRO,JDC_CATA
2
3 class concept(ASSD):pass
4
5 JdC=JDC_CATA(code="ASTER")
6
7 OP1 = OPER(nom='OP1',op=1,sd_prod=concept,
8            a=SIMP(typ='I'),
9            c=SIMP(typ='I',position='global'),
10           )
11
12 class concept2(ASSD):pass
13 class concept3(ASSD):pass
14
15 def op2_prod(self,MATR,**args):
16    self.type_sdprod(MATR,concept2)
17    return concept
18
19 OP2=MACRO(nom='OP2',op=-2,sd_prod=op2_prod,
20           MATR=SIMP(statut='o',typ=(CO,concept2)),
21         )
22
23 def op3_prod(self,MATR,**args):
24    for m in MATR:
25       t=m['CHAM']
26       if t == 'R':self.type_sdprod(m['MM'],concept)
27    return concept
28
29 OP3=MACRO(nom='OP3',op=-3,sd_prod=op3_prod,
30           MATR=FACT(statut='f',min=1,max='**',
31                     CHAM=SIMP(statut='o',typ='TXM',into=("R","I"),),
32                     MM=SIMP(statut='o',typ=(CO,concept)),
33                    ),
34           )
35
36
37 def op4_prod(self,MATR,**args):
38    if MATR == None :raise AsException("impossible recuperer mot cle facteur par defaut")
39    return concept
40
41 OP4=MACRO(nom='OP4',op=-4,sd_prod=op4_prod,
42           MATR=FACT(statut='d',min=1,max='**',
43                     CHAM=SIMP(statut='f',typ='TXM',defaut="R"),
44                    ),
45           )
46
47 def INCLUDE_prod(self,UNITE,**args):
48   """ Fonction sd_prod pour la macro include
49   """
50   # Si unite a change on reevalue le fichier associe
51   if not hasattr(self,'unite') or self.unite != UNITE:
52     f,text=self.get_file(unite=UNITE)
53     self.unite=UNITE
54     self.fichier_init = f
55     # on execute le texte fourni dans le contexte forme par
56     # le contexte de l etape pere (global au sens Python)
57     # et le contexte de l etape (local au sens Python)
58     code=compile(text,f,'exec')
59     if self.jdc and self.jdc.par_lot == 'NON':
60       # On est en mode commande par commande
61       # On teste la validite de la commande avec interruption eventuelle
62       cr=self.report()
63       self.parent.cr.add(cr)
64       if not cr.estvide():
65         raise EOFError
66     d={}
67     self.g_context = d
68     self.contexte_fichier_init = d
69     exec code in self.parent.g_context,d
70
71 def INCLUDE_context(self,d):
72   """ Fonction op_init pour macro INCLUDE
73   """
74   for k,v in self.g_context.items():
75     d[k]=v
76
77 INCLUDE=MACRO(nom="INCLUDE",op=-1,
78              sd_prod=INCLUDE_prod,
79              op_init=INCLUDE_context,
80              #fichier_ini=1,
81               UNITE = SIMP(statut='o',typ='I'),
82 );
83