mirror of
https://github.com/Mikaela/Limnoria.git
synced 2025-02-02 15:44:06 +01:00
Uh, one wonders why I didn't do this in the first place. Just fix the bugs that are already there, Jeremy.
This commit is contained in:
parent
96fa5e42d5
commit
980762492b
@ -67,6 +67,7 @@ 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()
|
||||||
@ -98,22 +99,13 @@ def close(registry, filename, annotated=True, helpOnceOnly=False):
|
|||||||
try:
|
try:
|
||||||
original = value.value
|
original = value.value
|
||||||
value.value = value._default
|
value.value = value._default
|
||||||
try:
|
lines.append('# Default value: %s\n' % value)
|
||||||
s = str(value)
|
|
||||||
except Exception, e:
|
|
||||||
s = 'Error converting to string: %s' % \
|
|
||||||
utils.exnToString(e)
|
|
||||||
lines.append('# Default value: %s\n' % s)
|
|
||||||
finally:
|
finally:
|
||||||
value.value = original
|
value.value = original
|
||||||
lines.append('###\n')
|
lines.append('###\n')
|
||||||
fd.writelines(lines)
|
fd.writelines(lines)
|
||||||
if hasattr(value, 'value'): # This lets us print help for non-valued.
|
if hasattr(value, 'value'): # This lets us print help for non-valued.
|
||||||
try:
|
fd.write('%s: %s\n' % (name, value))
|
||||||
s = str(value)
|
|
||||||
except Exception, e:
|
|
||||||
s = 'Error converting to string: %s' % utils.exnToString(e)
|
|
||||||
fd.write('%s: %s\n' % (name, s))
|
|
||||||
fd.close()
|
fd.close()
|
||||||
|
|
||||||
def isValidRegistryName(name):
|
def isValidRegistryName(name):
|
||||||
@ -153,15 +145,12 @@ class Group(object):
|
|||||||
class X(OriginalClass):
|
class X(OriginalClass):
|
||||||
"""This class exists to differentiate those values that have
|
"""This class exists to differentiate those values that have
|
||||||
been changed from their default from those that haven't."""
|
been changed from their default from those that haven't."""
|
||||||
|
def set(self, *args):
|
||||||
|
self.__class__ = OriginalClass
|
||||||
|
self.set(*args)
|
||||||
def setValue(self, *args):
|
def setValue(self, *args):
|
||||||
comeBack = self._lastModified == 0
|
|
||||||
if not comeBack:
|
|
||||||
print '***', 'Changing %s to its OriginalClass.'%self._name
|
|
||||||
print '******', utils.stackTrace(compact=True)
|
|
||||||
self.__class__ = OriginalClass
|
self.__class__ = OriginalClass
|
||||||
self.setValue(*args)
|
self.setValue(*args)
|
||||||
if comeBack:
|
|
||||||
self.__class__ = X
|
|
||||||
self.X = X
|
self.X = X
|
||||||
|
|
||||||
def __call__(self):
|
def __call__(self):
|
||||||
@ -175,7 +164,7 @@ class Group(object):
|
|||||||
v = self.__class__(self._default, self.help)
|
v = self.__class__(self._default, self.help)
|
||||||
v.set(s)
|
v.set(s)
|
||||||
v.__class__ = self.X
|
v.__class__ = self.X
|
||||||
v._lastModified = time.time()
|
v._supplyDefault = False
|
||||||
v.help = '' # Clear this so it doesn't print a bazillion times.
|
v.help = '' # Clear this so it doesn't print a bazillion times.
|
||||||
self.register(attr, v)
|
self.register(attr, v)
|
||||||
return v
|
return v
|
||||||
@ -194,18 +183,17 @@ 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) and k != self._name:
|
if k.startswith(self._name):
|
||||||
rest = k[len(self._name)+1:] # +1 for leftmost dot.
|
rest = k[len(self._name)+1:] # +1 is for .
|
||||||
restGroups = split(rest)
|
parts = split(rest)
|
||||||
if len(restGroups) == 1:
|
if len(parts) == 1 and parts[0] == name:
|
||||||
group = restGroups[0]
|
|
||||||
try:
|
try:
|
||||||
self.__makeChild(group, v)
|
self.__makeChild(group, v)
|
||||||
except InvalidRegistryValue:
|
except InvalidRegistryValue:
|
||||||
@ -214,31 +202,22 @@ class Group(object):
|
|||||||
|
|
||||||
def register(self, name, node=None):
|
def register(self, name, node=None):
|
||||||
if not isValidRegistryName(name):
|
if not isValidRegistryName(name):
|
||||||
raise InvalidRegistryName, repr(name)
|
raise InvalidRegistryName, name
|
||||||
if node is None:
|
if node is None:
|
||||||
node = Group()
|
node = Group()
|
||||||
if name in self._children:
|
if name not in self._children: # XXX Is this right?
|
||||||
# It's already here, let's copy some stuff over.
|
self._children[name] = node
|
||||||
oldNode = self._children[name]
|
|
||||||
node._name = oldNode._name
|
|
||||||
node._added = oldNode._added
|
|
||||||
node._children = oldNode._children
|
|
||||||
for v in node._children.values():
|
|
||||||
if v.__class__ is oldNode.X:
|
|
||||||
v.__class__ = node.X
|
|
||||||
node._lastModified = oldNode._lastModified
|
|
||||||
self._children[name] = node
|
|
||||||
if name not in self._added:
|
|
||||||
self._added.append(name)
|
self._added.append(name)
|
||||||
names = split(self._name)
|
names = split(self._name)
|
||||||
names.append(name)
|
names.append(name)
|
||||||
fullname = join(names)
|
fullname = join(names)
|
||||||
node.setName(fullname)
|
node.setName(fullname)
|
||||||
return node
|
return node
|
||||||
|
|
||||||
def unregister(self, name):
|
def unregister(self, name):
|
||||||
try:
|
try:
|
||||||
node = self._children.pop(name)
|
node = 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]
|
||||||
@ -285,12 +264,9 @@ class Value(Group):
|
|||||||
raise InvalidRegistryValue, utils.normalizeWhitespace(s)
|
raise InvalidRegistryValue, utils.normalizeWhitespace(s)
|
||||||
|
|
||||||
def setName(self, *args):
|
def setName(self, *args):
|
||||||
# If we're getting our name for the first time, we should definitely
|
|
||||||
# look in the _cache for our value.
|
|
||||||
if self._name == 'unset':
|
if self._name == 'unset':
|
||||||
self._lastModified = 0
|
self._lastModified = 0
|
||||||
Group.setName(self, *args)
|
Group.setName(self, *args)
|
||||||
# Now we can feel safe setting our _lastModified to now.
|
|
||||||
self._lastModified = time.time()
|
self._lastModified = time.time()
|
||||||
|
|
||||||
def set(self, s):
|
def set(self, s):
|
||||||
@ -438,9 +414,9 @@ class OnlySomeStrings(String):
|
|||||||
self.error()
|
self.error()
|
||||||
|
|
||||||
class NormalizedString(String):
|
class NormalizedString(String):
|
||||||
def __init__(self, default, help):
|
def __init__(self, default, help, **kwargs):
|
||||||
default = self.normalize(default)
|
default = self.normalize(default)
|
||||||
String.__init__(self, default, help)
|
String.__init__(self, default, help, **kwargs)
|
||||||
|
|
||||||
def normalize(self, s):
|
def normalize(self, s):
|
||||||
return utils.normalizeWhitespace(s.strip())
|
return utils.normalizeWhitespace(s.strip())
|
||||||
|
Loading…
Reference in New Issue
Block a user