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