1 """Abstract root classes of user-defined Python features producing a Body
2 Author: Daniel Brunier-Coulin
3 Copyright (C) 2014-20xx CEA/DEN, EDF R&D
8 from model import tools
11 class Feature(ModelAPI.ModelAPI_Feature):
12 """Base class of user-defined Python features."""
15 """x.__init__(...) initializes x; see x.__class__.__doc__ for signature"""
16 ModelAPI.ModelAPI_Feature.__init__(self)
18 def addRealInput(self, inputid):
19 """F.addRealInput(str) -- add real attribute"""
20 self.data().addAttribute(inputid,
21 ModelAPI.ModelAPI_AttributeDouble_typeId())
23 def getRealInput(self, inputid):
24 """F.getRealInput(str) -- get real value of the attribute"""
25 return self.data().real(inputid).value()
27 def addResult(self, result):
28 """F.addResult(ModelAPI_Result) -- add ModelAPI_Result shape as a result"""
29 shape = result.shape()
30 body = self.document().createBody(self.data())
36 """Base class of high level Python interfaces to features."""
38 def __init__(self, feature):
39 """x.__init__(...) initializes x; see x.__class__.__doc__ for signature"""
40 self._feature = feature
41 self._attribute_white_list = [
43 "getKind", "results", "firstResult", "lastResult",
46 def __getattr__(self, name):
47 """Process missing attributes.
49 Add get*() methods for access feature attributes.
50 Redirect some missing attributes to the feature.
52 if name.startswith("get"):
55 "_" + tools.convert_to_underscore(name[3:]),
57 for possible_name in possible_names:
58 if hasattr(self, possible_name):
60 return getattr(self, possible_name)
63 if name in self._attribute_white_list:
64 return getattr(self._feature, name)
66 raise AttributeError()
69 """Return ModelAPI_Feature."""
72 def _fill_attribute(self, attribute, value):
73 """Fill ModelAPI_Attribute* with value."""
74 tools.fill_attribute(attribute, value)
76 def setRealInput(self, inputid, value):
77 """I.setRealInput(str, float) -- set real value to the attribute"""
78 self._feature.data().real(inputid).setValue(value)
80 def areInputValid(self):
81 """I.areInputValid() -> True or False validation result"""
82 validators = ModelAPI.ModelAPI_Session.get().validators()
83 return validators.validate(self._feature)
86 """I._execute() -- validate and execute the feature.
88 Raises RuntimeError if validation fails.
90 if self.areInputValid():
91 self._feature.execute()
93 raise RuntimeError("Can not execute %s: %s" %
94 (self._feature.getKind(), self._feature.error())