commit: 3b4c4ab5b926e92ce463123806d247ce16bb599c
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Thu Dec 11 17:46:40 2014 +0000
Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Sat Dec 20 16:46:05 2014 +0000
URL:
http://sources.gentoo.org/gitweb/?p=proj/gentoo-keys.git;a=commit;h=3b4c4ab5
gkeyldap: Migrate to use the new gkeys CliBase class
Add options from gkey-ldap.
---
gkeyldap/actions.py | 10 +++++-
gkeyldap/cli.py | 102 +++++++---------------------------------------------
gkeys/base.py | 10 ++++++
3 files changed, 32 insertions(+), 90 deletions(-)
diff --git a/gkeyldap/actions.py b/gkeyldap/actions.py
index 3333c37..cea4648 100644
--- a/gkeyldap/actions.py
+++ b/gkeyldap/actions.py
@@ -20,6 +20,11 @@ from gkeys.fileops import updatefiles
Available_Actions = ['ldapsearch', 'updateseeds']
+Action_Options = {
+ 'ldapsearch': ['fingerprint', 'mail', 'name', 'nick', 'seedfile',
'status'],
+ 'updateseeds': ['fingerprint', 'mail', 'name', 'nick', 'seedfile',
'status'],
+}
+
def get_key_ids(key_len, keyids):
'''Small utility function to return only keyid (short)
@@ -80,7 +85,10 @@ class Actions(object):
info = l.result2dict(results, 'uid')
self.logger.debug(
"MAIN: _action_updateseeds; got results :) converted to info")
- filename = self.config['dev-seedfile'] + '.new'
+ if args.seedfile:
+ filename = self.config.get('seeds', args.seedfile) + '.new'
+ elif args.file:
+ filename = arg.file
if not self.create_seedfile(info, filename):
self.logger.error("Developer seed file update failure: "
"Original seed file is intact & untouched.")
diff --git a/gkeyldap/cli.py b/gkeyldap/cli.py
index 1fd4a7f..15f4dbd 100644
--- a/gkeyldap/cli.py
+++ b/gkeyldap/cli.py
@@ -5,19 +5,17 @@ from __future__ import print_function
import sys
-import argparse
-
-from gkeys.log import log_levels, set_logger
from gkeys import config
from gkeys import seed
+from gkeys.base import CliBase
from gkeys.config import GKeysConfig
from gkeyldap import connect, search
from gkeyldap.actions import Actions, Available_Actions
-class Main(object):
+class Main(CliBase):
'''Main command line interface class'''
@@ -33,6 +31,15 @@ class Main(object):
self.print_results = print_results
self.args = None
self.seeds = None
+ self.cli_config = {
+ 'Actions': Actions,
+ 'Available_Actions': Available_Actions,
+ 'Action_Options': Action_Options,
+ 'prog': 'gkey-ldap',
+ 'description': 'Gentoo-keys LDAP interface and seed file generator
program',
+ 'epilog': '''Caution: adding untrusted keys to these keyrings can
+ be hazardous to your system!'''
+ }
def __call__(self, args=None):
@@ -42,90 +49,7 @@ class Main(object):
Defaults to sys.argv[1:]
"""
if args:
- self.run(self.parse_args(args))
+ return self.run(self.parse_args(args))
else:
- self.run(self.parse_args(sys.argv[1:]))
-
-
- def parse_args(self, args):
- '''Parse a list of aruments
-
- @param args: list
- @returns argparse.Namespace object
- '''
- #logger.debug('MAIN: parse_args; args: %s' % args)
- actions = Available_Actions
- parser = argparse.ArgumentParser(
- prog='gkeys-ldap',
- description='Gentoo Keys LDAP manager program',
- epilog='''Caution: adding untrusted keys to these keyrings can
- be hazardous to your system!''')
- # actions
- parser.add_argument('action', choices=actions, nargs='?',
- default='ldapsearch', help='Search in LDAP or update the seed
file')
- # options
- parser.add_argument('-c', '--config', dest='config', default=None,
- help='The path to an alternate config file')
- parser.add_argument('-d', '--dest', dest='destination', default=None,
- help='The destination db file path')
- parser.add_argument('-D', '--debug', default='DEBUG',
- choices=list(log_levels),
- help='The logging level to set for the logfile')
- parser.add_argument('-f', '--fingerprint', dest='fingerprint',
default=None,
- help='The gpg fingerprint to search for')
- parser.add_argument('-m', '--mail', dest='mail', default=None,
- help='The email address to search for')
- parser.add_argument('-n', '--nick', dest='nick', default=None,
- help='The nick or user id (uid) to search for')
- parser.add_argument('-N', '--name', dest='name', default=None,
- help='The name to search for')
- parser.add_argument('-S', '--status', default=False,
- help='The seedfile path to use')
- return parser.parse_args(args)
-
-
- def run(self, args):
- '''Run the args passed in
-
- @param args: list or argparse.Namespace object
- '''
- global logger
- message = None
- if not args:
- message = "Main: run; invalid args argument passed in"
- if isinstance(args, list):
- 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()
-
- # establish our logger and update it in the imported files
- logger = set_logger('gkeys-ldap', self.config['logdir'], args.debug,
- dirmode=int(self.config.get_key('permissions', 'directories'),0),
- filemask=int(self.config.get_key('permissions', 'files'),0))
- config.logger = logger
- seed.logger = logger
- connect.logger = logger
- search.logger = logger
-
- if message:
- logger.error(message)
-
- # now that we have a logger, record the alternate config setting
- if args.config:
- logger.debug("Main: run; Found alternate config request: %s"
- % args.config)
-
- # establish our actions instance
- self.actions = Actions(self.config, print, logger)
-
- logger.info("Begin running action: %s" % args.action)
-
- # run the action
- func = getattr(self.actions, '%s' % args.action)
-
- logger.debug('Main: run; Found action: %s' % args.action)
- results = func(args)
- return results
+ return self.run(self.parse_args(sys.argv[1:]))
diff --git a/gkeys/base.py b/gkeys/base.py
index 48de147..d3f8227 100644
--- a/gkeys/base.py
+++ b/gkeys/base.py
@@ -123,6 +123,16 @@ class CliBase(object):
default=False,
help='Turn on timestamp use')
+ @staticmethod
+ def _option_mail(parser=None):
+ parser.add_argument('-m', '--mail', dest='mail', default=None,
+ help='The email address to search for')
+
+ @staticmethod
+ def _option_status(parser=None):
+ parser.add_argument('-A', '--status', default=False,
+ help='The active status of the member')
+
def parse_args(self, args):
'''Parse a list of aruments