summaryrefslogtreecommitdiff
path: root/yarnutils
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-04-30 11:16:02 +0300
committerLars Wirzenius <liw@liw.fi>2017-04-30 11:16:02 +0300
commit7df465e3d95b901493fb146cf92586138da496c6 (patch)
tree593e94ef7b70906c16d539527a73f12266c0a0bd /yarnutils
parent2b9b9621913940858fa3c2ccb2e65e16900defbd (diff)
downloadcmdtest-7df465e3d95b901493fb146cf92586138da496c6.tar.gz
Add Variables.append()
Diffstat (limited to 'yarnutils')
-rw-r--r--yarnutils/vars.py9
-rw-r--r--yarnutils/vars_tests.py18
2 files changed, 27 insertions, 0 deletions
diff --git a/yarnutils/vars.py b/yarnutils/vars.py
index 9349a2d..b221ba6 100644
--- a/yarnutils/vars.py
+++ b/yarnutils/vars.py
@@ -51,3 +51,12 @@ class Variables(object):
def save(self):
self._save(self._dict)
+
+ def append(self, key, value):
+ if key in self._dict:
+ if not isinstance(self[key], list):
+ raise Exception('Value for {} is not a list'.format(key))
+ if key not in self._dict:
+ self._dict[key] = []
+ self._dict[key].append(value)
+ self.save()
diff --git a/yarnutils/vars_tests.py b/yarnutils/vars_tests.py
index 821d2a5..b42a1eb 100644
--- a/yarnutils/vars_tests.py
+++ b/yarnutils/vars_tests.py
@@ -60,3 +60,21 @@ class VariablesTests(unittest.TestCase):
vars2 = yarnutils.Variables(self.tempdir)
self.assertEqual(vars1['foo'], vars2['foo'])
self.assertEqual(vars2['foo'], [0])
+
+ def test_appends_to_unset_key(self):
+ vars = yarnutils.Variables(self.tempdir)
+ vars.append('foo', 0)
+ self.assertEqual(vars['foo'], [0])
+
+ def test_append_saves(self):
+ vars1 = yarnutils.Variables(self.tempdir)
+ vars1.append('foo', 0)
+ vars2 = yarnutils.Variables(self.tempdir)
+ self.assertEqual(vars1['foo'], vars2['foo'])
+ self.assertEqual(vars2['foo'], [0])
+
+ def test_append_gives_error_if_appending_to_nonlist_value(self):
+ vars = yarnutils.Variables(self.tempdir)
+ vars['foo'] = 0
+ with self.assertRaises(Exception):
+ vars.append('foo', 0)