commit: 6ccce1de425884f2279435381b756a50cec5b34b
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Dec 23 21:10:47 2014 +0000
Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Dec 23 21:10:47 2014 +0000
URL:
http://sources.gentoo.org/gitweb/?p=proj/gentoo-keys.git;a=commit;h=6ccce1de
gkeys/config.py: Subclass ConfigParser to be able to set defaults in the config
Allow some base defaults to be set in the [base] section of the config.
Reset our defaults from those changes.
Resave the new defaults back to the configparser for interpolation when
retrieving the values.
---
gkeys/gkeys/SaneConfigParser.py | 27 ++++++++++++++++++
gkeys/gkeys/config.py | 63 ++++++++++++++---------------------------
2 files changed, 48 insertions(+), 42 deletions(-)
diff --git a/gkeys/gkeys/SaneConfigParser.py b/gkeys/gkeys/SaneConfigParser.py
new file mode 100644
index 0000000..3bb69b5
--- /dev/null
+++ b/gkeys/gkeys/SaneConfigParser.py
@@ -0,0 +1,27 @@
+
+import sys
+
+# py3.2
+if sys.hexversion >= 0x30200f0:
+ from configparser import configparser as ConfigParser
+ from configparser import NoSectionError
+ py3 = True
+else:
+ from ConfigParser import ConfigParser, NoSectionError
+ py3 = False
+
+
+class SaneConfigParser(ConfigParser):
+ '''This class overrides what I consider a buggy
RawConfigParser.options()'''
+
+
+ def options(self, section):
+ """Return a list of option names for the given section name."""
+ try:
+ opts = self._sections[section].copy()
+ except KeyError:
+ raise NoSectionError(section)
+ if '__name__' in opts:
+ del opts['__name__']
+ return list(opts.keys())
+
diff --git a/gkeys/gkeys/config.py b/gkeys/gkeys/config.py
index e6789ff..7e31909 100644
--- a/gkeys/gkeys/config.py
+++ b/gkeys/gkeys/config.py
@@ -11,22 +11,13 @@
"""
import os
-import sys
from collections import OrderedDict
-
-# py3.2
-if sys.hexversion >= 0x30200f0:
- import configparser as ConfigParser
-else:
- import ConfigParser
-
from collections import namedtuple
-
from pyGPG.config import GPGConfig
-from gkeys import log
+from gkeys.SaneConfigParser import SaneConfigParser
from gkeys.utils import path
@@ -82,27 +73,17 @@ class GKeysConfig(GPGConfig):
def _add_gkey_defaults(self):
self.defaults['gkeysdir'] = path([self.root, EPREFIX,
'/var/lib/gentoo/gkeys'])
- self.defaults['dev-keydir'] = '%(gkeysdir)s/devs'
- self.defaults['rel-keydir'] = '%(gkeysdir)s/release'
self.defaults['keyring'] = '%(gkeysdir)s/keyring'
- self.defaults['overlays-keydir'] = '%(gkeysdir)s/overlays'
self.defaults['sign-keydir'] = '%(gkeysdir)s/sign',
self.defaults['logdir'] = '/var/log/gkeys'
# local directory to scan for seed files installed via ebuild, layman
# or manual install.
self.defaults['seedsdir'] = '%(gkeysdir)s/seeds'
- self.defaults['seeds'] = {
- 'gentoo': '%(seedsdir)s/gentoo.seeds',
- 'gentoodevs': '%(seedsdir)s/gentoodevs.seeds',
- }
+ self.defaults['seeds'] = {}
self.defaults['keyserver'] = 'pool.sks-keyservers.net'
# NOTE: files is umask mode in octal, directories is chmod mode in
octal
self.defaults['permissions'] = {'files': '0o002', 'directories':
'0o775',}
- self.defaults['seedurls'] = {
- 'gentoo': 'https://api.gentoo.org/gentoo-keys/seeds/gentoo.seeds',
- 'gentoodevs':
'https://api.gentoo.org/gentoo-keys/seeds/gentoodevs.seeds',
- 'gkey': 'gkeys',
- }
+ self.defaults['seedurls'] = {}
self.defaults['sign'] = {
'key': 'fingerprint',
'keydir': '~/.gkeys',
@@ -120,13 +101,24 @@ class GKeysConfig(GPGConfig):
% {'configdir': self.defaults['configdir']}
for key in self.defaults:
self.defaults[key] = self._sub_(self.defaults[key])
- defaults = self.get_defaults()
- # remove some defaults from being entered into the configparser
- for key in ['gpg_defaults', 'only_usable', 'refetch', 'tasks']:
- defaults.pop(key)
- self.configparser = ConfigParser.ConfigParser(defaults)
- self.configparser.read(defaults['config'])
-
+ defaults = OrderedDict()
+ # Add only the defaults we want in the configparser
+ for key in ['gkeysdir', 'keyring', 'sign-keydir', 'logdir', 'seedsdir',
+ 'keyserver']:
+ defaults[key] = self.defaults[key]
+ self.configparser = SaneConfigParser(defaults)
+ self.configparser.read(self.defaults['config'])
+ # I consider this hacky, but due to shortcomings of ConfigParser
+ # we need to reset the defaults redefined in the 'base' section
+ for key in self.configparser.options('base'):
+ self.defaults[key] = self.configparser.get('base', key)
+ defaults[key] = self.defaults[key]
+ self.configparser._defaults = defaults
+ for section in self.configparser.sections():
+ if section == 'base':
+ continue
+ for key in self.configparser.options(section):
+ self.defaults[section][key] = self.configparser.get(section,
key)
def get_key(self, key, subkey=None):
return self._get_(key, subkey)
@@ -134,25 +126,12 @@ class GKeysConfig(GPGConfig):
def _get_(self, key, subkey=None):
if subkey:
- if self.configparser and self.configparser.has_option(key, subkey):
- if self.logger:
- self.logger.debug("Found %s in configparser... %s"
- % (key, str(self.configparser.get(key, subkey))))
- return self._sub_(self.configparser.get(key, subkey))
- #print("CONFIG: key, subkey", key, subkey)
if key in self.options and subkey in self.options[key]:
return self._sub_(self.options[key][subkey])
elif key in self.defaults and subkey in self.defaults[key]:
return self._sub_(self.defaults[key][subkey])
else:
return super(GKeysConfig, self)._get_(key, subkey)
- elif self.configparser and self.configparser.has_option('DEFAULT',
key):
- if self.logger:
- self.logger.debug("Found %s in configparser... %s"
- % (key, str(self.configparser.get('DEFAULT', key))))
- #self.logger.debug("type(key)= %s"
- # % str(type(self.configparser.get('DEFAULT', key))))
- return self.configparser.get('DEFAULT', key)
else:
return super(GKeysConfig, self)._get_(key, subkey)