commit:     c4dfd5ac664f6afec52a77ab911c2130e028e402
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Thu Jan  8 21:51:52 2015 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Fri Jan  9 06:07:29 2015 +0000
URL:        
http://sources.gentoo.org/gitweb/?p=proj/gentoo-keys.git;a=commit;h=c4dfd5ac

gkeys: Fix seed file loading, saving unicode issues

Fix unicode cli args issues.

---
 gkeys/gkeys/actions.py     | 36 +++++++++++++++++++++---------------
 gkeys/gkeys/seed.py        | 28 +++++++++++++++++++++-------
 gkeys/gkeys/seedhandler.py |  6 +++---
 3 files changed, 45 insertions(+), 25 deletions(-)

diff --git a/gkeys/gkeys/actions.py b/gkeys/gkeys/actions.py
index 9d57870..59929cd 100644
--- a/gkeys/gkeys/actions.py
+++ b/gkeys/gkeys/actions.py
@@ -241,15 +241,15 @@ class Actions(object):
         if self.config.options['print_results']:
             if print_key:
                 print()
-                print("Nick.....:", key.nick)
-                print("Name.....:", key.name)
-                print("Keydir...:", key.keydir)
+                print("Nick.....: %s" % key.nick)
+                print("Name.....: %s" % key.name)
+                print("Keydir...: %s" % key.keydir)
             c = 0
             for line in result.split('\n'):
                 if c == 0:
-                    print("Gpg info.:", line)
+                    print("Gpg info.: %s" % line)
                 else:
-                    print("          ", line)
+                    print("           %s" % line)
                 c += 1
             self.logger.debug("data output:\n" + str(result))
         return (True, result)
@@ -289,10 +289,12 @@ class Actions(object):
                     self.logger.debug("ACTIONS: installkey; result.failed = " +
                                       str(result.failed))
                 if self.config.options['print_results']:
+                    msg = "key desired: %(name)s, key added: %(key)s, 
succeeded:" +\
+                        " %(success)s, fingerprint: %(fpr)s"
                     for result in results[key.name]:
-                        print("key desired:", key.name, ", key added:",
-                            result.username, ", succeeded:",
-                            not result.failed, ", fingerprint:", 
result.fingerprint)
+                        print(msg % ({'name': key.name, 'key': result.username,
+                            'success': not result.failed,
+                            'fpr': result.fingerprint}))
                         self.logger.debug("stderr_out: " + 
str(result.stderr_out))
                         if result.failed:
                             failed.append(key)
