MCPcopy Create free account
hub / github.com/ActiveState/code / Key

Class Key

recipes/Python/502268_Win_Registry_module/recipe-502268.py:35–126  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

33 return '%s : %s' % (self.name, val)
34
35class Key(object):
36 # Registry Key
37 def __init__(self, parent, name):
38 self.parent, self.name = parent, name
39 self.level=parent.level+1
40 # ! ! ! opens keys in read/write mode ! ! !
41 self.wrk=reg.OpenKey(parent.wrk, self.name, 0, reg.KEY_ALL_ACCESS)
42 self._keys = self._vals = None
43 @property
44 def keys(self):
45 # returns a dict of subkeys
46 if not self._keys:
47 self._keys={}
48 for i in xrange(reg.QueryInfoKey(self.wrk)[0]):
49 name=reg.EnumKey(self.wrk, i).lower()
50 try:
51 self._keys[name]=Key(self, name)
52 except WindowsError: pass
53 return self._keys
54 @property
55 def vals(self):
56 # returns the list of values
57 if not self._vals:
58 self._vals=[]
59 for i in xrange(reg.QueryInfoKey(self.wrk)[1]):
60 try:
61 self._vals.append(Val(self, *reg.EnumValue(self.wrk, i)))
62 except WindowsError: pass
63 return self._vals
64 def __call__(self, path):
65 # access to a key
66 path=path.lower()
67 key=self
68 for p in path.split('/'):
69 key=key.keys[p]
70 return key
71 def __str__(self):
72 return '%s%s/' % (self.parent.__str__(), self.name)
73 @property
74 def indented(self):
75 return '%s%s' % (indent*self.level, self.name)
76 def walk(self):
77 # walk thru the subkeys tree
78 for key in self.keys.itervalues():
79 yield key
80 for k in key.walk():
81 yield k
82 def grep(self, text, kv='both', typ=(rTyp['STR'],)):
83 # searching keys and/or values for some text
84 for k in self.walk():
85 if kv in ('keys', 'both') and text in k.name:
86 yield k, None
87 if kv in ('vals', 'both'):
88 for v in k.vals:
89 if (v.typ in typ) and (text in v.val):
90 yield k, v
91 def grep2(self, text, kv='both', typ=(rTyp['STR'],)):
92 # a grep variant, might be more convinient in some cases

Callers 2

keysMethod · 0.70
createMethod · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected