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:

Reply via email to