1 #@ MODIF asnom Noyau DATE 07/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 types de base aster
25 version 2 - réécrite pour essayer de simplifier
26 le problème des instances/types et instances/instances
28 le type de base ASBase permet de représenter une structure
29 de donnée. Une instance de ASBase comme attribut d'une classe
30 dérivée de ASBase représente une sous-structure nommée.
32 une instance de ASBase 'libre' représente une instance de la
33 structure de donnée complète.
35 c'est ce comportement qui est capturé dans la classe StructType
38 from basetype import Type
41 """Objet représentant une sous-partie de nom
49 def __init__(self, nomj=None, debut=None, fin=None, just='l', **kwargs ):
51 Configure un objet nom
52 nomj : la partie du nom fixée (par ex .TITR) ou '' si non précisée
53 debut, fin : la partie du K24 concernée
54 just : la justification a droite ou a gauche ('l' ou 'r')
55 kwargs : inutilisé, juste par simplicité
58 On utilise cet objet comme attribut d'instance ou de classe.
59 En attribut de classe pour les noms de structure, cela permet
60 de définir la position du nom d'objet dans le nom jeveux, l'attribut
61 nom est alors la valeur du suffixe pour une sous-structure ou None pour
62 une structure principale.
64 super( SDNom, self ).__init__( nomj=nomj, debut=debut, fin=fin, just=just, **kwargs )
65 self.update( (nomj, debut, fin, just) )
68 if self._parent is None or self._parent._parent is None:
69 debut = self.debut or 0
73 # assert self._parent.nomj is self
74 nomparent = self._parent._parent.nomj
76 debut = self.debut or nomparent.fin or len(prefix)
78 nomj = self.nomj or ''
79 nomj = self.just( nomj, fin-debut )
80 prefix = prefix.ljust(24)
81 res = prefix[:debut]+nomj+prefix[fin:]
85 return self.just(self.nomj,self.fin-self.debut).replace(' ','?')
88 return "<SDNom(%r,%s,%s)>" % (self.nomj,self.debut,self.fin)
90 # On utilise pickle pour les copies, et pickle ne sait pas gérer la
91 # sauvegarde de str.ljust ou str.rjust (c'est une méthode non liée)
93 def __getstate__(self):
94 return (self.nomj, self.debut, self.fin, self.justtype )
96 def __setstate__( self, (nomj,debut,fin,just) ):
100 if just=='l' or just is None:
101 self.just = str.ljust
103 self.just = str.rjust
105 raise ValueError("Justification '%s' invalide" % just )
109 def update( self, (nomj,debut,fin,just) ):
112 if self.debut is None:
116 if self.justtype is None and just is not None:
118 self.just = str.ljust
120 self.just = str.rjust
122 raise ValueError("Justification '%s' invalide" % just )
125 def reparent( self, parent, new_name ):
126 self._parent = parent
127 self._name = new_name
128 for nam in self._subtypes:
129 obj = getattr( self, nam )
130 obj.reparent( self, nam )
131 if self.nomj is None and self._parent._name is not None:
132 self.nomj = "." + self._parent._name