commit: 3ea4ac8ff20626008d02a44c09211e2a67c54fcd
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Dec 30 19:38:23 2014 +0000
Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Thu Jan 1 02:39:51 2015 +0000
URL:
http://sources.gentoo.org/gitweb/?p=proj/gentoo-keys.git;a=commit;h=3ea4ac8f
gkeys/config.py: Make it possible to read more than one config file
Save homedir to the config class for re-use in gkeys-gen
multiple configs fix
---
gkeys/gkeys/base.py | 19 ++++++++++++-------
gkeys/gkeys/cli.py | 12 +++++++++---
gkeys/gkeys/config.py | 25 +++++++++++++++----------
3 files changed, 36 insertions(+), 20 deletions(-)
diff --git a/gkeys/gkeys/base.py b/gkeys/gkeys/base.py
index d03efc4..052d45f 100644
--- a/gkeys/gkeys/base.py
+++ b/gkeys/gkeys/base.py
@@ -185,10 +185,10 @@ class CliBase(object):
help='The user ID, gpg key uid')
- def parse_args(self, args):
+ def parse_args(self, argv):
'''Parse a list of aruments
- @param args: list
+ @param argv: list
@returns argparse.Namespace object
'''
#self.logger.debug('CliBase: parse_args; args: %s' % args)
@@ -225,7 +225,7 @@ class CliBase(object):
action_parser.set_defaults(action=name)
self._add_options(action_parser,
self.cli_config['Action_Options'][name])
- parsed_args = parser.parse_args(args)
+ parsed_args = parser.parse_args(argv)
action = getattr(parsed_args, 'action', None)
if not action:
parser.print_usage()
@@ -241,10 +241,11 @@ class CliBase(object):
getattr(self, '_option_%s' % opt)(parser)
- def run(self, args):
- '''Run the args passed in
+ def setup(self, args, configs):
+ '''Set up the args and configs passed in
@param args: list or argparse.Namespace object
+ @param configs: list
'''
message = None
if not args:
@@ -253,8 +254,9 @@ class CliBase(object):
args = self.parse_args(args)
if args.config:
self.config.defaults['config'] = args.config
- # now make it load the config file
- self.config.read_config()
+ self.config.read_config()
+ else:
+ self.config.read_config(configs)
# establish our logger and update it in the imported files
self.logger = set_logger(self.cli_config['prog'],
self.config['logdir'], args.debug,
@@ -278,7 +280,10 @@ class CliBase(object):
cat = args.category
if not self._check_category(cat):
return False
+ return True
+
+ def run(self, args):
# establish our actions instance
self.actions = self.cli_config['Actions'](self.config,
self.output_results, self.logger)
diff --git a/gkeys/gkeys/cli.py b/gkeys/gkeys/cli.py
index df81882..31457e0 100644
--- a/gkeys/gkeys/cli.py
+++ b/gkeys/gkeys/cli.py
@@ -13,6 +13,7 @@
from __future__ import print_function
+import os
import sys
from gkeys.base import CliBase
@@ -52,7 +53,12 @@ class Main(CliBase):
Defaults to sys.argv[1:]
"""
if args:
- return self.run(self.parse_args(args))
+ ok = self.setup(args)
+ if ok:
+ return self.run(self.parse_args(args))
else:
- return self.run(self.parse_args(sys.argv[1:]))
-
+ args = self.parse_args(sys.argv[1:])
+ ok = self.setup(args,
os.path.join(self.config['configdir'],'gkeys.conf'))
+ if ok:
+ return self.run(args)
+ return False
diff --git a/gkeys/gkeys/config.py b/gkeys/gkeys/config.py
index 8fa4c1b..5d3923f 100644
--- a/gkeys/gkeys/config.py
+++ b/gkeys/gkeys/config.py
@@ -48,9 +48,9 @@ class GKeysConfig(GPGConfig):
self.defaults['config'] = config
self.defaults['configdir'] = os.path.dirname(config)
else:
- homedir = os.path.expanduser('~')
- self.defaults['configdir'] = homedir
- self.defaults['config']= os.path.join(homedir, '.gkeys.conf')
+ self.homedir = os.path.expanduser('~')
+ self.defaults['configdir'] = self.homedir
+ self.defaults['config']= os.path.join(self.homedir, '.gkeys.conf')
if not os.path.exists(self.defaults['config']):
self.defaults['configdir'] = path([self.root, EPREFIX,
'/etc/gkeys'])
self.defaults['config'] = '%(configdir)s/gkeys.conf'
@@ -83,7 +83,7 @@ class GKeysConfig(GPGConfig):
self.defaults['verify-seeds'] = {}
- def read_config(self):
+ def read_config(self, filename=None):
'''Reads the config file into memory
'''
if "%(configdir)s" in self.defaults['config']:
@@ -97,18 +97,23 @@ class GKeysConfig(GPGConfig):
for key in ['gkeysdir', 'keyring', 'sign-keydir', 'logdir', 'seedsdir',
'keyserver']:
defaults[key] = self.defaults[key]
+ if filename == None:
+ filename = self.defaults['config']
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.read(filename)
+ if self.configparser.has_section('base'):
+ # 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):
+ if section not in self.defaults:
+ self.defaults[section] = {}
self.defaults[section][key] = self.configparser.get(section,
key)
def get_key(self, key, subkey=None):