4 '''Gentoo-keys - seed.py
5 This is gentoo-keys superclass which wraps the pyGPG lib
6 with gentoo-keys specific convienience functions.
8 Distributed under the terms of the GNU General Public License v2
12 Distributed under the terms of the GNU General Public License v2
15 Brian Dolbec <dolsen@gentoo.org>
20 from gkeys.log import logger
21 from gkeys.config import GKEY
25 '''Handles all seed key file operations'''
28 def __init__(self, filepath=None):
29 '''Seeds class init function
31 @param filepath: string of the file to load
33 self.filename = filepath
37 def load(self, filename=None):
38 '''Load the seed file into memory'''
40 self.filename = filename
42 logger.debug("Seed: load; Not a valid filename: '%s'" % str(self.filename))
44 logger.debug("Seeds: load; Begin loading seed file %s" % self.filename)
48 with open(self.filename) as seedfile:
49 seedlines = json.load(seedfile)
50 except IOError as err:
51 logger.debug("Seed: load; IOError occurred while loading file")
54 for seed in seedlines.items():
56 self.seeds[seed[0]] = GKEY(**seed[1])
57 #except Exception as err:
58 #logger.debug("Seed: load; Error splitting seed: %s" % seed)
59 #logger.debug("Seed: load; ...............parts: %s" % str(parts))
61 logger.debug("Seed: load; Completed loading seed file %s" % self.filename)
65 def save(self, filename=None):
66 '''Save the seeds to the file'''
68 self.filename = filename
70 logger.debug("Seed: save; Not a valid filename: '%s'" % str(self.filename))
72 logger.debug("Seed: save; Begin saving seed file %s" % self.filename)
74 with open(self.filename, 'w') as seedfile:
75 seedfile.write(self._seeds2json(self.seeds))
77 except IOError as err:
83 def add(self, dev, gkey):
84 '''Add a new seed key to memory'''
85 if isinstance(gkey, dict) or isinstance(gkey, GKEY):
86 self.seeds[dev] = gkey
91 def delete(self, gkey=None, index=None):
92 '''Delete the key from the seeds in memory
94 @param gkey: GKEY, the matching GKEY to delete
95 @param index: int, '''
98 self.seeds.pop(getattr(gkey[0], 'nick')[0], None)
103 self.seeds.pop(index)
107 def list(self, **kwargs):
108 '''List the key or keys matching the kwargs argument or all
110 @param kwargs: dict of GKEY._fields and values
113 if not kwargs or kwargs['nick'] == '*':
114 return self.seeds.values()[0]
115 # proceed with the search
116 # discard any invalid keys
120 result = {dev: gkey for dev, gkey in result.items() if kwargs[key] in getattr(gkey, key)}
121 return result.values()
124 def search(self, pattern):
125 '''Search for the keys matching the regular expression pattern'''
129 def index(self, gkey):
130 '''The index of the gkey in the seeds list
132 @param gkey: GKEY, the matching GKEY to delete
136 index = self.seeds.index(gkey)
142 def _error(self, err):
143 '''Class error logging function'''
144 logger.error("Seed: Error processing seed file %s" % self.filename)
145 logger.error("Seed: Error was: %s" % str(err))
148 def _seeds2json(self, seeds):
150 if isinstance(seeds.values()[0], GKEY):
152 for dev, value in seeds.items():
154 seeds[dev] = dict(value._asdict())
155 return json.dumps(seeds, sort_keys=True, indent=4)