commit:     58d9bbc078e6714e4a9ae1975576428bc355bdc0
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Jun 30 17:41:08 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Mon Jun 30 17:41:08 2014 +0000
URL:        
http://sources.gentoo.org/gitweb/?p=proj/gentoo-keys.git;a=commit;h=58d9bbc0

add seed file installed db

---
 gkeys/lib.py  | 41 ++++++++++++++++++++++++++---------------
 gkeys/seed.py | 34 +++++++++++++++++++---------------
 2 files changed, 45 insertions(+), 30 deletions(-)

diff --git a/gkeys/lib.py b/gkeys/lib.py
index b888367..c80cff6 100644
--- a/gkeys/lib.py
+++ b/gkeys/lib.py
@@ -25,6 +25,7 @@ from os.path import join as pjoin
 from pyGPG.gpg import GPG
 from gkeys.fileops import ensure_dirs
 from gkeys.log import logger
+from gkeys.seed import Seeds
 
 class GkeysGPG(GPG):
     '''Gentoo-keys primary gpg class'''
@@ -90,38 +91,44 @@ class GkeysGPG(GPG):
         '''Add the specified key to the specified keydir
 
         @param gkey: GKEY namedtuple with
-            (name, keyid/longkeyid, keydir, fingerprint,)
+            (name, nick, keydir, fingerprint)
         '''
         self.set_keyserver()
         self.set_keydir(gkey.keydir, 'recv-keys', reset=True)
         self.set_keyring('pubring.gpg', 'recv-keys', reset=False)
+        # Save the gkey seed to the installed db
+        self.set_keyseedfile()
+        self.seedfile.update(gkey)
+        if not self.seedfile.save():
+            logger.error("GkeysGPG.add_key(); failed to save seed" + gkey.nick)
+            return []
         logger.debug("LIB: add_key; ensure dirs: " + self.keydir)
         ensure_dirs(str(self.keydir))
-        keyids = gkey.keyid
+        fingerprints = gkey.fingerprint
         results = []
-        for keyid in keyids:
-            logger.debug("LIB: add_key; final keyids" + keyid)
+        for fingerprint in fingerprints:
+            logger.debug("LIB: add_key; adding fingerprint" + fingerprint)
             logger.debug("** Calling runGPG with Running 'gpg %s --recv-keys 
%s' for: %s"
                 % (' '.join(self.config.get_key('tasks', 'recv-keys')),
-                    keyid, gkey.name)
-                )
-            result = self.runGPG(task='recv-keys', inputfile=keyid)
+                    fingerprint, gkey.name))
+            result = self.runGPG(task='recv-keys', inputfile=fingerprint)
             logger.info('GPG return code: ' + str(result.returncode))
             if result.fingerprint in gkey.fingerprint:
                 result.failed = False
                 message = "Fingerprints match... Import successful: "
-                message += "key: %s" %keyid
-                message += "\n    result len: %s, %s" 
%(len(result.fingerprint), result.fingerprint)
-                message += "\n    gkey len: %s, %s" 
%(len(gkey.fingerprint[0]), gkey.fingerprint[0])
+                message += "fingerprint: %s" % fingerprint
+                message += "\n result len: %s, %s" % (len(result.fingerprint), 
result.fingerprint)
+                message += "\n gkey len: %s, %s" % (len(gkey.fingerprint[0]), 
gkey.fingerprint[0])
                 logger.info(message)
             else:
                 result.failed = True
                 message = "Fingerprints do not match... Import failed for "
-                message += "key: %s" %keyid
-                message += "\n     result:   %s" %(result.fingerprint)
-                message += "\n     gkey..: %s" %(str(gkey.fingerprint))
+                message += "fingerprint: %s" % fingerprint
+                message += "\n result: %s" % (result.fingerprint)
+                message += "\n gkey..: %s" % (str(gkey.fingerprint))
                 logger.error(message)
             results.append(result)
+            print("lib.add_key(), result =")
             print(result.stderr_out)
         return results
 
@@ -129,7 +136,7 @@ class GkeysGPG(GPG):
     def del_key(self, gkey, keydir):
         '''Delete the specified key in the specified keydir
 
-        @param gkey: GKEY namedtuple with (name, keyid/longkeyid, fingerprint)
+        @param gkey: GKEY namedtuple with (name, nick, keydir, fingerprint)
         '''
         return []
 
@@ -143,7 +150,7 @@ class GkeysGPG(GPG):
     def update_key(self, gkey, keydir):
         '''Update the specified key in the specified keydir
 
-        @param key: tuple of (name, keyid, fingerprint)
+        @param key: tuple of (name, nick, keydir, fingerprint)
         @param keydir: the keydir to add the key to
         '''
         return []
@@ -195,3 +202,7 @@ class GkeysGPG(GPG):
         '''Verify the file specified at filepath
         '''
         pass
+
+    def set_keyseedfile(self):
+        self.seedfile = Seeds(pjoin(self.keydir, 'gkey.seeds'))
+        self.seedfile.load()

diff --git a/gkeys/seed.py b/gkeys/seed.py
index 9dfa955..cfb2b98 100644
--- a/gkeys/seed.py
+++ b/gkeys/seed.py
@@ -88,20 +88,17 @@ class Seeds(object):
         return False
 
 
-    def delete(self, gkey=None, index=None):
+    def delete(self, gkey=None):
         '''Delete the key from the seeds in memory
 
         @param gkey: GKEY, the matching GKEY to delete
-        @param index: int, '''
+        '''
         if gkey:
             try:
-                self.seeds.pop(getattr(gkey[0], 'nick'), None)
+                self.seeds.pop(gkey.nick, None)
             except ValueError:
                 return False
             return True
-        elif index:
-            self.seeds.pop(index)
-            return True
 
 
     def list(self, **kwargs):
@@ -125,19 +122,16 @@ class Seeds(object):
         '''Search for the keys matching the regular expression pattern'''
         pass
 
+    def nick_search(self, nick):
+        '''Searches the seeds for a matching nick
 
-    def index(self, gkey):
-        '''The index of the gkey in the seeds list
-
-        @param gkey: GKEY, the matching GKEY to delete
-        @return int
+        @param nick: string
+        @returns GKEY instance or None
         '''
         try:
-            index = self.seeds.index(gkey)
-        except ValueError:
+            return self.seeds[nick]
+        except KeyError:
             return None
-        return index
-
 
     def _error(self, err):
         '''Class error logging function'''
@@ -153,3 +147,13 @@ class Seeds(object):
             if is_gkey:
                 seeds[dev] = dict(value._asdict())
         return json.dumps(seeds, sort_keys=True, indent=4)
+
+    def update(self, gkey):
+        '''Looks for existance of a matching nick already in the seedfile
+        if it exists. Then either adds or replaces the gkey
+        @param gkey: GKEY instance
+        '''
+        oldkey = self.nick_search(gkey.nick[0])
+        if oldkey:
+            self.delete(oldkey)
+        self.add(gkey.nick, gkey)

Reply via email to