name, [xtype | default_value], [mode]) |
'r'
) or
readwrite ('rw'
). This keyword is optional but its default value
differs if the XAttribute instance is used in a constructor or to
describe an object attributes.
Caution: The particuliar case where default_value is given to be None
(a very common case indeed) is special. In that case, we assume that the value
None
should be accepted even if the xtype
given does not accept it.
To ensure that, the xtype
is modified (for instance, if the xtype
was XFloat()
, the real xtype will be XMulTypes(XNone(), XFloat())
.
It is the only case where the developper xtype
is modified ...
The following code is the unittest file used in the xdata developpement. It shows the use of XAttribute
# -- # Copyright (C) CEA, EDF # Author : Erwan ADAM (CEA) # -- import unittest from xdata import * class XAttributeTestCase(unittest.TestCase): def test_argslen(self): self.failUnlessRaises(XAttributeError, XAttribute, "toto", None) x= XAttribute("toto", default_value=None) return def test_name(self): self.failUnlessRaises(XValueError, XAttribute, 2.3, default_value=None) self.failUnlessRaises(XValueError, XAttribute, "", default_value=None) name = "x" x = XAttribute(name, default_value=None) self.failUnlessEqual(name, x.name) self.failUnlessEqual(name, x.getName()) return def test_noargs(self): x = XAttribute("aaa", xtype=XString()) self.failUnlessEqual(x.hasDefaultValue(), 0) self.failUnlessRaises(XValueError, x.getDefaultValue) self.failUnlessEqual(x.xtype("toto"), "toto") return def test_default_value_without_xtype(self): default_value = 123 x = XAttribute("aaa", default_value=default_value) self.failUnlessEqual(x.hasDefaultValue(), 1) self.failUnlessEqual(x.getDefaultValue(), default_value) self.failUnlessEqual(x.xtype("256"), 256) self.failUnlessEqual(x.xtype(default_value), default_value) self.failUnlessRaises(XValueError, x.xtype, 1.2) self.failUnlessRaises(XValueError, x.xtype, "toto") # x = XAttribute("a", default_value=None) self.failUnlessEqual(x.hasDefaultValue(), 1) self.failUnlessEqual(x.getDefaultValue(), None) # return def test_xtype(self): self.failUnlessRaises(XValueError, XAttribute, "aa", xtype="toto") name = "toto" x = XAttribute(name, xtype=XFloat(min=0.5)) self.failUnlessRaises(XValueError, x.xtype, "toto") self.failUnlessRaises(XValueError, x.xtype, -2.3) return def test_default_value_with_types(self): # particuliar case when default_value is None x = XAttribute("x", default_value=None, xtype=XString()) self.failUnlessEqual(x.xtype("toto"), "toto") self.failUnlessEqual(x.xtype("None"), None) # imcompatibility between "toto" and XFloat() self.failUnlessRaises(XValueError, XAttribute, "x", default_value="toto", xtype=XFloat()) return pass if __name__ == '__main__': unittest.main() pass