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