a15ec555abf06ec0cd69e023cb762bbd8adf9034
[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):
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
50         # read our config file overrides
51         self.read_config()
52
53
54     def _add_gkey_defaults(self):
55         self.defaults['keysdir'] = path([self.root, EPREFIX, '/var/gentoo/gkeys'])
56         self.defaults['devkeydir'] = '%(keysdir)s/devs'
57         self.defaults['releasekeydir'] = '%(keysdir)s/release'
58         self.defaults['knownkeysfile'] = '%(keysdir)s/knownkeys'
59         self.fedualts['releaseseedfile'] = '%(configdir)s/release.seeds'
60         self.fedualts['devseedfile'] = '%(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     def _get_(self, key):
77         if self.configparser and self.configparser.has_option('MAIN', key):
78             return self.configparser.get('MAIN', key)
79         else:
80             super('GKeysConfig', self)._get_(key)
81
82
83 class GKEY(namedtuple('GKEY', ['name', 'keyid', 'longkeyid',
84     'fingerprint', 'keyring'])):
85     '''Class to hold the relavent info about a key'''
86
87     __slots__ = ()
88
89     def values(self):
90         '''Returns a list of the field values'''
91         v = []
92         for f in self._fields:
93             v.append(getattr(self, f))
94         return v
95
96     def value_string(self):
97         '''Returns a space separated string of the field values'''
98         return ' '.join([str(x) for x in self.values()])
99