First pass at upgrading to EAPI 3.
[g-pypi.git] / g_pypi / config.py
1 #!/usr/bin/env python
2
3 """
4
5 config.py
6 =========
7
8 Creates and reads config file using ConfigParser::
9
10     [core]
11         keyword = x86
12         overlay path = ~/src/my-overlay/
13         format = ansi
14 """
15
16 from ConfigParser import RawConfigParser as _Parser
17 from ConfigParser import NoSectionError, NoOptionError
18 import os
19 import logging
20 from logging.config import fileConfig
21
22 from g_pypi.portage_utils import get_keyword, get_portdir_overlay, get_repo_name
23
24
25 __docformat__ = 'restructuredtext'
26
27 CONFIG_DIR = os.path.expanduser("~/.g-pypi")
28
29 def get_rc_filename():
30     """Return rc_file filename"""
31     return os.path.join(CONFIG_DIR, "g-pypirc")
32
33 def setup_logger():
34     "Possibly overrides 'g-pypi' logger stored in logging package"
35     logger = logging.getLogger('g-pypi')
36     try:
37         fileConfig(fname=get_rc_filename())
38     except (NoSectionError, NoOptionError), e:
39         logger.info('using default logger')
40         logger.warning(e)
41     return logging.getLogger('g-pypi')
42
43 def setup_config(cls=None):
44     """Read config file, create if it doesn't exist"""
45     if not cls:
46         cls = Parser
47     config = cls()
48     config.add_section('options')
49     config.set('options', 'background', 'dark')
50     config.add_section('core')
51     config.set('core', 'keyword', get_keyword())
52     config.set('core', 'overlay', get_repo_name(get_portdir_overlay()))
53     config.set('core', 'overlay_path', '')
54     config.set('core', 'format', 'ansi')
55     config.read([get_rc_filename()])
56     return config
57
58 class Parser (_Parser):
59     "Extended ConfigParser with `setboolean()` and similar methods."
60     def setboolean(self, section, option, value):
61         self.set(section, option, str(value).lower())
62
63     def get(self, section, option, default=None):
64         logger = logging.getLogger('g-pypi')
65         try:
66             value = _Parser.get(self, section, option)
67         except (NoSectionError, NoOptionError), e:
68             logger.warning(str(e))
69             value = default
70         return value
71
72 CONFIG = setup_config()
73 setup_logger()