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