confini

Parse and merge multiple ini files in python3
git clone git://git.defalsify.org/python-confini.git
Log | Files | Refs | README | LICENSE

commit 5bb505d5d3ef6184fe3ce60ad6c7aae971404834
parent 9007967173ca14b0bdac6028771f26ae7136a620
Author: nolash <dev@holbrook.no>
Date:   Sun, 31 Oct 2021 08:23:14 +0100

Add tests for remove method

Diffstat:
MCHANGELOG | 1+
AMANIFEST.in | 1+
AWAIVER | 17+++++++++++++++++
AWARRANTY | 5+++++
Mconfini/config.py | 16+++++++++++++---
Atests/files/remove/foo.ini | 4++++
Mtests/test_basic.py | 23+++++++++++++++++++++++
7 files changed, 64 insertions(+), 3 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG @@ -1,5 +1,6 @@ 0.5.0 - License change from GPL to WTFPL + - Add remove method 0.4.2 - Enable multiple config base and override for the dump tool 0.4.1 diff --git a/MANIFEST.in b/MANIFEST.in @@ -0,0 +1 @@ +include LICENSE WAIVER WARRANTY diff --git a/WAIVER b/WAIVER @@ -0,0 +1,17 @@ +# Copyright waiver for the python package "leveldir" + +I dedicate any and all copyright interest in this software to the +public domain. I make this dedication for the benefit of the public at +large and to the detriment of my heirs and successors. I intend this +dedication to be an overt act of relinquishment in perpetuity of all +present and future rights to this software under copyright law. + +To the best of my knowledge and belief, my contributions are either +originally authored by me or are derived from prior works which I have +verified are also in the public domain and are not subject to claims +of copyright by other parties. + +To the best of my knowledge and belief, no individual, business, +organization, government, or other entity has any copyright interest +in my contributions, and I affirm that I will not make contributions +that are otherwise encumbered. diff --git a/WARRANTY b/WARRANTY @@ -0,0 +1,5 @@ +This program is free software. It comes without any warranty, to + * the extent permitted by applicable law. You can redistribute it + * and/or modify it under the terms of the Do What The Fuck You Want + * To Public License, Version 2, as published by Sam Hocevar. See + * http://www.wtfpl.net/ for more details. diff --git a/confini/config.py b/confini/config.py @@ -243,9 +243,19 @@ class Config: return self._decrypt(k, v, self.src_dirs.get(k)) - def remove(self, k): - logg.debug('removing key {}'.format(k)) - del self.store[k] + def remove(self, k, strict=True): + removes = [] + if strict: + removes = [k] + else: + l = len(k) + re_s = r'^' + k + for v in self.all(): + if len(v) >= l and re.match(re_s, v): + removes.append(v) + for v in removes: + del self.store[v] + logg.debug('removing key: {}'.format(v)) def have(self, k): diff --git a/tests/files/remove/foo.ini b/tests/files/remove/foo.ini @@ -0,0 +1,4 @@ +[foo] +bar = 1 +baz = 2 +xyzzy = 4 diff --git a/tests/test_basic.py b/tests/test_basic.py @@ -84,6 +84,29 @@ class TestBasic(unittest.TestCase): logg.debug(c) + def test_remove_strict(self): + inidir = os.path.join(self.wd, 'files/default') + c = Config(inidir) + c.process() + c.remove('FOO_BAR') + with self.assertRaises(KeyError): + c.get('FOO_BAR') + + + def test_remove_wild(self): + inidir = os.path.join(self.wd, 'files/remove') + c = Config(inidir) + c.process() + c.remove('FOO', strict=False) + self.assertEqual(len(c.all()), 0) + + c = Config(inidir) + c.process() + c.remove('FOO_BA', strict=False) + c.get('FOO_XYZZY') + self.assertEqual(len(c.all()), 1) + + def test_all(self): inidir = os.path.join(self.wd, 'files') c = Config(inidir)