]> git.phdru.name Git - m_librarian.git/blob - m_librarian/config.py
Add option -C|--config file
[m_librarian.git] / m_librarian / config.py
1 #! /usr/bin/env python
2
3 import os
4 from ConfigParser import RawConfigParser
5
6 __all__ = ['get_config']
7
8
9 def _find_config_dirs_posix():
10     config_dirs = []
11     if 'XDG_CONFIG_HOME' in os.environ:
12         config_dirs.append(os.environ['XDG_CONFIG_HOME'])
13     if 'XDG_CONFIG_DIRS' in os.environ:
14         config_dirs.extend(os.environ['XDG_CONFIG_DIRS'].split(':'))
15     home_config = os.path.expanduser('~/.config')
16     if home_config not in config_dirs:
17         config_dirs.append(home_config)
18     return config_dirs
19
20
21 def find_config_dirs():
22     if os.name == 'posix':
23         return _find_config_dirs_posix()
24     raise OSError("Unknow OS")
25
26
27 def find_config_file(config_dirs=None):
28     if config_dirs is None:
29         config_dirs = find_config_dirs()
30     for d in config_dirs:
31         ml_conf_file = os.path.join(d, 'm_librarian.conf')
32         if os.path.exists(ml_conf_file):
33             return ml_conf_file
34     else:
35         raise IOError("Cannot find m_librarian.conf in %s" % config_dirs)
36
37
38 _ml_config = None
39
40
41 def get_config(config_path=None):
42     global _ml_config
43     if _ml_config is None:
44         if config_path is None:
45             config_path = find_config_file()
46         _ml_config = RawConfigParser()
47         _ml_config.read(config_path)
48     return _ml_config
49
50
51 def test():
52     config_dirs = find_config_dirs()
53     print "Config dirs:", config_dirs
54     print "Config file:", find_config_file(config_dirs)
55
56 if __name__ == '__main__':
57     test()