commit 8280d7fb6d2d5acc044439f7b522d81cadc11588
parent eaa8af585c824a30707d565e928ca0846d5d0bc7
Author: nolash <dev@holbrook.no>
Date:   Sun, 18 Jul 2021 13:31:29 +0200
Handle multiple base directories
Diffstat:
3 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
@@ -1,3 +1,5 @@
+0.4.1
+	- Enable multiple config base directories when passing list as config_dir argument
 0.4.0
 	- Enable multiple config override directories
 0.3.6
diff --git a/confini/config.py b/confini/config.py
@@ -1,9 +1,12 @@
+# standard imports
 import logging
 import sys
 import os
 import tempfile
 import configparser
 import re
+
+# external imports
 import gnupg
 
 logg = logging.getLogger('confini')
@@ -17,13 +20,19 @@ def set_current(conf, description=''):
     current_config = conf 
 
 
+
+
 class Config:
 
     parser = configparser.ConfigParser(strict=True)
     default_censor_string = '***'
 
     def __init__(self, default_dir, env_prefix=None, override_dirs=[]):
-        self.dirs = [default_dir]
+        self.__target_tmpdir = None
+        if isinstance(default_dir, list):
+            self.collect_from_dirs(default_dir)
+        else:
+            self.dirs = [default_dir]
         for d in override_dirs:
             if not os.path.isdir(d):
                 raise OSError('{} is not a directory'.format(override_dirs))
@@ -38,6 +47,24 @@ class Config:
             logg.info('using prefix {} for environment variable override matches'.format(env_prefix))
             self.env_prefix = '{}_'.format(env_prefix)
 
+    def collect_from_dirs(self, dirs):
+        self.__target_tmpdir = tempfile.TemporaryDirectory()
+        self.dirs = [self.__target_tmpdir.name]
+        for i, d in enumerate(dirs):
+            for filename_in in os.listdir(d):
+                if re.match(r'.+\.ini$', filename_in) == None:
+                    continue
+                filename_out = '{}_{}'.format(i, filename_in)
+                in_filepath = os.path.join(d, filename_in)
+                out_filepath = os.path.join(self.dirs[0], filename_out)
+                fr = open(in_filepath, 'rb')
+                fw = open(out_filepath, 'wb')
+                fw.write(fr.read())
+                fw.close()
+                fr.close()
+                logg.debug('base config {} will be processed as {}'.format(in_filepath, out_filepath))
+#        return target_dir.name
+
 
     def add_decrypt(self, decrypter):
         self.decrypt.append(decrypter)
diff --git a/setup.py b/setup.py
@@ -6,7 +6,7 @@ f.close()
 
 setup(
         name='confini',
-        version='0.4.0a2',
+        version='0.4.1a1',
         description='Parse, verify and merge all ini files in a single directory',
         author='Louis Holbrook',
         author_email='dev@holbrook.no',