Mercurial > hg > config
comparison python/simpleini.py @ 112:e85298a35998
add a simpleini parser
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Thu, 02 Dec 2010 09:53:29 -0800 |
parents | |
children | 44534594f402 |
comparison
equal
deleted
inserted
replaced
111:2db73718f645 | 112:e85298a35998 |
---|---|
1 #!/usr/bin/env python | |
2 | |
3 import os | |
4 | |
5 def read(fp, comments=';#', separators=('=', ':')): | |
6 | |
7 if isinstance(fp, basestring): | |
8 fp = file(fp) | |
9 | |
10 sections = [] | |
11 key = value = None | |
12 | |
13 for line in fp.readlines(): | |
14 | |
15 stripped = line.strip() | |
16 | |
17 # ignore blank lines | |
18 if not stripped: | |
19 continue | |
20 | |
21 # ignore comment lines | |
22 if stripped[0] in comments: | |
23 continue | |
24 | |
25 # check for a new section | |
26 if len(stripped) > 2 and stripped[0] == '[' and stripped[-1] == ']': | |
27 section = stripped[1:-1].strip() | |
28 sections.append((section, {})) | |
29 key = value = None | |
30 # TODO: should probably make sure this section doesn't already exist | |
31 continue | |
32 | |
33 # if there aren't any sections yet, something bad happen | |
34 if not sections: | |
35 raise Exception('No sections yet :(') | |
36 | |
37 # (key, value) pair | |
38 for separator in separators: | |
39 if separator in stripped: | |
40 key, value = stripped.split(separator, 1) | |
41 key = key.strip() | |
42 value = value.strip() | |
43 sections[-1][1][key] = value | |
44 # TODO: should probably make sure this key isn't already in the section | |
45 break | |
46 else: | |
47 # continuation line ? | |
48 if line[0].isspace() and key: | |
49 value = '%s%s%s' % (value, os.linesep, stripped) | |
50 sections[-1][1][key] = value | |
51 else: | |
52 # something bad happen! | |
53 raise Exception("Not sure what you're trying to do") | |
54 | |
55 return sections | |
56 | |
57 if __name__ == '__main__': | |
58 import sys | |
59 for i in sys.argv[1:]: | |
60 print read(i) |