1 from __future__
import division
2 from xml
.sax
import ContentHandler
6 class handler (ContentHandler
):
8 def __init__ (self
, data
):
9 ContentHandler
.__init
__ (self
)
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
):
22 def characters (self
, content
):
23 content
= content
.strip ()
26 self
.data
['.'.join (self
.trace
[1:])] = content
32 def __init__ (self
, path
= 'data/config.xml', defaults
= {}):
34 self
.path
, self
.defaults
= path
, defaults
37 from xml
.sax
import parse
38 parse (path
, handler (self
))
42 def __getitem__ (self
, key
):
43 if dict.__contains
__ (self
, key
):
44 return dict.__getitem
__ (self
, key
)
46 return self
.defaults
[key
]
48 def save (self
, path
= None):
53 path
= 'data/config.xml'
55 file = open (path
, 'w')
58 file.write ('<config>\n')
62 for k
in self
.keys ():
65 for k
in self
.defaults
.keys ():
76 while trace
!= path
[:len (trace
)]:
77 file.write (len (trace
) * ' ' + '</%s>\n' % trace
.pop ())
79 path
, _
, name
= k
.rpartition ('.')
80 path
= path
.split ('.')
83 trace
.append (path
[len (trace
)])
84 file.write (len (trace
) * ' ' + '<%s>\n' % trace
[-1])
86 file.write (len (trace
) * ' ' + ' <%s>%s</%s>\n' %
90 file.write (len (trace
) * ' ' + '</%s>\n' % trace
.pop ())
92 file.write ('</config>\n')