comparison python/prefs.py @ 143:31a41264d51f

add a naive prefs reader
author Jeff Hammel <jhammel@mozilla.com>
date Tue, 31 May 2011 15:34:36 -0700
parents
children
comparison
equal deleted inserted replaced
142:09c10061838c 143:31a41264d51f
1 import re
2 comment = re.compile('/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/', re.MULTILINE)
3
4 def read(filename):
5 token = '##//' # magical token
6 lines = [i.strip() for i in file(filename).readlines() if i.strip()]
7 retval = {}
8 _lines = []
9 for line in lines:
10 if line.startswith('#'):
11 continue
12 if '//' in line:
13 line = line.replace('//', token)
14 _lines.append(line)
15 string = '\n'.join(_lines)
16 string = re.sub(comment, '', string)
17 def pref(a, b):
18 retval[a] = b
19 lines = [i.strip().rstrip(';') for i in string.split('\n') if i.strip()]
20 for line in lines:
21 try:
22 _globals = {'retval': retval, 'pref': pref, 'user_pref': pref, 'true': True, 'false': False}
23 eval(line, _globals, {})
24 except SyntaxError:
25 print line
26 import pdb; pdb.set_trace()
27 for key in retval:
28 if isinstance(retval[key], basestring) and token in retval[key]:
29 retval[key] = retval[key].replace(token, '//')
30 return retval
31
32 def write(filename, prefs, pref_string='user_pref("%s", %s);'):
33 f = file(filename, 'w')
34 for key, value in prefs.items():
35 if value is True:
36 print >> f, pref_string % (key, 'true')
37 elif value is False:
38 print >> f, pref_string % (key, 'true')
39 elif isinstance(value, basestring):
40 print >> f, pref_string % (key, repr(string(value)))
41 else:
42 print >> f, pref_string % (key, value) # should be numeric!
43 f.close()
44
45 if __name__ == '__main__':
46 import sys
47 if not sys.argv[1:]:
48 sys.exit(1)
49 print read(sys.argv[1])