commit: 85a89cd662ddf8880679badb0626a32114b3d0f4
Author: Pavlos Ratis <dastergon <AT> gentoo <DOT> org>
AuthorDate: Fri Jun 27 22:37:49 2014 +0000
Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Fri Jun 27 22:37:49 2014 +0000
URL:
http://sources.gentoo.org/gitweb/?p=proj/gentoo-keys.git;a=commit;h=85a89cd6
use snakeoil in add_key action; minor improvements
---
gkeys/actions.py | 55 +++++++++++++++++++++++--------------------------------
gkeys/fileops.py | 30 ++++++++++++++++++++++++++++++
gkeys/lib.py | 9 ++++-----
3 files changed, 57 insertions(+), 37 deletions(-)
diff --git a/gkeys/actions.py b/gkeys/actions.py
index b7ef9de..f5ea252 100644
--- a/gkeys/actions.py
+++ b/gkeys/actions.py
@@ -169,42 +169,41 @@ class Actions(object):
for key in keyresults:
if not key.keydir and not args.nick == '*':
self.logger.debug("ACTIONS: listkey; NO keydir... Ignoring")
- messages = ["Failed: No keyid's found for %s" % key.name[0]]
+ messages = ["Failed: No keyid's found for %s" % key.name]
else:
self.logger.debug("ACTIONS: listkey; listing keydir:" +
str(key.keydir))
- results[key.name[0]] = self.gpg.list_keys(key.keydir[0])
+ results[key.name] = self.gpg.list_keys(key.keydir)
if self.config.options['print_results']:
- print(results[key.name[0]].output)
- self.logger.debug("data output:\n" +
str(results[key.name[0]].output))
+ print(results[key.name].output)
+ self.logger.debug("data output:\n" +
str(results[key.name].output))
messages = ["Done."]
else:
return results
return messages
+
def addkey(self, args):
'''Install a key from the seed(s)'''
- handler = SeedHandler(self.logger)
+ if not args.nick:
+ return ["Please provide a nickname or -n *"]
+ handler = SeedHandler(self.logger, self.config)
kwargs = handler.build_gkeydict(args)
self.logger.debug("ACTIONS: addkey; kwargs: %s" % str(kwargs))
- if not args.nick:
- return {'Please provide a nickname or -n *': False}
- gkey = self.listseed(args)
+ gkey = self.listseed(args)[1]
if gkey:
- # get the desired seed
- keyresults = self.seeds.list(**kwargs)
- if keyresults and not args.nick == '*' and self.output:
- self.output(['', keyresults], "\n Found GKEY seeds:")
- elif keyresults and self.output:
+ if gkey and not args.nick == '*' and self.output:
+ self.output(['', gkey], "\n Found GKEY seeds:")
+ elif gkey and self.output:
self.output(['all'], "\n Installing seeds:")
else:
self.logger.info("ACTIONS: addkey; "
"Matching seed entry not found")
if args.nick:
- return {"Search failed for: %s" % args.nick: False}
+ return ["Search failed for: %s" % args.nick]
elif args.name:
- return {"Search failed for: %s" % args.name: False}
+ return ["Search failed for: %s" % args.name]
else:
- return {"Search failed for search term": False}
+ return ["Search failed for search term"]
# get confirmation
# fill in code here
keydir = self.config.get_key(args.seeds + "-keydir")
@@ -212,33 +211,25 @@ class Actions(object):
self.gpg = GkeysGPG(self.config, keydir)
results = {}
failed = []
- for key in keyresults:
- if not key.keyid and not key.longkeyid and not args.nick ==
'*':
- self.logger.debug("ACTIONS: addkey; NO key id's to add...
Ignoring")
- return {"Failed: No keyid's found for %s" % key.name: ''}
- elif not key.keyid and not key.longkeyid:
- print("No keyid's found for:", key.nick, key.name,
"Skipping...")
- failed.append(key)
- continue
+ for key in gkey:
self.logger.debug("ACTIONS: addkey; adding key:")
self.logger.debug("ACTIONS: " + str(key))
- results[key.name[0]] = self.gpg.add_key(key)
- for result in results[key.name[0]]:
+ results[key.name] = self.gpg.add_key(key)
+ for result in results[key.name]:
self.logger.debug("ACTIONS: addkey; result.failed = " +
- str(result.failed))
+ str(result.failed))
if self.config.options['print_results']:
- for result in results[key.name[0]]:
+ for result in results[key.name]:
print("key desired:", key.name, ", key added:",
result.username, ", succeeded:",
- not result.failed, ", keyid:", result.keyid,
- ", fingerprint:", result.fingerprint)
+ not result.failed,", fingerprint:",
result.fingerprint)
self.logger.debug("stderr_out: " +
str(result.stderr_out))
if result.failed:
failed.append(key)
if failed and self.output:
self.output(failed, "\n Failed to install:")
- return {'Completed': True}
- return {"No seeds to search or install": False}
+ return ["Completed"]
+ return ["No seeds to search or install"]
def removekey(self, args):
diff --git a/gkeys/fileops.py b/gkeys/fileops.py
index 03014d9..da56f2e 100644
--- a/gkeys/fileops.py
+++ b/gkeys/fileops.py
@@ -1,4 +1,34 @@
import os
+from snakeoil.osutils import (ensure_dirs as snakeoil_ensure_dirs)
+
+
+def ensure_dirs(path, gid=-1, uid=-1, mode=0700, minimal=True, failback=None,
fatal=False):
+ '''Wrapper to snakeoil.osutil's ensure_dirs()
+ This additionally allows for failures to run
+ cleanup or other code and/or raise fatal errors.
+
+ @param path: directory to ensure exists on disk
+ @param gid: a valid GID to set any created directories to
+ @param uid: a valid UID to set any created directories to
+ @param mode: permissions to set any created directories to
+ @param minimal: boolean controlling whether or not the specified mode
+ must be enforced, or is the minimal permissions necessary. For
example,
+ if mode=0755, minimal=True, and a directory exists with mode 0707,
+ this will restore the missing group perms resulting in 757.
+ @param failback: function to run in the event of a failed attemp
+ to create the directory.
+ @return: True if the directory could be created/ensured to have those
+ permissions, False if not.
+ '''
+ succeeded = snakeoil_ensure_dirs(path, gid=-1, uid=-1, mode=0700,
minimal=True)
+ if not succeeded:
+ if failback:
+ failback()
+ if fatal:
+ raise IOError(
+ "Failed to create directory: %s" % path)
+ return succeeded
+
def updatefiles(config, logger):
filename = config['dev-seedfile']
diff --git a/gkeys/lib.py b/gkeys/lib.py
index c10f9ce..b888367 100644
--- a/gkeys/lib.py
+++ b/gkeys/lib.py
@@ -20,13 +20,12 @@ with gentoo-keys specific convienience functions.
from __future__ import print_function
-import os
from os.path import join as pjoin
from pyGPG.gpg import GPG
+from gkeys.fileops import ensure_dirs
from gkeys.log import logger
-
class GkeysGPG(GPG):
'''Gentoo-keys primary gpg class'''
@@ -77,7 +76,7 @@ class GkeysGPG(GPG):
def set_keydir(self, keydir, task, reset=True):
logger.debug("basedir: %s, keydir: %s" % (self.basedir, keydir))
- self.keydir = pjoin(self.basedir, keydir[0])
+ self.keydir = pjoin(self.basedir, keydir)
self.task = task
if reset:
self.config.options['tasks'][task] =
self.config.defaults['tasks'][task][:]
@@ -96,8 +95,8 @@ class GkeysGPG(GPG):
self.set_keyserver()
self.set_keydir(gkey.keydir, 'recv-keys', reset=True)
self.set_keyring('pubring.gpg', 'recv-keys', reset=False)
- if not os.path.exists(self.keydir):
- os.makedirs(self.keydir, mode=0x0700)
+ logger.debug("LIB: add_key; ensure dirs: " + self.keydir)
+ ensure_dirs(str(self.keydir))
keyids = gkey.keyid
results = []
for keyid in keyids: