confini

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

commit 2879b663014777c03f0e28d54056f78df87e4885
parent b7e0f4f8e2e0256b19856d633c8fa32efad0de9a
Author: Louis Holbrook <accounts-gitlab@holbrook.no>
Date:   Thu,  1 Jul 2021 08:59:18 +0000

Merge branch 'lash/sep-censor' into 'master'

Add censor test

See merge request nolash/python-confini!1
Diffstat:
Mconfini/config.py | 18+++++++++++-------
Dtest/files/bar.ini | 5-----
Dtest/files/crypt/baz.asc | 14--------------
Dtest/files/crypt/foo.ini | 4----
Dtest/files/default/foo.ini | 3---
Dtest/files/foo.ini | 3---
Dtest/files/translate/foo.ini | 10----------
Dtest/gnupg/openpgp-revocs.d/E3C39E57B5478DF8C9341B1FAC061DE3A30B512E.rev | 35-----------------------------------
Dtest/gnupg/private-keys-v1.d/31CD2D9AD1C478010F1851D4BA8A4E62473E3206.key | 42------------------------------------------
Dtest/gnupg/private-keys-v1.d/3331F234B98A55205A42C7C50FE24A5046F57913.key | 42------------------------------------------
Dtest/gnupg/pubring.kbx | 0
Dtest/gnupg/pubring.kbx~ | 0
Dtest/gnupg/random_seed | 0
Dtest/gnupg/trustdb.gpg | 0
Dtest/test_basic.py | 81-------------------------------------------------------------------------------
Dtest/test_enc.py | 47-----------------------------------------------
Dtest/test_env.py | 88-------------------------------------------------------------------------------
Dtest/test_translate.py | 49-------------------------------------------------
Atests/test_censor.py | 33+++++++++++++++++++++++++++++++++
19 files changed, 44 insertions(+), 430 deletions(-)

diff --git a/confini/config.py b/confini/config.py @@ -28,6 +28,7 @@ def set_current(conf, description=''): class Config: parser = configparser.ConfigParser(strict=True) + default_censor_string = '***' def __init__(self, config_dir, env_prefix=None, decrypt=True): if not os.path.isdir(config_dir): @@ -186,16 +187,19 @@ class Config: return d.lower() in ['true', '1', 'on'] + def apply_censor(self, k): + try: + _ = self.censored[k] + return self.default_censor_string + except KeyError: + return self.store[k] + + + def __str__(self): ls = [] for k in self.store.keys(): - v = '' - try: - _ = self.censored[k] - v = '***' - except: - v = self.store[k] - + v = self.apply_censor(k) ls.append('{}={}'.format(k, v)) return '\n'.join(ls) diff --git a/test/files/bar.ini b/test/files/bar.ini @@ -1,5 +0,0 @@ -[BAR] -foo = oof - -[XYZZY] -bert = ernie diff --git a/test/files/crypt/baz.asc b/test/files/crypt/baz.asc @@ -1,14 +0,0 @@ ------BEGIN PGP MESSAGE----- - -hQGMA8Ll7MXhlLGLAQv/Skj9eYN9MuR2JLIFJ7V2BYgpdakukamW6dCEwr1dyWbq -Uj0UurqSCJBg3qvDQvK2K/UU1ez2+Sot8i/rQY5Q7t9Daxlzp4PombtYw0R3dxLE -bcNCEv7tIr1VjW8cRvkgKc9CamcI2zcUDt2DGq+c9w8Hxn+N7KRF1ZZLGvb7nnTU -ugMyrQb8ILJDyw7ifjgjQFSeh5Kfg+tQAKaPTk7ydCqCXaODd1dCNE1IK/ebl8kT -gGm0db20lcNG9MOmmumD22hTovlouv1WcybpQGzNsogkiJxMRgCQ2DRRAxWOLyam -71iEcCb3w/xf+YISUSWkD+H1W0+2i0X6RTIVNYs/tEnI9/DypKV4wPWcsWbLsVqO -u8wodH5Kk3f/gwVd90wjmpYMrRCIL0/GOfMn8IglN58lOMEtopRtll/CbM8XcRUc -5vsCIcrBiZiwq6bfQxyPSVmpOsxz24BMvU537bVf5qI7KpFn5L5Gjo/Sy1Xq4rpT -avEBM1lXrRbEqXz/fd2J0j4BInKLK3yaAkBq0pFYvCFsHOB/7n0SUkOZcFBXxGGb -sDj+VuQr5hdhJbgyl0ZhsUvHaJQzKFn2N4cW8RQwmw== -=qkyQ ------END PGP MESSAGE----- diff --git a/test/files/crypt/foo.ini b/test/files/crypt/foo.ini @@ -1,4 +0,0 @@ -[FOO] -bar = 42 -baz = !gpg(baz.asc) -xyzzy = diff --git a/test/files/default/foo.ini b/test/files/default/foo.ini @@ -1,3 +0,0 @@ -[FOO] -bar = xyzzy -baz = diff --git a/test/files/foo.ini b/test/files/foo.ini @@ -1,3 +0,0 @@ -[FOO] -bar = 42 -baz = 029a diff --git a/test/files/translate/foo.ini b/test/files/translate/foo.ini @@ -1,10 +0,0 @@ -[true] -a = true -b = True -c = 1 - -[false] -a = false -b = False -c = 0 -d = diff --git a/test/gnupg/openpgp-revocs.d/E3C39E57B5478DF8C9341B1FAC061DE3A30B512E.rev b/test/gnupg/openpgp-revocs.d/E3C39E57B5478DF8C9341B1FAC061DE3A30B512E.rev @@ -1,35 +0,0 @@ -This is a revocation certificate for the OpenPGP key: - -pub rsa3072 2020-10-17 [SC] [expires: 2022-10-17] - E3C39E57B5478DF8C9341B1FAC061DE3A30B512E -uid Confini Encrypter <dev@holbrook.no> - -A revocation certificate is a kind of "kill switch" to publicly -declare that a key shall not anymore be used. It is not possible -to retract such a revocation certificate once it has been published. - -Use it to revoke this key in case of a compromise or loss of -the secret key. However, if the secret key is still accessible, -it is better to generate a new revocation certificate and give -a reason for the revocation. For details see the description of -of the gpg command "--generate-revocation" in the GnuPG manual. - -To avoid an accidental use of this file, a colon has been inserted -before the 5 dashes below. Remove this colon with a text editor -before importing and publishing this revocation certificate. - -:-----BEGIN PGP PUBLIC KEY BLOCK----- -Comment: This is a revocation certificate - -iQG2BCABCAAgFiEE48OeV7VHjfjJNBsfrAYd46MLUS4FAl+K+LACHQAACgkQrAYd -46MLUS7HMQv8DTs3zp74XIDL4coYc4j75MkZOqTdzQea6hlz4cWuzWAkLJi2m19p -qC4vfhT7hvhwr/3/jc1Wd1wd8JkZWRdONU9aBx6NodvjOaCXzacfIBKO7BSIuhoM -aEsLU8tUdigUoO84tpKojIareHxhJcgRIecStPAXru0NtyS0j+z9OznIaqvHW3o9 -yGeTJoHio17nXMH4jkBXNu1PszzPrBE1ttX43sfdwP9goxY5i7oBb+nWG+yFBsBE -168k/dQ2ZWOaInnchqA6gNBWn5R2rK1sVS0v7BDvqXwBeNEohvW4HWarVY3nekv2 -wX3UcrXlg3n8anw2awtBinmh/iZAm11k4KX5r1mAd4Hj4Dwak4DzE9ZmqZeywsMq -ARlkJdh7aG5OWEN9eUKEjj4GVIpr4GhsZvQFTspz4g0uIGfWhTzXyq9EasSUAgLj -De0+dVaC8UDqH5qq1K8e6fweQDodn8ZA80U08BFqeHjkziFUY7JHE+cH3c+1/x1O -6zJxHLAjzCvE -=m9JT ------END PGP PUBLIC KEY BLOCK----- diff --git a/test/gnupg/private-keys-v1.d/31CD2D9AD1C478010F1851D4BA8A4E62473E3206.key b/test/gnupg/private-keys-v1.d/31CD2D9AD1C478010F1851D4BA8A4E62473E3206.key @@ -1,42 +0,0 @@ -Key: (private-key (rsa (n #00C23A8EE0588FD7889AF41A196C5B20EBEBFECFE495 - 307D818E1942121D6A15DD055150A9F98DD2D03C1C1F4E0419F5A9E781762FA5D465C9 - 593977D90E948ACA553EF8A9C4795FE775C2CCE8E536440192BCCC46DEFE56C9D8FD42 - E9C8681CAAEBC8EF743C8FDB391893B20EB9824ADDF249F3B298238DF1720D9F1AB787 - 6C29FE4CDFEA27747C0C69C518857D56233793F4557C2B9B8C3F9F03B1C8BD77CD2760 - 21BB19E8D1B7B3A02EF1DF6D2E306EB4359B4EC480D1DDB6D62DFA9B25F130C3035D48 - 6BB0470A4DEB109B64A0461A72F93E16C7EA66AF509AF3DAA50B783FE88907956C72AB - 9B24471ED55793D1BFD537C11F05E6323A6E2196D52C6B23F7FCC82566294B7C08374B - 107A2ACB46E2518D62CC822775E3DE8273FE78DF51C7F5E18E24737ACB04F40572CD6B - 9BF80070D58062F6D0B4020F9D93CB015665BCDBECF9696A4A6CDF9F6CED802F63F203 - 54B701E952CFF7F4ED3709638EF1800B482FDB9A59898E016899F3D00D78BADCF88DA9 - 2FFDF62C7280E0544F321AB391#)(e #010001#)(d - #0B238D971B2D20A8C26E3662F7DE600C77ABD4E36094F7D5AABF131573DF6622974F - FB06CC7B903806027CDF1E08191925E03C556E36B8A1ABFECA3B460549D261C22B439D - 3372C714EF578E11BB237A4D9E8B3E934255DADC9965B17F9F4CE9967D1F1274F8B113 - 5CAFF7B9B574DDF34D966525FC68A996CBBA3142387D493C3D4BCE59A0EAA2C4997A46 - B63D226801A3781340FC453EED5522C29AE716CC4AB24E2CEB46F9640626AD1A8CFC37 - 766A9AE62A2281CD7B7BB225255CE671EE1B8AB6C6AA577131852540A002466077AFC1 - 99E30B51CFA573812542C03E1E685A2F0EFF233A0340C4142901C28DC69792EFB0B683 - 7FF7D1F55FFD4D336F791C4B55495BE2BC1F86EF91A42790EFBFA59B65226BFA19F6D1 - 74F28FE9854BB03DC9845E2FD2EBF90D9A465FA463C737CEA33A3DC1A119DC78944456 - CC79C683DF5C8D9E35616465A2F89D1CDDCE33678A46AB74F9800424B4AC714DD4F0B9 - 4BDDA3630E0825DCBAB059B79B43138D43AFD5758815B148D64CAC492858EE1E0E9DEB - #)(p #00DABE83B906C4FF9E184D46DA7B4B081D7E80DC00F731DF14E6CD0D6D673613 - 41CA1CFC0F86E40F9BA45AA0BEAA49191B44400872C08A7786C0522822B122B6584E66 - 418CFDD46F9899E1A46DCC0C0EF98D7C298ED9C88679675973818F301A1F221C0B8C3C - 19B26F791BF57942C64CD801A3A7ED8481C4FC413A4FE9D5F417F36F0EB6F8ABBEE236 - 69EE3C61019180CC1B03364176AF9A67CC6E9036572661D63B30CD679CD55004A85DFC - EF31EABD95AB73F5744DF262F8AFB945385DA5BC07#)(q - #00E34F249CA27D7C0CE6DC31F8DF9C47680ABBB3C596C274CB3E43324DB6E495E41B - 23EF4F313B2FD8E2941F4E63ECCDFE7D945DA05A3F3AB4A2D509E8AFE582CF7D911D39 - FDA44567C6D7C8ACC0C9F4B6AFD9B45A2AACD3B5CBDE09E8471058E173B825A5E2FD68 - 97EF0C9560B808EED33BF0FA37D6F0774C94970B08E9E24B9406D1745C1F179F9F5C6C - 2308F5C88505A868B4655F5D199963C971BFA4AA30AEB85F51801644AB3634E0BFE3EE - FC049FECA6824AE4404DD8A40D9CEF763DDDA7#)(u - #6147AE9A6FDDE93A57916A1711925AE6DBD37E6385F9AAC4B7F0EBA7FD75B48CB3B7 - FFAF030420D634CCC6C91AE3EEBAD0C905D3FF657C56FFA178F81EF39EC410C63AF08E - 6A8292AB8E1700BF3D3E6573D4292359F4C5C43766491AFFDB801AE18C91039CEDA6FF - 7CC019B1F120A4AB0FB51528AD18ED3B2F87CEB6F1A6359385914430CE8A476E20AD09 - E0C7FDDFB553F1C4B51932BF7B5051BD378B294F4B89739627270A39520717BEE45548 - E079FAC33566A27A271745C18E081C1F1455#))) -Created: 20201017T135858 diff --git a/test/gnupg/private-keys-v1.d/3331F234B98A55205A42C7C50FE24A5046F57913.key b/test/gnupg/private-keys-v1.d/3331F234B98A55205A42C7C50FE24A5046F57913.key @@ -1,42 +0,0 @@ -Key: (private-key (rsa (n #00BF82D4D819E69CADF1000B78A38E848A871F610188 - 219B41F66BB4061E5A9A9A2A389D714D3A5D737EAEB28E85B025327810D20CB914C3F9 - 453DF7C29220B5D083D2527798226DB0640A24110F14885B65191BC833B9478D2828A2 - 94339A183ADB8DE672B0E643D05A4E09665C682DC5F00E608306B822907BC9558BF7FA - FE70D71EBA0628C698515B3F0C0B9A71782262677520D3842E501477B93356BAAC017D - B43DF7A7F1BBD1349BB96552EDF8F763DC6FA682FE11962201682730A9BDF683F7FD1A - 4EC5301305418E9713238B86EF1EE31BE60629B3CF92D968942FD66F99DE5CFE1CC859 - 69D267E62CC38A9CEBF49978B521EAF2D5E539E6E8649F66870126DAE0FE121946114B - 9409BCB11FE5249D90FFB2E5247ECAADAC93970D8E2E4C3DD46BCDA07A71B844A7CC7B - 72F96B47571AB2585C63E25BB709C7B986D7516927468896E856A7B4DA06D19BA5DFC1 - 0C6D2F319DF7F1F97B5F03EFFE8D5E9D4F1F0FFE86A7553EA278EA29BDC86C61E08DB3 - 1E0E3D4C430DD04D06CBF2731F#)(e #010001#)(d - #2C1A00D1D3051C47A21C14882F81FE5BB84A2D98A0B4BC803033153DE37791EAB696 - 5B0B6071745BC86C8A89EF9764B97E94C10A5504C72C7C198D18AD7602E885B2C572ED - 01E0A8A22103B539F7CC7EDF852CB4A9D49CF990A9EAE69E0B7A50F38675EF2B759B60 - 3BAB84D6A1A90C016D0AA28709E11574984D00FA3E9CFA431A06E567CDB40E178E1FB2 - B2695A8003CB0D7017A31DE95C5F9A4277E41D10C7371F6EB5BD6319914FC01CAD8CAF - 6889EFE12F84F4DD75475185696ABCF619DC684E947837043E46CF7C3D129C6E542BDA - DA24672EDE88615071F0711EAFE8832D60EF8FEA4A66D20F17E19D7CBC241392BF3E28 - 26D6CAFE8520BBAAD67452187BD01627B52D15558A76F103696102F33C76A49FFF6212 - 169CFAFDB1E8A49676443CC1D73D03E49F5A0F03E3246C4AE4110DC57948669A34D90A - FE3D331F9BBBBCB22681A1C969E30F72F5F01E288248D6A6F044883A87192E633E9B13 - 29A18EB3EF598D5C60A8365638D8F2399016A353B76B9DCFBCE075C09EC3F795D3AA01 - #)(p #00C4C30A3ED4E3D17F8B82CA9D80CCF863308E3F0875BA6E8A20E6E4E1CA3E97 - 5B4C3AACD677F3C8C6FBC22ED4C16116A79479F140A33176BE53B1510BD8C2E136A39C - 1E9360AEB1C81F2CF605D70ADCDAE4E8720FEE00627077E7875F12A5F3A5073813DDBA - 32D66FDF970E5EB509B39E662EA040189D39C706BCFEFC94EF1B8AC6119FE9C2621C2A - 8B932A0AB9A3530267D3DE843FBEBFEF130671ED9D1FFA3DEA6FC5E74BA798C6F187A2 - 6681FED8D6B4A41271EBDC3BE4FE0AAB38BC7AA5C1#)(q - #00F92B18DFC2679FA9286895FDE378B17FE6E6F59C1A18B862301346C6FD7DC74553 - BE791D1879E5D938DCA9C01E7F009B3E7D4880034127988CDD51343DB63E65809C6941 - F4B2D08C4401CA255FE8AE9432EB735D9E74822110DD2B4BE2CF6E1D11F2954434C1F3 - 79150661F555C9F8A5EF2C0810FCC7BCBDB601733652DA61D136E619E6F346DC9364BF - 5765FD9D4F2E71D9B93E6C8E4A9B83C017E82908143C4A0D70D242F89A159B1BC4D3AD - BCAE6C1FB883E204C02FDF91E6879322C010DF#)(u - #009D9B78B4BD7C932FF9639BE75FBB7095B19BE3897D3266F51B964F68193BDF313A - C9CA0B702BE99F66EA1F6EF6397FF2B9D66FAAFE9BD89935DA3940049FB1BA3A3142E4 - C1B5822E8BF4EC739051536C758578B42B0ACC03D95440C5CFA2E378640AE40999EE62 - 70725105A78718B2A69A67E13840576ACB3B8261AEAF9F9EC48B5A25EEC0A9FC2893D7 - A749C2F506DC3F50515B2E6A643E9ABFEC762DEC49CD8D909CD696018DDBCDC9487078 - 0C5299FA0E61E9717733C07C260FE74F4CD3#))) -Created: 20201017T135858 diff --git a/test/gnupg/pubring.kbx b/test/gnupg/pubring.kbx Binary files differ. diff --git a/test/gnupg/pubring.kbx~ b/test/gnupg/pubring.kbx~ Binary files differ. diff --git a/test/gnupg/random_seed b/test/gnupg/random_seed Binary files differ. diff --git a/test/gnupg/trustdb.gpg b/test/gnupg/trustdb.gpg Binary files differ. diff --git a/test/test_basic.py b/test/test_basic.py @@ -1,81 +0,0 @@ -#!/usr/bin/python - -import os -import unittest -import logging - -from confini import Config - -logging.basicConfig(level=logging.DEBUG) -logg = logging.getLogger() - -class TestBasic(unittest.TestCase): - - wd = os.path.dirname(__file__) - - def setUp(self): - pass - - - def tearDown(self): - pass - - - def test_parse_default(self): - inidir = os.path.join(self.wd, 'files/default') - c = Config(inidir) - c.process() - r = c.get('FOO_BAR', 'plugh') - self.assertEqual(r, 'xyzzy') - r = c.get('FOO_BAZ', 'plugh') - self.assertEqual(r, 'plugh') - r = c.get('FOO_BAZ') - self.assertEqual(r, None) - with self.assertRaises(KeyError): - r = c.get('FOO_BAZBAZ') - - - def test_overwrite_guard(self): - inidir = os.path.join(self.wd, 'files/default') - c = Config(inidir) - c.process() - with self.assertRaises(AttributeError): - c.add('xxx', 'FOO_BAR') - c.add('xxx', 'FOO_BAR', exists_ok=True) - r = c.get('FOO_BAR') - self.assertEqual(r, 'xxx') - - - def test_parse_two_files(self): - inidir = os.path.join(self.wd, 'files') - c = Config(inidir) - c.process() - c.require('BERT', 'XYZZY') - expect = { - 'FOO_BAR': '42', - 'FOO_BAZ': '029a', - 'BAR_FOO': 'oof', - 'XYZZY_BERT': 'ernie', - } - self.assertDictEqual(expect, c.store) - - - def test_require(self): - inidir = os.path.join(self.wd, 'files') - c = Config(inidir) - c.require('BERT', 'XYZZY') - self.assertTrue(c.validate()) - c.require('ERNIE', 'XYZZY') - self.assertFalse(c.validate()) - logg.debug(c) - - - def test_all(self): - inidir = os.path.join(self.wd, 'files') - c = Config(inidir) - a = c.all() - self.assertEqual(a, list(c.store.keys())) - - -if __name__ == '__main__': - unittest.main() diff --git a/test/test_enc.py b/test/test_enc.py @@ -1,47 +0,0 @@ -#!/usr/bin/python - -import os -import unittest -import logging - -from confini import Config -from confini.error import DecryptError - -logging.basicConfig(level=logging.DEBUG) -logg = logging.getLogger() - -script_dir = os.path.dirname(os.path.realpath(__file__)) -gnupg_dir = os.path.join(script_dir, 'gnupg') - -class TestBasic(unittest.TestCase): - - wd = os.path.dirname(__file__) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_enc(self): - inidir = os.path.join(self.wd, 'files/crypt') - c = Config(inidir, decrypt=True) - c.process() - with self.assertRaises(DecryptError): - c.get('FOO_BAZ') - os.environ['GNUPGHOME'] = gnupg_dir - c.get('FOO_BAZ') - - - def test_decrypt_with_non_string(self): - inidir = os.path.join(self.wd, 'files/crypt') - c = Config(inidir, decrypt=True) - c.process() - override = { - 'FOO_XYZZY': False, - } - c.dict_override(override, 'test') - c.get('FOO_XYZZY') - -if __name__ == '__main__': - unittest.main() diff --git a/test/test_env.py b/test/test_env.py @@ -1,88 +0,0 @@ -#!/usr/bin/python - -import os -import unittest -import logging - -from confini import Config - -logging.basicConfig(level=logging.DEBUG) -logg = logging.getLogger() - -class TestEnv(unittest.TestCase): - - wd = os.path.dirname(__file__) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_dict_override(self): - inidir = os.path.join(self.wd, 'files') - c = Config(inidir) - c.process() - - override_dict = { - 'FOO_BAR': '666', - 'XYZZY_BERT': 'oscar', - 'BAR_FOO': None, - } - c.dict_override(override_dict, 'arbitrary dict') - - expect = { - 'FOO_BAR': '666', - 'FOO_BAZ': '029a', - 'BAR_FOO': 'oof', - 'XYZZY_BERT': 'oscar', - } - self.assertDictEqual(expect, c.store) - - override_dict = { - 'BAR_FOO': 'barbarbar', - } - c.dict_override(override_dict, 'arbitrary dict') - - expect = { - 'FOO_BAR': '666', - 'FOO_BAZ': '029a', - 'BAR_FOO': 'barbarbar', - 'XYZZY_BERT': 'oscar', - } - self.assertDictEqual(expect, c.store) - - - - def test_env_a_override(self): - os.environ['FOO_BAR'] = '43' - inidir = os.path.join(self.wd, 'files') - c = Config(inidir) - c.process() - - os.environ['ZZZ_FOO_BAR'] = '44' - inidir = os.path.join(self.wd, 'files') - c = Config(inidir, 'ZZZ') - c.process() - expect = { - 'FOO_BAR': '44', - 'FOO_BAZ': '029a', - 'BAR_FOO': 'oof', - 'XYZZY_BERT': 'ernie', - } - self.assertDictEqual(expect, c.store) - - os.environ['ZZZ_FOO_BAR'] = '' - inidir = os.path.join(self.wd, 'files') - c = Config(inidir, 'ZZZ') - c.process() - expect = { - 'FOO_BAR': '42', - 'FOO_BAZ': '029a', - 'BAR_FOO': 'oof', - 'XYZZY_BERT': 'ernie', - } - self.assertDictEqual(expect, c.store) - -if __name__ == '__main__': - unittest.main() diff --git a/test/test_translate.py b/test/test_translate.py @@ -1,49 +0,0 @@ -#!/usr/bin/python - -import os -import unittest -import logging - -from confini import Config - -logging.basicConfig(level=logging.DEBUG) -logg = logging.getLogger() - - -class TestTranslate(unittest.TestCase): - - wd = os.path.dirname(__file__) - - def setUp(self): - pass - - - def tearDown(self): - pass - - - def test_parse_default(self): - inidir = os.path.join(self.wd, 'files/translate') - c = Config(inidir) - c.process() - - self.assertTrue(c.get('TRUE_A')) - self.assertTrue(c.get('TRUE_B')) - self.assertTrue(c.get('TRUE_C')) - - self.assertFalse(c.true('FALSE_A')) - self.assertFalse(c.true('FALSE_B')) - self.assertFalse(c.true('FALSE_C')) - self.assertIsNone(c.get('FALSE_D')) - - o = { - 'TRUE_A': True, - 'FALSE_A': False, - } - c.dict_override(o, 'test') - self.assertTrue(c.true('TRUE_A')) - self.assertFalse(c.true('FALSE_A')) - - -if __name__ == '__main__': - unittest.main() diff --git a/tests/test_censor.py b/tests/test_censor.py @@ -0,0 +1,33 @@ +# standard imports +import os +import unittest +import logging + +# local imports +from confini import Config + +logging.basicConfig(level=logging.DEBUG) +logg = logging.getLogger() + + + +class TestCensor(unittest.TestCase): + + wd = os.path.dirname(__file__) + + def test_censor(self): + inidir = os.path.join(self.wd, 'files/translate') + c = Config(inidir) + c.process() + c.censor('foo', 'bar') + v = c.apply_censor('BAR_FOO') + + for k in c.all(): + try: + assert v == Config.default_censor_string + except AssertionError: + self.assertNotEqual('BAR_FOO', k) + + +if __name__ == '__main__': + unittest.main()