There is, for the moment, nothing in xdata to check dependencies between attributes ... but there is the possibility, as explained in section about user accessors, for the developper to write his own accessors. For instance, in the following example, we check that the external_radius is greater than the internal_radius (Note the use of an instance of XFloat to do the job :))
# --
# Copyright (C) CEA, EDF
# Author : Erwan ADAM (CEA)
# --
import unittest
from xdata import *
class GuideTube2D(XNamedObject):
__init__xattributes__ = [
XAttribute("external_radius", xtype=XFloat(open_min=0.0)),
XAttribute("internal_radius", xtype=XFloat(min=0.0), default_value=0.0),
]
def setExternalRadius(self, value):
er = self.external_radius
try:
ir = self.internal_radius
except AttributeError:
return
XFloat(open_min=ir).testValue(er)
return
def setInternalRadius(self, value):
er = self.external_radius
ir = self.internal_radius
XFloat(open_max=er).testValue(ir)
return
pass
class GuideTube2DTestCase(unittest.TestCase):
def test(self):
g = GuideTube2D(3.0, 2.0)
self.failUnlessRaises(XValueError, g.setInternalRadius, 4.0)
self.failUnlessRaises(XValueError, g.setExternalRadius, 1.0)
self.failUnlessEqual(g.external_radius, 3.0)
self.failUnlessEqual(g.internal_radius, 2.0)
return
pass
if __name__ == '__main__':
unittest.main()
pass