diff options
-rw-r--r-- | fail-tests/fail.stdout-diff | 2 | ||||
-rw-r--r-- | yarnutils/__init__.py | 1 | ||||
-rw-r--r-- | yarnutils/vars.py | 47 | ||||
-rw-r--r-- | yarnutils/vars_tests.py | 43 |
4 files changed, 92 insertions, 1 deletions
diff --git a/fail-tests/fail.stdout-diff b/fail-tests/fail.stdout-diff index c574866..b4fe31a 100644 --- a/fail-tests/fail.stdout-diff +++ b/fail-tests/fail.stdout-diff @@ -1,4 +1,4 @@ --- /dev/null 2017-03-27 15:43:35.669436670 +0300 -+++ fail-tests/fail.stdout-actual 2017-03-28 17:16:53.366886919 +0300 ++++ fail-tests/fail.stdout-actual 2017-03-28 17:27:11.462899536 +0300 @@ -0,0 +1 @@ +this is not empty output to make test fail diff --git a/yarnutils/__init__.py b/yarnutils/__init__.py index 9c3ef7c..0a5e0c4 100644 --- a/yarnutils/__init__.py +++ b/yarnutils/__init__.py @@ -16,3 +16,4 @@ # =*= License: GPL-3+ =*= +from .vars import Variables diff --git a/yarnutils/vars.py b/yarnutils/vars.py new file mode 100644 index 0000000..9404ffa --- /dev/null +++ b/yarnutils/vars.py @@ -0,0 +1,47 @@ +# Copyright 2017 Lars Wirzenius +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# =*= License: GPL-3+ =*= + + +import os +import yaml + + +class Variables(object): + + _basename = 'vars.yaml' + + def __init__(self, dirname): + self._filename = os.path.join(dirname, self._basename) + self._dict = self._load() + + def _load(self): + if os.path.exists(self._filename): + with open(self._filename) as f: + return yaml.safe_load(f) + else: + return {} + + def _save(self, values): + with open(self._filename, 'w') as f: + return yaml.safe_dump(values, stream=f) + + def __getitem__(self, key): + return self._dict.get(key) + + def __setitem__(self, key, value): + self._dict[key] = value + self._save(self._dict) diff --git a/yarnutils/vars_tests.py b/yarnutils/vars_tests.py new file mode 100644 index 0000000..a49903e --- /dev/null +++ b/yarnutils/vars_tests.py @@ -0,0 +1,43 @@ +# Copyright 2017 Lars Wirzenius +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# =*= License: GPL-3+ =*= + + +import shutil +import tempfile +import unittest + +import yarnutils + + +class VariablesTests(unittest.TestCase): + + def setUp(self): + self.tempdir = tempfile.mkdtemp() + + def tearDown(self): + shutil.rmtree(self.tempdir) + + def test_unset_variable_is_None(self): + vars = yarnutils.Variables(self.tempdir) + self.assertEqual(vars['foo'], None) + + def test_set_value_is_persistent(self): + vars1 = yarnutils.Variables(self.tempdir) + vars1['foo'] = 'bar' + vars2 = yarnutils.Variables(self.tempdir) + self.assertEqual(vars1['foo'], vars2['foo']) + self.assertEqual(vars2['foo'], 'bar') |