]> SALOME platform Git repositories - tools/eficas.git/blob - Noyau/N_CONVERT.py
Salome HOME
9d3443ddc8620ab73191e9092632b5458a1a543b
[tools/eficas.git] / Noyau / N_CONVERT.py
1 #@ MODIF N_CONVERT Noyau  DATE 30/11/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.                                                  
10 #                                                                       
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.                              
15 #                                                                       
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 # ======================================================================
20
21 """
22    Module de conversion des valeurs saisies par l'utilisateur après vérification.
23 """
24
25 # -----------------------------------------------------------------------------
26 def is_int(real):
27    """Est-ce que 'real' a une valeur entière ?
28    """
29    return abs(int(real) - real) < 1.e-12
30
31 # -----------------------------------------------------------------------------
32 class Conversion:
33    """Conversion de type.
34    """
35    def __init__(self, name, typ):
36       self.name = name
37       self.typ  = typ
38
39    def convert(self, obj):
40       """Filtre liste
41       """
42       in_type = type(obj)
43       if in_type not in (list, tuple):
44          obj = (obj,)
45       
46       result = []
47       for o in obj:
48          result.append(self.function(o))
49       
50       if in_type not in (list, tuple):
51          return result[0]
52       else:
53          # ne marche pas avec MACR_RECAL qui attend une liste et non un tuple
54          return tuple(result)
55
56    def function(self, o):
57       raise NotImplementedError, 'cette classe doit être dérivée'
58
59 # -----------------------------------------------------------------------------
60 class TypeConversion(Conversion):
61    """Conversion de type
62    """
63    def __init__(self, typ):
64       Conversion.__init__(self, 'type', typ)
65
66 # -----------------------------------------------------------------------------
67 class IntConversion(TypeConversion):
68    """Conversion en entier
69    """
70    def __init__(self):
71       TypeConversion.__init__(self, 'I')
72
73    def function(self, o):
74       if type(o) is float and is_int(o):
75          o = int(o)
76       return o
77
78 # -----------------------------------------------------------------------------
79 class FloatConversion(TypeConversion):
80    """Conversion de type
81    """
82    def __init__(self):
83       TypeConversion.__init__(self, 'R')
84
85    def function(self, o):
86       if type(o) in (int, float, long):
87          o = float(o)
88       return o
89
90 # -----------------------------------------------------------------------------
91 _convertI = IntConversion()
92 _convertR = FloatConversion()
93
94 def ConversionFactory(name, typ):
95    if name == 'type':
96       if 'I' in typ:
97          return _convertI
98       elif 'R' in typ:
99          return _convertR
100    return None
101
102