confini

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

doc.py (1753B)


      1 # standard imports
      2 import os
      3 import configparser
      4 import logging
      5 
      6 # local imports
      7 from confini.common import to_constant_name
      8 
      9 logg = logging.getLogger(__name__)
     10 
     11 
     12 class ConfigDoc:
     13 
     14     def __init__(self, src=None):
     15         fp = None
     16         if src != None:
     17             fp = os.path.join(src, '.confini')
     18             logg.debug('attempting doc parser with src {}'.format(fp))
     19 
     20         self.src = fp
     21         self.docs = {}
     22         self.docs_flat = {}
     23 
     24         if self.src != None:
     25             self.process(self.src)
     26            
     27 
     28     def process(self, src):
     29         try:
     30             self.process_as_ini(src)
     31         except Exception:
     32             self.process_as_env(src)
     33 
     34 
     35     def process_as_ini(self, src):
     36         p = configparser.ConfigParser()
     37         p.read_file(src)
     38         return self.process_parser(p)
     39 
     40 
     41     def process_as_env(self, src):
     42         from confini.env import ConfigEnvParser
     43         c = ConfigEnvParser()
     44         p = c.from_file(src)
     45         return self.process_parser(p)
     46 
     47 
     48     def process_parser(self, p):
     49         for ks in p.sections():
     50             if self.docs.get(ks) == None:
     51                 self.docs[ks] = {}
     52             for ko in p.options(ks):
     53                 v = p.get(ks, ko)
     54                 self.docs[ks][ko] = v
     55                 c = to_constant_name(ko, ks)
     56                 self.docs_flat[c] = v
     57                 logg.debug('docs {} -> {} = {}'.format(ks, ko, v))
     58 
     59 
     60     def get(self, k, o=None):
     61         if o == None:
     62             return self.docs_flat[k]
     63         else:
     64             return self.docs[k][o]
     65 
     66     
     67     def all(self):
     68         return list(self.docs_flat.keys())
     69 
     70 
     71     @staticmethod
     72     def from_config(config):
     73         if config.doc != None:
     74             return config.doc
     75         return ConfigDoc(config.dirs[0])