1 #@ MODIF asojb Noyau DATE 07/04/2008 AUTEUR COURTOIS M.COURTOIS
2 # -*- coding: iso-8859-1 -*-
3 # CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
9 # (AT YOUR OPTION) ANY LATER VERSION.
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
18 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
22 Description des OJB jeveux
24 from basetype import Type, MetaType
25 from asnom import SDNom
26 from ascheckers import CheckLog
29 # pour utilisation dans eficas
32 from Utilitai.Utmess import UTMESS
36 # -----------------------------------------------------------------------------
41 def __init__(self, nomj=None, *args, **kwargs ):
42 super(AsBase,self).__init__( nomj, *args, **kwargs )
43 assert self.nomj is not self.__class__.nomj
44 if isinstance( nomj, str ):
46 elif isinstance( nomj, SDNom ):
47 self.nomj.update( nomj.__getstate__() )
49 def set_name(self, nomj):
50 """Positionne le nomj de self
52 assert isinstance( self.nomj.nomj, str ), "uniquement pour les concepts"
55 def check(self, checker=None):
59 # vérif déjà faite ? (en tenant compte du type)
60 if checker.checkedAsBase(self):
62 checker.visitAsBase( self )
64 # vérifie les enfants :
65 optional = checker.optional
66 checker.optional = checker.optional or self.optional
67 for name in self._subtypes:
68 v = getattr(self, name)
69 if isinstance( v, (OJB,AsBase) ):
71 for name in dir(self):
72 if name.startswith( 'check_' ):
73 v = getattr(self, name)
78 UTMESS("E", 'SDVERI_45') # AJACOT NON
80 traceback.print_exc(file=sys.stdout)
83 checker.optional = optional
89 def dump(self, indent=""):
98 l.append( f+" "+nomj )
99 #l.append( '-'*(len(nomj)+3) )
100 for name in self._subtypes:
101 obj = getattr(self, name)
102 if isinstance(obj,(AsBase,OJB)):
103 l.append( obj.dump(indent) )
104 for name in dir(self):
105 if name.startswith( 'check_' ):
106 obj = getattr(self, name)
107 if callable(obj) and name.startswith("check_"):
108 checkers.append( obj )
110 indent = " "*len(nomj)
111 for checker in checkers:
112 doc = pydoc.text.document( checker )
113 for line in doc.splitlines():
114 l.append( indent + line )
115 return "\n".join( l )
117 def short_repr(self):
118 return "<%s(%x,%r)>" % (self.__class__.__name__, id(self), self.nomj() )
121 if not hasattr(self, "par_lot") or self.par_lot():
122 # hors Aster ou en par_lot='oui'
123 return self.short_repr()
125 from Cata.cata import IMPR_CO, _F
126 IMPR_CO(CONCEPT=_F(NOM=self.nom), UNITE=6)
130 # par défaut, on fait court !
131 return self.short_repr()
134 # -----------------------------------------------------------------------------
135 class JeveuxAttr(object):
136 """Un attribut jeveux"""
137 def __init__(self, name):
140 def __get__(self, obj, klass):
141 raise NotImplementedError
143 def check(self, attrname, obj, log ):
144 checker = getattr(obj, "_"+attrname, None )
147 val = self.__get__( obj, obj.__class__ )
148 if callable( checker ):
149 return checker( obj, attrname, val, log )
151 test = val == checker
153 log.err( obj, "Attribut incorrect %s %r!=%r" % (self.name, val, checker ) )
156 # -----------------------------------------------------------------------------
157 class JeveuxExists(JeveuxAttr):
161 def __get__(self, obj, klass):
166 raise AssertionError(repr(nomj))
167 return aster.jeveux_exists( nomj.ljust(24) )
169 # -----------------------------------------------------------------------------
170 class JeveuxIntAttr(JeveuxAttr):
171 def __get__(self, obj, klass):
175 if aster.jeveux_exists( nomj ):
176 return aster.jeveux_getattr( nomj, self.name )[0]
180 # -----------------------------------------------------------------------------
181 class JeveuxStrAttr(JeveuxAttr):
182 def __get__(self, obj, klass):
186 if aster.jeveux_exists( nomj ):
187 return aster.jeveux_getattr( nomj, self.name )[1].strip()
191 # -----------------------------------------------------------------------------
201 clas = JeveuxStrAttr("CLAS")
202 genr = JeveuxStrAttr("GENR")
203 type = JeveuxStrAttr("TYPE")
204 ltyp = JeveuxIntAttr("LTYP")
205 xous = JeveuxStrAttr("XOUS")
206 docu = JeveuxStrAttr("DOCU")
207 exists = JeveuxExists()
211 def __init__(self, nomj=None, **attrs):
212 super(OJB,self).__init__( nomj, **attrs )
213 self.foreachattr( self.setattribute, attrs )
214 self.optional = attrs.get('optional', False)
216 def setattribute( self, name, prop, attrs ):
219 setattr( self, _name, attrs[name] )
223 if aster.jeveux_exists( nomj ):
224 obj_simple = aster.jeveux_getattr( nomj, 'XOUS')[1].strip() == 'S'
226 return aster.getvectjev( nomj )
228 return aster.getcolljev( nomj )
232 def get_stripped(self):
233 """Fonction utilitaire, renvoie une liste de chaines 'strippées'"""
236 return [ x.strip() for x in data ]
240 def foreachattr(self, callable, *args, **kwargs):
241 klass = self.__class__
243 v = getattr( klass, k )
244 if isinstance(v, JeveuxAttr):
245 callable( k, v, *args, **kwargs )
247 def check(self, checker=None):
250 # l'objet a déjà été vérifié, on ne fait rien
251 if checker.checkedOJB(self):
253 checker.visitOJB( self )
255 self.foreachattr( lambda k,v,obj,c: v.check(k, obj, c),
258 if not self.optional and not checker.optional :
259 checker.err( self, "n'existe pas (%r)" %self._parent )
262 def dump(self, indent=""):
267 return f +" "+ self.nomj() +" "+ str(self.exists)
269 # -----------------------------------------------------------------------------
270 def Facultatif( ojb ):
274 # -----------------------------------------------------------------------------
276 lonmax = JeveuxIntAttr("LONMAX")
277 lonuti = JeveuxIntAttr("LONUTI")
281 # -----------------------------------------------------------------------------
283 nommax = JeveuxIntAttr("NOMMAX")
284 nomuti = JeveuxIntAttr("NOMUTI")
289 # -----------------------------------------------------------------------------
290 class OJBCollec(OJB):
291 stockage = JeveuxStrAttr("STOCKAGE")
292 nutioc = JeveuxIntAttr( "NUTIOC" )
293 acces = JeveuxStrAttr( "ACCES" )
294 modelong = JeveuxStrAttr( "MODELONG" )
295 nmaxoc = JeveuxIntAttr( "NMAXOC" )
297 # -----------------------------------------------------------------------------
301 # -----------------------------------------------------------------------------
305 # -----------------------------------------------------------------------------
309 # -----------------------------------------------------------------------------
313 # -----------------------------------------------------------------------------
314 class AsVK8(OJBVect):
318 # -----------------------------------------------------------------------------
319 class AsVK16(OJBVect):
323 # -----------------------------------------------------------------------------
324 class AsVK24(OJBVect):
328 # -----------------------------------------------------------------------------
329 class AsVK32(OJBVect):
333 # -----------------------------------------------------------------------------
334 class AsVK80(OJBVect):