Revision 59525e1f
b/lib/constants.py | ||
---|---|---|
510 | 510 |
INSTANCE_REBOOT_FULL]) |
511 | 511 |
|
512 | 512 |
VTYPE_STRING = 'string' |
513 |
VTYPE_MAYBE_STRING = "maybe-string" |
|
513 | 514 |
VTYPE_BOOL = 'bool' |
514 | 515 |
VTYPE_SIZE = 'size' # size, in MiBs |
515 | 516 |
VTYPE_INT = 'int' |
516 | 517 |
ENFORCEABLE_TYPES = frozenset([ |
517 | 518 |
VTYPE_STRING, |
519 |
VTYPE_MAYBE_STRING, |
|
518 | 520 |
VTYPE_BOOL, |
519 | 521 |
VTYPE_SIZE, |
520 | 522 |
VTYPE_INT, |
b/lib/utils.py | ||
---|---|---|
786 | 786 |
msg = "'%s' has non-enforceable type %s" % (key, ktype) |
787 | 787 |
raise errors.ProgrammerError(msg) |
788 | 788 |
|
789 |
if ktype == constants.VTYPE_STRING: |
|
790 |
if not isinstance(target[key], basestring): |
|
789 |
if ktype in (constants.VTYPE_STRING, constants.VTYPE_MAYBE_STRING): |
|
790 |
if target[key] is None and ktype == constants.VTYPE_MAYBE_STRING: |
|
791 |
pass |
|
792 |
elif not isinstance(target[key], basestring): |
|
791 | 793 |
if isinstance(target[key], bool) and not target[key]: |
792 | 794 |
target[key] = '' |
793 | 795 |
else: |
b/test/ganeti.utils_unittest.py | ||
---|---|---|
1503 | 1503 |
'b': constants.VTYPE_BOOL, |
1504 | 1504 |
'c': constants.VTYPE_STRING, |
1505 | 1505 |
'd': constants.VTYPE_SIZE, |
1506 |
"e": constants.VTYPE_MAYBE_STRING, |
|
1506 | 1507 |
} |
1507 | 1508 |
|
1508 | 1509 |
def _fdt(self, dict, allowed_values=None): |
... | ... | |
1526 | 1527 |
self.assertEqual(self._fdt({'b': 'True'}), {'b': True}) |
1527 | 1528 |
self.assertEqual(self._fdt({'d': '4'}), {'d': 4}) |
1528 | 1529 |
self.assertEqual(self._fdt({'d': '4M'}), {'d': 4}) |
1530 |
self.assertEqual(self._fdt({"e": None, }), {"e": None, }) |
|
1531 |
self.assertEqual(self._fdt({"e": "Hello World", }), {"e": "Hello World", }) |
|
1532 |
self.assertEqual(self._fdt({"e": False, }), {"e": '', }) |
|
1529 | 1533 |
|
1530 | 1534 |
def testErrors(self): |
1531 | 1535 |
self.assertRaises(errors.TypeEnforcementError, self._fdt, {'a': 'astring'}) |
1532 | 1536 |
self.assertRaises(errors.TypeEnforcementError, self._fdt, {'c': True}) |
1533 | 1537 |
self.assertRaises(errors.TypeEnforcementError, self._fdt, {'d': 'astring'}) |
1534 | 1538 |
self.assertRaises(errors.TypeEnforcementError, self._fdt, {'d': '4 L'}) |
1539 |
self.assertRaises(errors.TypeEnforcementError, self._fdt, {"e": object(), }) |
|
1540 |
self.assertRaises(errors.TypeEnforcementError, self._fdt, {"e": [], }) |
|
1535 | 1541 |
|
1536 | 1542 |
|
1537 | 1543 |
class TestIsNormAbsPath(unittest.TestCase): |
Also available in: Unified diff