@@ -488,7 +490,7 @@ class Actions(object):
             return (False, ["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))
+        self.logger.debug("ACTIONS: removekey; kwargs: %s" % str(kwargs))
         success, installed_keys = self.installed(args)[1]
         for gkey in installed_keys:
             if kwargs['nick'] not in gkey.nick:
@@ -539,17 +541,21 @@ class Actions(object):
                 self.logger.debug("ACTIONS: importkey; adding key: %s", 
gkey.name)
                 results[gkey.name] = self.gpg.add_key(gkey)
                 if self.config.options['print_results']:
+                    msg = "key desired: %(name)s, key added: %(key)s, " + \
+                        "succeeded: %(success)s, fingerprint: %(fpr)s"
                     for result in results[gkey.name]:
-                        print("key desired:", gkey.name, ", key added:",
-                            result.username, ", succeeded:",
-                            not result.failed, ", fingerprint:", 
result.fingerprint)
+                        print(msg % ({'name': gkey.name, 'key': 
result.username,
+                            'success': not result.failed,
+                            'fpr': result.fingerprint}))
                         self.logger.debug("stderr_out: " + 
str(result.stderr_out))
                         if result.failed:
-                            self.logger.debug("ACTIONS: importkey; 
result.failed = " + str(result.failed))
+                            self.logger.debug("ACTIONS: importkey; 
result.failed = "
+                                + str(result.failed))
                             failed.append(gkey)
                 if not results[gkey.name][0].failed:
-                    print("Importing: ", gkey.name)
-                    self.logger.debug("ACTIONS: importkey; importing key: %s", 
gkey.name)
+                    print("Importing: %s" % gkey.name)
+                    self.logger.debug("ACTIONS: importkey; importing key: %s"
+                        % gkey.name)
                     _keyring = os.path.join(catdir, args.keyring + '.gpg')
                     self.gpg.add_to_keyring(gkey, catdir, _keyring)
             if failed and self.output:

diff --git a/gkeys/gkeys/seed.py b/gkeys/gkeys/seed.py
index 40bdd46..2f6e72a 100644
--- a/gkeys/gkeys/seed.py
+++ b/gkeys/gkeys/seed.py
@@ -16,8 +16,10 @@ with gentoo-keys specific convienience functions.
 
 '''
 
+import codecs
 import json
 import os
+import sys
 
 from gkeys.exception import UpdateDbError
 from gkeys.log import logger
@@ -25,6 +27,14 @@ from gkeys.gkey import GKEY
 from gkeys.fileops import ensure_dirs
 
 
+if sys.version_info[0] >= 3:
+    def decoder(text, enc='utf_8'):
+        return text
+else:
+    def decoder(text, enc='utf_8'):
+        return codecs.decode(text, enc)
+
+
 class Seeds(object):
     '''Handles all seed key file operations'''
 
@@ -51,7 +61,7 @@ class Seeds(object):
         seedlines = None
         self.seeds = {}
         try:
-            with open(self.filename, "r+") as seedfile:
+            with codecs.open(self.filename, "r+", encoding='utf_8') as 
seedfile:
                 seedlines = json.load(seedfile)
         except IOError as err:
             self.logger.debug("Seed: load; IOError occurred while loading 
file")
@@ -94,7 +104,7 @@ class Seeds(object):
             fatal=True)
         os.umask(int(self.config.get_key("permissions", "files"),0))
         try:
-            with open(self.filename, 'w') as seedfile:
+            with codecs.open(self.filename, 'w', encoding='utf_8') as seedfile:
                 seedfile.write(self._seeds2json(self.seeds))
                 seedfile.write("\n")
         except IOError as err:
@@ -156,7 +166,10 @@ class Seeds(object):
                             break
                 result = res
             else:
-                result = {dev: gkey for dev, gkey in list(result.items()) if 
kwargs[key].lower() in getattr(gkey, key).lower()}
+                result = {dev: gkey for dev, gkey in list(result.items())
+                    if kwargs[key].lower()
+                    in getattr(gkey, key).lower()
+                    }
         return sorted(result.values())
 
 
@@ -193,10 +206,10 @@ class Seeds(object):
                 if  self._list_search(value, val, exact):
                     results.append(seed)
             elif exact:
-                if value in val:
+                if decoder(value) in val:
                     results.append(seed)
             else:
-                if value.lower() in val.lower():
+                if decoder(value).lower() in val.lower():
                     results.append(seed)
 
         return results
@@ -209,11 +222,12 @@ class Seeds(object):
                 found.append(self._list_search(f, values, exact))
             return True in found
         for val in values:
+            val = val
             if exact:
-                if find in val:
+                if decoder(find) in val:
                     return True
             else:
-                if find.lower() in val.lower():
+                if decoder(find).lower() in val.lower():
                     return True
         return False
 

diff --git a/gkeys/gkeys/seedhandler.py b/gkeys/gkeys/seedhandler.py
index 5f15222..adf9507 100644
--- a/gkeys/gkeys/seedhandler.py
+++ b/gkeys/gkeys/seedhandler.py
@@ -16,7 +16,7 @@ from json import load
 
 from gkeys.exception import UpdateDbError
 from gkeys.gkey import GKEY
-from gkeys.seed import Seeds
+from gkeys.seed import Seeds, decoder
 from gkeys.fileops import ensure_dirs
 
 
@@ -51,10 +51,10 @@ class SeedHandler(object):
         for attr in GKEY._fields:
             try:
                 value = getattr(args, attr)
-                if attr == 'name' and value:
+                if attr == 'name' and isinstance(value, list):
                     value = " ".join(value)
                 if value is not None:
-                    keyinfo[attr] = value
+                    keyinfo[attr] = decoder(value)
             except AttributeError:
                 pass
         return keyinfo

Reply via email to