1 #@ MODIF asojb Noyau DATE 21/09/2009 AUTEUR COURTOIS M.COURTOIS
2 # -*- coding: iso-8859-1 -*-
3 # RESPONSABLE COURTOIS M.COURTOIS
4 # CONFIGURATION MANAGEMENT OF EDF VERSION
5 # ======================================================================
6 # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG
7 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
8 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
9 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
10 # (AT YOUR OPTION) ANY LATER VERSION.
12 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
13 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
14 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
15 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
17 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
18 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
19 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
20 # ======================================================================
23 Description des OJB jeveux
25 from basetype import Type, MetaType
26 from asnom import SDNom
27 from ascheckers import CheckLog
30 # pour utilisation dans eficas
33 from Utilitai.Utmess import UTMESS
37 # -----------------------------------------------------------------------------
42 def __init__(self, nomj=None, *args, **kwargs ):
43 super(AsBase,self).__init__( nomj, *args, **kwargs )
44 assert self.nomj is not self.__class__.nomj
45 if isinstance( nomj, str ):
47 elif isinstance( nomj, SDNom ):
48 self.nomj.update( nomj.__getstate__() )
50 def set_name(self, nomj):
51 """Positionne le nomj de self
53 assert isinstance( self.nomj.nomj, str ), "uniquement pour les concepts"
56 def check(self, checker=None):
60 # vérif déjà faite ? (en tenant compte du type)
61 if checker.checkedAsBase(self):
63 checker.visitAsBase( self )
65 # vérifie les enfants :
66 optional = checker.optional
67 checker.optional = checker.optional or self.optional
68 for name in self._subtypes:
69 v = getattr(self, name)
70 if isinstance( v, (OJB,AsBase) ):
72 for name in dir(self):
73 if name.startswith( 'check_' ):
74 v = getattr(self, name)
80 mess=mess+'Erreur SDVERI (Attention : vérification incomplète)'+'\n'
81 mess=mess.join(traceback.format_tb(sys.exc_traceback))
82 checker.err(self,mess)
84 checker.optional = optional
90 def dump(self, indent=""):
99 l.append( f+" "+nomj )
100 #l.append( '-'*(len(nomj)+3) )
101 for name in self._subtypes:
102 obj = getattr(self, name)
103 if isinstance(obj,(AsBase,OJB)):
104 l.append( obj.dump(indent) )
105 for name in dir(self):
106 if name.startswith( 'check_' ):
107 obj = getattr(self, name)
108 if callable(obj) and name.startswith("check_"):
109 checkers.append( obj )
111 indent = " "*len(nomj)
112 for checker in checkers:
113 doc = pydoc.text.document( checker )
114 for line in doc.splitlines():
115 l.append( indent + line )
116 return "\n".join( l )
118 def short_repr(self):
119 return "<%s(%x,%r)>" % (self.__class__.__name__, id(self), self.nomj() )
122 if not hasattr(self, "accessible") or not self.accessible():
123 # hors Aster ou en par_lot='oui'
124 return self.short_repr()
126 from Cata.cata import IMPR_CO, _F
127 IMPR_CO(CONCEPT=_F(NOM=self.nom), UNITE=6)
131 # par défaut, on fait court !
132 return self.short_repr()
135 # -----------------------------------------------------------------------------
136 class JeveuxAttr(object):
137 """Un attribut jeveux"""
138 def __init__(self, name):
141 def __get__(self, obj, klass):
142 raise NotImplementedError
144 def check(self, attrname, obj, log ):
145 checker = getattr(obj, "_"+attrname, None )
148 val = self.__get__( obj, obj.__class__ )
149 if callable( checker ):
150 return checker( obj, attrname, val, log )
152 test = val == checker
154 log.err( obj, "Attribut incorrect %s %r!=%r" % (self.name, val, checker ) )
157 # -----------------------------------------------------------------------------
158 class JeveuxExists(JeveuxAttr):
162 def __get__(self, obj, klass):
167 raise AssertionError(repr(nomj))
168 return aster.jeveux_exists( nomj.ljust(24) )
170 # -----------------------------------------------------------------------------
171 class JeveuxIntAttr(JeveuxAttr):
172 def __get__(self, obj, klass):
176 if aster.jeveux_exists( nomj ):
177 return aster.jeveux_getattr( nomj, self.name )[0]
181 # -----------------------------------------------------------------------------
182 class JeveuxStrAttr(JeveuxAttr):
183 def __get__(self, obj, klass):
187 if aster.jeveux_exists( nomj ):
188 return aster.jeveux_getattr( nomj, self.name )[1].strip()
192 # -----------------------------------------------------------------------------
202 clas = JeveuxStrAttr("CLAS")
203 genr = JeveuxStrAttr("GENR")
204 type = JeveuxStrAttr("TYPE")
205 ltyp = JeveuxIntAttr("LTYP")
206 xous = JeveuxStrAttr("XOUS")
207 docu = JeveuxStrAttr("DOCU")
208 exists = JeveuxExists()
212 def __init__(self, nomj=None, **attrs):
213 super(OJB,self).__init__( nomj, **attrs )
214 self.foreachattr( self.setattribute, attrs )
215 self.optional = attrs.get('optional', False)
217 def setattribute( self, name, prop, attrs ):
220 setattr( self, _name, attrs[name] )
224 if aster.jeveux_exists( nomj ):
225 obj_simple = aster.jeveux_getattr( nomj, 'XOUS')[1].strip() == 'S'
227 return aster.getvectjev( nomj )
229 return aster.getcolljev( nomj )
233 def get_stripped(self):
234 """Fonction utilitaire, renvoie une liste de chaines 'strippées'"""
237 return [ x.strip() for x in data ]
241 def foreachattr(self, callable, *args, **kwargs):
242 klass = self.__class__
244 v = getattr( klass, k )
245 if isinstance(v, JeveuxAttr):
246 callable( k, v, *args, **kwargs )
248 def check(self, checker=None):
251 # l'objet a déjà été vérifié, on ne fait rien
252 if checker.checkedOJB(self):
254 checker.visitOJB( self )
256 self.foreachattr( lambda k,v,obj,c: v.check(k, obj, c),
259 if not self.optional and not checker.optional :
260 checker.err( self, "n'existe pas (%r)" %self._parent )
263 def dump(self, indent=""):
268 return f +" "+ self.nomj() +" "+ str(self.exists)
270 # -----------------------------------------------------------------------------
271 def Facultatif( ojb ):
275 # -----------------------------------------------------------------------------
277 lonmax = JeveuxIntAttr("LONMAX")
278 lonuti = JeveuxIntAttr("LONUTI")
282 # -----------------------------------------------------------------------------
284 nommax = JeveuxIntAttr("NOMMAX")
285 nomuti = JeveuxIntAttr("NOMUTI")
290 # -----------------------------------------------------------------------------
291 class OJBCollec(OJB):
292 stockage = JeveuxStrAttr("STOCKAGE")
293 nutioc = JeveuxIntAttr( "NUTIOC" )
294 acces = JeveuxStrAttr( "ACCES" )
295 modelong = JeveuxStrAttr( "MODELONG" )
296 nmaxoc = JeveuxIntAttr( "NMAXOC" )
298 # -----------------------------------------------------------------------------
302 # -----------------------------------------------------------------------------
306 # -----------------------------------------------------------------------------
310 # -----------------------------------------------------------------------------
314 # -----------------------------------------------------------------------------
318 # -----------------------------------------------------------------------------
319 class AsVK8(OJBVect):
323 # -----------------------------------------------------------------------------
324 class AsVK16(OJBVect):
328 # -----------------------------------------------------------------------------
329 class AsVK24(OJBVect):
333 # -----------------------------------------------------------------------------
334 class AsVK32(OJBVect):
338 # -----------------------------------------------------------------------------
339 class AsVK80(OJBVect):