1 #@ MODIF asojb Noyau DATE 04/06/2007 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 U2MESS as 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érifie les enfants :
60 optional = checker.optional
61 checker.optional = checker.optional or self.optional
62 for name in self._subtypes:
63 v = getattr(self, name)
64 if isinstance( v, (OJB,AsBase) ):
66 for name in dir(self):
67 if name.startswith( 'check_' ):
68 v = getattr(self, name)
73 UTMESS("E", 'SDVERI_45')
75 traceback.print_exc(file=sys.stdout)
77 checker.optional = optional
83 def dump(self, indent=""):
92 l.append( f+" "+nomj )
93 #l.append( '-'*(len(nomj)+3) )
94 for name in self._subtypes:
95 obj = getattr(self, name)
96 if isinstance(obj,(AsBase,OJB)):
97 l.append( obj.dump(indent) )
98 for name in dir(self):
99 if name.startswith( 'check_' ):
100 obj = getattr(self, name)
101 if callable(obj) and name.startswith("check_"):
102 checkers.append( obj )
104 indent = " "*len(nomj)
105 for checker in checkers:
106 doc = pydoc.text.document( checker )
107 for line in doc.splitlines():
108 l.append( indent + line )
109 return "\n".join( l )
112 return "<%s(%x,%r)>" % (self.__class__.__name__, id(self), self.nomj() )
115 # -----------------------------------------------------------------------------
116 class JeveuxAttr(object):
117 """Un attribut jeveux"""
118 def __init__(self, name):
121 def __get__(self, obj, klass):
122 raise NotImplementedError
124 def check(self, attrname, obj, log ):
125 checker = getattr(obj, "_"+attrname, None )
128 val = self.__get__( obj, obj.__class__ )
129 if callable( checker ):
130 return checker( obj, attrname, val, log )
132 test = val == checker
134 log.err( obj, "Attribut incorrect %s %r!=%r" % (self.name, val, checker ) )
137 # -----------------------------------------------------------------------------
138 class JeveuxExists(JeveuxAttr):
142 def __get__(self, obj, klass):
147 raise AssertionError(repr(nomj))
148 return aster.jeveux_exists( nomj.ljust(24) )
150 # -----------------------------------------------------------------------------
151 class JeveuxIntAttr(JeveuxAttr):
152 def __get__(self, obj, klass):
155 return aster.jeveux_getattr( obj.nomj(), self.name )[0]
157 # -----------------------------------------------------------------------------
158 class JeveuxStrAttr(JeveuxAttr):
159 def __get__(self, obj, klass):
162 return aster.jeveux_getattr( obj.nomj(), self.name )[1].strip()
164 # -----------------------------------------------------------------------------
174 clas = JeveuxStrAttr("CLAS")
175 genr = JeveuxStrAttr("GENR")
176 type = JeveuxStrAttr("TYPE")
177 ltyp = JeveuxIntAttr("LTYP")
178 xous = JeveuxStrAttr("XOUS")
179 docu = JeveuxStrAttr("DOCU")
180 exists = JeveuxExists()
184 def __init__(self, nomj=None, **attrs):
185 super(OJB,self).__init__( nomj, **attrs )
186 self.foreachattr( self.setattribute, attrs )
187 self.optional = attrs.get('optional', False)
189 def setattribute( self, name, prop, attrs ):
192 setattr( self, _name, attrs[name] )
196 if aster.jeveux_exists( nomj ):
197 obj_simple = aster.jeveux_getattr( nomj, 'XOUS')[1].strip() == 'S'
199 return aster.getvectjev( nomj )
201 return aster.getcolljev( nomj )
205 def get_stripped(self):
206 """Fonction utilitaire, renvoie une liste de chaines 'strippées'"""
209 return [ x.strip() for x in self.get() ]
213 def foreachattr(self, callable, *args, **kwargs):
214 klass = self.__class__
216 v = getattr( klass, k )
217 if isinstance(v, JeveuxAttr):
218 callable( k, v, *args, **kwargs )
220 def check(self, checker=None):
223 # l'objet a déjà été vérifié, on ne fait rien
224 if self.nomj() in checker.names.keys():
226 checker.visit( self )
228 self.foreachattr( lambda k,v,obj,c: v.check(k, obj, c),
231 if not self.optional and not checker.optional :
232 checker.err( self, "n'existe pas (%r)" %self._parent )
235 def dump(self, indent=""):
240 return f +" "+ self.nomj() +" "+ str(self.exists)
242 # -----------------------------------------------------------------------------
243 def Facultatif( ojb ):
247 # -----------------------------------------------------------------------------
249 lonmax = JeveuxIntAttr("LONMAX")
250 lonuti = JeveuxIntAttr("LONUTI")
252 # -----------------------------------------------------------------------------
253 class OJBCollec(OJB):
254 stockage = JeveuxStrAttr("STOCKAGE")
255 nutioc = JeveuxIntAttr( "NUTIOC" )
256 acces = JeveuxStrAttr( "ACCES" )
257 modelong = JeveuxStrAttr( "MODELONG" )
258 nmaxoc = JeveuxIntAttr( "NMAXOC" )
260 # -----------------------------------------------------------------------------
264 # -----------------------------------------------------------------------------
268 # -----------------------------------------------------------------------------
272 # -----------------------------------------------------------------------------
276 # -----------------------------------------------------------------------------
277 class AsVK8(OJBVect):
281 # -----------------------------------------------------------------------------
282 class AsVK16(OJBVect):
286 # -----------------------------------------------------------------------------
287 class AsVK24(OJBVect):
291 # -----------------------------------------------------------------------------
292 class AsVK32(OJBVect):
296 # -----------------------------------------------------------------------------
297 class AsVK80(OJBVect):