mirror of https://github.com/Mikaela/Limnoria.git
I think there are bugs here, some tests are failing, but it's late and I can't figure out why.
This commit is contained in:
parent
852e1dcb56
commit
ed63bc5435
|
@ -67,7 +67,6 @@ def open(filename, clear=False):
|
||||||
for (i, line) in enumerate(fd):
|
for (i, line) in enumerate(fd):
|
||||||
line = line.rstrip('\r\n')
|
line = line.rstrip('\r\n')
|
||||||
try:
|
try:
|
||||||
#print '***', repr(line)
|
|
||||||
(key, value) = re.split(r'(?<!\\):', line, 1)
|
(key, value) = re.split(r'(?<!\\):', line, 1)
|
||||||
key = key.strip()
|
key = key.strip()
|
||||||
value = value.strip()
|
value = value.strip()
|
||||||
|
@ -137,7 +136,7 @@ class Group(object):
|
||||||
"""A group; it doesn't hold a value unless handled by a subclass."""
|
"""A group; it doesn't hold a value unless handled by a subclass."""
|
||||||
def __init__(self, supplyDefault=False):
|
def __init__(self, supplyDefault=False):
|
||||||
self._name = 'unset'
|
self._name = 'unset'
|
||||||
self.added = []
|
self._added = []
|
||||||
self._children = utils.InsensitivePreservingDict()
|
self._children = utils.InsensitivePreservingDict()
|
||||||
self._lastModified = 0
|
self._lastModified = 0
|
||||||
self._supplyDefault = supplyDefault
|
self._supplyDefault = supplyDefault
|
||||||
|
@ -183,40 +182,48 @@ class Group(object):
|
||||||
return self.__getattr__(attr)
|
return self.__getattr__(attr)
|
||||||
|
|
||||||
def setName(self, name):
|
def setName(self, name):
|
||||||
#print '***', name
|
|
||||||
self._name = name
|
self._name = name
|
||||||
if name in _cache and self._lastModified < _lastModified:
|
if name in _cache and self._lastModified < _lastModified:
|
||||||
#print '***>', _cache[name]
|
|
||||||
self.set(_cache[name])
|
self.set(_cache[name])
|
||||||
if self._supplyDefault:
|
if self._supplyDefault:
|
||||||
|
# We do this because otherwise these values won't get registered,
|
||||||
|
# and thus won't be saved unless they're used. That's baaaaaaad.
|
||||||
for (k, v) in _cache.iteritems():
|
for (k, v) in _cache.iteritems():
|
||||||
if k.startswith(self._name):
|
if k.startswith(self._name) and k != self._name:
|
||||||
group = split(k)[-1]
|
rest = k[len(self._name)+1:] # +1 for leftmost dot.
|
||||||
try:
|
restGroups = split(rest)
|
||||||
self.__makeChild(group, v)
|
if len(restGroups) == 1:
|
||||||
except InvalidRegistryValue:
|
group = restGroups[0]
|
||||||
# It's probably supposed to be registered later.
|
try:
|
||||||
pass
|
self.__makeChild(group, v)
|
||||||
|
except InvalidRegistryValue:
|
||||||
|
# It's probably supposed to be registered later.
|
||||||
|
pass
|
||||||
|
|
||||||
def register(self, name, node=None):
|
def register(self, name, node=None):
|
||||||
if not isValidRegistryName(name):
|
if not isValidRegistryName(name):
|
||||||
raise InvalidRegistryName, name
|
raise InvalidRegistryName, repr(name)
|
||||||
if node is None:
|
if node is None:
|
||||||
node = Group(self._supplyDefault)
|
node = Group()
|
||||||
if name not in self._children: # XXX Is this right?
|
if name in self._children:
|
||||||
self._children[name] = node
|
# It's already here, let's copy some stuff over.
|
||||||
self.added.append(name)
|
oldNode = self._children[name]
|
||||||
names = split(self._name)
|
node._added = oldNode._added
|
||||||
names.append(name)
|
node._children = oldNode._children
|
||||||
fullname = join(names)
|
self._children[name] = node
|
||||||
node.setName(fullname)
|
if name not in self._added:
|
||||||
|
self._added.append(name)
|
||||||
|
names = split(self._name)
|
||||||
|
names.append(name)
|
||||||
|
fullname = join(names)
|
||||||
|
node.setName(fullname)
|
||||||
return node
|
return node
|
||||||
|
|
||||||
def unregister(self, name):
|
def unregister(self, name):
|
||||||
try:
|
try:
|
||||||
node = self._children[name]
|
node = self._children[name]
|
||||||
del self._children[name]
|
del self._children[name]
|
||||||
self.added.remove(name)
|
self._added.remove(name)
|
||||||
if node._name in _cache:
|
if node._name in _cache:
|
||||||
del _cache[node._name]
|
del _cache[node._name]
|
||||||
return node
|
return node
|
||||||
|
@ -229,7 +236,7 @@ class Group(object):
|
||||||
|
|
||||||
def getValues(self, getChildren=False, fullNames=True):
|
def getValues(self, getChildren=False, fullNames=True):
|
||||||
L = []
|
L = []
|
||||||
for name in self.added:
|
for name in self._added:
|
||||||
node = self._children[name]
|
node = self._children[name]
|
||||||
if hasattr(node, 'value') or hasattr(node, 'help'):
|
if hasattr(node, 'value') or hasattr(node, 'help'):
|
||||||
if node.__class__ is not self.X:
|
if node.__class__ is not self.X:
|
||||||
|
|
Loading…
Reference in New Issue