Disabled actor rotation for speed
[flail.git] / config.py
blobcb7a6c2077aba9e47e50c5c9c22ab7d9db4276d6
1 from __future__ import division
2 from xml.sax import ContentHandler
6 class handler (ContentHandler):
8 def __init__ (self, data):
9 ContentHandler.__init__ (self)
10 self.data = data
11 self.trace = []
13 def startElement (self, name, attrs):
14 if not self.trace and name != 'config':
15 raise SAXParseException ('<%s> unexpected' % name)
17 self.trace.append (name)
19 def endElement (self, name):
20 self.trace.pop ()
22 def characters (self, content):
23 content = content.strip ()
25 if content:
26 self.data['.'.join (self.trace[1:])] = content
30 class config (dict):
32 def __init__ (self, path = 'data/config.xml', defaults = {}):
33 dict.__init__ (self)
34 self.path, self.defaults = path, defaults
36 try:
37 from xml.sax import parse
38 parse (path, handler (self))
39 except IOError:
40 pass
42 def __getitem__ (self, key):
43 if dict.__contains__ (self, key):
44 return dict.__getitem__ (self, key)
45 else:
46 return self.defaults[key]
48 def save (self, path = None):
49 if not path:
50 path = self.path
52 if not path:
53 path = 'data/config.xml'
55 file = open (path, 'w')
57 try:
58 file.write ('<config>\n')
60 keys = {}
62 for k in self.keys ():
63 keys[k] = None
65 for k in self.defaults.keys ():
66 keys[k] = None
68 keys = keys.keys ()
69 keys.sort ()
70 trace = []
72 for k in keys:
73 value = self[k]
74 path = k.split ('.')
76 while trace != path[:len (trace)]:
77 file.write (len (trace) * ' ' + '</%s>\n' % trace.pop ())
79 path, _, name = k.rpartition ('.')
80 path = path.split ('.')
82 while trace != path:
83 trace.append (path[len (trace)])
84 file.write (len (trace) * ' ' + '<%s>\n' % trace[-1])
86 file.write (len (trace) * ' ' + ' <%s>%s</%s>\n' %
87 (name, value, name))
89 while trace:
90 file.write (len (trace) * ' ' + '</%s>\n' % trace.pop ())
92 file.write ('</config>\n')
93 finally:
94 file.close ()