Mercurial > cpython-lru_cache-weakref
annotate Lib/ConfigParser.py @ 19283:b865cd5c1925 legacy-trunk
Added comments before recently added/assigned slots in the type object,
so the backward compatibility issues will be easier to understand. I only
added comments indicating additions and assignments back to Python 2.0.
| author | Fred Drake <fdrake@acm.org> |
|---|---|
| date | Wed, 15 Aug 2001 18:32:33 +0000 |
| parents | 373b6abadc50 |
| children | 7257e87e0720 |
| rev | line source |
|---|---|
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 """Configuration file parser. |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 A setup file consists of sections, lead by a "[section]" header, |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 and followed by "name: value" entries, with continuations and such in |
| 8614 | 5 the style of RFC 822. |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 |
| 8614 | 7 The option values can contain format strings which refer to other values in |
| 8 the same section, or values in a special [DEFAULT] section. | |
| 9 | |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 For example: |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
12 something: %(dir)s/whatever |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
13 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
14 would resolve the "%(dir)s" to the value of dir. All reference |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 expansions are done late, on demand. |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 Intrinsic defaults can be specified by passing them into the |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 ConfigParser constructor as a dictionary. |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
20 class: |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
22 ConfigParser -- responsible for for parsing a list of |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
23 configuration files, and managing the parsed database. |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 methods: |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
26 |
|
9961
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
27 __init__(defaults=None) |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
28 create the parser and specify a dictionary of intrinsic defaults. The |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
29 keys must be strings, the values must be appropriate for %()s string |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
30 interpolation. Note that `__name__' is always an intrinsic default; |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
31 it's value is the section's name. |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 |
|
9961
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
33 sections() |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
34 return all the configuration section names, sans DEFAULT |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
35 |
|
11370
41990bce023a
Added has_option(); fix bug in get() which botched interpolation if
Guido van Rossum <guido@python.org>
parents:
11369
diff
changeset
|
36 has_section(section) |
|
41990bce023a
Added has_option(); fix bug in get() which botched interpolation if
Guido van Rossum <guido@python.org>
parents:
11369
diff
changeset
|
37 return whether the given section exists |
|
41990bce023a
Added has_option(); fix bug in get() which botched interpolation if
Guido van Rossum <guido@python.org>
parents:
11369
diff
changeset
|
38 |
|
13600
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
39 has_option(section, option) |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
40 return whether the given option exists in the given section |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
41 |
|
9961
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
42 options(section) |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
43 return list of configuration options for the named section |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
44 |
|
10037
f132ecfdb285
From: Mike Orr <mso@oz.net>
Guido van Rossum <guido@python.org>
parents:
9961
diff
changeset
|
45 read(filenames) |
| 11369 | 46 read and parse the list of named configuration files, given by |
| 47 name. A single filename is also allowed. Non-existing files | |
| 48 are ignored. | |
| 49 | |
| 50 readfp(fp, filename=None) | |
| 51 read and parse one configuration file, given as a file object. | |
| 52 The filename defaults to fp.name; it is only used in error | |
|
11381
4ad14e4dc7e5
fixed a typo in a docstring, and slightly expanded the module
Barry Warsaw <barry@python.org>
parents:
11370
diff
changeset
|
53 messages (if fp has no `name' attribute, the string `<???>' is used). |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 |
|
9961
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
55 get(section, option, raw=0, vars=None) |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
56 return a string value for the named option. All % interpolations are |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
57 expanded in the return values, based on the defaults passed into the |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
58 constructor and the DEFAULT section. Additional substitutions may be |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
59 provided using the `vars' argument, which must be a dictionary whose |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
60 contents override any pre-existing defaults. |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
61 |
|
9961
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
62 getint(section, options) |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
63 like get(), but convert value to an integer |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
64 |
|
9961
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
65 getfloat(section, options) |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
66 like get(), but convert value to a float |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
67 |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
68 getboolean(section, options) |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
69 like get(), but convert value to a boolean (currently defined as 0 or |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
70 1, only) |
|
13600
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
71 |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
72 remove_section(section) |
|
15867
f5a3d98a35bc
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
15501
diff
changeset
|
73 remove the given file section and all its options |
|
13600
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
74 |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
75 remove_option(section, option) |
|
15867
f5a3d98a35bc
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
15501
diff
changeset
|
76 remove the given option from the given section |
|
13600
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
77 |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
78 set(section, option, value) |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
79 set the given option |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
80 |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
81 write(fp) |
|
15867
f5a3d98a35bc
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
15501
diff
changeset
|
82 write the configuration state in .ini format |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
83 """ |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
84 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
85 import string |
| 8614 | 86 import re |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
87 |
|
16070
b5345e99596b
added __all__ lists to a number of Python modules
Skip Montanaro <skip@pobox.com>
parents:
15867
diff
changeset
|
88 __all__ = ["NoSectionError","DuplicateSectionError","NoOptionError", |
|
b5345e99596b
added __all__ lists to a number of Python modules
Skip Montanaro <skip@pobox.com>
parents:
15867
diff
changeset
|
89 "InterpolationError","InterpolationDepthError","ParsingError", |
|
b5345e99596b
added __all__ lists to a number of Python modules
Skip Montanaro <skip@pobox.com>
parents:
15867
diff
changeset
|
90 "MissingSectionHeaderError","ConfigParser", |
|
b5345e99596b
added __all__ lists to a number of Python modules
Skip Montanaro <skip@pobox.com>
parents:
15867
diff
changeset
|
91 "MAX_INTERPOLATION_DEPTH"] |
|
b5345e99596b
added __all__ lists to a number of Python modules
Skip Montanaro <skip@pobox.com>
parents:
15867
diff
changeset
|
92 |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
93 DEFAULTSECT = "DEFAULT" |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
94 |
|
14899
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
95 MAX_INTERPOLATION_DEPTH = 10 |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
96 |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
97 |
|
15867
f5a3d98a35bc
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
15501
diff
changeset
|
98 |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
99 # exception classes |
|
15501
55f4a6e8b5b3
Make ConfigParser.Error inherit from Exception.
Fred Drake <fdrake@acm.org>
parents:
15479
diff
changeset
|
100 class Error(Exception): |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 def __init__(self, msg=''): |
| 8614 | 102 self._msg = msg |
|
15501
55f4a6e8b5b3
Make ConfigParser.Error inherit from Exception.
Fred Drake <fdrake@acm.org>
parents:
15479
diff
changeset
|
103 Exception.__init__(self, msg) |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
104 def __repr__(self): |
| 8614 | 105 return self._msg |
|
15501
55f4a6e8b5b3
Make ConfigParser.Error inherit from Exception.
Fred Drake <fdrake@acm.org>
parents:
15479
diff
changeset
|
106 __str__ = __repr__ |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
107 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
108 class NoSectionError(Error): |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
109 def __init__(self, section): |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
110 Error.__init__(self, 'No section: %s' % section) |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
111 self.section = section |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
112 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
113 class DuplicateSectionError(Error): |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
114 def __init__(self, section): |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
115 Error.__init__(self, "Section %s already exists" % section) |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
116 self.section = section |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
117 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
118 class NoOptionError(Error): |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
119 def __init__(self, option, section): |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
120 Error.__init__(self, "No option `%s' in section: %s" % |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
121 (option, section)) |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
122 self.option = option |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
123 self.section = section |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
124 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
125 class InterpolationError(Error): |
|
8853
bbe9d72bccda
Time machine experiment. Use '__name__' as the special key (always
Barry Warsaw <barry@python.org>
parents:
8614
diff
changeset
|
126 def __init__(self, reference, option, section, rawval): |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
127 Error.__init__(self, |
|
8853
bbe9d72bccda
Time machine experiment. Use '__name__' as the special key (always
Barry Warsaw <barry@python.org>
parents:
8614
diff
changeset
|
128 "Bad value substitution:\n" |
|
bbe9d72bccda
Time machine experiment. Use '__name__' as the special key (always
Barry Warsaw <barry@python.org>
parents:
8614
diff
changeset
|
129 "\tsection: [%s]\n" |
|
bbe9d72bccda
Time machine experiment. Use '__name__' as the special key (always
Barry Warsaw <barry@python.org>
parents:
8614
diff
changeset
|
130 "\toption : %s\n" |
|
bbe9d72bccda
Time machine experiment. Use '__name__' as the special key (always
Barry Warsaw <barry@python.org>
parents:
8614
diff
changeset
|
131 "\tkey : %s\n" |
|
bbe9d72bccda
Time machine experiment. Use '__name__' as the special key (always
Barry Warsaw <barry@python.org>
parents:
8614
diff
changeset
|
132 "\trawval : %s\n" |
|
bbe9d72bccda
Time machine experiment. Use '__name__' as the special key (always
Barry Warsaw <barry@python.org>
parents:
8614
diff
changeset
|
133 % (section, option, reference, rawval)) |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
134 self.reference = reference |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
135 self.option = option |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
136 self.section = section |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
137 |
|
14899
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
138 class InterpolationDepthError(Error): |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
139 def __init__(self, option, section, rawval): |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
140 Error.__init__(self, |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
141 "Value interpolation too deeply recursive:\n" |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
142 "\tsection: [%s]\n" |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
143 "\toption : %s\n" |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
144 "\trawval : %s\n" |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
145 % (section, option, rawval)) |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
146 self.option = option |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
147 self.section = section |
| 8614 | 148 |
| 149 class ParsingError(Error): | |
| 150 def __init__(self, filename): | |
| 151 Error.__init__(self, 'File contains parsing errors: %s' % filename) | |
| 152 self.filename = filename | |
| 153 self.errors = [] | |
| 154 | |
| 155 def append(self, lineno, line): | |
| 156 self.errors.append((lineno, line)) | |
| 157 self._msg = self._msg + '\n\t[line %2d]: %s' % (lineno, line) | |
| 158 | |
|
14899
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
159 class MissingSectionHeaderError(ParsingError): |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
160 def __init__(self, filename, lineno, line): |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
161 Error.__init__( |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
162 self, |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
163 'File contains no section headers.\nfile: %s, line: %d\n%s' % |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
164 (filename, lineno, line)) |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
165 self.filename = filename |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
166 self.lineno = lineno |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
167 self.line = line |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
168 |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
169 |
|
15867
f5a3d98a35bc
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
15501
diff
changeset
|
170 |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
171 class ConfigParser: |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
172 def __init__(self, defaults=None): |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
173 self.__sections = {} |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
174 if defaults is None: |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
175 self.__defaults = {} |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
176 else: |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
177 self.__defaults = defaults |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
178 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
179 def defaults(self): |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
180 return self.__defaults |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
181 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
182 def sections(self): |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
183 """Return a list of section names, excluding [DEFAULT]""" |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
184 # self.__sections will never have [DEFAULT] in it |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
185 return self.__sections.keys() |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
186 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
187 def add_section(self, section): |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
188 """Create a new section in the configuration. |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
189 |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
190 Raise DuplicateSectionError if a section by the specified name |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
191 already exists. |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
192 """ |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
193 if self.__sections.has_key(section): |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
194 raise DuplicateSectionError(section) |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
195 self.__sections[section] = {} |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
196 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
197 def has_section(self, section): |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
198 """Indicate whether the named section is present in the configuration. |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
199 |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
200 The DEFAULT section is not acknowledged. |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
201 """ |
|
14899
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
202 return section in self.sections() |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
203 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
204 def options(self, section): |
|
11370
41990bce023a
Added has_option(); fix bug in get() which botched interpolation if
Guido van Rossum <guido@python.org>
parents:
11369
diff
changeset
|
205 """Return a list of option names for the given section name.""" |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
206 try: |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
207 opts = self.__sections[section].copy() |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
208 except KeyError: |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
209 raise NoSectionError(section) |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
210 opts.update(self.__defaults) |
|
14899
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
211 if opts.has_key('__name__'): |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
212 del opts['__name__'] |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
213 return opts.keys() |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
214 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
215 def read(self, filenames): |
| 11369 | 216 """Read and parse a filename or a list of filenames. |
|
15867
f5a3d98a35bc
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
15501
diff
changeset
|
217 |
| 11369 | 218 Files that cannot be opened are silently ignored; this is |
|
11381
4ad14e4dc7e5
fixed a typo in a docstring, and slightly expanded the module
Barry Warsaw <barry@python.org>
parents:
11370
diff
changeset
|
219 designed so that you can specify a list of potential |
| 11369 | 220 configuration file locations (e.g. current directory, user's |
| 221 home directory, systemwide directory), and all existing | |
| 222 configuration files in the list will be read. A single | |
| 223 filename may also be given. | |
| 224 """ | |
| 12632 | 225 if type(filenames) in [type(''), type(u'')]: |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
226 filenames = [filenames] |
| 11369 | 227 for filename in filenames: |
| 228 try: | |
| 229 fp = open(filename) | |
| 230 except IOError: | |
| 231 continue | |
| 232 self.__read(fp, filename) | |
|
11368
b9bbe88d9554
ConfigParser.read(): Don't mask IOError exceptions.
Fred Drake <fdrake@acm.org>
parents:
11007
diff
changeset
|
233 fp.close() |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
234 |
| 11369 | 235 def readfp(self, fp, filename=None): |
| 236 """Like read() but the argument must be a file-like object. | |
| 237 | |
| 238 The `fp' argument must have a `readline' method. Optional | |
| 239 second argument is the `filename', which if not given, is | |
| 240 taken from fp.name. If fp has no `name' attribute, `<???>' is | |
| 241 used. | |
| 242 | |
| 243 """ | |
| 244 if filename is None: | |
| 245 try: | |
| 246 filename = fp.name | |
| 247 except AttributeError: | |
| 248 filename = '<???>' | |
| 249 self.__read(fp, filename) | |
| 250 | |
|
9959
572e131ae369
Patch by Chris Petrilli (not really tested since I don't know this
Guido van Rossum <guido@python.org>
parents:
8853
diff
changeset
|
251 def get(self, section, option, raw=0, vars=None): |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
252 """Get an option value for a given section. |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
253 |
|
9961
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
254 All % interpolations are expanded in the return values, based on the |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
255 defaults passed into the constructor, unless the optional argument |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
256 `raw' is true. Additional substitutions may be provided using the |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
257 `vars' argument, which must be a dictionary whose contents overrides |
|
879e3491b661
Re-format the module docstring and document the new get() argument.
Barry Warsaw <barry@python.org>
parents:
9959
diff
changeset
|
258 any pre-existing defaults. |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
259 |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
260 The section DEFAULT is special. |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
261 """ |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
262 try: |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
263 sectdict = self.__sections[section].copy() |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
264 except KeyError: |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
265 if section == DEFAULTSECT: |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
266 sectdict = {} |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
267 else: |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
268 raise NoSectionError(section) |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
269 d = self.__defaults.copy() |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
270 d.update(sectdict) |
|
9959
572e131ae369
Patch by Chris Petrilli (not really tested since I don't know this
Guido van Rossum <guido@python.org>
parents:
8853
diff
changeset
|
271 # Update with the entry specific variables |
|
572e131ae369
Patch by Chris Petrilli (not really tested since I don't know this
Guido van Rossum <guido@python.org>
parents:
8853
diff
changeset
|
272 if vars: |
|
572e131ae369
Patch by Chris Petrilli (not really tested since I don't know this
Guido van Rossum <guido@python.org>
parents:
8853
diff
changeset
|
273 d.update(vars) |
|
11007
b9f55cc10ab3
Patch suggested (and partially provided) by Lars Damerow: instead of
Guido van Rossum <guido@python.org>
parents:
10145
diff
changeset
|
274 option = self.optionxform(option) |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
275 try: |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
276 rawval = d[option] |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
277 except KeyError: |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
278 raise NoOptionError(option, section) |
|
14899
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
279 |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
280 if raw: |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
281 return rawval |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
282 |
|
14899
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
283 # do the string interpolation |
|
9959
572e131ae369
Patch by Chris Petrilli (not really tested since I don't know this
Guido van Rossum <guido@python.org>
parents:
8853
diff
changeset
|
284 value = rawval # Make it a pretty variable name |
|
15867
f5a3d98a35bc
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
15501
diff
changeset
|
285 depth = 0 |
|
10145
8284927025be
Fix by Chris Petrilli (to his own code) to limit the number of
Guido van Rossum <guido@python.org>
parents:
10037
diff
changeset
|
286 while depth < 10: # Loop through this until it's done |
|
8284927025be
Fix by Chris Petrilli (to his own code) to limit the number of
Guido van Rossum <guido@python.org>
parents:
10037
diff
changeset
|
287 depth = depth + 1 |
|
16480
e97217f5b323
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16070
diff
changeset
|
288 if value.find("%(") >= 0: |
|
9959
572e131ae369
Patch by Chris Petrilli (not really tested since I don't know this
Guido van Rossum <guido@python.org>
parents:
8853
diff
changeset
|
289 try: |
|
572e131ae369
Patch by Chris Petrilli (not really tested since I don't know this
Guido van Rossum <guido@python.org>
parents:
8853
diff
changeset
|
290 value = value % d |
|
572e131ae369
Patch by Chris Petrilli (not really tested since I don't know this
Guido van Rossum <guido@python.org>
parents:
8853
diff
changeset
|
291 except KeyError, key: |
|
572e131ae369
Patch by Chris Petrilli (not really tested since I don't know this
Guido van Rossum <guido@python.org>
parents:
8853
diff
changeset
|
292 raise InterpolationError(key, option, section, rawval) |
|
572e131ae369
Patch by Chris Petrilli (not really tested since I don't know this
Guido van Rossum <guido@python.org>
parents:
8853
diff
changeset
|
293 else: |
|
14899
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
294 break |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
295 if value.find("%(") >= 0: |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
296 raise InterpolationDepthError(option, section, rawval) |
|
606a80834a86
Allow spaces in section names.
Fred Drake <fdrake@acm.org>
parents:
14840
diff
changeset
|
297 return value |
|
15867
f5a3d98a35bc
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
15501
diff
changeset
|
298 |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
299 def __get(self, section, conv, option): |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
300 return conv(self.get(section, option)) |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
301 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
302 def getint(self, section, option): |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
303 return self.__get(section, string.atoi, option) |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
304 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
305 def getfloat(self, section, option): |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
306 return self.__get(section, string.atof, option) |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
307 |
|
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
308 def getboolean(self, section, option): |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
309 v = self.get(section, option) |
|
16481
811b0ccb62ae
Correction after second code path test.
Eric S. Raymond <esr@thyrsus.com>
parents:
16480
diff
changeset
|
310 val = int(v) |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
311 if val not in (0, 1): |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
312 raise ValueError, 'Not a boolean: %s' % v |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
313 return val |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
314 |
|
11007
b9f55cc10ab3
Patch suggested (and partially provided) by Lars Damerow: instead of
Guido van Rossum <guido@python.org>
parents:
10145
diff
changeset
|
315 def optionxform(self, optionstr): |
|
16480
e97217f5b323
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16070
diff
changeset
|
316 return optionstr.lower() |
|
11007
b9f55cc10ab3
Patch suggested (and partially provided) by Lars Damerow: instead of
Guido van Rossum <guido@python.org>
parents:
10145
diff
changeset
|
317 |
|
13521
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
318 def has_option(self, section, option): |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
319 """Check for the existence of a given option in a given section.""" |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
320 if not section or section == "DEFAULT": |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
321 return self.__defaults.has_key(option) |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
322 elif not self.has_section(section): |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
323 return 0 |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
324 else: |
|
16771
b235160f1346
Make sure ConfigParser uses .optionxform() consistently; this affects
Fred Drake <fdrake@acm.org>
parents:
16594
diff
changeset
|
325 option = self.optionxform(option) |
|
13521
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
326 return self.__sections[section].has_key(option) |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
327 |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
328 def set(self, section, option, value): |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
329 """Set an option.""" |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
330 if not section or section == "DEFAULT": |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
331 sectdict = self.__defaults |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
332 else: |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
333 try: |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
334 sectdict = self.__sections[section] |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
335 except KeyError: |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
336 raise NoSectionError(section) |
|
16771
b235160f1346
Make sure ConfigParser uses .optionxform() consistently; this affects
Fred Drake <fdrake@acm.org>
parents:
16594
diff
changeset
|
337 option = self.optionxform(option) |
|
13521
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
338 sectdict[option] = value |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
339 |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
340 def write(self, fp): |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
341 """Write an .ini-format representation of the configuration state.""" |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
342 if self.__defaults: |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
343 fp.write("[DEFAULT]\n") |
|
13600
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
344 for (key, value) in self.__defaults.items(): |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
345 fp.write("%s = %s\n" % (key, value)) |
|
13521
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
346 fp.write("\n") |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
347 for section in self.sections(): |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
348 fp.write("[" + section + "]\n") |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
349 sectdict = self.__sections[section] |
|
13600
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
350 for (key, value) in sectdict.items(): |
|
13521
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
351 if key == "__name__": |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
352 continue |
|
13600
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
353 fp.write("%s = %s\n" % (key, value)) |
|
13521
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
354 fp.write("\n") |
|
4dbc75c189bc
Give ConfigParser the capability to set as well as read options, and to write
Eric S. Raymond <esr@thyrsus.com>
parents:
12632
diff
changeset
|
355 |
|
13650
3d6d218b673d
Small fixes by Petru Paler (patch #100946) checked in with esr's approval.
Thomas Wouters <thomas@python.org>
parents:
13600
diff
changeset
|
356 def remove_option(self, section, option): |
|
13600
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
357 """Remove an option.""" |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
358 if not section or section == "DEFAULT": |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
359 sectdict = self.__defaults |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
360 else: |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
361 try: |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
362 sectdict = self.__sections[section] |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
363 except KeyError: |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
364 raise NoSectionError(section) |
|
16771
b235160f1346
Make sure ConfigParser uses .optionxform() consistently; this affects
Fred Drake <fdrake@acm.org>
parents:
16594
diff
changeset
|
365 option = self.optionxform(option) |
|
15479
e98964bc2681
remove_option(): Use the right variable name for the option name!
Fred Drake <fdrake@acm.org>
parents:
14899
diff
changeset
|
366 existed = sectdict.has_key(option) |
|
13600
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
367 if existed: |
|
15479
e98964bc2681
remove_option(): Use the right variable name for the option name!
Fred Drake <fdrake@acm.org>
parents:
14899
diff
changeset
|
368 del sectdict[option] |
|
13600
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
369 return existed |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
370 |
|
13650
3d6d218b673d
Small fixes by Petru Paler (patch #100946) checked in with esr's approval.
Thomas Wouters <thomas@python.org>
parents:
13600
diff
changeset
|
371 def remove_section(self, section): |
|
13600
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
372 """Remove a file section.""" |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
373 if self.__sections.has_key(section): |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
374 del self.__sections[section] |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
375 return 1 |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
376 else: |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
377 return 0 |
|
39f54b9a7f9c
ConfigParser enhancements to edit existing configs, part 2
Eric S. Raymond <esr@thyrsus.com>
parents:
13521
diff
changeset
|
378 |
| 8614 | 379 # |
| 380 # Regular expressions for parsing section headers and options. Note a | |
| 381 # slight semantic change from the previous version, because of the use | |
| 382 # of \w, _ is allowed in section header names. | |
|
11007
b9f55cc10ab3
Patch suggested (and partially provided) by Lars Damerow: instead of
Guido van Rossum <guido@python.org>
parents:
10145
diff
changeset
|
383 SECTCRE = re.compile( |
| 8614 | 384 r'\[' # [ |
|
16594
9ef978c6f039
Be much more permissive in what we accept in section names; there has been
Fred Drake <fdrake@acm.org>
parents:
16575
diff
changeset
|
385 r'(?P<header>[^]]+)' # very permissive! |
| 8614 | 386 r'\]' # ] |
| 387 ) | |
|
11007
b9f55cc10ab3
Patch suggested (and partially provided) by Lars Damerow: instead of
Guido van Rossum <guido@python.org>
parents:
10145
diff
changeset
|
388 OPTCRE = re.compile( |
|
16575
5f3a8350615c
Allow square brackets in the option names; this makes it possible to use
Fred Drake <fdrake@acm.org>
parents:
16481
diff
changeset
|
389 r'(?P<option>[]\-[\w_.*,(){}]+)' # a lot of stuff found by IvL |
|
11873
7ed104c40db3
(Finally!) Changes related to the ConfigParser/INI-file topics
Fred Drake <fdrake@acm.org>
parents:
11381
diff
changeset
|
390 r'[ \t]*(?P<vi>[:=])[ \t]*' # any number of space/tab, |
| 8614 | 391 # followed by separator |
| 392 # (either : or =), followed | |
| 393 # by any # space/tab | |
| 394 r'(?P<value>.*)$' # everything up to eol | |
| 395 ) | |
| 396 | |
| 11369 | 397 def __read(self, fp, fpname): |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
398 """Parse a sectioned setup file. |
|
6795
5b24cbb1f99b
Checking in ConfigParser.py -- I don't see a reason why this can't be
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
399 |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
400 The sections in setup file contains a title line at the top, |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
401 indicated by a name in square brackets (`[]'), plus key/value |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
402 options lines, indicated by `name: value' format lines. |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
403 Continuation are represented by an embedded newline then |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
404 leading whitespace. Blank lines, lines beginning with a '#', |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
405 and just about everything else is ignored. |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
406 """ |
| 8614 | 407 cursect = None # None, or a dictionary |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
408 optname = None |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
409 lineno = 0 |
| 8614 | 410 e = None # None, or an exception |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
411 while 1: |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
412 line = fp.readline() |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
413 if not line: |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
414 break |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
415 lineno = lineno + 1 |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
416 # comment or blank line? |
|
16480
e97217f5b323
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16070
diff
changeset
|
417 if line.strip() == '' or line[0] in '#;': |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
418 continue |
|
16480
e97217f5b323
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16070
diff
changeset
|
419 if line.split()[0].lower() == 'rem' \ |
|
11873
7ed104c40db3
(Finally!) Changes related to the ConfigParser/INI-file topics
Fred Drake <fdrake@acm.org>
parents:
11381
diff
changeset
|
420 and line[0] in "rR": # no leading whitespace |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
421 continue |
|
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
422 # continuation line? |
| 8614 | 423 if line[0] in ' \t' and cursect is not None and optname: |
|
16480
e97217f5b323
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16070
diff
changeset
|
424 value = line.strip() |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
425 if value: |
|
18407
9512747afe9e
When reading a continuation line, make sure we still use the transformed
Fred Drake <fdrake@acm.org>
parents:
16771
diff
changeset
|
426 k = self.optionxform(optname) |
|
9512747afe9e
When reading a continuation line, make sure we still use the transformed
Fred Drake <fdrake@acm.org>
parents:
16771
diff
changeset
|
427 cursect[k] = "%s\n%s" % (cursect[k], value) |
| 8614 | 428 # a section header or option header? |
| 429 else: | |
| 430 # is it a section header? | |
|
11007
b9f55cc10ab3
Patch suggested (and partially provided) by Lars Damerow: instead of
Guido van Rossum <guido@python.org>
parents:
10145
diff
changeset
|
431 mo = self.SECTCRE.match(line) |
| 8614 | 432 if mo: |
| 433 sectname = mo.group('header') | |
| 434 if self.__sections.has_key(sectname): | |
| 435 cursect = self.__sections[sectname] | |
| 436 elif sectname == DEFAULTSECT: | |
| 437 cursect = self.__defaults | |
| 438 else: | |
|
8853
bbe9d72bccda
Time machine experiment. Use '__name__' as the special key (always
Barry Warsaw <barry@python.org>
parents:
8614
diff
changeset
|
439 cursect = {'__name__': sectname} |
| 8614 | 440 self.__sections[sectname] = cursect |
| 441 # So sections can't start with a continuation line | |
| 442 optname = None | |
| 443 # no section header in the file? | |
| 444 elif cursect is None: | |
| 11369 | 445 raise MissingSectionHeaderError(fpname, lineno, `line`) |
| 8614 | 446 # an option line? |
|
7755
fb4b4d069cc7
Mass check-in after untabifying all files that need it.
Guido van Rossum <guido@python.org>
parents:
7165
diff
changeset
|
447 else: |
|
11007
b9f55cc10ab3
Patch suggested (and partially provided) by Lars Damerow: instead of
Guido van Rossum <guido@python.org>
parents:
10145
diff
changeset
|
448 mo = self.OPTCRE.match(line) |
| 8614 | 449 if mo: |
|
11873
7ed104c40db3
(Finally!) Changes related to the ConfigParser/INI-file topics
Fred Drake <fdrake@acm.org>
parents:
11381
diff
changeset
|
450 optname, vi, optval = mo.group('option', 'vi', 'value') |
|
11908
b975a056deb6
allow comments beginning with ; in key: value as well as key = value
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
11875
diff
changeset
|
451 if vi in ('=', ':') and ';' in optval: |
|
11873
7ed104c40db3
(Finally!) Changes related to the ConfigParser/INI-file topics
Fred Drake <fdrake@acm.org>
parents:
11381
diff
changeset
|
452 # ';' is a comment delimiter only if it follows |
|
7ed104c40db3
(Finally!) Changes related to the ConfigParser/INI-file topics
Fred Drake <fdrake@acm.org>
parents:
11381
diff
changeset
|
453 # a spacing character |
|
16480
e97217f5b323
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16070
diff
changeset
|
454 pos = optval.find(';') |
|
11873
7ed104c40db3
(Finally!) Changes related to the ConfigParser/INI-file topics
Fred Drake <fdrake@acm.org>
parents:
11381
diff
changeset
|
455 if pos and optval[pos-1] in string.whitespace: |
|
7ed104c40db3
(Finally!) Changes related to the ConfigParser/INI-file topics
Fred Drake <fdrake@acm.org>
parents:
11381
diff
changeset
|
456 optval = optval[:pos] |
|
16480
e97217f5b323
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16070
diff
changeset
|
457 optval = optval.strip() |
| 8614 | 458 # allow empty values |
| 459 if optval == '""': | |
| 460 optval = '' | |
|
14840
625a9a695469
When reading the file, option names were not passed through
Guido van Rossum <guido@python.org>
parents:
13650
diff
changeset
|
461 cursect[self.optionxform(optname)] = optval |
| 8614 | 462 else: |
| 463 # a non-fatal parsing error occurred. set up the | |
| 464 # exception but keep going. the exception will be | |
| 465 # raised at the end of the file and will contain a | |
| 466 # list of all bogus lines | |
| 467 if not e: | |
| 11369 | 468 e = ParsingError(fpname) |
| 8614 | 469 e.append(lineno, `line`) |
| 470 # if any parsing errors occurred, raise an exception | |
| 471 if e: | |
| 472 raise e |
