]> SALOME platform Git repositories - modules/kernel.git/blob - src/KERNEL_PY/salome_notebook.py
Salome HOME
0020523: String notebook support
[modules/kernel.git] / src / KERNEL_PY / salome_notebook.py
1 #  Copyright (C) 2008  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 #  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
3
4 #  This library is free software; you can redistribute it and/or 
5 #  modify it under the terms of the GNU Lesser General Public 
6 #  License as published by the Free Software Foundation; either 
7 #  version 2.1 of the License. 
8
9 #  This library is distributed in the hope that it will be useful, 
10 #  but WITHOUT ANY WARRANTY; without even the implied warranty of 
11 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
12 #  Lesser General Public License for more details. 
13
14 #  You should have received a copy of the GNU Lesser General Public 
15 #  License along with this library; if not, write to the Free Software 
16 #  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
17
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 #
21 #
22 #  File   : salome_notebook.py
23 #  Author : Roman NIKOLAEV, Open CASCADE S.A.S.
24 #  Module : SALOME
25 #  $Header:
26 """
27 Module salome_notebook gives access to Salome Notebook.
28 """
29
30 import salome
31
32 class PseudoStudyForNoteBook(object):
33     
34     def __init__(self, **kwargs):
35         self.kwargs = kwargs
36         pass
37     
38     def GetVariableNames(self):
39         return self.kwargs.keys()
40     
41     def IsVariable(self, variableName):
42         return variableName in self.kwargs
43     
44     def IsReal(self, variableName):
45         val = self.kwargs[variableName]
46         try:
47             float(val)
48             return True
49         except:
50             pass
51         return False
52     
53     IsInteger = IsReal
54     IsBoolean = IsReal
55     
56     def IsString(self, variableName):
57         return not self.IsReal(variableName)
58     
59     def GetString(self, variableName):
60         return self.kwargs[variableName]
61     
62     def GetReal(self, variableName):
63         return float(self.kwargs[variableName])
64     
65     GetInteger = GetReal
66     GetBoolean = GetReal
67     
68     pass
69
70 class NoteBook:
71     
72     def __init__(self, Study):
73         self.myStudy = Study
74     
75     def set(self, variableName, variable):
76         """
77         Create (or modify) variable with name "variableName" 
78         and value equal "theValue".
79         """
80         if type(variable) == float:
81             self.myStudy.SetReal(variableName, variable)
82             
83         elif type(variable) == int:
84             self.myStudy.SetInteger(variableName, variable)
85             
86         elif type(variable) == bool:
87             self.myStudy.SetBoolean(variableName, variable)
88             
89         elif type(variable) == str:
90             self.myStudy.SetString(variableName, variable)
91             
92     def get(self, variableName):
93         """
94         Return value of the variable with name "variableName".
95         """
96         aResult = None
97         if self.myStudy.IsVariable(variableName):
98             
99             if self.myStudy.IsReal(variableName):
100                 aResult = self.myStudy.GetReal(variableName)
101
102             elif self.myStudy.IsInteger(variableName):
103                 aResult = self.myStudy.GetInteger(variableName)
104
105             elif self.myStudy.IsBoolean(variableName):
106                 aResult = self.myStudy.GetBoolean(variableName)
107
108             elif self.myStudy.IsString(variableName):
109                 aResult = self.myStudy.GetString(variableName)
110                 aResult_orig = aResult
111                 l = self.myStudy.GetVariableNames()
112                 l.remove(variableName)
113                 for name in l:
114                     val = self.get(name)
115                     import re
116                     while 1:
117                         m = re.search(r"\b(%s)\b"%name, aResult)
118                         if not m: break
119                         aResult = aResult[:m.start()] + "%s"%(val) + aResult[m.end():]
120                         pass
121                     pass
122                 try:
123                     aResult = eval(aResult)
124                 except Exception, e:
125                     msg = str(e)
126                     msg += "\n"
127                     msg += "A problem occurs while parsing "
128                     msg += "the variable %s "%(variableName.__repr__())
129                     msg += "with value %s ..."%(aResult_orig.__repr__())
130                     msg += "\n"
131                     msg += "Please, check your notebook !"
132                     raise Exception(msg)
133                 pass
134                 
135         return aResult
136     
137     def isVariable(self, variableName): 
138         """
139         Return true if variable with name "variableName" 
140         exists in the study, otherwise return false.
141         """
142         return self.myStudy.IsVariable(variableName)
143
144     def setAs(self, variableName, typ):
145         value = self.get(variableName)
146         value = float(typ(value))
147         self.myStudy.SetStringAsDouble(variableName, value)
148         return
149     
150     def setAsReal(self, variableName):
151         self.setAs(variableName, float)
152         return
153     
154     def setAsInteger(self, variableName):
155         self.setAs(variableName, int)
156         return
157     
158     def setAsBool(self, variableName):
159         self.setAs(variableName, bool)
160         return
161     
162     def check(self):
163         for variableName in self.myStudy.GetVariableNames():
164             self.get(variableName)
165             pass
166         return
167     
168     pass
169
170 def checkThisNoteBook(**kwargs):
171     study = PseudoStudyForNoteBook(**kwargs)
172     note_book = NoteBook(study)
173     note_book.check()
174     return
175
176 notebook = NoteBook(salome.myStudy)