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