hyphenate the config file variables, make config handling work.
[gentoo-keys.git] / gkeys / config.py
1 #!/usr/bin/env python
2 #-*- coding:utf-8 -*-
3
4 """
5     Gentoo-keys - config.py
6
7     Holds configuration keys and values
8
9     @copyright: 2012 by Brian Dolbec <dol-sen@gentoo.org>
10     @license: GNU GNU GPL2, see COPYING for details.
11 """
12
13
14 import ConfigParser
15 from collections import namedtuple
16
17
18 from pygpg.config import GPGConfig
19
20 from gkeys.utils import path
21
22
23 # establish the eprefix, initially set so eprefixify can
24 # set it on install
25 EPREFIX = "@GENTOO_PORTAGE_EPREFIX@"
26
27 # check and set it if it wasn't
28 if "GENTOO_PORTAGE_EPREFIX" in EPREFIX:
29     EPREFIX = ''
30
31
32
33 class GKeysConfig(GPGConfig):
34     """ Configuration superclass which holds our gentoo-keys
35     config settings for pygpg """
36
37     def __init__ (self, config=None, root=None, read_configfile=False):
38         """ Class initialiser """
39         GPGConfig.__init__(self)
40
41         self.root = root or ''
42         if config:
43             self.defaults['config'] = config
44             self.defaults['configdir'] = os.path.dirname(config)
45         else:
46             self.defaults['configdir'] = path([self.root, EPREFIX, '/etc/gentoo-keys'])
47             self.defaults['config'] = '%(configdir)s/gkeys.conf'
48         self.configparser = None
49         if read_configfile:
50             self.read_config()
51
52
53     def _add_gkey_defaults(self):
54         self.defaults['key-sdir'] = path([self.root, EPREFIX, '/var/gentoo/gkeys'])
55         self.defaults['dev-keydir'] = '%(keysdir)s/devs'
56         self.defaults['release-keydir'] = '%(keysdir)s/release'
57         self.defaults['overlays-keydir'] = '%(keysdir)s/overlays'
58         self.defaults['known-keysfile'] = '%(keysdir)s/knownkeys'
59         self.defaults['release-seedfile'] = '%(configdir)s/release.seeds'
60         self.defaults['dev-seedfile'] = '%(configdir)s/developer.seeds'
61
62
63
64     def read_config(self):
65         '''Reads the config file into memory
66         '''
67         if "%(configdir)s" in self.defaults['config']:
68             # fix the config path
69             self.defaults['config'] = self.defaults['config'] \
70                 % {'configdir': self.defaults['configdir']}
71         defaults = self.get_defaults()
72         self.configparser = ConfigParser.ConfigParser(defaults)
73         self.configparser.add_section('MAIN')
74         self.configparser.read(defaults['config'])
75
76
77     def get_key(self, key):
78         return self._get_(key)
79
80
81     def _get_(self, key):
82         if self.configparser and self.configparser.has_option('MAIN', key):
83             return self.configparser.get('MAIN', key)
84         elif key in self.options:
85             return self.options[key]
86         elif key in self.defaults:
87             return self.defaults[key]
88         logger.error("GKeysConfig: _get_(); didn't find :", key)
89         return None
90
91
92 class GKEY(namedtuple('GKEY', ['name', 'keyid', 'longkeyid',
93     'fingerprint', 'keyring'])):
94     '''Class to hold the relavent info about a key'''
95
96     __slots__ = ()
97
98     def values(self):
99         '''Returns a list of the field values'''
100         v = []
101         for f in self._fields:
102             v.append(getattr(self, f))
103         return v
104
105     def value_string(self):
106         '''Returns a space separated string of the field values'''
107         return ' '.join([str(x) for x in self.values()])
108