1
<?xml version="1.0" encoding="ascii"?>
2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3
"DTD/xhtml1-transitional.dtd">
4
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
<title>pythonutils.configobj</title>
7
<link rel="stylesheet" href="epydoc.css" type="text/css" />
8
<script type="text/javascript" src="epydoc.js"></script>
11
<body bgcolor="white" text="black" link="blue" vlink="#204080"
13
<!-- ==================== NAVIGATION BAR ==================== -->
14
<table class="navbar" border="0" width="100%" cellpadding="0"
15
bgcolor="#a0c0ff" cellspacing="0">
18
<th bgcolor="#70b0f0" class="navselect"
19
> Home </th>
22
<th class="navbar"> <a class="navbar"
23
href="trees.html">Trees</a> </th>
26
<th class="navbar"> <a class="navbar"
27
href="indices.html">Index</a> </th>
30
<th class="navbar"> <a class="navbar"
31
href="help.html">Help</a> </th>
33
<!-- Project homepage -->
34
<th class="navbar" align="right" width="100%">
35
<table border="0" cellpadding="0" cellspacing="0">
36
<tr><th class="navbar" align="center">
38
<a class="navbar" target="_top" href="http://www.voidspace.org.uk/python/configobj.html">ConfigObj</a>
39
</p></th></tr></table></th>
42
<table width="100%" cellpadding="0" cellspacing="0">
45
<span class="breadcrumbs">
46
Package pythonutils ::
51
<table cellpadding="0" cellspacing="0">
52
<!-- hide/show private -->
53
<tr><td align="right"><span class="options">[<a href="javascript: void(0);" class="privatelink"
54
onclick="toggle_private();">hide private</a>]</span></td></tr>
55
<tr><td align="right"><span class="options"
56
>[<a href="frames.html" target="_top">frames</a
57
>] | <a href="pythonutils.configobj-pysrc.html"
58
target="_top">no frames</a>]</span></td></tr>
63
<h2 class="py-src">Source Code for <a href="pythonutils.configobj-module.html">Module pythonutils.configobj</a></h2>
66
<span class="lineno"> 1</span> <span class="py-line"><span class="py-comment"># configobj.py</span> </span>
67
<span class="lineno"> 2</span> <span class="py-line"><span class="py-comment"></span><span class="py-comment"># A config file reader/writer that supports nested sections in config files.</span> </span>
68
<span class="lineno"> 3</span> <span class="py-line"><span class="py-comment"></span><span class="py-comment"># Copyright (C) 2005-2006 Michael Foord, Nicola Larosa</span> </span>
69
<span class="lineno"> 4</span> <span class="py-line"><span class="py-comment"></span><span class="py-comment"># E-mail: fuzzyman AT voidspace DOT org DOT uk</span> </span>
70
<span class="lineno"> 5</span> <span class="py-line"><span class="py-comment"></span><span class="py-comment"># nico AT tekNico DOT net</span> </span>
71
<span class="lineno"> 6</span> <span class="py-line"><span class="py-comment"></span> </span>
72
<span class="lineno"> 7</span> <span class="py-line"><span class="py-comment"># ConfigObj 4</span> </span>
73
<span class="lineno"> 8</span> <span class="py-line"><span class="py-comment"></span><span class="py-comment"># http://www.voidspace.org.uk/python/configobj.html</span> </span>
74
<span class="lineno"> 9</span> <span class="py-line"><span class="py-comment"></span> </span>
75
<span class="lineno"> 10</span> <span class="py-line"><span class="py-comment"># Released subject to the BSD License</span> </span>
76
<span class="lineno"> 11</span> <span class="py-line"><span class="py-comment"></span><span class="py-comment"># Please see http://www.voidspace.org.uk/python/license.shtml</span> </span>
77
<span class="lineno"> 12</span> <span class="py-line"><span class="py-comment"></span> </span>
78
<span class="lineno"> 13</span> <span class="py-line"><span class="py-comment"># Scripts maintained at http://www.voidspace.org.uk/python/index.shtml</span> </span>
79
<span class="lineno"> 14</span> <span class="py-line"><span class="py-comment"></span><span class="py-comment"># For information about bugfixes, updates and support, please join the</span> </span>
80
<span class="lineno"> 15</span> <span class="py-line"><span class="py-comment"></span><span class="py-comment"># ConfigObj mailing list:</span> </span>
81
<span class="lineno"> 16</span> <span class="py-line"><span class="py-comment"></span><span class="py-comment"># http://lists.sourceforge.net/lists/listinfo/configobj-develop</span> </span>
82
<span class="lineno"> 17</span> <span class="py-line"><span class="py-comment"></span><span class="py-comment"># Comments, suggestions and bug reports welcome.</span> </span>
83
<span class="lineno"> 18</span> <span class="py-line"><span class="py-comment"></span> </span>
84
<span class="lineno"> 19</span> <span class="py-line"><span class="py-keyword">from</span> <span class="py-name">__future__</span> <span class="py-keyword">import</span> <a class="py-name" href="pythonutils.configobj-module.html#generators">generators</a> </span>
85
<span class="lineno"> 20</span> <span class="py-line"> </span>
86
<span class="lineno"> 21</span> <span class="py-line"><span class="py-keyword">import</span> <span class="py-name">sys</span> </span>
87
<span class="lineno"> 22</span> <span class="py-line"><a class="py-name" href="pythonutils.configobj-module.html#INTP_VER">INTP_VER</a> <span class="py-op">=</span> <span class="py-name">sys</span><span class="py-op">.</span><span class="py-name">version_info</span><span class="py-op">[</span><span class="py-op">:</span><span class="py-number">2</span><span class="py-op">]</span> </span>
88
<span class="lineno"> 23</span> <span class="py-line"><span class="py-keyword">if</span> <a class="py-name" href="pythonutils.configobj-module.html#INTP_VER">INTP_VER</a> <span class="py-op"><</span> <span class="py-op">(</span><span class="py-number">2</span><span class="py-op">,</span> <span class="py-number">2</span><span class="py-op">)</span><span class="py-op">:</span> </span>
89
<span class="lineno"> 24</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">RuntimeError</span><span class="py-op">(</span><span class="py-string">"Python v.2.2 or later needed"</span><span class="py-op">)</span> </span>
90
<span class="lineno"> 25</span> <span class="py-line"> </span>
91
<span class="lineno"> 26</span> <span class="py-line"><span class="py-keyword">import</span> <span class="py-name">os</span><span class="py-op">,</span> <span class="py-name">re</span> </span>
92
<span class="lineno"> 27</span> <span class="py-line"><span class="py-keyword">import</span> <span class="py-name">compiler</span> </span>
93
<span class="lineno"> 28</span> <span class="py-line"><span class="py-keyword">from</span> <span class="py-name">types</span> <span class="py-keyword">import</span> <span class="py-name">StringTypes</span> </span>
94
<span class="lineno"> 29</span> <span class="py-line"><span class="py-keyword">from</span> <span class="py-name">warnings</span> <span class="py-keyword">import</span> <span class="py-name">warn</span> </span>
95
<span class="lineno"> 30</span> <span class="py-line"><span class="py-keyword">from</span> <span class="py-name">codecs</span> <span class="py-keyword">import</span> <span class="py-name">BOM_UTF8</span><span class="py-op">,</span> <span class="py-name">BOM_UTF16</span><span class="py-op">,</span> <span class="py-name">BOM_UTF16_BE</span><span class="py-op">,</span> <span class="py-name">BOM_UTF16_LE</span> </span>
96
<span class="lineno"> 31</span> <span class="py-line"> </span>
97
<span class="lineno"> 32</span> <span class="py-line"><span class="py-comment"># A dictionary mapping BOM to</span> </span>
98
<span class="lineno"> 33</span> <span class="py-line"><span class="py-comment"></span><span class="py-comment"># the encoding to decode with, and what to set the</span> </span>
99
<span class="lineno"> 34</span> <span class="py-line"><span class="py-comment"></span><span class="py-comment"># encoding attribute to.</span> </span>
100
<span class="lineno"> 35</span> <span class="py-line"><span class="py-comment"></span><a class="py-name" href="pythonutils.configobj-module.html#BOMS">BOMS</a> <span class="py-op">=</span> <span class="py-op">{</span> </span>
101
<span class="lineno"> 36</span> <span class="py-line"> <span class="py-name">BOM_UTF8</span><span class="py-op">:</span> <span class="py-op">(</span><span class="py-string">'utf_8'</span><span class="py-op">,</span> <span class="py-name">None</span><span class="py-op">)</span><span class="py-op">,</span> </span>
102
<span class="lineno"> 37</span> <span class="py-line"> <span class="py-name">BOM_UTF16_BE</span><span class="py-op">:</span> <span class="py-op">(</span><span class="py-string">'utf16_be'</span><span class="py-op">,</span> <span class="py-string">'utf_16'</span><span class="py-op">)</span><span class="py-op">,</span> </span>
103
<span class="lineno"> 38</span> <span class="py-line"> <span class="py-name">BOM_UTF16_LE</span><span class="py-op">:</span> <span class="py-op">(</span><span class="py-string">'utf16_le'</span><span class="py-op">,</span> <span class="py-string">'utf_16'</span><span class="py-op">)</span><span class="py-op">,</span> </span>
104
<span class="lineno"> 39</span> <span class="py-line"> <span class="py-name">BOM_UTF16</span><span class="py-op">:</span> <span class="py-op">(</span><span class="py-string">'utf_16'</span><span class="py-op">,</span> <span class="py-string">'utf_16'</span><span class="py-op">)</span><span class="py-op">,</span> </span>
105
<span class="lineno"> 40</span> <span class="py-line"> <span class="py-op">}</span> </span>
106
<span class="lineno"> 41</span> <span class="py-line"><span class="py-comment"># All legal variants of the BOM codecs.</span> </span>
107
<span class="lineno"> 42</span> <span class="py-line"><span class="py-comment"></span><span class="py-comment"># TODO: the list of aliases is not meant to be exhaustive, is there a</span> </span>
108
<span class="lineno"> 43</span> <span class="py-line"><span class="py-comment"></span><span class="py-comment"># better way ?</span> </span>
109
<span class="lineno"> 44</span> <span class="py-line"><span class="py-comment"></span><a class="py-name" href="pythonutils.configobj-module.html#BOM_LIST">BOM_LIST</a> <span class="py-op">=</span> <span class="py-op">{</span> </span>
110
<span class="lineno"> 45</span> <span class="py-line"> <span class="py-string">'utf_16'</span><span class="py-op">:</span> <span class="py-string">'utf_16'</span><span class="py-op">,</span> </span>
111
<span class="lineno"> 46</span> <span class="py-line"> <span class="py-string">'u16'</span><span class="py-op">:</span> <span class="py-string">'utf_16'</span><span class="py-op">,</span> </span>
112
<span class="lineno"> 47</span> <span class="py-line"> <span class="py-string">'utf16'</span><span class="py-op">:</span> <span class="py-string">'utf_16'</span><span class="py-op">,</span> </span>
113
<span class="lineno"> 48</span> <span class="py-line"> <span class="py-string">'utf-16'</span><span class="py-op">:</span> <span class="py-string">'utf_16'</span><span class="py-op">,</span> </span>
114
<span class="lineno"> 49</span> <span class="py-line"> <span class="py-string">'utf16_be'</span><span class="py-op">:</span> <span class="py-string">'utf16_be'</span><span class="py-op">,</span> </span>
115
<span class="lineno"> 50</span> <span class="py-line"> <span class="py-string">'utf_16_be'</span><span class="py-op">:</span> <span class="py-string">'utf16_be'</span><span class="py-op">,</span> </span>
116
<span class="lineno"> 51</span> <span class="py-line"> <span class="py-string">'utf-16be'</span><span class="py-op">:</span> <span class="py-string">'utf16_be'</span><span class="py-op">,</span> </span>
117
<span class="lineno"> 52</span> <span class="py-line"> <span class="py-string">'utf16_le'</span><span class="py-op">:</span> <span class="py-string">'utf16_le'</span><span class="py-op">,</span> </span>
118
<span class="lineno"> 53</span> <span class="py-line"> <span class="py-string">'utf_16_le'</span><span class="py-op">:</span> <span class="py-string">'utf16_le'</span><span class="py-op">,</span> </span>
119
<span class="lineno"> 54</span> <span class="py-line"> <span class="py-string">'utf-16le'</span><span class="py-op">:</span> <span class="py-string">'utf16_le'</span><span class="py-op">,</span> </span>
120
<span class="lineno"> 55</span> <span class="py-line"> <span class="py-string">'utf_8'</span><span class="py-op">:</span> <span class="py-string">'utf_8'</span><span class="py-op">,</span> </span>
121
<span class="lineno"> 56</span> <span class="py-line"> <span class="py-string">'u8'</span><span class="py-op">:</span> <span class="py-string">'utf_8'</span><span class="py-op">,</span> </span>
122
<span class="lineno"> 57</span> <span class="py-line"> <span class="py-string">'utf'</span><span class="py-op">:</span> <span class="py-string">'utf_8'</span><span class="py-op">,</span> </span>
123
<span class="lineno"> 58</span> <span class="py-line"> <span class="py-string">'utf8'</span><span class="py-op">:</span> <span class="py-string">'utf_8'</span><span class="py-op">,</span> </span>
124
<span class="lineno"> 59</span> <span class="py-line"> <span class="py-string">'utf-8'</span><span class="py-op">:</span> <span class="py-string">'utf_8'</span><span class="py-op">,</span> </span>
125
<span class="lineno"> 60</span> <span class="py-line"> <span class="py-op">}</span> </span>
126
<span class="lineno"> 61</span> <span class="py-line"> </span>
127
<span class="lineno"> 62</span> <span class="py-line"><span class="py-comment"># Map of encodings to the BOM to write.</span> </span>
128
<span class="lineno"> 63</span> <span class="py-line"><span class="py-comment"></span><a class="py-name" href="pythonutils.configobj-module.html#BOM_SET">BOM_SET</a> <span class="py-op">=</span> <span class="py-op">{</span> </span>
129
<span class="lineno"> 64</span> <span class="py-line"> <span class="py-string">'utf_8'</span><span class="py-op">:</span> <span class="py-name">BOM_UTF8</span><span class="py-op">,</span> </span>
130
<span class="lineno"> 65</span> <span class="py-line"> <span class="py-string">'utf_16'</span><span class="py-op">:</span> <span class="py-name">BOM_UTF16</span><span class="py-op">,</span> </span>
131
<span class="lineno"> 66</span> <span class="py-line"> <span class="py-string">'utf16_be'</span><span class="py-op">:</span> <span class="py-name">BOM_UTF16_BE</span><span class="py-op">,</span> </span>
132
<span class="lineno"> 67</span> <span class="py-line"> <span class="py-string">'utf16_le'</span><span class="py-op">:</span> <span class="py-name">BOM_UTF16_LE</span><span class="py-op">,</span> </span>
133
<span class="lineno"> 68</span> <span class="py-line"> <span class="py-name">None</span><span class="py-op">:</span> <span class="py-name">BOM_UTF8</span> </span>
134
<span class="lineno"> 69</span> <span class="py-line"> <span class="py-op">}</span> </span>
135
<span class="lineno"> 70</span> <span class="py-line"> </span>
136
<span class="lineno"> 71</span> <span class="py-line"><span class="py-keyword">try</span><span class="py-op">:</span> </span>
137
<span class="lineno"> 72</span> <span class="py-line"> <span class="py-keyword">from</span> <a title="pythonutils.configobj.ConfigObj.validate" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#validate">validate</a> <span class="py-keyword">import</span> <span class="py-name">VdtMissingValue</span> </span>
138
<span class="lineno"> 73</span> <span class="py-line"><span class="py-keyword">except</span> <span class="py-name">ImportError</span><span class="py-op">:</span> </span>
139
<span class="lineno"> 74</span> <span class="py-line"> <span class="py-name">VdtMissingValue</span> <span class="py-op">=</span> <span class="py-name">None</span> </span>
140
<span class="lineno"> 75</span> <span class="py-line"> </span>
141
<span class="lineno"> 76</span> <span class="py-line"><span class="py-keyword">try</span><span class="py-op">:</span> </span>
142
<span class="lineno"> 77</span> <span class="py-line"> <a title="pythonutils.configobj.enumerate" class="py-name" href="pythonutils.configobj-module.html#enumerate">enumerate</a> </span>
143
<span class="lineno"> 78</span> <span class="py-line"><span class="py-keyword">except</span> <span class="py-name">NameError</span><span class="py-op">:</span> </span>
144
<span class="lineno"> 79</span> <span class="py-line"> <span class="py-keyword">def</span> <span class="py-def-name">enumerate</span><span class="py-op">(</span><span class="py-param">obj</span><span class="py-op">)</span><span class="py-op">:</span> </span>
145
<span class="lineno"> 80</span> <span class="py-line"> <span class="py-docstring">"""enumerate for Python 2.2."""</span> </span>
146
<span class="lineno"> 81</span> <span class="py-line"> <span class="py-name">i</span> <span class="py-op">=</span> <span class="py-op">-</span><span class="py-number">1</span> </span>
147
<span class="lineno"> 82</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">item</span> <span class="py-keyword">in</span> <span class="py-name">obj</span><span class="py-op">:</span> </span>
148
<span class="lineno"> 83</span> <span class="py-line"> <span class="py-name">i</span> <span class="py-op">+=</span> <span class="py-number">1</span> </span>
149
<span class="lineno"> 84</span> <span class="py-line"> <span class="py-keyword">yield</span> <span class="py-name">i</span><span class="py-op">,</span> <span class="py-name">item</span> </span>
150
</div><span class="lineno"> 85</span> <span class="py-line"> </span>
151
<span class="lineno"> 86</span> <span class="py-line"><span class="py-keyword">try</span><span class="py-op">:</span> </span>
152
<span class="lineno"> 87</span> <span class="py-line"> <span class="py-name">True</span><span class="py-op">,</span> <span class="py-name">False</span> </span>
153
<span class="lineno"> 88</span> <span class="py-line"><span class="py-keyword">except</span> <span class="py-name">NameError</span><span class="py-op">:</span> </span>
154
<span class="lineno"> 89</span> <span class="py-line"> <span class="py-name">True</span><span class="py-op">,</span> <span class="py-name">False</span> <span class="py-op">=</span> <span class="py-number">1</span><span class="py-op">,</span> <span class="py-number">0</span> </span>
155
<span class="lineno"> 90</span> <span class="py-line"> </span>
156
<span class="lineno"> 91</span> <span class="py-line"> </span>
157
<span class="lineno"> 92</span> <span class="py-line"><a class="py-name" href="pythonutils.configobj-module.html#__version__">__version__</a> <span class="py-op">=</span> <span class="py-string">'4.3.1'</span> </span>
158
<span class="lineno"> 93</span> <span class="py-line"> </span>
159
<span class="lineno"> 94</span> <span class="py-line"><a class="py-name" href="pythonutils.configobj-module.html#__revision__">__revision__</a> <span class="py-op">=</span> <span class="py-string">'$Id: configobj.py 156 2006-01-31 14:57:08Z fuzzyman $'</span> </span>
160
<span class="lineno"> 95</span> <span class="py-line"> </span>
161
<span class="lineno"> 96</span> <span class="py-line"><span class="py-name">__docformat__</span> <span class="py-op">=</span> <span class="py-string">"restructuredtext en"</span> </span>
162
<span class="lineno"> 97</span> <span class="py-line"> </span>
163
<span class="lineno"> 98</span> <span class="py-line"><span class="py-comment"># NOTE: Does it make sense to have the following in __all__ ?</span> </span>
164
<span class="lineno"> 99</span> <span class="py-line"><span class="py-comment"></span><span class="py-comment"># NOTE: DEFAULT_INDENT_TYPE, NUM_INDENT_SPACES, MAX_INTERPOL_DEPTH</span> </span>
165
<span class="lineno"> 100</span> <span class="py-line"><span class="py-comment"></span><span class="py-comment"># NOTE: If used via ``from configobj import...``</span> </span>
166
<span class="lineno"> 101</span> <span class="py-line"><span class="py-comment"></span><span class="py-comment"># NOTE: They are effectively read only</span> </span>
167
<span class="lineno"> 102</span> <span class="py-line"><span class="py-comment"></span><span class="py-name">__all__</span> <span class="py-op">=</span> <span class="py-op">(</span> </span>
168
<span class="lineno"> 103</span> <span class="py-line"> <span class="py-string">'__version__'</span><span class="py-op">,</span> </span>
169
<span class="lineno"> 104</span> <span class="py-line"> <span class="py-string">'DEFAULT_INDENT_TYPE'</span><span class="py-op">,</span> </span>
170
<span class="lineno"> 105</span> <span class="py-line"> <span class="py-string">'NUM_INDENT_SPACES'</span><span class="py-op">,</span> </span>
171
<span class="lineno"> 106</span> <span class="py-line"> <span class="py-string">'MAX_INTERPOL_DEPTH'</span><span class="py-op">,</span> </span>
172
<span class="lineno"> 107</span> <span class="py-line"> <span class="py-string">'ConfigObjError'</span><span class="py-op">,</span> </span>
173
<span class="lineno"> 108</span> <span class="py-line"> <span class="py-string">'NestingError'</span><span class="py-op">,</span> </span>
174
<span class="lineno"> 109</span> <span class="py-line"> <span class="py-string">'ParseError'</span><span class="py-op">,</span> </span>
175
<span class="lineno"> 110</span> <span class="py-line"> <span class="py-string">'DuplicateError'</span><span class="py-op">,</span> </span>
176
<span class="lineno"> 111</span> <span class="py-line"> <span class="py-string">'ConfigspecError'</span><span class="py-op">,</span> </span>
177
<span class="lineno"> 112</span> <span class="py-line"> <span class="py-string">'ConfigObj'</span><span class="py-op">,</span> </span>
178
<span class="lineno"> 113</span> <span class="py-line"> <span class="py-string">'SimpleVal'</span><span class="py-op">,</span> </span>
179
<span class="lineno"> 114</span> <span class="py-line"> <span class="py-string">'InterpolationError'</span><span class="py-op">,</span> </span>
180
<span class="lineno"> 115</span> <span class="py-line"> <span class="py-string">'InterpolationDepthError'</span><span class="py-op">,</span> </span>
181
<span class="lineno"> 116</span> <span class="py-line"> <span class="py-string">'MissingInterpolationOption'</span><span class="py-op">,</span> </span>
182
<span class="lineno"> 117</span> <span class="py-line"> <span class="py-string">'RepeatSectionError'</span><span class="py-op">,</span> </span>
183
<span class="lineno"> 118</span> <span class="py-line"> <span class="py-string">'UnknownType'</span><span class="py-op">,</span> </span>
184
<span class="lineno"> 119</span> <span class="py-line"> <span class="py-string">'__docformat__'</span><span class="py-op">,</span> </span>
185
<span class="lineno"> 120</span> <span class="py-line"> <span class="py-string">'flatten_errors'</span><span class="py-op">,</span> </span>
186
<span class="lineno"> 121</span> <span class="py-line"><span class="py-op">)</span> </span>
187
<span class="lineno"> 122</span> <span class="py-line"> </span>
188
<span class="lineno"> 123</span> <span class="py-line"><a class="py-name" href="pythonutils.configobj-module.html#DEFAULT_INDENT_TYPE">DEFAULT_INDENT_TYPE</a> <span class="py-op">=</span> <span class="py-string">' '</span> </span>
189
<span class="lineno"> 124</span> <span class="py-line"><a class="py-name" href="pythonutils.configobj-module.html#NUM_INDENT_SPACES">NUM_INDENT_SPACES</a> <span class="py-op">=</span> <span class="py-number">4</span> </span>
190
<span class="lineno"> 125</span> <span class="py-line"><a class="py-name" href="pythonutils.configobj-module.html#MAX_INTERPOL_DEPTH">MAX_INTERPOL_DEPTH</a> <span class="py-op">=</span> <span class="py-number">10</span> </span>
191
<span class="lineno"> 126</span> <span class="py-line"> </span>
192
<span class="lineno"> 127</span> <span class="py-line"><a class="py-name" href="pythonutils.configobj-module.html#OPTION_DEFAULTS">OPTION_DEFAULTS</a> <span class="py-op">=</span> <span class="py-op">{</span> </span>
193
<span class="lineno"> 128</span> <span class="py-line"> <span class="py-string">'interpolation'</span><span class="py-op">:</span> <span class="py-name">True</span><span class="py-op">,</span> </span>
194
<span class="lineno"> 129</span> <span class="py-line"> <span class="py-string">'raise_errors'</span><span class="py-op">:</span> <span class="py-name">False</span><span class="py-op">,</span> </span>
195
<span class="lineno"> 130</span> <span class="py-line"> <span class="py-string">'list_values'</span><span class="py-op">:</span> <span class="py-name">True</span><span class="py-op">,</span> </span>
196
<span class="lineno"> 131</span> <span class="py-line"> <span class="py-string">'create_empty'</span><span class="py-op">:</span> <span class="py-name">False</span><span class="py-op">,</span> </span>
197
<span class="lineno"> 132</span> <span class="py-line"> <span class="py-string">'file_error'</span><span class="py-op">:</span> <span class="py-name">False</span><span class="py-op">,</span> </span>
198
<span class="lineno"> 133</span> <span class="py-line"> <span class="py-string">'configspec'</span><span class="py-op">:</span> <span class="py-name">None</span><span class="py-op">,</span> </span>
199
<span class="lineno"> 134</span> <span class="py-line"> <span class="py-string">'stringify'</span><span class="py-op">:</span> <span class="py-name">True</span><span class="py-op">,</span> </span>
200
<span class="lineno"> 135</span> <span class="py-line"> <span class="py-comment"># option may be set to one of ('', ' ', '\t')</span> </span>
201
<span class="lineno"> 136</span> <span class="py-line"> <span class="py-string">'indent_type'</span><span class="py-op">:</span> <span class="py-name">None</span><span class="py-op">,</span> </span>
202
<span class="lineno"> 137</span> <span class="py-line"> <span class="py-string">'encoding'</span><span class="py-op">:</span> <span class="py-name">None</span><span class="py-op">,</span> </span>
203
<span class="lineno"> 138</span> <span class="py-line"> <span class="py-string">'default_encoding'</span><span class="py-op">:</span> <span class="py-name">None</span><span class="py-op">,</span> </span>
204
<span class="lineno"> 139</span> <span class="py-line"> <span class="py-string">'unrepr'</span><span class="py-op">:</span> <span class="py-name">False</span><span class="py-op">,</span> </span>
205
<span class="lineno"> 140</span> <span class="py-line"> <span class="py-string">'write_empty_values'</span><span class="py-op">:</span> <span class="py-name">False</span><span class="py-op">,</span> </span>
206
<span class="lineno"> 141</span> <span class="py-line"><span class="py-op">}</span> </span>
207
<span class="lineno"> 142</span> <span class="py-line"> </span>
208
<span class="lineno"> 143</span> <span class="py-line"> </span>
209
<a name="getObj"></a><div id="getObj-def"><span class="lineno"> 144</span> <a class="pysrc-toggle" href="#" id="getObj-toggle" onclick="toggle('getObj'); return false;">-</a><span class="py-line"><span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj-module.html#getObj">getObj</a><span class="py-op">(</span><span class="py-param">s</span><span class="py-op">)</span><span class="py-op">:</span> </span>
210
</div><div id="getObj-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="getObj-expanded"><span class="lineno"> 145</span> <span class="py-line"> <span class="py-name">s</span> <span class="py-op">=</span> <span class="py-string">"a="</span> <span class="py-op">+</span> <span class="py-name">s</span> </span>
211
<span class="lineno"> 146</span> <span class="py-line"> <span class="py-name">p</span> <span class="py-op">=</span> <span class="py-name">compiler</span><span class="py-op">.</span><span class="py-name">parse</span><span class="py-op">(</span><span class="py-name">s</span><span class="py-op">)</span> </span>
212
<span class="lineno"> 147</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">p</span><span class="py-op">.</span><span class="py-name">getChildren</span><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">[</span><span class="py-number">1</span><span class="py-op">]</span><span class="py-op">.</span><span class="py-name">getChildren</span><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">[</span><span class="py-number">0</span><span class="py-op">]</span><span class="py-op">.</span><span class="py-name">getChildren</span><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">[</span><span class="py-number">1</span><span class="py-op">]</span> </span>
213
</div><span class="lineno"> 148</span> <span class="py-line"> </span>
214
<a name="UnknownType"></a><div id="UnknownType-def"><span class="lineno"> 149</span> <a class="pysrc-toggle" href="#" id="UnknownType-toggle" onclick="toggle('UnknownType'); return false;">-</a><span class="py-line"><span class="py-keyword">class</span> <a class="py-def-name" href="pythonutils.configobj.UnknownType-class.html">UnknownType</a><span class="py-op">(</span><span class="py-base-class">Exception</span><span class="py-op">)</span><span class="py-op">:</span> </span>
215
</div><div id="UnknownType-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="UnknownType-expanded"><span class="lineno"> 150</span> <span class="py-line"> <span class="py-keyword">pass</span> </span>
216
</div><span class="lineno"> 151</span> <span class="py-line"> </span>
217
<a name="Builder"></a><div id="Builder-def"><span class="lineno"> 152</span> <a class="pysrc-toggle" href="#" id="Builder-toggle" onclick="toggle('Builder'); return false;">-</a><span class="py-line"><span class="py-keyword">class</span> <a class="py-def-name" href="pythonutils.configobj.Builder-class.html">Builder</a><span class="py-op">:</span> </span>
218
</div><div id="Builder-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Builder-expanded"><span class="lineno"> 153</span> <span class="py-line"> </span>
219
<a name="Builder.build"></a><div id="Builder.build-def"><span class="lineno"> 154</span> <a class="pysrc-toggle" href="#" id="Builder.build-toggle" onclick="toggle('Builder.build'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Builder-class.html#build">build</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">o</span><span class="py-op">)</span><span class="py-op">:</span> </span>
220
</div><div id="Builder.build-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Builder.build-expanded"><span class="lineno"> 155</span> <span class="py-line"> <span class="py-name">m</span> <span class="py-op">=</span> <span class="py-name">getattr</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">,</span> <span class="py-string">'build_'</span> <span class="py-op">+</span> <span class="py-name">o</span><span class="py-op">.</span><span class="py-name">__class__</span><span class="py-op">.</span><span class="py-name">__name__</span><span class="py-op">,</span> <span class="py-name">None</span><span class="py-op">)</span> </span>
221
<span class="lineno"> 156</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">m</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
222
<span class="lineno"> 157</span> <span class="py-line"> <span class="py-keyword">raise</span> <a title="pythonutils.configobj.UnknownType" class="py-name" href="pythonutils.configobj.UnknownType-class.html">UnknownType</a><span class="py-op">(</span><span class="py-name">o</span><span class="py-op">.</span><span class="py-name">__class__</span><span class="py-op">.</span><span class="py-name">__name__</span><span class="py-op">)</span> </span>
223
<span class="lineno"> 158</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">m</span><span class="py-op">(</span><span class="py-name">o</span><span class="py-op">)</span> </span>
224
</div><span class="lineno"> 159</span> <span class="py-line"> </span>
225
<a name="Builder.build_List"></a><div id="Builder.build_List-def"><span class="lineno"> 160</span> <a class="pysrc-toggle" href="#" id="Builder.build_List-toggle" onclick="toggle('Builder.build_List'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Builder-class.html#build_List">build_List</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">o</span><span class="py-op">)</span><span class="py-op">:</span> </span>
226
</div><div id="Builder.build_List-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Builder.build_List-expanded"><span class="lineno"> 161</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">map</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Builder.build" class="py-name" href="pythonutils.configobj.Builder-class.html#build">build</a><span class="py-op">,</span> <span class="py-name">o</span><span class="py-op">.</span><span class="py-name">getChildren</span><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">)</span> </span>
227
</div><span class="lineno"> 162</span> <span class="py-line"> </span>
228
<a name="Builder.build_Const"></a><div id="Builder.build_Const-def"><span class="lineno"> 163</span> <a class="pysrc-toggle" href="#" id="Builder.build_Const-toggle" onclick="toggle('Builder.build_Const'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Builder-class.html#build_Const">build_Const</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">o</span><span class="py-op">)</span><span class="py-op">:</span> </span>
229
</div><div id="Builder.build_Const-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Builder.build_Const-expanded"><span class="lineno"> 164</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">o</span><span class="py-op">.</span><span class="py-name">value</span> </span>
230
</div><span class="lineno"> 165</span> <span class="py-line"> </span>
231
<a name="Builder.build_Dict"></a><div id="Builder.build_Dict-def"><span class="lineno"> 166</span> <a class="pysrc-toggle" href="#" id="Builder.build_Dict-toggle" onclick="toggle('Builder.build_Dict'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Builder-class.html#build_Dict">build_Dict</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">o</span><span class="py-op">)</span><span class="py-op">:</span> </span>
232
</div><div id="Builder.build_Dict-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Builder.build_Dict-expanded"><span class="lineno"> 167</span> <span class="py-line"> <span class="py-name">d</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
233
<span class="lineno"> 168</span> <span class="py-line"> <span class="py-name">i</span> <span class="py-op">=</span> <span class="py-name">iter</span><span class="py-op">(</span><span class="py-name">map</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Builder.build" class="py-name" href="pythonutils.configobj.Builder-class.html#build">build</a><span class="py-op">,</span> <span class="py-name">o</span><span class="py-op">.</span><span class="py-name">getChildren</span><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">)</span> </span>
234
<span class="lineno"> 169</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">el</span> <span class="py-keyword">in</span> <span class="py-name">i</span><span class="py-op">:</span> </span>
235
<span class="lineno"> 170</span> <span class="py-line"> <span class="py-name">d</span><span class="py-op">[</span><span class="py-name">el</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">i</span><span class="py-op">.</span><span class="py-name">next</span><span class="py-op">(</span><span class="py-op">)</span> </span>
236
<span class="lineno"> 171</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">d</span> </span>
237
</div><span class="lineno"> 172</span> <span class="py-line"> </span>
238
<a name="Builder.build_Tuple"></a><div id="Builder.build_Tuple-def"><span class="lineno"> 173</span> <a class="pysrc-toggle" href="#" id="Builder.build_Tuple-toggle" onclick="toggle('Builder.build_Tuple'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Builder-class.html#build_Tuple">build_Tuple</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">o</span><span class="py-op">)</span><span class="py-op">:</span> </span>
239
</div><div id="Builder.build_Tuple-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Builder.build_Tuple-expanded"><span class="lineno"> 174</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">tuple</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Builder.build_List" class="py-name" href="pythonutils.configobj.Builder-class.html#build_List">build_List</a><span class="py-op">(</span><span class="py-name">o</span><span class="py-op">)</span><span class="py-op">)</span> </span>
240
</div><span class="lineno"> 175</span> <span class="py-line"> </span>
241
<a name="Builder.build_Name"></a><div id="Builder.build_Name-def"><span class="lineno"> 176</span> <a class="pysrc-toggle" href="#" id="Builder.build_Name-toggle" onclick="toggle('Builder.build_Name'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Builder-class.html#build_Name">build_Name</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">o</span><span class="py-op">)</span><span class="py-op">:</span> </span>
242
</div><div id="Builder.build_Name-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Builder.build_Name-expanded"><span class="lineno"> 177</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">o</span><span class="py-op">.</span><span class="py-name">name</span> <span class="py-op">==</span> <span class="py-string">'None'</span><span class="py-op">:</span> </span>
243
<span class="lineno"> 178</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">None</span> </span>
244
<span class="lineno"> 179</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">o</span><span class="py-op">.</span><span class="py-name">name</span> <span class="py-op">==</span> <span class="py-string">'True'</span><span class="py-op">:</span> </span>
245
<span class="lineno"> 180</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">True</span> </span>
246
<span class="lineno"> 181</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">o</span><span class="py-op">.</span><span class="py-name">name</span> <span class="py-op">==</span> <span class="py-string">'False'</span><span class="py-op">:</span> </span>
247
<span class="lineno"> 182</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">False</span> </span>
248
<span class="lineno"> 183</span> <span class="py-line"> </span>
249
<span class="lineno"> 184</span> <span class="py-line"> <span class="py-comment"># An undefinted Name</span> </span>
250
<span class="lineno"> 185</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">raise</span> <a title="pythonutils.configobj.UnknownType" class="py-name" href="pythonutils.configobj.UnknownType-class.html">UnknownType</a><span class="py-op">(</span><span class="py-string">'Undefined Name'</span><span class="py-op">)</span> </span>
251
</div><span class="lineno"> 186</span> <span class="py-line"> </span>
252
<a name="Builder.build_Add"></a><div id="Builder.build_Add-def"><span class="lineno"> 187</span> <a class="pysrc-toggle" href="#" id="Builder.build_Add-toggle" onclick="toggle('Builder.build_Add'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Builder-class.html#build_Add">build_Add</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">o</span><span class="py-op">)</span><span class="py-op">:</span> </span>
253
</div><div id="Builder.build_Add-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Builder.build_Add-expanded"><span class="lineno"> 188</span> <span class="py-line"> <span class="py-name">real</span><span class="py-op">,</span> <span class="py-name">imag</span> <span class="py-op">=</span> <span class="py-name">map</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Builder.build_Const" class="py-name" href="pythonutils.configobj.Builder-class.html#build_Const">build_Const</a><span class="py-op">,</span> <span class="py-name">o</span><span class="py-op">.</span><span class="py-name">getChildren</span><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">)</span> </span>
254
<span class="lineno"> 189</span> <span class="py-line"> <span class="py-keyword">try</span><span class="py-op">:</span> </span>
255
<span class="lineno"> 190</span> <span class="py-line"> <span class="py-name">real</span> <span class="py-op">=</span> <span class="py-name">float</span><span class="py-op">(</span><span class="py-name">real</span><span class="py-op">)</span> </span>
256
<span class="lineno"> 191</span> <span class="py-line"> <span class="py-keyword">except</span> <span class="py-name">TypeError</span><span class="py-op">:</span> </span>
257
<span class="lineno"> 192</span> <span class="py-line"> <span class="py-keyword">raise</span> <a title="pythonutils.configobj.UnknownType" class="py-name" href="pythonutils.configobj.UnknownType-class.html">UnknownType</a><span class="py-op">(</span><span class="py-string">'Add'</span><span class="py-op">)</span> </span>
258
<span class="lineno"> 193</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">imag</span><span class="py-op">,</span> <span class="py-name">complex</span><span class="py-op">)</span> <span class="py-keyword">or</span> <span class="py-name">imag</span><span class="py-op">.</span><span class="py-name">real</span> <span class="py-op">!=</span> <span class="py-number">0.0</span><span class="py-op">:</span> </span>
259
<span class="lineno"> 194</span> <span class="py-line"> <span class="py-keyword">raise</span> <a title="pythonutils.configobj.UnknownType" class="py-name" href="pythonutils.configobj.UnknownType-class.html">UnknownType</a><span class="py-op">(</span><span class="py-string">'Add'</span><span class="py-op">)</span> </span>
260
<span class="lineno"> 195</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">real</span><span class="py-op">+</span><span class="py-name">imag</span> </span>
261
</div><span class="lineno"> 196</span> <span class="py-line"> </span>
262
<a name="Builder.build_Getattr"></a><div id="Builder.build_Getattr-def"><span class="lineno"> 197</span> <a class="pysrc-toggle" href="#" id="Builder.build_Getattr-toggle" onclick="toggle('Builder.build_Getattr'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Builder-class.html#build_Getattr">build_Getattr</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">o</span><span class="py-op">)</span><span class="py-op">:</span> </span>
263
</div><div id="Builder.build_Getattr-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Builder.build_Getattr-expanded"><span class="lineno"> 198</span> <span class="py-line"> <span class="py-name">parent</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Builder.build" class="py-name" href="pythonutils.configobj.Builder-class.html#build">build</a><span class="py-op">(</span><span class="py-name">o</span><span class="py-op">.</span><span class="py-name">expr</span><span class="py-op">)</span> </span>
264
<span class="lineno"> 199</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">getattr</span><span class="py-op">(</span><span class="py-name">parent</span><span class="py-op">,</span> <span class="py-name">o</span><span class="py-op">.</span><span class="py-name">attrname</span><span class="py-op">)</span> </span>
265
</div><span class="lineno"> 200</span> <span class="py-line"> </span>
266
<a name="Builder.build_UnarySub"></a><div id="Builder.build_UnarySub-def"><span class="lineno"> 201</span> <a class="pysrc-toggle" href="#" id="Builder.build_UnarySub-toggle" onclick="toggle('Builder.build_UnarySub'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Builder-class.html#build_UnarySub">build_UnarySub</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">o</span><span class="py-op">)</span><span class="py-op">:</span> </span>
267
</div><div id="Builder.build_UnarySub-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Builder.build_UnarySub-expanded"><span class="lineno"> 202</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-op">-</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Builder.build_Const" class="py-name" href="pythonutils.configobj.Builder-class.html#build_Const">build_Const</a><span class="py-op">(</span><span class="py-name">o</span><span class="py-op">.</span><span class="py-name">getChildren</span><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">[</span><span class="py-number">0</span><span class="py-op">]</span><span class="py-op">)</span> </span>
268
</div><span class="lineno"> 203</span> <span class="py-line"> </span>
269
<a name="Builder.build_UnaryAdd"></a><div id="Builder.build_UnaryAdd-def"><span class="lineno"> 204</span> <a class="pysrc-toggle" href="#" id="Builder.build_UnaryAdd-toggle" onclick="toggle('Builder.build_UnaryAdd'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Builder-class.html#build_UnaryAdd">build_UnaryAdd</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">o</span><span class="py-op">)</span><span class="py-op">:</span> </span>
270
</div><div id="Builder.build_UnaryAdd-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Builder.build_UnaryAdd-expanded"><span class="lineno"> 205</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Builder.build_Const" class="py-name" href="pythonutils.configobj.Builder-class.html#build_Const">build_Const</a><span class="py-op">(</span><span class="py-name">o</span><span class="py-op">.</span><span class="py-name">getChildren</span><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">[</span><span class="py-number">0</span><span class="py-op">]</span><span class="py-op">)</span> </span>
271
</div></div><span class="lineno"> 206</span> <span class="py-line"> </span>
272
<a name="unrepr"></a><div id="unrepr-def"><span class="lineno"> 207</span> <a class="pysrc-toggle" href="#" id="unrepr-toggle" onclick="toggle('unrepr'); return false;">-</a><span class="py-line"><span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj-module.html#unrepr">unrepr</a><span class="py-op">(</span><span class="py-param">s</span><span class="py-op">)</span><span class="py-op">:</span> </span>
273
</div><div id="unrepr-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="unrepr-expanded"><span class="lineno"> 208</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">s</span><span class="py-op">:</span> </span>
274
<span class="lineno"> 209</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">s</span> </span>
275
<span class="lineno"> 210</span> <span class="py-line"> <span class="py-keyword">return</span> <a title="pythonutils.configobj.Builder" class="py-name" href="pythonutils.configobj.Builder-class.html">Builder</a><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">.</span><a title="pythonutils.configobj.Builder.build" class="py-name" href="pythonutils.configobj.Builder-class.html#build">build</a><span class="py-op">(</span><a title="pythonutils.configobj.getObj" class="py-name" href="pythonutils.configobj-module.html#getObj">getObj</a><span class="py-op">(</span><span class="py-name">s</span><span class="py-op">)</span><span class="py-op">)</span> </span>
276
</div><span class="lineno"> 211</span> <span class="py-line"> </span>
277
<span class="lineno"> 212</span> <span class="py-line"> </span>
278
<a name="ConfigObjError"></a><div id="ConfigObjError-def"><span class="lineno"> 213</span> <a class="pysrc-toggle" href="#" id="ConfigObjError-toggle" onclick="toggle('ConfigObjError'); return false;">-</a><span class="py-line"><span class="py-keyword">class</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObjError-class.html">ConfigObjError</a><span class="py-op">(</span><span class="py-base-class">SyntaxError</span><span class="py-op">)</span><span class="py-op">:</span> </span>
279
</div><div id="ConfigObjError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ConfigObjError-expanded"><span class="lineno"> 214</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
280
<span class="lineno"> 215</span> <span class="py-line"><span class="py-docstring"> This is the base class for all errors that ConfigObj raises.</span> </span>
281
<span class="lineno"> 216</span> <span class="py-line"><span class="py-docstring"> It is a subclass of SyntaxError.</span> </span>
282
<span class="lineno"> 217</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
283
<a name="ConfigObjError.__init__"></a><div id="ConfigObjError.__init__-def"><span class="lineno"> 218</span> <a class="pysrc-toggle" href="#" id="ConfigObjError.__init__-toggle" onclick="toggle('ConfigObjError.__init__'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObjError-class.html#__init__">__init__</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">message</span><span class="py-op">=</span><span class="py-string">''</span><span class="py-op">,</span> <span class="py-param">line_number</span><span class="py-op">=</span><span class="py-name">None</span><span class="py-op">,</span> <span class="py-param">line</span><span class="py-op">=</span><span class="py-string">''</span><span class="py-op">)</span><span class="py-op">:</span> </span>
284
</div><div id="ConfigObjError.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObjError.__init__-expanded"><span class="lineno"> 219</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">line</span> <span class="py-op">=</span> <span class="py-name">line</span> </span>
285
<span class="lineno"> 220</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">line_number</span> <span class="py-op">=</span> <span class="py-name">line_number</span> </span>
286
<span class="lineno"> 221</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">message</span> <span class="py-op">=</span> <span class="py-name">message</span> </span>
287
<span class="lineno"> 222</span> <span class="py-line"> <span class="py-name">SyntaxError</span><span class="py-op">.</span><span id="link-0" class="py-name"><a title="pythonutils.configobj.ConfigObj.__init__
288
pythonutils.configobj.ConfigObjError.__init__
289
pythonutils.configobj.InterpolationDepthError.__init__
290
pythonutils.configobj.MissingInterpolationOption.__init__
291
pythonutils.configobj.Section.__init__
292
pythonutils.configobj.SimpleVal.__init__" class="py-name" href="#" onclick="doclink('link-0', '__init__', 'Method ConfigObj.__init__()=pythonutils.configobj.ConfigObj-class.html#__init__,Method __init__()=pythonutils.configobj.ConfigObjError-class.html#__init__,Method InterpolationDepthError.__init__()=pythonutils.configobj.InterpolationDepthError-class.html#__init__,Method MissingInterpolationOption.__init__()=pythonutils.configobj.MissingInterpolationOption-class.html#__init__,Method Section.__init__()=pythonutils.configobj.Section-class.html#__init__,Method SimpleVal.__init__()=pythonutils.configobj.SimpleVal-class.html#__init__'); return false;">__init__</a></span></span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">,</span> <span class="py-name">message</span><span class="py-op">)</span> </span>
293
</div></div><span class="lineno"> 223</span> <span class="py-line"> </span>
294
<a name="NestingError"></a><div id="NestingError-def"><span class="lineno"> 224</span> <a class="pysrc-toggle" href="#" id="NestingError-toggle" onclick="toggle('NestingError'); return false;">-</a><span class="py-line"><span class="py-keyword">class</span> <a class="py-def-name" href="pythonutils.configobj.NestingError-class.html">NestingError</a><span class="py-op">(</span><span class="py-base-class">ConfigObjError</span><span class="py-op">)</span><span class="py-op">:</span> </span>
295
</div><div id="NestingError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="NestingError-expanded"><span class="lineno"> 225</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
296
<span class="lineno"> 226</span> <span class="py-line"><span class="py-docstring"> This error indicates a level of nesting that doesn't match.</span> </span>
297
<span class="lineno"> 227</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
298
</div><span class="lineno"> 228</span> <span class="py-line"> </span>
299
<a name="ParseError"></a><div id="ParseError-def"><span class="lineno"> 229</span> <a class="pysrc-toggle" href="#" id="ParseError-toggle" onclick="toggle('ParseError'); return false;">-</a><span class="py-line"><span class="py-keyword">class</span> <a class="py-def-name" href="pythonutils.configobj.ParseError-class.html">ParseError</a><span class="py-op">(</span><span class="py-base-class">ConfigObjError</span><span class="py-op">)</span><span class="py-op">:</span> </span>
300
</div><div id="ParseError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ParseError-expanded"><span class="lineno"> 230</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
301
<span class="lineno"> 231</span> <span class="py-line"><span class="py-docstring"> This error indicates that a line is badly written.</span> </span>
302
<span class="lineno"> 232</span> <span class="py-line"><span class="py-docstring"> It is neither a valid ``key = value`` line,</span> </span>
303
<span class="lineno"> 233</span> <span class="py-line"><span class="py-docstring"> nor a valid section marker line.</span> </span>
304
<span class="lineno"> 234</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
305
</div><span class="lineno"> 235</span> <span class="py-line"> </span>
306
<a name="DuplicateError"></a><div id="DuplicateError-def"><span class="lineno"> 236</span> <a class="pysrc-toggle" href="#" id="DuplicateError-toggle" onclick="toggle('DuplicateError'); return false;">-</a><span class="py-line"><span class="py-keyword">class</span> <a class="py-def-name" href="pythonutils.configobj.DuplicateError-class.html">DuplicateError</a><span class="py-op">(</span><span class="py-base-class">ConfigObjError</span><span class="py-op">)</span><span class="py-op">:</span> </span>
307
</div><div id="DuplicateError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="DuplicateError-expanded"><span class="lineno"> 237</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
308
<span class="lineno"> 238</span> <span class="py-line"><span class="py-docstring"> The keyword or section specified already exists.</span> </span>
309
<span class="lineno"> 239</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
310
</div><span class="lineno"> 240</span> <span class="py-line"> </span>
311
<a name="ConfigspecError"></a><div id="ConfigspecError-def"><span class="lineno"> 241</span> <a class="pysrc-toggle" href="#" id="ConfigspecError-toggle" onclick="toggle('ConfigspecError'); return false;">-</a><span class="py-line"><span class="py-keyword">class</span> <a class="py-def-name" href="pythonutils.configobj.ConfigspecError-class.html">ConfigspecError</a><span class="py-op">(</span><span class="py-base-class">ConfigObjError</span><span class="py-op">)</span><span class="py-op">:</span> </span>
312
</div><div id="ConfigspecError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ConfigspecError-expanded"><span class="lineno"> 242</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
313
<span class="lineno"> 243</span> <span class="py-line"><span class="py-docstring"> An error occured whilst parsing a configspec.</span> </span>
314
<span class="lineno"> 244</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
315
</div><span class="lineno"> 245</span> <span class="py-line"> </span>
316
<a name="InterpolationError"></a><div id="InterpolationError-def"><span class="lineno"> 246</span> <a class="pysrc-toggle" href="#" id="InterpolationError-toggle" onclick="toggle('InterpolationError'); return false;">-</a><span class="py-line"><span class="py-keyword">class</span> <a class="py-def-name" href="pythonutils.configobj.InterpolationError-class.html">InterpolationError</a><span class="py-op">(</span><span class="py-base-class">ConfigObjError</span><span class="py-op">)</span><span class="py-op">:</span> </span>
317
</div><div id="InterpolationError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="InterpolationError-expanded"><span class="lineno"> 247</span> <span class="py-line"> <span class="py-docstring">"""Base class for the two interpolation errors."""</span> </span>
318
</div><span class="lineno"> 248</span> <span class="py-line"> </span>
319
<a name="InterpolationDepthError"></a><div id="InterpolationDepthError-def"><span class="lineno"> 249</span> <a class="pysrc-toggle" href="#" id="InterpolationDepthError-toggle" onclick="toggle('InterpolationDepthError'); return false;">-</a><span class="py-line"><span class="py-keyword">class</span> <a class="py-def-name" href="pythonutils.configobj.InterpolationDepthError-class.html">InterpolationDepthError</a><span class="py-op">(</span><span class="py-base-class">InterpolationError</span><span class="py-op">)</span><span class="py-op">:</span> </span>
320
</div><div id="InterpolationDepthError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="InterpolationDepthError-expanded"><span class="lineno"> 250</span> <span class="py-line"> <span class="py-docstring">"""Maximum interpolation depth exceeded in string interpolation."""</span> </span>
321
<span class="lineno"> 251</span> <span class="py-line"> </span>
322
<a name="InterpolationDepthError.__init__"></a><div id="InterpolationDepthError.__init__-def"><span class="lineno"> 252</span> <a class="pysrc-toggle" href="#" id="InterpolationDepthError.__init__-toggle" onclick="toggle('InterpolationDepthError.__init__'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.InterpolationDepthError-class.html#__init__">__init__</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">option</span><span class="py-op">)</span><span class="py-op">:</span> </span>
323
</div><div id="InterpolationDepthError.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="InterpolationDepthError.__init__-expanded"><span class="lineno"> 253</span> <span class="py-line"> <a title="pythonutils.configobj.InterpolationError" class="py-name" href="pythonutils.configobj.InterpolationError-class.html">InterpolationError</a><span class="py-op">.</span><span id="link-1" class="py-name"><a title="pythonutils.configobj.ConfigObj.__init__
324
pythonutils.configobj.ConfigObjError.__init__
325
pythonutils.configobj.InterpolationDepthError.__init__
326
pythonutils.configobj.MissingInterpolationOption.__init__
327
pythonutils.configobj.Section.__init__
328
pythonutils.configobj.SimpleVal.__init__" class="py-name" href="#" onclick="doclink('link-1', '__init__', 'Method ConfigObj.__init__()=pythonutils.configobj.ConfigObj-class.html#__init__,Method ConfigObjError.__init__()=pythonutils.configobj.ConfigObjError-class.html#__init__,Method __init__()=pythonutils.configobj.InterpolationDepthError-class.html#__init__,Method MissingInterpolationOption.__init__()=pythonutils.configobj.MissingInterpolationOption-class.html#__init__,Method Section.__init__()=pythonutils.configobj.Section-class.html#__init__,Method SimpleVal.__init__()=pythonutils.configobj.SimpleVal-class.html#__init__'); return false;">__init__</a></span></span><span class="py-op">(</span> </span>
329
<span class="lineno"> 254</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">,</span> </span>
330
<span class="lineno"> 255</span> <span class="py-line"> <span class="py-string">'max interpolation depth exceeded in value "%s".'</span> <span class="py-op">%</span> <span class="py-name">option</span><span class="py-op">)</span> </span>
331
</div></div><span class="lineno"> 256</span> <span class="py-line"> </span>
332
<a name="RepeatSectionError"></a><div id="RepeatSectionError-def"><span class="lineno"> 257</span> <a class="pysrc-toggle" href="#" id="RepeatSectionError-toggle" onclick="toggle('RepeatSectionError'); return false;">-</a><span class="py-line"><span class="py-keyword">class</span> <a class="py-def-name" href="pythonutils.configobj.RepeatSectionError-class.html">RepeatSectionError</a><span class="py-op">(</span><span class="py-base-class">ConfigObjError</span><span class="py-op">)</span><span class="py-op">:</span> </span>
333
</div><div id="RepeatSectionError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="RepeatSectionError-expanded"><span class="lineno"> 258</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
334
<span class="lineno"> 259</span> <span class="py-line"><span class="py-docstring"> This error indicates additional sections in a section with a</span> </span>
335
<span class="lineno"> 260</span> <span class="py-line"><span class="py-docstring"> ``__many__`` (repeated) section.</span> </span>
336
<span class="lineno"> 261</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
337
</div><span class="lineno"> 262</span> <span class="py-line"> </span>
338
<a name="MissingInterpolationOption"></a><div id="MissingInterpolationOption-def"><span class="lineno"> 263</span> <a class="pysrc-toggle" href="#" id="MissingInterpolationOption-toggle" onclick="toggle('MissingInterpolationOption'); return false;">-</a><span class="py-line"><span class="py-keyword">class</span> <a class="py-def-name" href="pythonutils.configobj.MissingInterpolationOption-class.html">MissingInterpolationOption</a><span class="py-op">(</span><span class="py-base-class">InterpolationError</span><span class="py-op">)</span><span class="py-op">:</span> </span>
339
</div><div id="MissingInterpolationOption-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="MissingInterpolationOption-expanded"><span class="lineno"> 264</span> <span class="py-line"> <span class="py-docstring">"""A value specified for interpolation was missing."""</span> </span>
340
<span class="lineno"> 265</span> <span class="py-line"> </span>
341
<a name="MissingInterpolationOption.__init__"></a><div id="MissingInterpolationOption.__init__-def"><span class="lineno"> 266</span> <a class="pysrc-toggle" href="#" id="MissingInterpolationOption.__init__-toggle" onclick="toggle('MissingInterpolationOption.__init__'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.MissingInterpolationOption-class.html#__init__">__init__</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">option</span><span class="py-op">)</span><span class="py-op">:</span> </span>
342
</div><div id="MissingInterpolationOption.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="MissingInterpolationOption.__init__-expanded"><span class="lineno"> 267</span> <span class="py-line"> <a title="pythonutils.configobj.InterpolationError" class="py-name" href="pythonutils.configobj.InterpolationError-class.html">InterpolationError</a><span class="py-op">.</span><span id="link-2" class="py-name"><a title="pythonutils.configobj.ConfigObj.__init__
343
pythonutils.configobj.ConfigObjError.__init__
344
pythonutils.configobj.InterpolationDepthError.__init__
345
pythonutils.configobj.MissingInterpolationOption.__init__
346
pythonutils.configobj.Section.__init__
347
pythonutils.configobj.SimpleVal.__init__" class="py-name" href="#" onclick="doclink('link-2', '__init__', 'Method ConfigObj.__init__()=pythonutils.configobj.ConfigObj-class.html#__init__,Method ConfigObjError.__init__()=pythonutils.configobj.ConfigObjError-class.html#__init__,Method InterpolationDepthError.__init__()=pythonutils.configobj.InterpolationDepthError-class.html#__init__,Method __init__()=pythonutils.configobj.MissingInterpolationOption-class.html#__init__,Method Section.__init__()=pythonutils.configobj.Section-class.html#__init__,Method SimpleVal.__init__()=pythonutils.configobj.SimpleVal-class.html#__init__'); return false;">__init__</a></span></span><span class="py-op">(</span> </span>
348
<span class="lineno"> 268</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">,</span> </span>
349
<span class="lineno"> 269</span> <span class="py-line"> <span class="py-string">'missing option "%s" in interpolation.'</span> <span class="py-op">%</span> <span class="py-name">option</span><span class="py-op">)</span> </span>
350
</div></div><span class="lineno"> 270</span> <span class="py-line"> </span>
351
<a name="Section"></a><div id="Section-def"><span class="lineno"> 271</span> <a class="pysrc-toggle" href="#" id="Section-toggle" onclick="toggle('Section'); return false;">-</a><span class="py-line"><span class="py-keyword">class</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html">Section</a><span class="py-op">(</span><span class="py-base-class">dict</span><span class="py-op">)</span><span class="py-op">:</span> </span>
352
</div><div id="Section-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Section-expanded"><span class="lineno"> 272</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
353
<span class="lineno"> 273</span> <span class="py-line"><span class="py-docstring"> A dictionary-like object that represents a section in a config file.</span> </span>
354
<span class="lineno"> 274</span> <span class="py-line"><span class="py-docstring"> </span> </span>
355
<span class="lineno"> 275</span> <span class="py-line"><span class="py-docstring"> It does string interpolation if the 'interpolate' attribute</span> </span>
356
<span class="lineno"> 276</span> <span class="py-line"><span class="py-docstring"> of the 'main' object is set to True.</span> </span>
357
<span class="lineno"> 277</span> <span class="py-line"><span class="py-docstring"> </span> </span>
358
<span class="lineno"> 278</span> <span class="py-line"><span class="py-docstring"> Interpolation is tried first from the 'DEFAULT' section of this object,</span> </span>
359
<span class="lineno"> 279</span> <span class="py-line"><span class="py-docstring"> next from the 'DEFAULT' section of the parent, lastly the main object.</span> </span>
360
<span class="lineno"> 280</span> <span class="py-line"><span class="py-docstring"> </span> </span>
361
<span class="lineno"> 281</span> <span class="py-line"><span class="py-docstring"> A Section will behave like an ordered dictionary - following the</span> </span>
362
<span class="lineno"> 282</span> <span class="py-line"><span class="py-docstring"> order of the ``scalars`` and ``sections`` attributes.</span> </span>
363
<span class="lineno"> 283</span> <span class="py-line"><span class="py-docstring"> You can use this to change the order of members.</span> </span>
364
<span class="lineno"> 284</span> <span class="py-line"><span class="py-docstring"> </span> </span>
365
<span class="lineno"> 285</span> <span class="py-line"><span class="py-docstring"> Iteration follows the order: scalars, then sections.</span> </span>
366
<span class="lineno"> 286</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
367
<span class="lineno"> 287</span> <span class="py-line"> </span>
368
<span class="lineno"> 288</span> <span class="py-line"> <a class="py-name" href="pythonutils.configobj.Section-class.html#_KEYCRE">_KEYCRE</a> <span class="py-op">=</span> <span class="py-name">re</span><span class="py-op">.</span><span class="py-name">compile</span><span class="py-op">(</span><span class="py-string">r"%\(([^)]*)\)s|."</span><span class="py-op">)</span> </span>
369
<span class="lineno"> 289</span> <span class="py-line"> </span>
370
<a name="Section.__init__"></a><div id="Section.__init__-def"><span class="lineno"> 290</span> <a class="pysrc-toggle" href="#" id="Section.__init__-toggle" onclick="toggle('Section.__init__'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#__init__">__init__</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">parent</span><span class="py-op">,</span> <span class="py-param">depth</span><span class="py-op">,</span> <span class="py-param">main</span><span class="py-op">,</span> <span class="py-param">indict</span><span class="py-op">=</span><span class="py-name">None</span><span class="py-op">,</span> <span class="py-param">name</span><span class="py-op">=</span><span class="py-name">None</span><span class="py-op">)</span><span class="py-op">:</span> </span>
371
</div><div id="Section.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.__init__-expanded"><span class="lineno"> 291</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
372
<span class="lineno"> 292</span> <span class="py-line"><span class="py-docstring"> * parent is the section above</span> </span>
373
<span class="lineno"> 293</span> <span class="py-line"><span class="py-docstring"> * depth is the depth level of this section</span> </span>
374
<span class="lineno"> 294</span> <span class="py-line"><span class="py-docstring"> * main is the main ConfigObj</span> </span>
375
<span class="lineno"> 295</span> <span class="py-line"><span class="py-docstring"> * indict is a dictionary to initialise the section with</span> </span>
376
<span class="lineno"> 296</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
377
<span class="lineno"> 297</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">indict</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
378
<span class="lineno"> 298</span> <span class="py-line"> <span class="py-name">indict</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
379
<span class="lineno"> 299</span> <span class="py-line"> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">.</span><span id="link-3" class="py-name"><a title="pythonutils.configobj.ConfigObj.__init__
380
pythonutils.configobj.ConfigObjError.__init__
381
pythonutils.configobj.InterpolationDepthError.__init__
382
pythonutils.configobj.MissingInterpolationOption.__init__
383
pythonutils.configobj.Section.__init__
384
pythonutils.configobj.SimpleVal.__init__" class="py-name" href="#" onclick="doclink('link-3', '__init__', 'Method ConfigObj.__init__()=pythonutils.configobj.ConfigObj-class.html#__init__,Method ConfigObjError.__init__()=pythonutils.configobj.ConfigObjError-class.html#__init__,Method InterpolationDepthError.__init__()=pythonutils.configobj.InterpolationDepthError-class.html#__init__,Method MissingInterpolationOption.__init__()=pythonutils.configobj.MissingInterpolationOption-class.html#__init__,Method __init__()=pythonutils.configobj.Section-class.html#__init__,Method SimpleVal.__init__()=pythonutils.configobj.SimpleVal-class.html#__init__'); return false;">__init__</a></span></span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">)</span> </span>
385
<span class="lineno"> 300</span> <span class="py-line"> <span class="py-comment"># used for nesting level *and* interpolation</span> </span>
386
<span class="lineno"> 301</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">parent</span> <span class="py-op">=</span> <span class="py-name">parent</span> </span>
387
<span class="lineno"> 302</span> <span class="py-line"> <span class="py-comment"># used for the interpolation attribute</span> </span>
388
<span class="lineno"> 303</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">main</span> <span class="py-op">=</span> <span class="py-name">main</span> </span>
389
<span class="lineno"> 304</span> <span class="py-line"> <span class="py-comment"># level of nesting depth of this Section</span> </span>
390
<span class="lineno"> 305</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">depth</span> <span class="py-op">=</span> <span class="py-name">depth</span> </span>
391
<span class="lineno"> 306</span> <span class="py-line"> <span class="py-comment"># the sequence of scalar values in this Section</span> </span>
392
<span class="lineno"> 307</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
393
<span class="lineno"> 308</span> <span class="py-line"> <span class="py-comment"># the sequence of sections in this Section</span> </span>
394
<span class="lineno"> 309</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
395
<span class="lineno"> 310</span> <span class="py-line"> <span class="py-comment"># purely for information</span> </span>
396
<span class="lineno"> 311</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">name</span> <span class="py-op">=</span> <span class="py-name">name</span> </span>
397
<span class="lineno"> 312</span> <span class="py-line"> <span class="py-comment"># for comments :-)</span> </span>
398
<span class="lineno"> 313</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">comments</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
399
<span class="lineno"> 314</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">inline_comments</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
400
<span class="lineno"> 315</span> <span class="py-line"> <span class="py-comment"># for the configspec</span> </span>
401
<span class="lineno"> 316</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">configspec</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
402
<span class="lineno"> 317</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">_order</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
403
<span class="lineno"> 318</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">_configspec_comments</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
404
<span class="lineno"> 319</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">_configspec_inline_comments</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
405
<span class="lineno"> 320</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">_cs_section_comments</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
406
<span class="lineno"> 321</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">_cs_section_inline_comments</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
407
<span class="lineno"> 322</span> <span class="py-line"> <span class="py-comment"># for defaults</span> </span>
408
<span class="lineno"> 323</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">defaults</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
409
<span class="lineno"> 324</span> <span class="py-line"> <span class="py-comment">#</span> </span>
410
<span class="lineno"> 325</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># we do this explicitly so that __setitem__ is used properly</span> </span>
411
<span class="lineno"> 326</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># (rather than just passing to ``dict.__init__``)</span> </span>
412
<span class="lineno"> 327</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">indict</span><span class="py-op">:</span> </span>
413
<span class="lineno"> 328</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">indict</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> </span>
414
</div><span class="lineno"> 329</span> <span class="py-line"> </span>
415
<a name="Section._interpolate"></a><div id="Section._interpolate-def"><span class="lineno"> 330</span> <a class="pysrc-toggle" href="#" id="Section._interpolate-toggle" onclick="toggle('Section._interpolate'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#_interpolate">_interpolate</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">value</span><span class="py-op">)</span><span class="py-op">:</span> </span>
416
</div><div id="Section._interpolate-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section._interpolate-expanded"><span class="lineno"> 331</span> <span class="py-line"> <span class="py-docstring">"""Nicked from ConfigParser."""</span> </span>
417
<span class="lineno"> 332</span> <span class="py-line"> <span class="py-name">depth</span> <span class="py-op">=</span> <a title="pythonutils.configobj.MAX_INTERPOL_DEPTH" class="py-name" href="pythonutils.configobj-module.html#MAX_INTERPOL_DEPTH">MAX_INTERPOL_DEPTH</a> </span>
418
<span class="lineno"> 333</span> <span class="py-line"> <span class="py-comment"># loop through this until it's done</span> </span>
419
<span class="lineno"> 334</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">while</span> <span class="py-name">depth</span><span class="py-op">:</span> </span>
420
<span class="lineno"> 335</span> <span class="py-line"> <span class="py-name">depth</span> <span class="py-op">-=</span> <span class="py-number">1</span> </span>
421
<span class="lineno"> 336</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">value</span><span class="py-op">.</span><span class="py-name">find</span><span class="py-op">(</span><span class="py-string">"%("</span><span class="py-op">)</span> <span class="py-op">!=</span> <span class="py-op">-</span><span class="py-number">1</span><span class="py-op">:</span> </span>
422
<span class="lineno"> 337</span> <span class="py-line"> <span class="py-name">value</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Section._KEYCRE" class="py-name" href="pythonutils.configobj.Section-class.html#_KEYCRE">_KEYCRE</a><span class="py-op">.</span><span class="py-name">sub</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Section._interpolation_replace" class="py-name" href="pythonutils.configobj.Section-class.html#_interpolation_replace">_interpolation_replace</a><span class="py-op">,</span> <span class="py-name">value</span><span class="py-op">)</span> </span>
423
<span class="lineno"> 338</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
424
<span class="lineno"> 339</span> <span class="py-line"> <span class="py-keyword">break</span> </span>
425
<span class="lineno"> 340</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
426
<span class="lineno"> 341</span> <span class="py-line"> <span class="py-keyword">raise</span> <a title="pythonutils.configobj.InterpolationDepthError" class="py-name" href="pythonutils.configobj.InterpolationDepthError-class.html">InterpolationDepthError</a><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">)</span> </span>
427
<span class="lineno"> 342</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">value</span> </span>
428
</div><span class="lineno"> 343</span> <span class="py-line"> </span>
429
<a name="Section._interpolation_replace"></a><div id="Section._interpolation_replace-def"><span class="lineno"> 344</span> <a class="pysrc-toggle" href="#" id="Section._interpolation_replace-toggle" onclick="toggle('Section._interpolation_replace'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#_interpolation_replace">_interpolation_replace</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">match</span><span class="py-op">)</span><span class="py-op">:</span> </span>
430
</div><div id="Section._interpolation_replace-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section._interpolation_replace-expanded"><span class="lineno"> 345</span> <span class="py-line"> <span class="py-docstring">""" """</span> </span>
431
<span class="lineno"> 346</span> <span class="py-line"> <span class="py-name">s</span> <span class="py-op">=</span> <span class="py-name">match</span><span class="py-op">.</span><span class="py-name">group</span><span class="py-op">(</span><span class="py-number">1</span><span class="py-op">)</span> </span>
432
<span class="lineno"> 347</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">s</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
433
<span class="lineno"> 348</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">match</span><span class="py-op">.</span><span class="py-name">group</span><span class="py-op">(</span><span class="py-op">)</span> </span>
434
<span class="lineno"> 349</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
435
<span class="lineno"> 350</span> <span class="py-line"> <span class="py-comment"># switch off interpolation before we try and fetch anything !</span> </span>
436
<span class="lineno"> 351</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">main</span><span class="py-op">.</span><span class="py-name">interpolation</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
437
<span class="lineno"> 352</span> <span class="py-line"> <span class="py-comment"># try the 'DEFAULT' member of *this section* first</span> </span>
438
<span class="lineno"> 353</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">val</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.get" class="py-name" href="pythonutils.configobj.Section-class.html#get">get</a><span class="py-op">(</span><span class="py-string">'DEFAULT'</span><span class="py-op">,</span> <span class="py-op">{</span><span class="py-op">}</span><span class="py-op">)</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.get" class="py-name" href="pythonutils.configobj.Section-class.html#get">get</a><span class="py-op">(</span><span class="py-name">s</span><span class="py-op">)</span> </span>
439
<span class="lineno"> 354</span> <span class="py-line"> <span class="py-comment"># try the 'DEFAULT' member of the *parent section* next</span> </span>
440
<span class="lineno"> 355</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">val</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
441
<span class="lineno"> 356</span> <span class="py-line"> <span class="py-name">val</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">parent</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.get" class="py-name" href="pythonutils.configobj.Section-class.html#get">get</a><span class="py-op">(</span><span class="py-string">'DEFAULT'</span><span class="py-op">,</span> <span class="py-op">{</span><span class="py-op">}</span><span class="py-op">)</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.get" class="py-name" href="pythonutils.configobj.Section-class.html#get">get</a><span class="py-op">(</span><span class="py-name">s</span><span class="py-op">)</span> </span>
442
<span class="lineno"> 357</span> <span class="py-line"> <span class="py-comment"># last, try the 'DEFAULT' member of the *main section*</span> </span>
443
<span class="lineno"> 358</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">val</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
444
<span class="lineno"> 359</span> <span class="py-line"> <span class="py-name">val</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">main</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.get" class="py-name" href="pythonutils.configobj.Section-class.html#get">get</a><span class="py-op">(</span><span class="py-string">'DEFAULT'</span><span class="py-op">,</span> <span class="py-op">{</span><span class="py-op">}</span><span class="py-op">)</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.get" class="py-name" href="pythonutils.configobj.Section-class.html#get">get</a><span class="py-op">(</span><span class="py-name">s</span><span class="py-op">)</span> </span>
445
<span class="lineno"> 360</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">main</span><span class="py-op">.</span><span class="py-name">interpolation</span> <span class="py-op">=</span> <span class="py-name">True</span> </span>
446
<span class="lineno"> 361</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">val</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
447
<span class="lineno"> 362</span> <span class="py-line"> <span class="py-keyword">raise</span> <a title="pythonutils.configobj.MissingInterpolationOption" class="py-name" href="pythonutils.configobj.MissingInterpolationOption-class.html">MissingInterpolationOption</a><span class="py-op">(</span><span class="py-name">s</span><span class="py-op">)</span> </span>
448
<span class="lineno"> 363</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">val</span> </span>
449
</div><span class="lineno"> 364</span> <span class="py-line"> </span>
450
<a name="Section.__getitem__"></a><div id="Section.__getitem__-def"><span class="lineno"> 365</span> <a class="pysrc-toggle" href="#" id="Section.__getitem__-toggle" onclick="toggle('Section.__getitem__'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#__getitem__">__getitem__</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">key</span><span class="py-op">)</span><span class="py-op">:</span> </span>
451
</div><div id="Section.__getitem__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.__getitem__-expanded"><span class="lineno"> 366</span> <span class="py-line"> <span class="py-docstring">"""Fetch the item and do string interpolation."""</span> </span>
452
<span class="lineno"> 367</span> <span class="py-line"> <span class="py-name">val</span> <span class="py-op">=</span> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">.</span><a title="pythonutils.configobj.Section.__getitem__" class="py-name" href="pythonutils.configobj.Section-class.html#__getitem__">__getitem__</a><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">,</span> <span class="py-name">key</span><span class="py-op">)</span> </span>
453
<span class="lineno"> 368</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">main</span><span class="py-op">.</span><span class="py-name">interpolation</span> <span class="py-keyword">and</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">val</span><span class="py-op">,</span> <span class="py-name">StringTypes</span><span class="py-op">)</span><span class="py-op">:</span> </span>
454
<span class="lineno"> 369</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Section._interpolate" class="py-name" href="pythonutils.configobj.Section-class.html#_interpolate">_interpolate</a><span class="py-op">(</span><span class="py-name">val</span><span class="py-op">)</span> </span>
455
<span class="lineno"> 370</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">val</span> </span>
456
</div><span class="lineno"> 371</span> <span class="py-line"> </span>
457
<a name="Section.__setitem__"></a><div id="Section.__setitem__-def"><span class="lineno"> 372</span> <a class="pysrc-toggle" href="#" id="Section.__setitem__-toggle" onclick="toggle('Section.__setitem__'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#__setitem__">__setitem__</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">key</span><span class="py-op">,</span> <span class="py-param">value</span><span class="py-op">,</span> <span class="py-param">unrepr</span><span class="py-op">=</span><span class="py-name">False</span><span class="py-op">)</span><span class="py-op">:</span> </span>
458
</div><div id="Section.__setitem__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.__setitem__-expanded"><span class="lineno"> 373</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
459
<span class="lineno"> 374</span> <span class="py-line"><span class="py-docstring"> Correctly set a value.</span> </span>
460
<span class="lineno"> 375</span> <span class="py-line"><span class="py-docstring"> </span> </span>
461
<span class="lineno"> 376</span> <span class="py-line"><span class="py-docstring"> Making dictionary values Section instances.</span> </span>
462
<span class="lineno"> 377</span> <span class="py-line"><span class="py-docstring"> (We have to special case 'Section' instances - which are also dicts)</span> </span>
463
<span class="lineno"> 378</span> <span class="py-line"><span class="py-docstring"> </span> </span>
464
<span class="lineno"> 379</span> <span class="py-line"><span class="py-docstring"> Keys must be strings.</span> </span>
465
<span class="lineno"> 380</span> <span class="py-line"><span class="py-docstring"> Values need only be strings (or lists of strings) if</span> </span>
466
<span class="lineno"> 381</span> <span class="py-line"><span class="py-docstring"> ``main.stringify`` is set.</span> </span>
467
<span class="lineno"> 382</span> <span class="py-line"><span class="py-docstring"> </span> </span>
468
<span class="lineno"> 383</span> <span class="py-line"><span class="py-docstring"> `unrepr`` must be set when setting a value to a dictionary, without</span> </span>
469
<span class="lineno"> 384</span> <span class="py-line"><span class="py-docstring"> creating a new sub-section.</span> </span>
470
<span class="lineno"> 385</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
471
<span class="lineno"> 386</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">,</span> <span class="py-name">StringTypes</span><span class="py-op">)</span><span class="py-op">:</span> </span>
472
<span class="lineno"> 387</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">ValueError</span><span class="py-op">,</span> <span class="py-string">'The key "%s" is not a string.'</span> <span class="py-op">%</span> <span class="py-name">key</span> </span>
473
<span class="lineno"> 388</span> <span class="py-line"> <span class="py-comment"># add the comment</span> </span>
474
<span class="lineno"> 389</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">comments</span><span class="py-op">.</span><span class="py-name">has_key</span><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span><span class="py-op">:</span> </span>
475
<span class="lineno"> 390</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">comments</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
476
<span class="lineno"> 391</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">inline_comments</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-string">''</span> </span>
477
<span class="lineno"> 392</span> <span class="py-line"> <span class="py-comment"># remove the entry from defaults</span> </span>
478
<span class="lineno"> 393</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">key</span> <span class="py-keyword">in</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">defaults</span><span class="py-op">:</span> </span>
479
<span class="lineno"> 394</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">defaults</span><span class="py-op">.</span><span class="py-name">remove</span><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span> </span>
480
<span class="lineno"> 395</span> <span class="py-line"> <span class="py-comment">#</span> </span>
481
<span class="lineno"> 396</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">,</span> <a title="pythonutils.configobj.Section" class="py-name" href="pythonutils.configobj.Section-class.html">Section</a><span class="py-op">)</span><span class="py-op">:</span> </span>
482
<span class="lineno"> 397</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">has_key</span><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span><span class="py-op">:</span> </span>
483
<span class="lineno"> 398</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span> </span>
484
<span class="lineno"> 399</span> <span class="py-line"> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">.</span><a title="pythonutils.configobj.Section.__setitem__" class="py-name" href="pythonutils.configobj.Section-class.html#__setitem__">__setitem__</a><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">,</span> <span class="py-name">key</span><span class="py-op">,</span> <span class="py-name">value</span><span class="py-op">)</span> </span>
485
<span class="lineno"> 400</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">,</span> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">)</span><span class="py-keyword">and</span> <span class="py-keyword">not</span> <a title="pythonutils.configobj.unrepr" class="py-name" href="pythonutils.configobj-module.html#unrepr">unrepr</a><span class="py-op">:</span> </span>
486
<span class="lineno"> 401</span> <span class="py-line"> <span class="py-comment"># First create the new depth level,</span> </span>
487
<span class="lineno"> 402</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># then create the section</span> </span>
488
<span class="lineno"> 403</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">has_key</span><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span><span class="py-op">:</span> </span>
489
<span class="lineno"> 404</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span> </span>
490
<span class="lineno"> 405</span> <span class="py-line"> <span class="py-name">new_depth</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">depth</span> <span class="py-op">+</span> <span class="py-number">1</span> </span>
491
<span class="lineno"> 406</span> <span class="py-line"> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">.</span><a title="pythonutils.configobj.Section.__setitem__" class="py-name" href="pythonutils.configobj.Section-class.html#__setitem__">__setitem__</a><span class="py-op">(</span> </span>
492
<span class="lineno"> 407</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">,</span> </span>
493
<span class="lineno"> 408</span> <span class="py-line"> <span class="py-name">key</span><span class="py-op">,</span> </span>
494
<span class="lineno"> 409</span> <span class="py-line"> <a title="pythonutils.configobj.Section" class="py-name" href="pythonutils.configobj.Section-class.html">Section</a><span class="py-op">(</span> </span>
495
<span class="lineno"> 410</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">,</span> </span>
496
<span class="lineno"> 411</span> <span class="py-line"> <span class="py-name">new_depth</span><span class="py-op">,</span> </span>
497
<span class="lineno"> 412</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">main</span><span class="py-op">,</span> </span>
498
<span class="lineno"> 413</span> <span class="py-line"> <span class="py-name">indict</span><span class="py-op">=</span><span class="py-name">value</span><span class="py-op">,</span> </span>
499
<span class="lineno"> 414</span> <span class="py-line"> <span class="py-name">name</span><span class="py-op">=</span><span class="py-name">key</span><span class="py-op">)</span><span class="py-op">)</span> </span>
500
<span class="lineno"> 415</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
501
<span class="lineno"> 416</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">has_key</span><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span><span class="py-op">:</span> </span>
502
<span class="lineno"> 417</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span> </span>
503
<span class="lineno"> 418</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">main</span><span class="py-op">.</span><span class="py-name">stringify</span><span class="py-op">:</span> </span>
504
<span class="lineno"> 419</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">,</span> <span class="py-name">StringTypes</span><span class="py-op">)</span><span class="py-op">:</span> </span>
505
<span class="lineno"> 420</span> <span class="py-line"> <span class="py-keyword">pass</span> </span>
506
<span class="lineno"> 421</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">,</span> <span class="py-op">(</span><span class="py-name">list</span><span class="py-op">,</span> <span class="py-name">tuple</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
507
<span class="lineno"> 422</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">value</span><span class="py-op">:</span> </span>
508
<span class="lineno"> 423</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">entry</span><span class="py-op">,</span> <span class="py-name">StringTypes</span><span class="py-op">)</span><span class="py-op">:</span> </span>
509
<span class="lineno"> 424</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">TypeError</span><span class="py-op">,</span> <span class="py-op">(</span> </span>
510
<span class="lineno"> 425</span> <span class="py-line"> <span class="py-string">'Value is not a string "%s".'</span> <span class="py-op">%</span> <span class="py-name">entry</span><span class="py-op">)</span> </span>
511
<span class="lineno"> 426</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
512
<span class="lineno"> 427</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">TypeError</span><span class="py-op">,</span> <span class="py-string">'Value is not a string "%s".'</span> <span class="py-op">%</span> <span class="py-name">value</span> </span>
513
<span class="lineno"> 428</span> <span class="py-line"> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">.</span><a title="pythonutils.configobj.Section.__setitem__" class="py-name" href="pythonutils.configobj.Section-class.html#__setitem__">__setitem__</a><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">,</span> <span class="py-name">key</span><span class="py-op">,</span> <span class="py-name">value</span><span class="py-op">)</span> </span>
514
</div><span class="lineno"> 429</span> <span class="py-line"> </span>
515
<a name="Section.__delitem__"></a><div id="Section.__delitem__-def"><span class="lineno"> 430</span> <a class="pysrc-toggle" href="#" id="Section.__delitem__-toggle" onclick="toggle('Section.__delitem__'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#__delitem__">__delitem__</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">key</span><span class="py-op">)</span><span class="py-op">:</span> </span>
516
</div><div id="Section.__delitem__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.__delitem__-expanded"><span class="lineno"> 431</span> <span class="py-line"> <span class="py-docstring">"""Remove items from the sequence when deleting."""</span> </span>
517
<span class="lineno"> 432</span> <span class="py-line"> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">.</span> <a title="pythonutils.configobj.Section.__delitem__" class="py-name" href="pythonutils.configobj.Section-class.html#__delitem__">__delitem__</a><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">,</span> <span class="py-name">key</span><span class="py-op">)</span> </span>
518
<span class="lineno"> 433</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">key</span> <span class="py-keyword">in</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span><span class="py-op">:</span> </span>
519
<span class="lineno"> 434</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span><span class="py-op">.</span><span class="py-name">remove</span><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span> </span>
520
<span class="lineno"> 435</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
521
<span class="lineno"> 436</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">.</span><span class="py-name">remove</span><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span> </span>
522
<span class="lineno"> 437</span> <span class="py-line"> <span class="py-keyword">del</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">comments</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> </span>
523
<span class="lineno"> 438</span> <span class="py-line"> <span class="py-keyword">del</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">inline_comments</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> </span>
524
</div><span class="lineno"> 439</span> <span class="py-line"> </span>
525
<a name="Section.get"></a><div id="Section.get-def"><span class="lineno"> 440</span> <a class="pysrc-toggle" href="#" id="Section.get-toggle" onclick="toggle('Section.get'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#get">get</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">key</span><span class="py-op">,</span> <span class="py-param">default</span><span class="py-op">=</span><span class="py-name">None</span><span class="py-op">)</span><span class="py-op">:</span> </span>
526
</div><div id="Section.get-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.get-expanded"><span class="lineno"> 441</span> <span class="py-line"> <span class="py-docstring">"""A version of ``get`` that doesn't bypass string interpolation."""</span> </span>
527
<span class="lineno"> 442</span> <span class="py-line"> <span class="py-keyword">try</span><span class="py-op">:</span> </span>
528
<span class="lineno"> 443</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">self</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> </span>
529
<span class="lineno"> 444</span> <span class="py-line"> <span class="py-keyword">except</span> <span class="py-name">KeyError</span><span class="py-op">:</span> </span>
530
<span class="lineno"> 445</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">default</span> </span>
531
</div><span class="lineno"> 446</span> <span class="py-line"> </span>
532
<a name="Section.update"></a><div id="Section.update-def"><span class="lineno"> 447</span> <a class="pysrc-toggle" href="#" id="Section.update-toggle" onclick="toggle('Section.update'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#update">update</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">indict</span><span class="py-op">)</span><span class="py-op">:</span> </span>
533
</div><div id="Section.update-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.update-expanded"><span class="lineno"> 448</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
534
<span class="lineno"> 449</span> <span class="py-line"><span class="py-docstring"> A version of update that uses our ``__setitem__``.</span> </span>
535
<span class="lineno"> 450</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
536
<span class="lineno"> 451</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">indict</span><span class="py-op">:</span> </span>
537
<span class="lineno"> 452</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">indict</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> </span>
538
</div><span class="lineno"> 453</span> <span class="py-line"> </span>
539
<a name="Section.pop"></a><div id="Section.pop-def"><span class="lineno"> 454</span> <a class="pysrc-toggle" href="#" id="Section.pop-toggle" onclick="toggle('Section.pop'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#pop">pop</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">key</span><span class="py-op">,</span> <span class="py-op">*</span><span class="py-param">args</span><span class="py-op">)</span><span class="py-op">:</span> </span>
540
</div><div id="Section.pop-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.pop-expanded"><span class="lineno"> 455</span> <span class="py-line"> <span class="py-docstring">""" """</span> </span>
541
<span class="lineno"> 456</span> <span class="py-line"> <span class="py-name">val</span> <span class="py-op">=</span> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">.</span><a title="pythonutils.configobj.Section.pop" class="py-name" href="pythonutils.configobj.Section-class.html#pop">pop</a><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">,</span> <span class="py-name">key</span><span class="py-op">,</span> <span class="py-op">*</span><span class="py-name">args</span><span class="py-op">)</span> </span>
542
<span class="lineno"> 457</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">key</span> <span class="py-keyword">in</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span><span class="py-op">:</span> </span>
543
<span class="lineno"> 458</span> <span class="py-line"> <span class="py-keyword">del</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">comments</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> </span>
544
<span class="lineno"> 459</span> <span class="py-line"> <span class="py-keyword">del</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">inline_comments</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> </span>
545
<span class="lineno"> 460</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span><span class="py-op">.</span><span class="py-name">remove</span><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span> </span>
546
<span class="lineno"> 461</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">key</span> <span class="py-keyword">in</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">:</span> </span>
547
<span class="lineno"> 462</span> <span class="py-line"> <span class="py-keyword">del</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">comments</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> </span>
548
<span class="lineno"> 463</span> <span class="py-line"> <span class="py-keyword">del</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">inline_comments</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> </span>
549
<span class="lineno"> 464</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">.</span><span class="py-name">remove</span><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span> </span>
550
<span class="lineno"> 465</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">main</span><span class="py-op">.</span><span class="py-name">interpolation</span> <span class="py-keyword">and</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">val</span><span class="py-op">,</span> <span class="py-name">StringTypes</span><span class="py-op">)</span><span class="py-op">:</span> </span>
551
<span class="lineno"> 466</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Section._interpolate" class="py-name" href="pythonutils.configobj.Section-class.html#_interpolate">_interpolate</a><span class="py-op">(</span><span class="py-name">val</span><span class="py-op">)</span> </span>
552
<span class="lineno"> 467</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">val</span> </span>
553
</div><span class="lineno"> 468</span> <span class="py-line"> </span>
554
<a name="Section.popitem"></a><div id="Section.popitem-def"><span class="lineno"> 469</span> <a class="pysrc-toggle" href="#" id="Section.popitem-toggle" onclick="toggle('Section.popitem'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#popitem">popitem</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">)</span><span class="py-op">:</span> </span>
555
</div><div id="Section.popitem-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.popitem-expanded"><span class="lineno"> 470</span> <span class="py-line"> <span class="py-docstring">"""Pops the first (key,val)"""</span> </span>
556
<span class="lineno"> 471</span> <span class="py-line"> <span class="py-name">sequence</span> <span class="py-op">=</span> <span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span> <span class="py-op">+</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">)</span> </span>
557
<span class="lineno"> 472</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">sequence</span><span class="py-op">:</span> </span>
558
<span class="lineno"> 473</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">KeyError</span><span class="py-op">,</span> <span class="py-string">": 'popitem(): dictionary is empty'"</span> </span>
559
<span class="lineno"> 474</span> <span class="py-line"> <span class="py-name">key</span> <span class="py-op">=</span> <span class="py-name">sequence</span><span class="py-op">[</span><span class="py-number">0</span><span class="py-op">]</span> </span>
560
<span class="lineno"> 475</span> <span class="py-line"> <span class="py-name">val</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> </span>
561
<span class="lineno"> 476</span> <span class="py-line"> <span class="py-keyword">del</span> <span class="py-name">self</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> </span>
562
<span class="lineno"> 477</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">key</span><span class="py-op">,</span> <span class="py-name">val</span> </span>
563
</div><span class="lineno"> 478</span> <span class="py-line"> </span>
564
<a name="Section.clear"></a><div id="Section.clear-def"><span class="lineno"> 479</span> <a class="pysrc-toggle" href="#" id="Section.clear-toggle" onclick="toggle('Section.clear'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#clear">clear</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">)</span><span class="py-op">:</span> </span>
565
</div><div id="Section.clear-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.clear-expanded"><span class="lineno"> 480</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
566
<span class="lineno"> 481</span> <span class="py-line"><span class="py-docstring"> A version of clear that also affects scalars/sections</span> </span>
567
<span class="lineno"> 482</span> <span class="py-line"><span class="py-docstring"> Also clears comments and configspec.</span> </span>
568
<span class="lineno"> 483</span> <span class="py-line"><span class="py-docstring"> </span> </span>
569
<span class="lineno"> 484</span> <span class="py-line"><span class="py-docstring"> Leaves other attributes alone :</span> </span>
570
<span class="lineno"> 485</span> <span class="py-line"><span class="py-docstring"> depth/main/parent are not affected</span> </span>
571
<span class="lineno"> 486</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
572
<span class="lineno"> 487</span> <span class="py-line"> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">.</span><a title="pythonutils.configobj.Section.clear" class="py-name" href="pythonutils.configobj.Section-class.html#clear">clear</a><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">)</span> </span>
573
<span class="lineno"> 488</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
574
<span class="lineno"> 489</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
575
<span class="lineno"> 490</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">comments</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
576
<span class="lineno"> 491</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">inline_comments</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
577
<span class="lineno"> 492</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">configspec</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
578
</div><span class="lineno"> 493</span> <span class="py-line"> </span>
579
<a name="Section.setdefault"></a><div id="Section.setdefault-def"><span class="lineno"> 494</span> <a class="pysrc-toggle" href="#" id="Section.setdefault-toggle" onclick="toggle('Section.setdefault'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#setdefault">setdefault</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">key</span><span class="py-op">,</span> <span class="py-param">default</span><span class="py-op">=</span><span class="py-name">None</span><span class="py-op">)</span><span class="py-op">:</span> </span>
580
</div><div id="Section.setdefault-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.setdefault-expanded"><span class="lineno"> 495</span> <span class="py-line"> <span class="py-docstring">"""A version of setdefault that sets sequence if appropriate."""</span> </span>
581
<span class="lineno"> 496</span> <span class="py-line"> <span class="py-keyword">try</span><span class="py-op">:</span> </span>
582
<span class="lineno"> 497</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">self</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> </span>
583
<span class="lineno"> 498</span> <span class="py-line"> <span class="py-keyword">except</span> <span class="py-name">KeyError</span><span class="py-op">:</span> </span>
584
<span class="lineno"> 499</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">default</span> </span>
585
<span class="lineno"> 500</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">self</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> </span>
586
</div><span class="lineno"> 501</span> <span class="py-line"> </span>
587
<a name="Section.items"></a><div id="Section.items-def"><span class="lineno"> 502</span> <a class="pysrc-toggle" href="#" id="Section.items-toggle" onclick="toggle('Section.items'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#items">items</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">)</span><span class="py-op">:</span> </span>
588
</div><div id="Section.items-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.items-expanded"><span class="lineno"> 503</span> <span class="py-line"> <span class="py-docstring">""" """</span> </span>
589
<span class="lineno"> 504</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">zip</span><span class="py-op">(</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span> <span class="py-op">+</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">)</span><span class="py-op">,</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.values" class="py-name" href="pythonutils.configobj.Section-class.html#values">values</a><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">)</span> </span>
590
</div><span class="lineno"> 505</span> <span class="py-line"> </span>
591
<a name="Section.keys"></a><div id="Section.keys-def"><span class="lineno"> 506</span> <a class="pysrc-toggle" href="#" id="Section.keys-toggle" onclick="toggle('Section.keys'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#keys">keys</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">)</span><span class="py-op">:</span> </span>
592
</div><div id="Section.keys-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.keys-expanded"><span class="lineno"> 507</span> <span class="py-line"> <span class="py-docstring">""" """</span> </span>
593
<span class="lineno"> 508</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span> <span class="py-op">+</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">)</span> </span>
594
</div><span class="lineno"> 509</span> <span class="py-line"> </span>
595
<a name="Section.values"></a><div id="Section.values-def"><span class="lineno"> 510</span> <a class="pysrc-toggle" href="#" id="Section.values-toggle" onclick="toggle('Section.values'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#values">values</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">)</span><span class="py-op">:</span> </span>
596
</div><div id="Section.values-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.values-expanded"><span class="lineno"> 511</span> <span class="py-line"> <span class="py-docstring">""" """</span> </span>
597
<span class="lineno"> 512</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-op">[</span><span class="py-name">self</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> <span class="py-keyword">for</span> <span class="py-name">key</span> <span class="py-keyword">in</span> <span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span> <span class="py-op">+</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">)</span><span class="py-op">]</span> </span>
598
</div><span class="lineno"> 513</span> <span class="py-line"> </span>
599
<a name="Section.iteritems"></a><div id="Section.iteritems-def"><span class="lineno"> 514</span> <a class="pysrc-toggle" href="#" id="Section.iteritems-toggle" onclick="toggle('Section.iteritems'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#iteritems">iteritems</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">)</span><span class="py-op">:</span> </span>
600
</div><div id="Section.iteritems-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.iteritems-expanded"><span class="lineno"> 515</span> <span class="py-line"> <span class="py-docstring">""" """</span> </span>
601
<span class="lineno"> 516</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">iter</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.items" class="py-name" href="pythonutils.configobj.Section-class.html#items">items</a><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">)</span> </span>
602
</div><span class="lineno"> 517</span> <span class="py-line"> </span>
603
<a name="Section.iterkeys"></a><div id="Section.iterkeys-def"><span class="lineno"> 518</span> <a class="pysrc-toggle" href="#" id="Section.iterkeys-toggle" onclick="toggle('Section.iterkeys'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#iterkeys">iterkeys</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">)</span><span class="py-op">:</span> </span>
604
</div><div id="Section.iterkeys-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.iterkeys-expanded"><span class="lineno"> 519</span> <span class="py-line"> <span class="py-docstring">""" """</span> </span>
605
<span class="lineno"> 520</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">iter</span><span class="py-op">(</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span> <span class="py-op">+</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">)</span><span class="py-op">)</span> </span>
606
</div><span class="lineno"> 521</span> <span class="py-line"> </span>
607
<span class="lineno"> 522</span> <span class="py-line"> <a class="py-name" href="pythonutils.configobj.Section-class.html#__iter__">__iter__</a> <span class="py-op">=</span> <a class="py-name" href="pythonutils.configobj.Section-class.html#iterkeys">iterkeys</a> </span>
608
<span class="lineno"> 523</span> <span class="py-line"> </span>
609
<a name="Section.itervalues"></a><div id="Section.itervalues-def"><span class="lineno"> 524</span> <a class="pysrc-toggle" href="#" id="Section.itervalues-toggle" onclick="toggle('Section.itervalues'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#itervalues">itervalues</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">)</span><span class="py-op">:</span> </span>
610
</div><div id="Section.itervalues-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.itervalues-expanded"><span class="lineno"> 525</span> <span class="py-line"> <span class="py-docstring">""" """</span> </span>
611
<span class="lineno"> 526</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">iter</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.values" class="py-name" href="pythonutils.configobj.Section-class.html#values">values</a><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">)</span> </span>
612
</div><span class="lineno"> 527</span> <span class="py-line"> </span>
613
<a name="Section.__repr__"></a><div id="Section.__repr__-def"><span class="lineno"> 528</span> <a class="pysrc-toggle" href="#" id="Section.__repr__-toggle" onclick="toggle('Section.__repr__'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#__repr__">__repr__</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">)</span><span class="py-op">:</span> </span>
614
</div><div id="Section.__repr__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.__repr__-expanded"><span class="lineno"> 529</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-string">'{%s}'</span> <span class="py-op">%</span> <span class="py-string">', '</span><span class="py-op">.</span><span class="py-name">join</span><span class="py-op">(</span><span class="py-op">[</span><span class="py-op">(</span><span class="py-string">'%s: %s'</span> <span class="py-op">%</span> <span class="py-op">(</span><span class="py-name">repr</span><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span><span class="py-op">,</span> <span class="py-name">repr</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">)</span> </span>
615
<span class="lineno"> 530</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">key</span> <span class="py-keyword">in</span> <span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span> <span class="py-op">+</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">)</span><span class="py-op">]</span><span class="py-op">)</span> </span>
616
</div><span class="lineno"> 531</span> <span class="py-line"> </span>
617
<span class="lineno"> 532</span> <span class="py-line"> <a class="py-name" href="pythonutils.configobj.Section-class.html#__str__">__str__</a> <span class="py-op">=</span> <a class="py-name" href="pythonutils.configobj.Section-class.html#__repr__">__repr__</a> </span>
618
<span class="lineno"> 533</span> <span class="py-line"> </span>
619
<span class="lineno"> 534</span> <span class="py-line"> <span class="py-comment"># Extra methods - not in a normal dictionary</span> </span>
620
<span class="lineno"> 535</span> <span class="py-line"><span class="py-comment"></span> </span>
621
<a name="Section.dict"></a><div id="Section.dict-def"><span class="lineno"> 536</span> <a class="pysrc-toggle" href="#" id="Section.dict-toggle" onclick="toggle('Section.dict'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">)</span><span class="py-op">:</span> </span>
622
</div><div id="Section.dict-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.dict-expanded"><span class="lineno"> 537</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
623
<span class="lineno"> 538</span> <span class="py-line"><span class="py-docstring"> Return a deepcopy of self as a dictionary.</span> </span>
624
<span class="lineno"> 539</span> <span class="py-line"><span class="py-docstring"> </span> </span>
625
<span class="lineno"> 540</span> <span class="py-line"><span class="py-docstring"> All members that are ``Section`` instances are recursively turned to</span> </span>
626
<span class="lineno"> 541</span> <span class="py-line"><span class="py-docstring"> ordinary dictionaries - by calling their ``dict`` method.</span> </span>
627
<span class="lineno"> 542</span> <span class="py-line"><span class="py-docstring"> </span> </span>
628
<span class="lineno"> 543</span> <span class="py-line"><span class="py-docstring"> >>> n = a.dict()</span> </span>
629
<span class="lineno"> 544</span> <span class="py-line"><span class="py-docstring"> >>> n == a</span> </span>
630
<span class="lineno"> 545</span> <span class="py-line"><span class="py-docstring"> 1</span> </span>
631
<span class="lineno"> 546</span> <span class="py-line"><span class="py-docstring"> >>> n is a</span> </span>
632
<span class="lineno"> 547</span> <span class="py-line"><span class="py-docstring"> 0</span> </span>
633
<span class="lineno"> 548</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
634
<span class="lineno"> 549</span> <span class="py-line"> <span class="py-name">newdict</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
635
<span class="lineno"> 550</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">self</span><span class="py-op">:</span> </span>
636
<span class="lineno"> 551</span> <span class="py-line"> <span class="py-name">this_entry</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> </span>
637
<span class="lineno"> 552</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">this_entry</span><span class="py-op">,</span> <a title="pythonutils.configobj.Section" class="py-name" href="pythonutils.configobj.Section-class.html">Section</a><span class="py-op">)</span><span class="py-op">:</span> </span>
638
<span class="lineno"> 553</span> <span class="py-line"> <span class="py-name">this_entry</span> <span class="py-op">=</span> <span class="py-name">this_entry</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">(</span><span class="py-op">)</span> </span>
639
<span class="lineno"> 554</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">this_entry</span><span class="py-op">,</span> <span class="py-name">list</span><span class="py-op">)</span><span class="py-op">:</span> </span>
640
<span class="lineno"> 555</span> <span class="py-line"> <span class="py-comment"># create a copy rather than a reference</span> </span>
641
<span class="lineno"> 556</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">this_entry</span> <span class="py-op">=</span> <span class="py-name">list</span><span class="py-op">(</span><span class="py-name">this_entry</span><span class="py-op">)</span> </span>
642
<span class="lineno"> 557</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">this_entry</span><span class="py-op">,</span> <span class="py-name">tuple</span><span class="py-op">)</span><span class="py-op">:</span> </span>
643
<span class="lineno"> 558</span> <span class="py-line"> <span class="py-comment"># create a copy rather than a reference</span> </span>
644
<span class="lineno"> 559</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">this_entry</span> <span class="py-op">=</span> <span class="py-name">tuple</span><span class="py-op">(</span><span class="py-name">this_entry</span><span class="py-op">)</span> </span>
645
<span class="lineno"> 560</span> <span class="py-line"> <span class="py-name">newdict</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">this_entry</span> </span>
646
<span class="lineno"> 561</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">newdict</span> </span>
647
</div><span class="lineno"> 562</span> <span class="py-line"> </span>
648
<a name="Section.merge"></a><div id="Section.merge-def"><span class="lineno"> 563</span> <a class="pysrc-toggle" href="#" id="Section.merge-toggle" onclick="toggle('Section.merge'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#merge">merge</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">indict</span><span class="py-op">)</span><span class="py-op">:</span> </span>
649
</div><div id="Section.merge-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.merge-expanded"><span class="lineno"> 564</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
650
<span class="lineno"> 565</span> <span class="py-line"><span class="py-docstring"> A recursive update - useful for merging config files.</span> </span>
651
<span class="lineno"> 566</span> <span class="py-line"><span class="py-docstring"> </span> </span>
652
<span class="lineno"> 567</span> <span class="py-line"><span class="py-docstring"> >>> a = '''[section1]</span> </span>
653
<span class="lineno"> 568</span> <span class="py-line"><span class="py-docstring"> ... option1 = True</span> </span>
654
<span class="lineno"> 569</span> <span class="py-line"><span class="py-docstring"> ... [[subsection]]</span> </span>
655
<span class="lineno"> 570</span> <span class="py-line"><span class="py-docstring"> ... more_options = False</span> </span>
656
<span class="lineno"> 571</span> <span class="py-line"><span class="py-docstring"> ... # end of file'''.splitlines()</span> </span>
657
<span class="lineno"> 572</span> <span class="py-line"><span class="py-docstring"> >>> b = '''# File is user.ini</span> </span>
658
<span class="lineno"> 573</span> <span class="py-line"><span class="py-docstring"> ... [section1]</span> </span>
659
<span class="lineno"> 574</span> <span class="py-line"><span class="py-docstring"> ... option1 = False</span> </span>
660
<span class="lineno"> 575</span> <span class="py-line"><span class="py-docstring"> ... # end of file'''.splitlines()</span> </span>
661
<span class="lineno"> 576</span> <span class="py-line"><span class="py-docstring"> >>> c1 = ConfigObj(b)</span> </span>
662
<span class="lineno"> 577</span> <span class="py-line"><span class="py-docstring"> >>> c2 = ConfigObj(a)</span> </span>
663
<span class="lineno"> 578</span> <span class="py-line"><span class="py-docstring"> >>> c2.merge(c1)</span> </span>
664
<span class="lineno"> 579</span> <span class="py-line"><span class="py-docstring"> >>> c2</span> </span>
665
<span class="lineno"> 580</span> <span class="py-line"><span class="py-docstring"> {'section1': {'option1': 'False', 'subsection': {'more_options': 'False'}}}</span> </span>
666
<span class="lineno"> 581</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
667
<span class="lineno"> 582</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">key</span><span class="py-op">,</span> <span class="py-name">val</span> <span class="py-keyword">in</span> <span class="py-name">indict</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.items" class="py-name" href="pythonutils.configobj.Section-class.html#items">items</a><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">:</span> </span>
668
<span class="lineno"> 583</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-op">(</span><span class="py-name">key</span> <span class="py-keyword">in</span> <span class="py-name">self</span> <span class="py-keyword">and</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span><span class="py-op">,</span> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">)</span> <span class="py-keyword">and</span> </span>
669
<span class="lineno"> 584</span> <span class="py-line"> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">val</span><span class="py-op">,</span> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
670
<span class="lineno"> 585</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.merge" class="py-name" href="pythonutils.configobj.Section-class.html#merge">merge</a><span class="py-op">(</span><span class="py-name">val</span><span class="py-op">)</span> </span>
671
<span class="lineno"> 586</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
672
<span class="lineno"> 587</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">val</span> </span>
673
</div><span class="lineno"> 588</span> <span class="py-line"> </span>
674
<a name="Section.rename"></a><div id="Section.rename-def"><span class="lineno"> 589</span> <a class="pysrc-toggle" href="#" id="Section.rename-toggle" onclick="toggle('Section.rename'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#rename">rename</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">oldkey</span><span class="py-op">,</span> <span class="py-param">newkey</span><span class="py-op">)</span><span class="py-op">:</span> </span>
675
</div><div id="Section.rename-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.rename-expanded"><span class="lineno"> 590</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
676
<span class="lineno"> 591</span> <span class="py-line"><span class="py-docstring"> Change a keyname to another, without changing position in sequence.</span> </span>
677
<span class="lineno"> 592</span> <span class="py-line"><span class="py-docstring"> </span> </span>
678
<span class="lineno"> 593</span> <span class="py-line"><span class="py-docstring"> Implemented so that transformations can be made on keys,</span> </span>
679
<span class="lineno"> 594</span> <span class="py-line"><span class="py-docstring"> as well as on values. (used by encode and decode)</span> </span>
680
<span class="lineno"> 595</span> <span class="py-line"><span class="py-docstring"> </span> </span>
681
<span class="lineno"> 596</span> <span class="py-line"><span class="py-docstring"> Also renames comments.</span> </span>
682
<span class="lineno"> 597</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
683
<span class="lineno"> 598</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">oldkey</span> <span class="py-keyword">in</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span><span class="py-op">:</span> </span>
684
<span class="lineno"> 599</span> <span class="py-line"> <span class="py-name">the_list</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span> </span>
685
<span class="lineno"> 600</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">oldkey</span> <span class="py-keyword">in</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">:</span> </span>
686
<span class="lineno"> 601</span> <span class="py-line"> <span class="py-name">the_list</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span> </span>
687
<span class="lineno"> 602</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
688
<span class="lineno"> 603</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">KeyError</span><span class="py-op">,</span> <span class="py-string">'Key "%s" not found.'</span> <span class="py-op">%</span> <span class="py-name">oldkey</span> </span>
689
<span class="lineno"> 604</span> <span class="py-line"> <span class="py-name">pos</span> <span class="py-op">=</span> <span class="py-name">the_list</span><span class="py-op">.</span><span class="py-name">index</span><span class="py-op">(</span><span class="py-name">oldkey</span><span class="py-op">)</span> </span>
690
<span class="lineno"> 605</span> <span class="py-line"> <span class="py-comment">#</span> </span>
691
<span class="lineno"> 606</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">val</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">[</span><span class="py-name">oldkey</span><span class="py-op">]</span> </span>
692
<span class="lineno"> 607</span> <span class="py-line"> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">.</span><a title="pythonutils.configobj.Section.__delitem__" class="py-name" href="pythonutils.configobj.Section-class.html#__delitem__">__delitem__</a><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">,</span> <span class="py-name">oldkey</span><span class="py-op">)</span> </span>
693
<span class="lineno"> 608</span> <span class="py-line"> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">.</span><a title="pythonutils.configobj.Section.__setitem__" class="py-name" href="pythonutils.configobj.Section-class.html#__setitem__">__setitem__</a><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">,</span> <span class="py-name">newkey</span><span class="py-op">,</span> <span class="py-name">val</span><span class="py-op">)</span> </span>
694
<span class="lineno"> 609</span> <span class="py-line"> <span class="py-name">the_list</span><span class="py-op">.</span><span class="py-name">remove</span><span class="py-op">(</span><span class="py-name">oldkey</span><span class="py-op">)</span> </span>
695
<span class="lineno"> 610</span> <span class="py-line"> <span class="py-name">the_list</span><span class="py-op">.</span><span class="py-name">insert</span><span class="py-op">(</span><span class="py-name">pos</span><span class="py-op">,</span> <span class="py-name">newkey</span><span class="py-op">)</span> </span>
696
<span class="lineno"> 611</span> <span class="py-line"> <span class="py-name">comm</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">comments</span><span class="py-op">[</span><span class="py-name">oldkey</span><span class="py-op">]</span> </span>
697
<span class="lineno"> 612</span> <span class="py-line"> <span class="py-name">inline_comment</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">inline_comments</span><span class="py-op">[</span><span class="py-name">oldkey</span><span class="py-op">]</span> </span>
698
<span class="lineno"> 613</span> <span class="py-line"> <span class="py-keyword">del</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">comments</span><span class="py-op">[</span><span class="py-name">oldkey</span><span class="py-op">]</span> </span>
699
<span class="lineno"> 614</span> <span class="py-line"> <span class="py-keyword">del</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">inline_comments</span><span class="py-op">[</span><span class="py-name">oldkey</span><span class="py-op">]</span> </span>
700
<span class="lineno"> 615</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">comments</span><span class="py-op">[</span><span class="py-name">newkey</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">comm</span> </span>
701
<span class="lineno"> 616</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">inline_comments</span><span class="py-op">[</span><span class="py-name">newkey</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">inline_comment</span> </span>
702
</div><span class="lineno"> 617</span> <span class="py-line"> </span>
703
<a name="Section.walk"></a><div id="Section.walk-def"><span class="lineno"> 618</span> <a class="pysrc-toggle" href="#" id="Section.walk-toggle" onclick="toggle('Section.walk'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#walk">walk</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">function</span><span class="py-op">,</span> <span class="py-param">raise_errors</span><span class="py-op">=</span><span class="py-name">True</span><span class="py-op">,</span> </span>
704
<span class="lineno"> 619</span> <span class="py-line"> <span class="py-param">call_on_sections</span><span class="py-op">=</span><span class="py-name">False</span><span class="py-op">,</span> <span class="py-op">**</span><span class="py-param">keywargs</span><span class="py-op">)</span><span class="py-op">:</span> </span>
705
</div><div id="Section.walk-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.walk-expanded"><span class="lineno"> 620</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
706
<span class="lineno"> 621</span> <span class="py-line"><span class="py-docstring"> Walk every member and call a function on the keyword and value.</span> </span>
707
<span class="lineno"> 622</span> <span class="py-line"><span class="py-docstring"> </span> </span>
708
<span class="lineno"> 623</span> <span class="py-line"><span class="py-docstring"> Return a dictionary of the return values</span> </span>
709
<span class="lineno"> 624</span> <span class="py-line"><span class="py-docstring"> </span> </span>
710
<span class="lineno"> 625</span> <span class="py-line"><span class="py-docstring"> If the function raises an exception, raise the errror</span> </span>
711
<span class="lineno"> 626</span> <span class="py-line"><span class="py-docstring"> unless ``raise_errors=False``, in which case set the return value to</span> </span>
712
<span class="lineno"> 627</span> <span class="py-line"><span class="py-docstring"> ``False``.</span> </span>
713
<span class="lineno"> 628</span> <span class="py-line"><span class="py-docstring"> </span> </span>
714
<span class="lineno"> 629</span> <span class="py-line"><span class="py-docstring"> Any unrecognised keyword arguments you pass to walk, will be pased on</span> </span>
715
<span class="lineno"> 630</span> <span class="py-line"><span class="py-docstring"> to the function you pass in.</span> </span>
716
<span class="lineno"> 631</span> <span class="py-line"><span class="py-docstring"> </span> </span>
717
<span class="lineno"> 632</span> <span class="py-line"><span class="py-docstring"> Note: if ``call_on_sections`` is ``True`` then - on encountering a</span> </span>
718
<span class="lineno"> 633</span> <span class="py-line"><span class="py-docstring"> subsection, *first* the function is called for the *whole* subsection,</span> </span>
719
<span class="lineno"> 634</span> <span class="py-line"><span class="py-docstring"> and then recurses into it's members. This means your function must be</span> </span>
720
<span class="lineno"> 635</span> <span class="py-line"><span class="py-docstring"> able to handle strings, dictionaries and lists. This allows you</span> </span>
721
<span class="lineno"> 636</span> <span class="py-line"><span class="py-docstring"> to change the key of subsections as well as for ordinary members. The</span> </span>
722
<span class="lineno"> 637</span> <span class="py-line"><span class="py-docstring"> return value when called on the whole subsection has to be discarded.</span> </span>
723
<span class="lineno"> 638</span> <span class="py-line"><span class="py-docstring"> </span> </span>
724
<span class="lineno"> 639</span> <span class="py-line"><span class="py-docstring"> See the encode and decode methods for examples, including functions.</span> </span>
725
<span class="lineno"> 640</span> <span class="py-line"><span class="py-docstring"> </span> </span>
726
<span class="lineno"> 641</span> <span class="py-line"><span class="py-docstring"> .. caution::</span> </span>
727
<span class="lineno"> 642</span> <span class="py-line"><span class="py-docstring"> </span> </span>
728
<span class="lineno"> 643</span> <span class="py-line"><span class="py-docstring"> You can use ``walk`` to transform the names of members of a section</span> </span>
729
<span class="lineno"> 644</span> <span class="py-line"><span class="py-docstring"> but you mustn't add or delete members.</span> </span>
730
<span class="lineno"> 645</span> <span class="py-line"><span class="py-docstring"> </span> </span>
731
<span class="lineno"> 646</span> <span class="py-line"><span class="py-docstring"> >>> config = '''[XXXXsection]</span> </span>
732
<span class="lineno"> 647</span> <span class="py-line"><span class="py-docstring"> ... XXXXkey = XXXXvalue'''.splitlines()</span> </span>
733
<span class="lineno"> 648</span> <span class="py-line"><span class="py-docstring"> >>> cfg = ConfigObj(config)</span> </span>
734
<span class="lineno"> 649</span> <span class="py-line"><span class="py-docstring"> >>> cfg</span> </span>
735
<span class="lineno"> 650</span> <span class="py-line"><span class="py-docstring"> {'XXXXsection': {'XXXXkey': 'XXXXvalue'}}</span> </span>
736
<span class="lineno"> 651</span> <span class="py-line"><span class="py-docstring"> >>> def transform(section, key):</span> </span>
737
<span class="lineno"> 652</span> <span class="py-line"><span class="py-docstring"> ... val = section[key]</span> </span>
738
<span class="lineno"> 653</span> <span class="py-line"><span class="py-docstring"> ... newkey = key.replace('XXXX', 'CLIENT1')</span> </span>
739
<span class="lineno"> 654</span> <span class="py-line"><span class="py-docstring"> ... section.rename(key, newkey)</span> </span>
740
<span class="lineno"> 655</span> <span class="py-line"><span class="py-docstring"> ... if isinstance(val, (tuple, list, dict)):</span> </span>
741
<span class="lineno"> 656</span> <span class="py-line"><span class="py-docstring"> ... pass</span> </span>
742
<span class="lineno"> 657</span> <span class="py-line"><span class="py-docstring"> ... else:</span> </span>
743
<span class="lineno"> 658</span> <span class="py-line"><span class="py-docstring"> ... val = val.replace('XXXX', 'CLIENT1')</span> </span>
744
<span class="lineno"> 659</span> <span class="py-line"><span class="py-docstring"> ... section[newkey] = val</span> </span>
745
<span class="lineno"> 660</span> <span class="py-line"><span class="py-docstring"> >>> cfg.walk(transform, call_on_sections=True)</span> </span>
746
<span class="lineno"> 661</span> <span class="py-line"><span class="py-docstring"> {'CLIENT1section': {'CLIENT1key': None}}</span> </span>
747
<span class="lineno"> 662</span> <span class="py-line"><span class="py-docstring"> >>> cfg</span> </span>
748
<span class="lineno"> 663</span> <span class="py-line"><span class="py-docstring"> {'CLIENT1section': {'CLIENT1key': 'CLIENT1value'}}</span> </span>
749
<span class="lineno"> 664</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
750
<span class="lineno"> 665</span> <span class="py-line"> <span class="py-name">out</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
751
<span class="lineno"> 666</span> <span class="py-line"> <span class="py-comment"># scalars first</span> </span>
752
<span class="lineno"> 667</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">for</span> <span class="py-name">i</span> <span class="py-keyword">in</span> <span class="py-name">range</span><span class="py-op">(</span><span class="py-name">len</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
753
<span class="lineno"> 668</span> <span class="py-line"> <span class="py-name">entry</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span><span class="py-op">[</span><span class="py-name">i</span><span class="py-op">]</span> </span>
754
<span class="lineno"> 669</span> <span class="py-line"> <span class="py-keyword">try</span><span class="py-op">:</span> </span>
755
<span class="lineno"> 670</span> <span class="py-line"> <span class="py-name">val</span> <span class="py-op">=</span> <span class="py-name">function</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">,</span> <span class="py-name">entry</span><span class="py-op">,</span> <span class="py-op">**</span><span class="py-name">keywargs</span><span class="py-op">)</span> </span>
756
<span class="lineno"> 671</span> <span class="py-line"> <span class="py-comment"># bound again in case name has changed</span> </span>
757
<span class="lineno"> 672</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">entry</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span><span class="py-op">[</span><span class="py-name">i</span><span class="py-op">]</span> </span>
758
<span class="lineno"> 673</span> <span class="py-line"> <span class="py-name">out</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">val</span> </span>
759
<span class="lineno"> 674</span> <span class="py-line"> <span class="py-keyword">except</span> <span class="py-name">Exception</span><span class="py-op">:</span> </span>
760
<span class="lineno"> 675</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">raise_errors</span><span class="py-op">:</span> </span>
761
<span class="lineno"> 676</span> <span class="py-line"> <span class="py-keyword">raise</span> </span>
762
<span class="lineno"> 677</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
763
<span class="lineno"> 678</span> <span class="py-line"> <span class="py-name">entry</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span><span class="py-op">[</span><span class="py-name">i</span><span class="py-op">]</span> </span>
764
<span class="lineno"> 679</span> <span class="py-line"> <span class="py-name">out</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
765
<span class="lineno"> 680</span> <span class="py-line"> <span class="py-comment"># then sections</span> </span>
766
<span class="lineno"> 681</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">for</span> <span class="py-name">i</span> <span class="py-keyword">in</span> <span class="py-name">range</span><span class="py-op">(</span><span class="py-name">len</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
767
<span class="lineno"> 682</span> <span class="py-line"> <span class="py-name">entry</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">[</span><span class="py-name">i</span><span class="py-op">]</span> </span>
768
<span class="lineno"> 683</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">call_on_sections</span><span class="py-op">:</span> </span>
769
<span class="lineno"> 684</span> <span class="py-line"> <span class="py-keyword">try</span><span class="py-op">:</span> </span>
770
<span class="lineno"> 685</span> <span class="py-line"> <span class="py-name">function</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">,</span> <span class="py-name">entry</span><span class="py-op">,</span> <span class="py-op">**</span><span class="py-name">keywargs</span><span class="py-op">)</span> </span>
771
<span class="lineno"> 686</span> <span class="py-line"> <span class="py-keyword">except</span> <span class="py-name">Exception</span><span class="py-op">:</span> </span>
772
<span class="lineno"> 687</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">raise_errors</span><span class="py-op">:</span> </span>
773
<span class="lineno"> 688</span> <span class="py-line"> <span class="py-keyword">raise</span> </span>
774
<span class="lineno"> 689</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
775
<span class="lineno"> 690</span> <span class="py-line"> <span class="py-name">entry</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">[</span><span class="py-name">i</span><span class="py-op">]</span> </span>
776
<span class="lineno"> 691</span> <span class="py-line"> <span class="py-name">out</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
777
<span class="lineno"> 692</span> <span class="py-line"> <span class="py-comment"># bound again in case name has changed</span> </span>
778
<span class="lineno"> 693</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">entry</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">[</span><span class="py-name">i</span><span class="py-op">]</span> </span>
779
<span class="lineno"> 694</span> <span class="py-line"> <span class="py-comment"># previous result is discarded</span> </span>
780
<span class="lineno"> 695</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">out</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.walk" class="py-name" href="pythonutils.configobj.Section-class.html#walk">walk</a><span class="py-op">(</span> </span>
781
<span class="lineno"> 696</span> <span class="py-line"> <span class="py-name">function</span><span class="py-op">,</span> </span>
782
<span class="lineno"> 697</span> <span class="py-line"> <span class="py-name">raise_errors</span><span class="py-op">=</span><span class="py-name">raise_errors</span><span class="py-op">,</span> </span>
783
<span class="lineno"> 698</span> <span class="py-line"> <span class="py-name">call_on_sections</span><span class="py-op">=</span><span class="py-name">call_on_sections</span><span class="py-op">,</span> </span>
784
<span class="lineno"> 699</span> <span class="py-line"> <span class="py-op">**</span><span class="py-name">keywargs</span><span class="py-op">)</span> </span>
785
<span class="lineno"> 700</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">out</span> </span>
786
</div><span class="lineno"> 701</span> <span class="py-line"> </span>
787
<a name="Section.decode"></a><div id="Section.decode-def"><span class="lineno"> 702</span> <a class="pysrc-toggle" href="#" id="Section.decode-toggle" onclick="toggle('Section.decode'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#decode">decode</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">encoding</span><span class="py-op">)</span><span class="py-op">:</span> </span>
788
</div><div id="Section.decode-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.decode-expanded"><span class="lineno"> 703</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
789
<span class="lineno"> 704</span> <span class="py-line"><span class="py-docstring"> Decode all strings and values to unicode, using the specified encoding.</span> </span>
790
<span class="lineno"> 705</span> <span class="py-line"><span class="py-docstring"> </span> </span>
791
<span class="lineno"> 706</span> <span class="py-line"><span class="py-docstring"> Works with subsections and list values.</span> </span>
792
<span class="lineno"> 707</span> <span class="py-line"><span class="py-docstring"> </span> </span>
793
<span class="lineno"> 708</span> <span class="py-line"><span class="py-docstring"> Uses the ``walk`` method.</span> </span>
794
<span class="lineno"> 709</span> <span class="py-line"><span class="py-docstring"> </span> </span>
795
<span class="lineno"> 710</span> <span class="py-line"><span class="py-docstring"> Testing ``encode`` and ``decode``.</span> </span>
796
<span class="lineno"> 711</span> <span class="py-line"><span class="py-docstring"> >>> m = ConfigObj(a)</span> </span>
797
<span class="lineno"> 712</span> <span class="py-line"><span class="py-docstring"> >>> m.decode('ascii')</span> </span>
798
<span class="lineno"> 713</span> <span class="py-line"><span class="py-docstring"> >>> def testuni(val):</span> </span>
799
<span class="lineno"> 714</span> <span class="py-line"><span class="py-docstring"> ... for entry in val:</span> </span>
800
<span class="lineno"> 715</span> <span class="py-line"><span class="py-docstring"> ... if not isinstance(entry, unicode):</span> </span>
801
<span class="lineno"> 716</span> <span class="py-line"><span class="py-docstring"> ... print >> sys.stderr, type(entry)</span> </span>
802
<span class="lineno"> 717</span> <span class="py-line"><span class="py-docstring"> ... raise AssertionError, 'decode failed.'</span> </span>
803
<span class="lineno"> 718</span> <span class="py-line"><span class="py-docstring"> ... if isinstance(val[entry], dict):</span> </span>
804
<span class="lineno"> 719</span> <span class="py-line"><span class="py-docstring"> ... testuni(val[entry])</span> </span>
805
<span class="lineno"> 720</span> <span class="py-line"><span class="py-docstring"> ... elif not isinstance(val[entry], unicode):</span> </span>
806
<span class="lineno"> 721</span> <span class="py-line"><span class="py-docstring"> ... raise AssertionError, 'decode failed.'</span> </span>
807
<span class="lineno"> 722</span> <span class="py-line"><span class="py-docstring"> >>> testuni(m)</span> </span>
808
<span class="lineno"> 723</span> <span class="py-line"><span class="py-docstring"> >>> m.encode('ascii')</span> </span>
809
<span class="lineno"> 724</span> <span class="py-line"><span class="py-docstring"> >>> a == m</span> </span>
810
<span class="lineno"> 725</span> <span class="py-line"><span class="py-docstring"> 1</span> </span>
811
<span class="lineno"> 726</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
812
<span class="lineno"> 727</span> <span class="py-line"> <span class="py-name">warn</span><span class="py-op">(</span><span class="py-string">'use of ``decode`` is deprecated.'</span><span class="py-op">,</span> <span class="py-name">DeprecationWarning</span><span class="py-op">)</span> </span>
813
<a name="Section.decode.decode"></a><div id="Section.decode.decode-def"><span class="lineno"> 728</span> <a class="pysrc-toggle" href="#" id="Section.decode.decode-toggle" onclick="toggle('Section.decode.decode'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section.decode-class.html#decode">decode</a><span class="py-op">(</span><span class="py-param">section</span><span class="py-op">,</span> <span class="py-param">key</span><span class="py-op">,</span> <span class="py-param">encoding</span><span class="py-op">=</span><span class="py-name">encoding</span><span class="py-op">,</span> <span class="py-param">warn</span><span class="py-op">=</span><span class="py-name">True</span><span class="py-op">)</span><span class="py-op">:</span> </span>
814
</div><div id="Section.decode.decode-collapsed" style="display:none;" pad="++++" indent="++++++++++++++++"></div><div id="Section.decode.decode-expanded"><span class="lineno"> 729</span> <span class="py-line"> <span class="py-docstring">""" """</span> </span>
815
<span class="lineno"> 730</span> <span class="py-line"> <span class="py-name">val</span> <span class="py-op">=</span> <span class="py-name">section</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> </span>
816
<span class="lineno"> 731</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">val</span><span class="py-op">,</span> <span class="py-op">(</span><span class="py-name">list</span><span class="py-op">,</span> <span class="py-name">tuple</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
817
<span class="lineno"> 732</span> <span class="py-line"> <span class="py-name">newval</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
818
<span class="lineno"> 733</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">val</span><span class="py-op">:</span> </span>
819
<span class="lineno"> 734</span> <span class="py-line"> <span class="py-name">newval</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-name">entry</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.decode" class="py-name" href="pythonutils.configobj.Section-class.html#decode">decode</a><span class="py-op">(</span><span class="py-name">encoding</span><span class="py-op">)</span><span class="py-op">)</span> </span>
820
<span class="lineno"> 735</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">val</span><span class="py-op">,</span> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">)</span><span class="py-op">:</span> </span>
821
<span class="lineno"> 736</span> <span class="py-line"> <span class="py-name">newval</span> <span class="py-op">=</span> <span class="py-name">val</span> </span>
822
<span class="lineno"> 737</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
823
<span class="lineno"> 738</span> <span class="py-line"> <span class="py-name">newval</span> <span class="py-op">=</span> <span class="py-name">val</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.decode" class="py-name" href="pythonutils.configobj.Section-class.html#decode">decode</a><span class="py-op">(</span><span class="py-name">encoding</span><span class="py-op">)</span> </span>
824
<span class="lineno"> 739</span> <span class="py-line"> <span class="py-name">newkey</span> <span class="py-op">=</span> <span class="py-name">key</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.decode" class="py-name" href="pythonutils.configobj.Section-class.html#decode">decode</a><span class="py-op">(</span><span class="py-name">encoding</span><span class="py-op">)</span> </span>
825
<span class="lineno"> 740</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.rename" class="py-name" href="pythonutils.configobj.Section-class.html#rename">rename</a><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">,</span> <span class="py-name">newkey</span><span class="py-op">)</span> </span>
826
<span class="lineno"> 741</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">[</span><span class="py-name">newkey</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">newval</span> </span>
827
</div><span class="lineno"> 742</span> <span class="py-line"> <span class="py-comment"># using ``call_on_sections`` allows us to modify section names</span> </span>
828
<span class="lineno"> 743</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.walk" class="py-name" href="pythonutils.configobj.Section-class.html#walk">walk</a><span class="py-op">(</span><a title="pythonutils.configobj.Section.decode" class="py-name" href="pythonutils.configobj.Section-class.html#decode">decode</a><span class="py-op">,</span> <span class="py-name">call_on_sections</span><span class="py-op">=</span><span class="py-name">True</span><span class="py-op">)</span> </span>
829
</div><span class="lineno"> 744</span> <span class="py-line"> </span>
830
<a name="Section.encode"></a><div id="Section.encode-def"><span class="lineno"> 745</span> <a class="pysrc-toggle" href="#" id="Section.encode-toggle" onclick="toggle('Section.encode'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#encode">encode</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">encoding</span><span class="py-op">)</span><span class="py-op">:</span> </span>
831
</div><div id="Section.encode-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.encode-expanded"><span class="lineno"> 746</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
832
<span class="lineno"> 747</span> <span class="py-line"><span class="py-docstring"> Encode all strings and values from unicode,</span> </span>
833
<span class="lineno"> 748</span> <span class="py-line"><span class="py-docstring"> using the specified encoding.</span> </span>
834
<span class="lineno"> 749</span> <span class="py-line"><span class="py-docstring"> </span> </span>
835
<span class="lineno"> 750</span> <span class="py-line"><span class="py-docstring"> Works with subsections and list values.</span> </span>
836
<span class="lineno"> 751</span> <span class="py-line"><span class="py-docstring"> Uses the ``walk`` method.</span> </span>
837
<span class="lineno"> 752</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
838
<span class="lineno"> 753</span> <span class="py-line"> <span class="py-name">warn</span><span class="py-op">(</span><span class="py-string">'use of ``encode`` is deprecated.'</span><span class="py-op">,</span> <span class="py-name">DeprecationWarning</span><span class="py-op">)</span> </span>
839
<a name="Section.encode.encode"></a><div id="Section.encode.encode-def"><span class="lineno"> 754</span> <a class="pysrc-toggle" href="#" id="Section.encode.encode-toggle" onclick="toggle('Section.encode.encode'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section.encode-class.html#encode">encode</a><span class="py-op">(</span><span class="py-param">section</span><span class="py-op">,</span> <span class="py-param">key</span><span class="py-op">,</span> <span class="py-param">encoding</span><span class="py-op">=</span><span class="py-name">encoding</span><span class="py-op">)</span><span class="py-op">:</span> </span>
840
</div><div id="Section.encode.encode-collapsed" style="display:none;" pad="++++" indent="++++++++++++++++"></div><div id="Section.encode.encode-expanded"><span class="lineno"> 755</span> <span class="py-line"> <span class="py-docstring">""" """</span> </span>
841
<span class="lineno"> 756</span> <span class="py-line"> <span class="py-name">val</span> <span class="py-op">=</span> <span class="py-name">section</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> </span>
842
<span class="lineno"> 757</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">val</span><span class="py-op">,</span> <span class="py-op">(</span><span class="py-name">list</span><span class="py-op">,</span> <span class="py-name">tuple</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
843
<span class="lineno"> 758</span> <span class="py-line"> <span class="py-name">newval</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
844
<span class="lineno"> 759</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">val</span><span class="py-op">:</span> </span>
845
<span class="lineno"> 760</span> <span class="py-line"> <span class="py-name">newval</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-name">entry</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.encode" class="py-name" href="pythonutils.configobj.Section-class.html#encode">encode</a><span class="py-op">(</span><span class="py-name">encoding</span><span class="py-op">)</span><span class="py-op">)</span> </span>
846
<span class="lineno"> 761</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">val</span><span class="py-op">,</span> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">)</span><span class="py-op">:</span> </span>
847
<span class="lineno"> 762</span> <span class="py-line"> <span class="py-name">newval</span> <span class="py-op">=</span> <span class="py-name">val</span> </span>
848
<span class="lineno"> 763</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
849
<span class="lineno"> 764</span> <span class="py-line"> <span class="py-name">newval</span> <span class="py-op">=</span> <span class="py-name">val</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.encode" class="py-name" href="pythonutils.configobj.Section-class.html#encode">encode</a><span class="py-op">(</span><span class="py-name">encoding</span><span class="py-op">)</span> </span>
850
<span class="lineno"> 765</span> <span class="py-line"> <span class="py-name">newkey</span> <span class="py-op">=</span> <span class="py-name">key</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.encode" class="py-name" href="pythonutils.configobj.Section-class.html#encode">encode</a><span class="py-op">(</span><span class="py-name">encoding</span><span class="py-op">)</span> </span>
851
<span class="lineno"> 766</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.rename" class="py-name" href="pythonutils.configobj.Section-class.html#rename">rename</a><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">,</span> <span class="py-name">newkey</span><span class="py-op">)</span> </span>
852
<span class="lineno"> 767</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">[</span><span class="py-name">newkey</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">newval</span> </span>
853
</div><span class="lineno"> 768</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.walk" class="py-name" href="pythonutils.configobj.Section-class.html#walk">walk</a><span class="py-op">(</span><a title="pythonutils.configobj.Section.encode" class="py-name" href="pythonutils.configobj.Section-class.html#encode">encode</a><span class="py-op">,</span> <span class="py-name">call_on_sections</span><span class="py-op">=</span><span class="py-name">True</span><span class="py-op">)</span> </span>
854
</div><span class="lineno"> 769</span> <span class="py-line"> </span>
855
<a name="Section.istrue"></a><div id="Section.istrue-def"><span class="lineno"> 770</span> <a class="pysrc-toggle" href="#" id="Section.istrue-toggle" onclick="toggle('Section.istrue'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#istrue">istrue</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">key</span><span class="py-op">)</span><span class="py-op">:</span> </span>
856
</div><div id="Section.istrue-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.istrue-expanded"><span class="lineno"> 771</span> <span class="py-line"> <span class="py-docstring">"""A deprecated version of ``as_bool``."""</span> </span>
857
<span class="lineno"> 772</span> <span class="py-line"> <span class="py-name">warn</span><span class="py-op">(</span><span class="py-string">'use of ``istrue`` is deprecated. Use ``as_bool`` method '</span> </span>
858
<span class="lineno"> 773</span> <span class="py-line"> <span class="py-string">'instead.'</span><span class="py-op">,</span> <span class="py-name">DeprecationWarning</span><span class="py-op">)</span> </span>
859
<span class="lineno"> 774</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.as_bool" class="py-name" href="pythonutils.configobj.Section-class.html#as_bool">as_bool</a><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span> </span>
860
</div><span class="lineno"> 775</span> <span class="py-line"> </span>
861
<a name="Section.as_bool"></a><div id="Section.as_bool-def"><span class="lineno"> 776</span> <a class="pysrc-toggle" href="#" id="Section.as_bool-toggle" onclick="toggle('Section.as_bool'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#as_bool">as_bool</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">key</span><span class="py-op">)</span><span class="py-op">:</span> </span>
862
</div><div id="Section.as_bool-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.as_bool-expanded"><span class="lineno"> 777</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
863
<span class="lineno"> 778</span> <span class="py-line"><span class="py-docstring"> Accepts a key as input. The corresponding value must be a string or</span> </span>
864
<span class="lineno"> 779</span> <span class="py-line"><span class="py-docstring"> the objects (``True`` or 1) or (``False`` or 0). We allow 0 and 1 to</span> </span>
865
<span class="lineno"> 780</span> <span class="py-line"><span class="py-docstring"> retain compatibility with Python 2.2.</span> </span>
866
<span class="lineno"> 781</span> <span class="py-line"><span class="py-docstring"> </span> </span>
867
<span class="lineno"> 782</span> <span class="py-line"><span class="py-docstring"> If the string is one of ``True``, ``On``, ``Yes``, or ``1`` it returns </span> </span>
868
<span class="lineno"> 783</span> <span class="py-line"><span class="py-docstring"> ``True``.</span> </span>
869
<span class="lineno"> 784</span> <span class="py-line"><span class="py-docstring"> </span> </span>
870
<span class="lineno"> 785</span> <span class="py-line"><span class="py-docstring"> If the string is one of ``False``, ``Off``, ``No``, or ``0`` it returns </span> </span>
871
<span class="lineno"> 786</span> <span class="py-line"><span class="py-docstring"> ``False``.</span> </span>
872
<span class="lineno"> 787</span> <span class="py-line"><span class="py-docstring"> </span> </span>
873
<span class="lineno"> 788</span> <span class="py-line"><span class="py-docstring"> ``as_bool`` is not case sensitive.</span> </span>
874
<span class="lineno"> 789</span> <span class="py-line"><span class="py-docstring"> </span> </span>
875
<span class="lineno"> 790</span> <span class="py-line"><span class="py-docstring"> Any other input will raise a ``ValueError``.</span> </span>
876
<span class="lineno"> 791</span> <span class="py-line"><span class="py-docstring"> </span> </span>
877
<span class="lineno"> 792</span> <span class="py-line"><span class="py-docstring"> >>> a = ConfigObj()</span> </span>
878
<span class="lineno"> 793</span> <span class="py-line"><span class="py-docstring"> >>> a['a'] = 'fish'</span> </span>
879
<span class="lineno"> 794</span> <span class="py-line"><span class="py-docstring"> >>> a.as_bool('a')</span> </span>
880
<span class="lineno"> 795</span> <span class="py-line"><span class="py-docstring"> Traceback (most recent call last):</span> </span>
881
<span class="lineno"> 796</span> <span class="py-line"><span class="py-docstring"> ValueError: Value "fish" is neither True nor False</span> </span>
882
<span class="lineno"> 797</span> <span class="py-line"><span class="py-docstring"> >>> a['b'] = 'True'</span> </span>
883
<span class="lineno"> 798</span> <span class="py-line"><span class="py-docstring"> >>> a.as_bool('b')</span> </span>
884
<span class="lineno"> 799</span> <span class="py-line"><span class="py-docstring"> 1</span> </span>
885
<span class="lineno"> 800</span> <span class="py-line"><span class="py-docstring"> >>> a['b'] = 'off'</span> </span>
886
<span class="lineno"> 801</span> <span class="py-line"><span class="py-docstring"> >>> a.as_bool('b')</span> </span>
887
<span class="lineno"> 802</span> <span class="py-line"><span class="py-docstring"> 0</span> </span>
888
<span class="lineno"> 803</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
889
<span class="lineno"> 804</span> <span class="py-line"> <span class="py-name">val</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> </span>
890
<span class="lineno"> 805</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">val</span> <span class="py-op">==</span> <span class="py-name">True</span><span class="py-op">:</span> </span>
891
<span class="lineno"> 806</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">True</span> </span>
892
<span class="lineno"> 807</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">val</span> <span class="py-op">==</span> <span class="py-name">False</span><span class="py-op">:</span> </span>
893
<span class="lineno"> 808</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">False</span> </span>
894
<span class="lineno"> 809</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
895
<span class="lineno"> 810</span> <span class="py-line"> <span class="py-keyword">try</span><span class="py-op">:</span> </span>
896
<span class="lineno"> 811</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">val</span><span class="py-op">,</span> <span class="py-name">StringTypes</span><span class="py-op">)</span><span class="py-op">:</span> </span>
897
<span class="lineno"> 812</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">KeyError</span> </span>
898
<span class="lineno"> 813</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
899
<span class="lineno"> 814</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">main</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._bools" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_bools">_bools</a><span class="py-op">[</span><span class="py-name">val</span><span class="py-op">.</span><span class="py-name">lower</span><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">]</span> </span>
900
<span class="lineno"> 815</span> <span class="py-line"> <span class="py-keyword">except</span> <span class="py-name">KeyError</span><span class="py-op">:</span> </span>
901
<span class="lineno"> 816</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">ValueError</span><span class="py-op">(</span><span class="py-string">'Value "%s" is neither True nor False'</span> <span class="py-op">%</span> <span class="py-name">val</span><span class="py-op">)</span> </span>
902
</div><span class="lineno"> 817</span> <span class="py-line"> </span>
903
<a name="Section.as_int"></a><div id="Section.as_int-def"><span class="lineno"> 818</span> <a class="pysrc-toggle" href="#" id="Section.as_int-toggle" onclick="toggle('Section.as_int'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#as_int">as_int</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">key</span><span class="py-op">)</span><span class="py-op">:</span> </span>
904
</div><div id="Section.as_int-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.as_int-expanded"><span class="lineno"> 819</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
905
<span class="lineno"> 820</span> <span class="py-line"><span class="py-docstring"> A convenience method which coerces the specified value to an integer.</span> </span>
906
<span class="lineno"> 821</span> <span class="py-line"><span class="py-docstring"> </span> </span>
907
<span class="lineno"> 822</span> <span class="py-line"><span class="py-docstring"> If the value is an invalid literal for ``int``, a ``ValueError`` will</span> </span>
908
<span class="lineno"> 823</span> <span class="py-line"><span class="py-docstring"> be raised.</span> </span>
909
<span class="lineno"> 824</span> <span class="py-line"><span class="py-docstring"> </span> </span>
910
<span class="lineno"> 825</span> <span class="py-line"><span class="py-docstring"> >>> a = ConfigObj()</span> </span>
911
<span class="lineno"> 826</span> <span class="py-line"><span class="py-docstring"> >>> a['a'] = 'fish'</span> </span>
912
<span class="lineno"> 827</span> <span class="py-line"><span class="py-docstring"> >>> a.as_int('a')</span> </span>
913
<span class="lineno"> 828</span> <span class="py-line"><span class="py-docstring"> Traceback (most recent call last):</span> </span>
914
<span class="lineno"> 829</span> <span class="py-line"><span class="py-docstring"> ValueError: invalid literal for int(): fish</span> </span>
915
<span class="lineno"> 830</span> <span class="py-line"><span class="py-docstring"> >>> a['b'] = '1'</span> </span>
916
<span class="lineno"> 831</span> <span class="py-line"><span class="py-docstring"> >>> a.as_int('b')</span> </span>
917
<span class="lineno"> 832</span> <span class="py-line"><span class="py-docstring"> 1</span> </span>
918
<span class="lineno"> 833</span> <span class="py-line"><span class="py-docstring"> >>> a['b'] = '3.2'</span> </span>
919
<span class="lineno"> 834</span> <span class="py-line"><span class="py-docstring"> >>> a.as_int('b')</span> </span>
920
<span class="lineno"> 835</span> <span class="py-line"><span class="py-docstring"> Traceback (most recent call last):</span> </span>
921
<span class="lineno"> 836</span> <span class="py-line"><span class="py-docstring"> ValueError: invalid literal for int(): 3.2</span> </span>
922
<span class="lineno"> 837</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
923
<span class="lineno"> 838</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">int</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span><span class="py-op">)</span> </span>
924
</div><span class="lineno"> 839</span> <span class="py-line"> </span>
925
<a name="Section.as_float"></a><div id="Section.as_float-def"><span class="lineno"> 840</span> <a class="pysrc-toggle" href="#" id="Section.as_float-toggle" onclick="toggle('Section.as_float'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.Section-class.html#as_float">as_float</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">key</span><span class="py-op">)</span><span class="py-op">:</span> </span>
926
</div><div id="Section.as_float-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Section.as_float-expanded"><span class="lineno"> 841</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
927
<span class="lineno"> 842</span> <span class="py-line"><span class="py-docstring"> A convenience method which coerces the specified value to a float.</span> </span>
928
<span class="lineno"> 843</span> <span class="py-line"><span class="py-docstring"> </span> </span>
929
<span class="lineno"> 844</span> <span class="py-line"><span class="py-docstring"> If the value is an invalid literal for ``float``, a ``ValueError`` will</span> </span>
930
<span class="lineno"> 845</span> <span class="py-line"><span class="py-docstring"> be raised.</span> </span>
931
<span class="lineno"> 846</span> <span class="py-line"><span class="py-docstring"> </span> </span>
932
<span class="lineno"> 847</span> <span class="py-line"><span class="py-docstring"> >>> a = ConfigObj()</span> </span>
933
<span class="lineno"> 848</span> <span class="py-line"><span class="py-docstring"> >>> a['a'] = 'fish'</span> </span>
934
<span class="lineno"> 849</span> <span class="py-line"><span class="py-docstring"> >>> a.as_float('a')</span> </span>
935
<span class="lineno"> 850</span> <span class="py-line"><span class="py-docstring"> Traceback (most recent call last):</span> </span>
936
<span class="lineno"> 851</span> <span class="py-line"><span class="py-docstring"> ValueError: invalid literal for float(): fish</span> </span>
937
<span class="lineno"> 852</span> <span class="py-line"><span class="py-docstring"> >>> a['b'] = '1'</span> </span>
938
<span class="lineno"> 853</span> <span class="py-line"><span class="py-docstring"> >>> a.as_float('b')</span> </span>
939
<span class="lineno"> 854</span> <span class="py-line"><span class="py-docstring"> 1.0</span> </span>
940
<span class="lineno"> 855</span> <span class="py-line"><span class="py-docstring"> >>> a['b'] = '3.2'</span> </span>
941
<span class="lineno"> 856</span> <span class="py-line"><span class="py-docstring"> >>> a.as_float('b')</span> </span>
942
<span class="lineno"> 857</span> <span class="py-line"><span class="py-docstring"> 3.2000000000000002</span> </span>
943
<span class="lineno"> 858</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
944
<span class="lineno"> 859</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">float</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span><span class="py-op">)</span> </span>
945
</div></div><span class="lineno"> 860</span> <span class="py-line"> </span>
946
<span class="lineno"> 861</span> <span class="py-line"> </span>
947
<a name="ConfigObj"></a><div id="ConfigObj-def"><span class="lineno"> 862</span> <a class="pysrc-toggle" href="#" id="ConfigObj-toggle" onclick="toggle('ConfigObj'); return false;">-</a><span class="py-line"><span class="py-keyword">class</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html">ConfigObj</a><span class="py-op">(</span><span class="py-base-class">Section</span><span class="py-op">)</span><span class="py-op">:</span> </span>
948
</div><div id="ConfigObj-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ConfigObj-expanded"><span class="lineno"> 863</span> <span class="py-line"> <span class="py-docstring">"""An object to read, create, and write config files."""</span> </span>
949
<span class="lineno"> 864</span> <span class="py-line"> </span>
950
<span class="lineno"> 865</span> <span class="py-line"> <a class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_keyword">_keyword</a> <span class="py-op">=</span> <span class="py-name">re</span><span class="py-op">.</span><span class="py-name">compile</span><span class="py-op">(</span><span class="py-string">r'''^ # line start</span> </span>
951
<span class="lineno"> 866</span> <span class="py-line"><span class="py-string"> (\s*) # indentation</span> </span>
952
<span class="lineno"> 867</span> <span class="py-line"><span class="py-string"> ( # keyword</span> </span>
953
<span class="lineno"> 868</span> <span class="py-line"><span class="py-string"> (?:".*?")| # double quotes</span> </span>
954
<span class="lineno"> 869</span> <span class="py-line"><span class="py-string"> (?:'.*?')| # single quotes</span> </span>
955
<span class="lineno"> 870</span> <span class="py-line"><span class="py-string"> (?:[^'"=].*?) # no quotes</span> </span>
956
<span class="lineno"> 871</span> <span class="py-line"><span class="py-string"> )</span> </span>
957
<span class="lineno"> 872</span> <span class="py-line"><span class="py-string"> \s*=\s* # divider</span> </span>
958
<span class="lineno"> 873</span> <span class="py-line"><span class="py-string"> (.*) # value (including list values and comments)</span> </span>
959
<span class="lineno"> 874</span> <span class="py-line"><span class="py-string"> $ # line end</span> </span>
960
<span class="lineno"> 875</span> <span class="py-line"><span class="py-string"> '''</span><span class="py-op">,</span> </span>
961
<span class="lineno"> 876</span> <span class="py-line"> <span class="py-name">re</span><span class="py-op">.</span><span class="py-name">VERBOSE</span><span class="py-op">)</span> </span>
962
<span class="lineno"> 877</span> <span class="py-line"> </span>
963
<span class="lineno"> 878</span> <span class="py-line"> <a class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_sectionmarker">_sectionmarker</a> <span class="py-op">=</span> <span class="py-name">re</span><span class="py-op">.</span><span class="py-name">compile</span><span class="py-op">(</span><span class="py-string">r'''^</span> </span>
964
<span class="lineno"> 879</span> <span class="py-line"><span class="py-string"> (\s*) # 1: indentation</span> </span>
965
<span class="lineno"> 880</span> <span class="py-line"><span class="py-string"> ((?:\[\s*)+) # 2: section marker open</span> </span>
966
<span class="lineno"> 881</span> <span class="py-line"><span class="py-string"> ( # 3: section name open</span> </span>
967
<span class="lineno"> 882</span> <span class="py-line"><span class="py-string"> (?:"\s*\S.*?\s*")| # at least one non-space with double quotes</span> </span>
968
<span class="lineno"> 883</span> <span class="py-line"><span class="py-string"> (?:'\s*\S.*?\s*')| # at least one non-space with single quotes</span> </span>
969
<span class="lineno"> 884</span> <span class="py-line"><span class="py-string"> (?:[^'"\s].*?) # at least one non-space unquoted</span> </span>
970
<span class="lineno"> 885</span> <span class="py-line"><span class="py-string"> ) # section name close</span> </span>
971
<span class="lineno"> 886</span> <span class="py-line"><span class="py-string"> ((?:\s*\])+) # 4: section marker close</span> </span>
972
<span class="lineno"> 887</span> <span class="py-line"><span class="py-string"> \s*(\#.*)? # 5: optional comment</span> </span>
973
<span class="lineno"> 888</span> <span class="py-line"><span class="py-string"> $'''</span><span class="py-op">,</span> </span>
974
<span class="lineno"> 889</span> <span class="py-line"> <span class="py-name">re</span><span class="py-op">.</span><span class="py-name">VERBOSE</span><span class="py-op">)</span> </span>
975
<span class="lineno"> 890</span> <span class="py-line"> </span>
976
<span class="lineno"> 891</span> <span class="py-line"> <span class="py-comment"># this regexp pulls list values out as a single string</span> </span>
977
<span class="lineno"> 892</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># or single values and comments</span> </span>
978
<span class="lineno"> 893</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># FIXME: this regex adds a '' to the end of comma terminated lists</span> </span>
979
<span class="lineno"> 894</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># workaround in ``_handle_value``</span> </span>
980
<span class="lineno"> 895</span> <span class="py-line"><span class="py-comment"></span> <a class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_valueexp">_valueexp</a> <span class="py-op">=</span> <span class="py-name">re</span><span class="py-op">.</span><span class="py-name">compile</span><span class="py-op">(</span><span class="py-string">r'''^</span> </span>
981
<span class="lineno"> 896</span> <span class="py-line"><span class="py-string"> (?:</span> </span>
982
<span class="lineno"> 897</span> <span class="py-line"><span class="py-string"> (?:</span> </span>
983
<span class="lineno"> 898</span> <span class="py-line"><span class="py-string"> (</span> </span>
984
<span class="lineno"> 899</span> <span class="py-line"><span class="py-string"> (?:</span> </span>
985
<span class="lineno"> 900</span> <span class="py-line"><span class="py-string"> (?:</span> </span>
986
<span class="lineno"> 901</span> <span class="py-line"><span class="py-string"> (?:".*?")| # double quotes</span> </span>
987
<span class="lineno"> 902</span> <span class="py-line"><span class="py-string"> (?:'.*?')| # single quotes</span> </span>
988
<span class="lineno"> 903</span> <span class="py-line"><span class="py-string"> (?:[^'",\#][^,\#]*?) # unquoted</span> </span>
989
<span class="lineno"> 904</span> <span class="py-line"><span class="py-string"> )</span> </span>
990
<span class="lineno"> 905</span> <span class="py-line"><span class="py-string"> \s*,\s* # comma</span> </span>
991
<span class="lineno"> 906</span> <span class="py-line"><span class="py-string"> )* # match all list items ending in a comma (if any)</span> </span>
992
<span class="lineno"> 907</span> <span class="py-line"><span class="py-string"> )</span> </span>
993
<span class="lineno"> 908</span> <span class="py-line"><span class="py-string"> (</span> </span>
994
<span class="lineno"> 909</span> <span class="py-line"><span class="py-string"> (?:".*?")| # double quotes</span> </span>
995
<span class="lineno"> 910</span> <span class="py-line"><span class="py-string"> (?:'.*?')| # single quotes</span> </span>
996
<span class="lineno"> 911</span> <span class="py-line"><span class="py-string"> (?:[^'",\#\s][^,]*?)| # unquoted</span> </span>
997
<span class="lineno"> 912</span> <span class="py-line"><span class="py-string"> (?:(?<!,)) # Empty value</span> </span>
998
<span class="lineno"> 913</span> <span class="py-line"><span class="py-string"> )? # last item in a list - or string value</span> </span>
999
<span class="lineno"> 914</span> <span class="py-line"><span class="py-string"> )|</span> </span>
1000
<span class="lineno"> 915</span> <span class="py-line"><span class="py-string"> (,) # alternatively a single comma - empty list</span> </span>
1001
<span class="lineno"> 916</span> <span class="py-line"><span class="py-string"> )</span> </span>
1002
<span class="lineno"> 917</span> <span class="py-line"><span class="py-string"> \s*(\#.*)? # optional comment</span> </span>
1003
<span class="lineno"> 918</span> <span class="py-line"><span class="py-string"> $'''</span><span class="py-op">,</span> </span>
1004
<span class="lineno"> 919</span> <span class="py-line"> <span class="py-name">re</span><span class="py-op">.</span><span class="py-name">VERBOSE</span><span class="py-op">)</span> </span>
1005
<span class="lineno"> 920</span> <span class="py-line"> </span>
1006
<span class="lineno"> 921</span> <span class="py-line"> <span class="py-comment"># use findall to get the members of a list value</span> </span>
1007
<span class="lineno"> 922</span> <span class="py-line"><span class="py-comment"></span> <a class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_listvalueexp">_listvalueexp</a> <span class="py-op">=</span> <span class="py-name">re</span><span class="py-op">.</span><span class="py-name">compile</span><span class="py-op">(</span><span class="py-string">r'''</span> </span>
1008
<span class="lineno"> 923</span> <span class="py-line"><span class="py-string"> (</span> </span>
1009
<span class="lineno"> 924</span> <span class="py-line"><span class="py-string"> (?:".*?")| # double quotes</span> </span>
1010
<span class="lineno"> 925</span> <span class="py-line"><span class="py-string"> (?:'.*?')| # single quotes</span> </span>
1011
<span class="lineno"> 926</span> <span class="py-line"><span class="py-string"> (?:[^'",\#].*?) # unquoted</span> </span>
1012
<span class="lineno"> 927</span> <span class="py-line"><span class="py-string"> )</span> </span>
1013
<span class="lineno"> 928</span> <span class="py-line"><span class="py-string"> \s*,\s* # comma</span> </span>
1014
<span class="lineno"> 929</span> <span class="py-line"><span class="py-string"> '''</span><span class="py-op">,</span> </span>
1015
<span class="lineno"> 930</span> <span class="py-line"> <span class="py-name">re</span><span class="py-op">.</span><span class="py-name">VERBOSE</span><span class="py-op">)</span> </span>
1016
<span class="lineno"> 931</span> <span class="py-line"> </span>
1017
<span class="lineno"> 932</span> <span class="py-line"> <span class="py-comment"># this regexp is used for the value</span> </span>
1018
<span class="lineno"> 933</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># when lists are switched off</span> </span>
1019
<span class="lineno"> 934</span> <span class="py-line"><span class="py-comment"></span> <a class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_nolistvalue">_nolistvalue</a> <span class="py-op">=</span> <span class="py-name">re</span><span class="py-op">.</span><span class="py-name">compile</span><span class="py-op">(</span><span class="py-string">r'''^</span> </span>
1020
<span class="lineno"> 935</span> <span class="py-line"><span class="py-string"> (</span> </span>
1021
<span class="lineno"> 936</span> <span class="py-line"><span class="py-string"> (?:".*?")| # double quotes</span> </span>
1022
<span class="lineno"> 937</span> <span class="py-line"><span class="py-string"> (?:'.*?')| # single quotes</span> </span>
1023
<span class="lineno"> 938</span> <span class="py-line"><span class="py-string"> (?:[^'"\#].*?)| # unquoted</span> </span>
1024
<span class="lineno"> 939</span> <span class="py-line"><span class="py-string"> (?:) # Empty value</span> </span>
1025
<span class="lineno"> 940</span> <span class="py-line"><span class="py-string"> )</span> </span>
1026
<span class="lineno"> 941</span> <span class="py-line"><span class="py-string"> \s*(\#.*)? # optional comment</span> </span>
1027
<span class="lineno"> 942</span> <span class="py-line"><span class="py-string"> $'''</span><span class="py-op">,</span> </span>
1028
<span class="lineno"> 943</span> <span class="py-line"> <span class="py-name">re</span><span class="py-op">.</span><span class="py-name">VERBOSE</span><span class="py-op">)</span> </span>
1029
<span class="lineno"> 944</span> <span class="py-line"> </span>
1030
<span class="lineno"> 945</span> <span class="py-line"> <span class="py-comment"># regexes for finding triple quoted values on one line</span> </span>
1031
<span class="lineno"> 946</span> <span class="py-line"><span class="py-comment"></span> <a class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_single_line_single">_single_line_single</a> <span class="py-op">=</span> <span class="py-name">re</span><span class="py-op">.</span><span class="py-name">compile</span><span class="py-op">(</span><span class="py-string">r"^'''(.*?)'''\s*(#.*)?$"</span><span class="py-op">)</span> </span>
1032
<span class="lineno"> 947</span> <span class="py-line"> <a class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_single_line_double">_single_line_double</a> <span class="py-op">=</span> <span class="py-name">re</span><span class="py-op">.</span><span class="py-name">compile</span><span class="py-op">(</span><span class="py-string">r'^"""(.*?)"""\s*(#.*)?$'</span><span class="py-op">)</span> </span>
1033
<span class="lineno"> 948</span> <span class="py-line"> <a class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_multi_line_single">_multi_line_single</a> <span class="py-op">=</span> <span class="py-name">re</span><span class="py-op">.</span><span class="py-name">compile</span><span class="py-op">(</span><span class="py-string">r"^(.*?)'''\s*(#.*)?$"</span><span class="py-op">)</span> </span>
1034
<span class="lineno"> 949</span> <span class="py-line"> <a class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_multi_line_double">_multi_line_double</a> <span class="py-op">=</span> <span class="py-name">re</span><span class="py-op">.</span><span class="py-name">compile</span><span class="py-op">(</span><span class="py-string">r'^(.*?)"""\s*(#.*)?$'</span><span class="py-op">)</span> </span>
1035
<span class="lineno"> 950</span> <span class="py-line"> </span>
1036
<span class="lineno"> 951</span> <span class="py-line"> <a class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_triple_quote">_triple_quote</a> <span class="py-op">=</span> <span class="py-op">{</span> </span>
1037
<span class="lineno"> 952</span> <span class="py-line"> <span class="py-string">"'''"</span><span class="py-op">:</span> <span class="py-op">(</span><a class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_single_line_single">_single_line_single</a><span class="py-op">,</span> <a class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_multi_line_single">_multi_line_single</a><span class="py-op">)</span><span class="py-op">,</span> </span>
1038
<span class="lineno"> 953</span> <span class="py-line"> <span class="py-string">'"""'</span><span class="py-op">:</span> <span class="py-op">(</span><a class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_single_line_double">_single_line_double</a><span class="py-op">,</span> <a class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_multi_line_double">_multi_line_double</a><span class="py-op">)</span><span class="py-op">,</span> </span>
1039
<span class="lineno"> 954</span> <span class="py-line"> <span class="py-op">}</span> </span>
1040
<span class="lineno"> 955</span> <span class="py-line"> </span>
1041
<span class="lineno"> 956</span> <span class="py-line"> <span class="py-comment"># Used by the ``istrue`` Section method</span> </span>
1042
<span class="lineno"> 957</span> <span class="py-line"><span class="py-comment"></span> <a class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_bools">_bools</a> <span class="py-op">=</span> <span class="py-op">{</span> </span>
1043
<span class="lineno"> 958</span> <span class="py-line"> <span class="py-string">'yes'</span><span class="py-op">:</span> <span class="py-name">True</span><span class="py-op">,</span> <span class="py-string">'no'</span><span class="py-op">:</span> <span class="py-name">False</span><span class="py-op">,</span> </span>
1044
<span class="lineno"> 959</span> <span class="py-line"> <span class="py-string">'on'</span><span class="py-op">:</span> <span class="py-name">True</span><span class="py-op">,</span> <span class="py-string">'off'</span><span class="py-op">:</span> <span class="py-name">False</span><span class="py-op">,</span> </span>
1045
<span class="lineno"> 960</span> <span class="py-line"> <span class="py-string">'1'</span><span class="py-op">:</span> <span class="py-name">True</span><span class="py-op">,</span> <span class="py-string">'0'</span><span class="py-op">:</span> <span class="py-name">False</span><span class="py-op">,</span> </span>
1046
<span class="lineno"> 961</span> <span class="py-line"> <span class="py-string">'true'</span><span class="py-op">:</span> <span class="py-name">True</span><span class="py-op">,</span> <span class="py-string">'false'</span><span class="py-op">:</span> <span class="py-name">False</span><span class="py-op">,</span> </span>
1047
<span class="lineno"> 962</span> <span class="py-line"> <span class="py-op">}</span> </span>
1048
<span class="lineno"> 963</span> <span class="py-line"> </span>
1049
<a name="ConfigObj.__init__"></a><div id="ConfigObj.__init__-def"><span class="lineno"> 964</span> <a class="pysrc-toggle" href="#" id="ConfigObj.__init__-toggle" onclick="toggle('ConfigObj.__init__'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#__init__">__init__</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">infile</span><span class="py-op">=</span><span class="py-name">None</span><span class="py-op">,</span> <span class="py-param">options</span><span class="py-op">=</span><span class="py-name">None</span><span class="py-op">,</span> <span class="py-op">**</span><span class="py-param">kwargs</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1050
</div><div id="ConfigObj.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj.__init__-expanded"><span class="lineno"> 965</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
1051
<span class="lineno"> 966</span> <span class="py-line"><span class="py-docstring"> Parse or create a config file object.</span> </span>
1052
<span class="lineno"> 967</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1053
<span class="lineno"> 968</span> <span class="py-line"><span class="py-docstring"> ``ConfigObj(infile=None, options=None, **kwargs)``</span> </span>
1054
<span class="lineno"> 969</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
1055
<span class="lineno"> 970</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">infile</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1056
<span class="lineno"> 971</span> <span class="py-line"> <span class="py-name">infile</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
1057
<span class="lineno"> 972</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">options</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1058
<span class="lineno"> 973</span> <span class="py-line"> <span class="py-name">options</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
1059
<span class="lineno"> 974</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1060
<span class="lineno"> 975</span> <span class="py-line"> <span class="py-name">options</span> <span class="py-op">=</span> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">(</span><span class="py-name">options</span><span class="py-op">)</span> </span>
1061
<span class="lineno"> 976</span> <span class="py-line"> <span class="py-comment"># keyword arguments take precedence over an options dictionary</span> </span>
1062
<span class="lineno"> 977</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">options</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.update" class="py-name" href="pythonutils.configobj.Section-class.html#update">update</a><span class="py-op">(</span><span class="py-name">kwargs</span><span class="py-op">)</span> </span>
1063
<span class="lineno"> 978</span> <span class="py-line"> <span class="py-comment"># init the superclass</span> </span>
1064
<span class="lineno"> 979</span> <span class="py-line"><span class="py-comment"></span> <a title="pythonutils.configobj.Section" class="py-name" href="pythonutils.configobj.Section-class.html">Section</a><span class="py-op">.</span><span id="link-4" class="py-name"><a title="pythonutils.configobj.ConfigObj.__init__
1065
pythonutils.configobj.ConfigObjError.__init__
1066
pythonutils.configobj.InterpolationDepthError.__init__
1067
pythonutils.configobj.MissingInterpolationOption.__init__
1068
pythonutils.configobj.Section.__init__
1069
pythonutils.configobj.SimpleVal.__init__" class="py-name" href="#" onclick="doclink('link-4', '__init__', 'Method __init__()=pythonutils.configobj.ConfigObj-class.html#__init__,Method ConfigObjError.__init__()=pythonutils.configobj.ConfigObjError-class.html#__init__,Method InterpolationDepthError.__init__()=pythonutils.configobj.InterpolationDepthError-class.html#__init__,Method MissingInterpolationOption.__init__()=pythonutils.configobj.MissingInterpolationOption-class.html#__init__,Method Section.__init__()=pythonutils.configobj.Section-class.html#__init__,Method SimpleVal.__init__()=pythonutils.configobj.SimpleVal-class.html#__init__'); return false;">__init__</a></span></span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">,</span> <span class="py-name">self</span><span class="py-op">,</span> <span class="py-number">0</span><span class="py-op">,</span> <span class="py-name">self</span><span class="py-op">)</span> </span>
1070
<span class="lineno"> 980</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1071
<span class="lineno"> 981</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">defaults</span> <span class="py-op">=</span> <a title="pythonutils.configobj.OPTION_DEFAULTS" class="py-name" href="pythonutils.configobj-module.html#OPTION_DEFAULTS">OPTION_DEFAULTS</a><span class="py-op">.</span><span class="py-name">copy</span><span class="py-op">(</span><span class="py-op">)</span> </span>
1072
<span class="lineno"> 982</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">options</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.keys" class="py-name" href="pythonutils.configobj.Section-class.html#keys">keys</a><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1073
<span class="lineno"> 983</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">entry</span> <span class="py-keyword">not</span> <span class="py-keyword">in</span> <span class="py-name">defaults</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.keys" class="py-name" href="pythonutils.configobj.Section-class.html#keys">keys</a><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1074
<span class="lineno"> 984</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">TypeError</span><span class="py-op">,</span> <span class="py-string">'Unrecognised option "%s".'</span> <span class="py-op">%</span> <span class="py-name">entry</span> </span>
1075
<span class="lineno"> 985</span> <span class="py-line"> <span class="py-comment"># TODO: check the values too.</span> </span>
1076
<span class="lineno"> 986</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment">#</span> </span>
1077
<span class="lineno"> 987</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># Add any explicit options to the defaults</span> </span>
1078
<span class="lineno"> 988</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">defaults</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.update" class="py-name" href="pythonutils.configobj.Section-class.html#update">update</a><span class="py-op">(</span><span class="py-name">options</span><span class="py-op">)</span> </span>
1079
<span class="lineno"> 989</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1080
<span class="lineno"> 990</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># initialise a few variables</span> </span>
1081
<span class="lineno"> 991</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">filename</span> <span class="py-op">=</span> <span class="py-name">None</span> </span>
1082
<span class="lineno"> 992</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">_errors</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
1083
<span class="lineno"> 993</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">raise_errors</span> <span class="py-op">=</span> <span class="py-name">defaults</span><span class="py-op">[</span><span class="py-string">'raise_errors'</span><span class="py-op">]</span> </span>
1084
<span class="lineno"> 994</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">interpolation</span> <span class="py-op">=</span> <span class="py-name">defaults</span><span class="py-op">[</span><span class="py-string">'interpolation'</span><span class="py-op">]</span> </span>
1085
<span class="lineno"> 995</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">list_values</span> <span class="py-op">=</span> <span class="py-name">defaults</span><span class="py-op">[</span><span class="py-string">'list_values'</span><span class="py-op">]</span> </span>
1086
<span class="lineno"> 996</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">create_empty</span> <span class="py-op">=</span> <span class="py-name">defaults</span><span class="py-op">[</span><span class="py-string">'create_empty'</span><span class="py-op">]</span> </span>
1087
<span class="lineno"> 997</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">file_error</span> <span class="py-op">=</span> <span class="py-name">defaults</span><span class="py-op">[</span><span class="py-string">'file_error'</span><span class="py-op">]</span> </span>
1088
<span class="lineno"> 998</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">stringify</span> <span class="py-op">=</span> <span class="py-name">defaults</span><span class="py-op">[</span><span class="py-string">'stringify'</span><span class="py-op">]</span> </span>
1089
<span class="lineno"> 999</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">indent_type</span> <span class="py-op">=</span> <span class="py-name">defaults</span><span class="py-op">[</span><span class="py-string">'indent_type'</span><span class="py-op">]</span> </span>
1090
<span class="lineno">1000</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span> <span class="py-op">=</span> <span class="py-name">defaults</span><span class="py-op">[</span><span class="py-string">'encoding'</span><span class="py-op">]</span> </span>
1091
<span class="lineno">1001</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">default_encoding</span> <span class="py-op">=</span> <span class="py-name">defaults</span><span class="py-op">[</span><span class="py-string">'default_encoding'</span><span class="py-op">]</span> </span>
1092
<span class="lineno">1002</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">BOM</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
1093
<span class="lineno">1003</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">newlines</span> <span class="py-op">=</span> <span class="py-name">None</span> </span>
1094
<span class="lineno">1004</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">write_empty_values</span> <span class="py-op">=</span> <span class="py-name">defaults</span><span class="py-op">[</span><span class="py-string">'write_empty_values'</span><span class="py-op">]</span> </span>
1095
<span class="lineno">1005</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.unrepr" class="py-name" href="pythonutils.configobj-module.html#unrepr">unrepr</a> <span class="py-op">=</span> <span class="py-name">defaults</span><span class="py-op">[</span><span class="py-string">'unrepr'</span><span class="py-op">]</span> </span>
1096
<span class="lineno">1006</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1097
<span class="lineno">1007</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">initial_comment</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
1098
<span class="lineno">1008</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">final_comment</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
1099
<span class="lineno">1009</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1100
<span class="lineno">1010</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">StringTypes</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1101
<span class="lineno">1011</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">filename</span> <span class="py-op">=</span> <span class="py-name">infile</span> </span>
1102
<span class="lineno">1012</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">os</span><span class="py-op">.</span><span class="py-name">path</span><span class="py-op">.</span><span class="py-name">isfile</span><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1103
<span class="lineno">1013</span> <span class="py-line"> <span class="py-name">infile</span> <span class="py-op">=</span> <span class="py-name">open</span><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">)</span><span class="py-op">.</span><span class="py-name">read</span><span class="py-op">(</span><span class="py-op">)</span> <span class="py-keyword">or</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
1104
<span class="lineno">1014</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">file_error</span><span class="py-op">:</span> </span>
1105
<span class="lineno">1015</span> <span class="py-line"> <span class="py-comment"># raise an error if the file doesn't exist</span> </span>
1106
<span class="lineno">1016</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">raise</span> <span class="py-name">IOError</span><span class="py-op">,</span> <span class="py-string">'Config file not found: "%s".'</span> <span class="py-op">%</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">filename</span> </span>
1107
<span class="lineno">1017</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1108
<span class="lineno">1018</span> <span class="py-line"> <span class="py-comment"># file doesn't already exist</span> </span>
1109
<span class="lineno">1019</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">create_empty</span><span class="py-op">:</span> </span>
1110
<span class="lineno">1020</span> <span class="py-line"> <span class="py-comment"># this is a good test that the filename specified</span> </span>
1111
<span class="lineno">1021</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># isn't impossible - like on a non existent device</span> </span>
1112
<span class="lineno">1022</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">h</span> <span class="py-op">=</span> <span class="py-name">open</span><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <span class="py-string">'w'</span><span class="py-op">)</span> </span>
1113
<span class="lineno">1023</span> <span class="py-line"> <span class="py-name">h</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj.write" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#write">write</a><span class="py-op">(</span><span class="py-string">''</span><span class="py-op">)</span> </span>
1114
<span class="lineno">1024</span> <span class="py-line"> <span class="py-name">h</span><span class="py-op">.</span><span class="py-name">close</span><span class="py-op">(</span><span class="py-op">)</span> </span>
1115
<span class="lineno">1025</span> <span class="py-line"> <span class="py-name">infile</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
1116
<span class="lineno">1026</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <span class="py-op">(</span><span class="py-name">list</span><span class="py-op">,</span> <span class="py-name">tuple</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1117
<span class="lineno">1027</span> <span class="py-line"> <span class="py-name">infile</span> <span class="py-op">=</span> <span class="py-name">list</span><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">)</span> </span>
1118
<span class="lineno">1028</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">)</span><span class="py-op">:</span> </span>
1119
<span class="lineno">1029</span> <span class="py-line"> <span class="py-comment"># initialise self</span> </span>
1120
<span class="lineno">1030</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># the Section class handles creating subsections</span> </span>
1121
<span class="lineno">1031</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <a title="pythonutils.configobj.ConfigObj" class="py-name" href="pythonutils.configobj.ConfigObj-class.html">ConfigObj</a><span class="py-op">)</span><span class="py-op">:</span> </span>
1122
<span class="lineno">1032</span> <span class="py-line"> <span class="py-comment"># get a copy of our ConfigObj</span> </span>
1123
<span class="lineno">1033</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">infile</span> <span class="py-op">=</span> <span class="py-name">infile</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">(</span><span class="py-op">)</span> </span>
1124
<span class="lineno">1034</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">infile</span><span class="py-op">:</span> </span>
1125
<span class="lineno">1035</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">infile</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> </span>
1126
<span class="lineno">1036</span> <span class="py-line"> <span class="py-keyword">del</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">_errors</span> </span>
1127
<span class="lineno">1037</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">defaults</span><span class="py-op">[</span><span class="py-string">'configspec'</span><span class="py-op">]</span> <span class="py-keyword">is</span> <span class="py-keyword">not</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1128
<span class="lineno">1038</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._handle_configspec" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_configspec">_handle_configspec</a><span class="py-op">(</span><span class="py-name">defaults</span><span class="py-op">[</span><span class="py-string">'configspec'</span><span class="py-op">]</span><span class="py-op">)</span> </span>
1129
<span class="lineno">1039</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1130
<span class="lineno">1040</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">configspec</span> <span class="py-op">=</span> <span class="py-name">None</span> </span>
1131
<span class="lineno">1041</span> <span class="py-line"> <span class="py-keyword">return</span> </span>
1132
<span class="lineno">1042</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">hasattr</span><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <span class="py-string">'read'</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1133
<span class="lineno">1043</span> <span class="py-line"> <span class="py-comment"># This supports file like objects</span> </span>
1134
<span class="lineno">1044</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">infile</span> <span class="py-op">=</span> <span class="py-name">infile</span><span class="py-op">.</span><span class="py-name">read</span><span class="py-op">(</span><span class="py-op">)</span> <span class="py-keyword">or</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
1135
<span class="lineno">1045</span> <span class="py-line"> <span class="py-comment"># needs splitting into lines - but needs doing *after* decoding</span> </span>
1136
<span class="lineno">1046</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># in case it's not an 8 bit encoding</span> </span>
1137
<span class="lineno">1047</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1138
<span class="lineno">1048</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">TypeError</span><span class="py-op">,</span> <span class="py-op">(</span><span class="py-string">'infile must be a filename,'</span> </span>
1139
<span class="lineno">1049</span> <span class="py-line"> <span class="py-string">' file like object, or list of lines.'</span><span class="py-op">)</span> </span>
1140
<span class="lineno">1050</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1141
<span class="lineno">1051</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">infile</span><span class="py-op">:</span> </span>
1142
<span class="lineno">1052</span> <span class="py-line"> <span class="py-comment"># don't do it for the empty ConfigObj</span> </span>
1143
<span class="lineno">1053</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">infile</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._handle_bom" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_bom">_handle_bom</a><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">)</span> </span>
1144
<span class="lineno">1054</span> <span class="py-line"> <span class="py-comment"># infile is now *always* a list</span> </span>
1145
<span class="lineno">1055</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment">#</span> </span>
1146
<span class="lineno">1056</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># Set the newlines attribute (first line ending it finds)</span> </span>
1147
<span class="lineno">1057</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># and strip trailing '\n' or '\r' from lines</span> </span>
1148
<span class="lineno">1058</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">for</span> <span class="py-name">line</span> <span class="py-keyword">in</span> <span class="py-name">infile</span><span class="py-op">:</span> </span>
1149
<span class="lineno">1059</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-op">(</span><span class="py-keyword">not</span> <span class="py-name">line</span><span class="py-op">)</span> <span class="py-keyword">or</span> <span class="py-op">(</span><span class="py-name">line</span><span class="py-op">[</span><span class="py-op">-</span><span class="py-number">1</span><span class="py-op">]</span> <span class="py-keyword">not</span> <span class="py-keyword">in</span> <span class="py-string">'\r\n'</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1150
<span class="lineno">1060</span> <span class="py-line"> <span class="py-keyword">continue</span> </span>
1151
<span class="lineno">1061</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">end</span> <span class="py-keyword">in</span> <span class="py-op">(</span><span class="py-string">'\r\n'</span><span class="py-op">,</span> <span class="py-string">'\n'</span><span class="py-op">,</span> <span class="py-string">'\r'</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1152
<span class="lineno">1062</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">line</span><span class="py-op">.</span><span class="py-name">endswith</span><span class="py-op">(</span><span class="py-name">end</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1153
<span class="lineno">1063</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">newlines</span> <span class="py-op">=</span> <span class="py-name">end</span> </span>
1154
<span class="lineno">1064</span> <span class="py-line"> <span class="py-keyword">break</span> </span>
1155
<span class="lineno">1065</span> <span class="py-line"> <span class="py-keyword">break</span> </span>
1156
<span class="lineno">1066</span> <span class="py-line"> <span class="py-name">infile</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-name">line</span><span class="py-op">.</span><span class="py-name">rstrip</span><span class="py-op">(</span><span class="py-string">'\r\n'</span><span class="py-op">)</span> <span class="py-keyword">for</span> <span class="py-name">line</span> <span class="py-keyword">in</span> <span class="py-name">infile</span><span class="py-op">]</span> </span>
1157
<span class="lineno">1067</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1158
<span class="lineno">1068</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._parse" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_parse">_parse</a><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">)</span> </span>
1159
<span class="lineno">1069</span> <span class="py-line"> <span class="py-comment"># if we had any errors, now is the time to raise them</span> </span>
1160
<span class="lineno">1070</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">_errors</span><span class="py-op">:</span> </span>
1161
<span class="lineno">1071</span> <span class="py-line"> <span class="py-name">error</span> <span class="py-op">=</span> <a title="pythonutils.configobj.ConfigObjError" class="py-name" href="pythonutils.configobj.ConfigObjError-class.html">ConfigObjError</a><span class="py-op">(</span><span class="py-string">"Parsing failed."</span><span class="py-op">)</span> </span>
1162
<span class="lineno">1072</span> <span class="py-line"> <span class="py-comment"># set the errors attribute; it's a list of tuples:</span> </span>
1163
<span class="lineno">1073</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># (error_type, message, line_number)</span> </span>
1164
<span class="lineno">1074</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">error</span><span class="py-op">.</span><span class="py-name">errors</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">_errors</span> </span>
1165
<span class="lineno">1075</span> <span class="py-line"> <span class="py-comment"># set the config attribute</span> </span>
1166
<span class="lineno">1076</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">error</span><span class="py-op">.</span><span class="py-name">config</span> <span class="py-op">=</span> <span class="py-name">self</span> </span>
1167
<span class="lineno">1077</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">error</span> </span>
1168
<span class="lineno">1078</span> <span class="py-line"> <span class="py-comment"># delete private attributes</span> </span>
1169
<span class="lineno">1079</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">del</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">_errors</span> </span>
1170
<span class="lineno">1080</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1171
<span class="lineno">1081</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">defaults</span><span class="py-op">[</span><span class="py-string">'configspec'</span><span class="py-op">]</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1172
<span class="lineno">1082</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">configspec</span> <span class="py-op">=</span> <span class="py-name">None</span> </span>
1173
<span class="lineno">1083</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1174
<span class="lineno">1084</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._handle_configspec" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_configspec">_handle_configspec</a><span class="py-op">(</span><span class="py-name">defaults</span><span class="py-op">[</span><span class="py-string">'configspec'</span><span class="py-op">]</span><span class="py-op">)</span> </span>
1175
</div><span class="lineno">1085</span> <span class="py-line"> </span>
1176
<a name="ConfigObj.__repr__"></a><div id="ConfigObj.__repr__-def"><span class="lineno">1086</span> <a class="pysrc-toggle" href="#" id="ConfigObj.__repr__-toggle" onclick="toggle('ConfigObj.__repr__'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#__repr__">__repr__</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1177
</div><div id="ConfigObj.__repr__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj.__repr__-expanded"><span class="lineno">1087</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-string">'ConfigObj({%s})'</span> <span class="py-op">%</span> <span class="py-string">', '</span><span class="py-op">.</span><span class="py-name">join</span><span class="py-op">(</span> </span>
1178
<span class="lineno">1088</span> <span class="py-line"> <span class="py-op">[</span><span class="py-op">(</span><span class="py-string">'%s: %s'</span> <span class="py-op">%</span> <span class="py-op">(</span><span class="py-name">repr</span><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span><span class="py-op">,</span> <span class="py-name">repr</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">)</span> <span class="py-keyword">for</span> <span class="py-name">key</span> <span class="py-keyword">in</span> </span>
1179
<span class="lineno">1089</span> <span class="py-line"> <span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">scalars</span> <span class="py-op">+</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">)</span><span class="py-op">]</span><span class="py-op">)</span> </span>
1180
</div><span class="lineno">1090</span> <span class="py-line"> </span>
1181
<a name="ConfigObj._handle_bom"></a><div id="ConfigObj._handle_bom-def"><span class="lineno">1091</span> <a class="pysrc-toggle" href="#" id="ConfigObj._handle_bom-toggle" onclick="toggle('ConfigObj._handle_bom'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_bom">_handle_bom</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">infile</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1182
</div><div id="ConfigObj._handle_bom-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._handle_bom-expanded"><span class="lineno">1092</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
1183
<span class="lineno">1093</span> <span class="py-line"><span class="py-docstring"> Handle any BOM, and decode if necessary.</span> </span>
1184
<span class="lineno">1094</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1185
<span class="lineno">1095</span> <span class="py-line"><span class="py-docstring"> If an encoding is specified, that *must* be used - but the BOM should</span> </span>
1186
<span class="lineno">1096</span> <span class="py-line"><span class="py-docstring"> still be removed (and the BOM attribute set).</span> </span>
1187
<span class="lineno">1097</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1188
<span class="lineno">1098</span> <span class="py-line"><span class="py-docstring"> (If the encoding is wrongly specified, then a BOM for an alternative</span> </span>
1189
<span class="lineno">1099</span> <span class="py-line"><span class="py-docstring"> encoding won't be discovered or removed.)</span> </span>
1190
<span class="lineno">1100</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1191
<span class="lineno">1101</span> <span class="py-line"><span class="py-docstring"> If an encoding is not specified, UTF8 or UTF16 BOM will be detected and</span> </span>
1192
<span class="lineno">1102</span> <span class="py-line"><span class="py-docstring"> removed. The BOM attribute will be set. UTF16 will be decoded to</span> </span>
1193
<span class="lineno">1103</span> <span class="py-line"><span class="py-docstring"> unicode.</span> </span>
1194
<span class="lineno">1104</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1195
<span class="lineno">1105</span> <span class="py-line"><span class="py-docstring"> NOTE: This method must not be called with an empty ``infile``.</span> </span>
1196
<span class="lineno">1106</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1197
<span class="lineno">1107</span> <span class="py-line"><span class="py-docstring"> Specifying the *wrong* encoding is likely to cause a</span> </span>
1198
<span class="lineno">1108</span> <span class="py-line"><span class="py-docstring"> ``UnicodeDecodeError``.</span> </span>
1199
<span class="lineno">1109</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1200
<span class="lineno">1110</span> <span class="py-line"><span class="py-docstring"> ``infile`` must always be returned as a list of lines, but may be</span> </span>
1201
<span class="lineno">1111</span> <span class="py-line"><span class="py-docstring"> passed in as a single string.</span> </span>
1202
<span class="lineno">1112</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
1203
<span class="lineno">1113</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-op">(</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span> <span class="py-keyword">is</span> <span class="py-keyword">not</span> <span class="py-name">None</span><span class="py-op">)</span> <span class="py-keyword">and</span> </span>
1204
<span class="lineno">1114</span> <span class="py-line"> <span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span><span class="py-op">.</span><span class="py-name">lower</span><span class="py-op">(</span><span class="py-op">)</span> <span class="py-keyword">not</span> <span class="py-keyword">in</span> <a title="pythonutils.configobj.BOM_LIST" class="py-name" href="pythonutils.configobj-module.html#BOM_LIST">BOM_LIST</a><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1205
<span class="lineno">1115</span> <span class="py-line"> <span class="py-comment"># No need to check for a BOM</span> </span>
1206
<span class="lineno">1116</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># encoding specified doesn't have one</span> </span>
1207
<span class="lineno">1117</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># just decode</span> </span>
1208
<span class="lineno">1118</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">return</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._decode" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_decode">_decode</a><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span><span class="py-op">)</span> </span>
1209
<span class="lineno">1119</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1210
<span class="lineno">1120</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <span class="py-op">(</span><span class="py-name">list</span><span class="py-op">,</span> <span class="py-name">tuple</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1211
<span class="lineno">1121</span> <span class="py-line"> <span class="py-name">line</span> <span class="py-op">=</span> <span class="py-name">infile</span><span class="py-op">[</span><span class="py-number">0</span><span class="py-op">]</span> </span>
1212
<span class="lineno">1122</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1213
<span class="lineno">1123</span> <span class="py-line"> <span class="py-name">line</span> <span class="py-op">=</span> <span class="py-name">infile</span> </span>
1214
<span class="lineno">1124</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span> <span class="py-keyword">is</span> <span class="py-keyword">not</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1215
<span class="lineno">1125</span> <span class="py-line"> <span class="py-comment"># encoding explicitly supplied</span> </span>
1216
<span class="lineno">1126</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># And it could have an associated BOM</span> </span>
1217
<span class="lineno">1127</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># TODO: if encoding is just UTF16 - we ought to check for both</span> </span>
1218
<span class="lineno">1128</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># TODO: big endian and little endian versions.</span> </span>
1219
<span class="lineno">1129</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">enc</span> <span class="py-op">=</span> <a title="pythonutils.configobj.BOM_LIST" class="py-name" href="pythonutils.configobj-module.html#BOM_LIST">BOM_LIST</a><span class="py-op">[</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span><span class="py-op">.</span><span class="py-name">lower</span><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">]</span> </span>
1220
<span class="lineno">1130</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">enc</span> <span class="py-op">==</span> <span class="py-string">'utf_16'</span><span class="py-op">:</span> </span>
1221
<span class="lineno">1131</span> <span class="py-line"> <span class="py-comment"># For UTF16 we try big endian and little endian</span> </span>
1222
<span class="lineno">1132</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">for</span> <span class="py-name">BOM</span><span class="py-op">,</span> <span class="py-op">(</span><span class="py-name">encoding</span><span class="py-op">,</span> <span class="py-name">final_encoding</span><span class="py-op">)</span> <span class="py-keyword">in</span> <a title="pythonutils.configobj.BOMS" class="py-name" href="pythonutils.configobj-module.html#BOMS">BOMS</a><span class="py-op">.</span><a title="pythonutils.configobj.Section.items" class="py-name" href="pythonutils.configobj.Section-class.html#items">items</a><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1223
<span class="lineno">1133</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">final_encoding</span><span class="py-op">:</span> </span>
1224
<span class="lineno">1134</span> <span class="py-line"> <span class="py-comment"># skip UTF8</span> </span>
1225
<span class="lineno">1135</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">continue</span> </span>
1226
<span class="lineno">1136</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">infile</span><span class="py-op">.</span><span class="py-name">startswith</span><span class="py-op">(</span><span class="py-name">BOM</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1227
<span class="lineno">1137</span> <span class="py-line"> <span class="py-comment">### BOM discovered</span> </span>
1228
<span class="lineno">1138</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment">##self.BOM = True</span> </span>
1229
<span class="lineno">1139</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># Don't need to remove BOM</span> </span>
1230
<span class="lineno">1140</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">return</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._decode" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_decode">_decode</a><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">encoding</span><span class="py-op">)</span> </span>
1231
<span class="lineno">1141</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1232
<span class="lineno">1142</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># If we get this far, will *probably* raise a DecodeError</span> </span>
1233
<span class="lineno">1143</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># As it doesn't appear to start with a BOM</span> </span>
1234
<span class="lineno">1144</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">return</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._decode" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_decode">_decode</a><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span><span class="py-op">)</span> </span>
1235
<span class="lineno">1145</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1236
<span class="lineno">1146</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># Must be UTF8</span> </span>
1237
<span class="lineno">1147</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">BOM</span> <span class="py-op">=</span> <a title="pythonutils.configobj.BOM_SET" class="py-name" href="pythonutils.configobj-module.html#BOM_SET">BOM_SET</a><span class="py-op">[</span><span class="py-name">enc</span><span class="py-op">]</span> </span>
1238
<span class="lineno">1148</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">line</span><span class="py-op">.</span><span class="py-name">startswith</span><span class="py-op">(</span><span class="py-name">BOM</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1239
<span class="lineno">1149</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._decode" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_decode">_decode</a><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span><span class="py-op">)</span> </span>
1240
<span class="lineno">1150</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1241
<span class="lineno">1151</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">newline</span> <span class="py-op">=</span> <span class="py-name">line</span><span class="py-op">[</span><span class="py-name">len</span><span class="py-op">(</span><span class="py-name">BOM</span><span class="py-op">)</span><span class="py-op">:</span><span class="py-op">]</span> </span>
1242
<span class="lineno">1152</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1243
<span class="lineno">1153</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># BOM removed</span> </span>
1244
<span class="lineno">1154</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <span class="py-op">(</span><span class="py-name">list</span><span class="py-op">,</span> <span class="py-name">tuple</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1245
<span class="lineno">1155</span> <span class="py-line"> <span class="py-name">infile</span><span class="py-op">[</span><span class="py-number">0</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">newline</span> </span>
1246
<span class="lineno">1156</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1247
<span class="lineno">1157</span> <span class="py-line"> <span class="py-name">infile</span> <span class="py-op">=</span> <span class="py-name">newline</span> </span>
1248
<span class="lineno">1158</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">BOM</span> <span class="py-op">=</span> <span class="py-name">True</span> </span>
1249
<span class="lineno">1159</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._decode" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_decode">_decode</a><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span><span class="py-op">)</span> </span>
1250
<span class="lineno">1160</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1251
<span class="lineno">1161</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># No encoding specified - so we need to check for UTF8/UTF16</span> </span>
1252
<span class="lineno">1162</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">for</span> <span class="py-name">BOM</span><span class="py-op">,</span> <span class="py-op">(</span><span class="py-name">encoding</span><span class="py-op">,</span> <span class="py-name">final_encoding</span><span class="py-op">)</span> <span class="py-keyword">in</span> <a title="pythonutils.configobj.BOMS" class="py-name" href="pythonutils.configobj-module.html#BOMS">BOMS</a><span class="py-op">.</span><a title="pythonutils.configobj.Section.items" class="py-name" href="pythonutils.configobj.Section-class.html#items">items</a><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1253
<span class="lineno">1163</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">line</span><span class="py-op">.</span><span class="py-name">startswith</span><span class="py-op">(</span><span class="py-name">BOM</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1254
<span class="lineno">1164</span> <span class="py-line"> <span class="py-keyword">continue</span> </span>
1255
<span class="lineno">1165</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1256
<span class="lineno">1166</span> <span class="py-line"> <span class="py-comment"># BOM discovered</span> </span>
1257
<span class="lineno">1167</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span> <span class="py-op">=</span> <span class="py-name">final_encoding</span> </span>
1258
<span class="lineno">1168</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">final_encoding</span><span class="py-op">:</span> </span>
1259
<span class="lineno">1169</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">BOM</span> <span class="py-op">=</span> <span class="py-name">True</span> </span>
1260
<span class="lineno">1170</span> <span class="py-line"> <span class="py-comment"># UTF8</span> </span>
1261
<span class="lineno">1171</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># remove BOM</span> </span>
1262
<span class="lineno">1172</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">newline</span> <span class="py-op">=</span> <span class="py-name">line</span><span class="py-op">[</span><span class="py-name">len</span><span class="py-op">(</span><span class="py-name">BOM</span><span class="py-op">)</span><span class="py-op">:</span><span class="py-op">]</span> </span>
1263
<span class="lineno">1173</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <span class="py-op">(</span><span class="py-name">list</span><span class="py-op">,</span> <span class="py-name">tuple</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1264
<span class="lineno">1174</span> <span class="py-line"> <span class="py-name">infile</span><span class="py-op">[</span><span class="py-number">0</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">newline</span> </span>
1265
<span class="lineno">1175</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1266
<span class="lineno">1176</span> <span class="py-line"> <span class="py-name">infile</span> <span class="py-op">=</span> <span class="py-name">newline</span> </span>
1267
<span class="lineno">1177</span> <span class="py-line"> <span class="py-comment"># UTF8 - don't decode</span> </span>
1268
<span class="lineno">1178</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">StringTypes</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1269
<span class="lineno">1179</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">infile</span><span class="py-op">.</span><span class="py-name">splitlines</span><span class="py-op">(</span><span class="py-name">True</span><span class="py-op">)</span> </span>
1270
<span class="lineno">1180</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1271
<span class="lineno">1181</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">infile</span> </span>
1272
<span class="lineno">1182</span> <span class="py-line"> <span class="py-comment"># UTF16 - have to decode</span> </span>
1273
<span class="lineno">1183</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">return</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._decode" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_decode">_decode</a><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">encoding</span><span class="py-op">)</span> </span>
1274
<span class="lineno">1184</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1275
<span class="lineno">1185</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># No BOM discovered and no encoding specified, just return</span> </span>
1276
<span class="lineno">1186</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">StringTypes</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1277
<span class="lineno">1187</span> <span class="py-line"> <span class="py-comment"># infile read from a file will be a single string</span> </span>
1278
<span class="lineno">1188</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">return</span> <span class="py-name">infile</span><span class="py-op">.</span><span class="py-name">splitlines</span><span class="py-op">(</span><span class="py-name">True</span><span class="py-op">)</span> </span>
1279
<span class="lineno">1189</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1280
<span class="lineno">1190</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">infile</span> </span>
1281
</div><span class="lineno">1191</span> <span class="py-line"> </span>
1282
<a name="ConfigObj._a_to_u"></a><div id="ConfigObj._a_to_u-def"><span class="lineno">1192</span> <a class="pysrc-toggle" href="#" id="ConfigObj._a_to_u-toggle" onclick="toggle('ConfigObj._a_to_u'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_a_to_u">_a_to_u</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">string</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1283
</div><div id="ConfigObj._a_to_u-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._a_to_u-expanded"><span class="lineno">1193</span> <span class="py-line"> <span class="py-docstring">"""Decode ascii strings to unicode if a self.encoding is specified."""</span> </span>
1284
<span class="lineno">1194</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span><span class="py-op">:</span> </span>
1285
<span class="lineno">1195</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">string</span> </span>
1286
<span class="lineno">1196</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1287
<span class="lineno">1197</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">string</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.decode" class="py-name" href="pythonutils.configobj.Section-class.html#decode">decode</a><span class="py-op">(</span><span class="py-string">'ascii'</span><span class="py-op">)</span> </span>
1288
</div><span class="lineno">1198</span> <span class="py-line"> </span>
1289
<a name="ConfigObj._decode"></a><div id="ConfigObj._decode-def"><span class="lineno">1199</span> <a class="pysrc-toggle" href="#" id="ConfigObj._decode-toggle" onclick="toggle('ConfigObj._decode'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_decode">_decode</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">infile</span><span class="py-op">,</span> <span class="py-param">encoding</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1290
</div><div id="ConfigObj._decode-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._decode-expanded"><span class="lineno">1200</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
1291
<span class="lineno">1201</span> <span class="py-line"><span class="py-docstring"> Decode infile to unicode. Using the specified encoding.</span> </span>
1292
<span class="lineno">1202</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1293
<span class="lineno">1203</span> <span class="py-line"><span class="py-docstring"> if is a string, it also needs converting to a list.</span> </span>
1294
<span class="lineno">1204</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
1295
<span class="lineno">1205</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">StringTypes</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1296
<span class="lineno">1206</span> <span class="py-line"> <span class="py-comment"># can't be unicode</span> </span>
1297
<span class="lineno">1207</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># NOTE: Could raise a ``UnicodeDecodeError``</span> </span>
1298
<span class="lineno">1208</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">return</span> <span class="py-name">infile</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.decode" class="py-name" href="pythonutils.configobj.Section-class.html#decode">decode</a><span class="py-op">(</span><span class="py-name">encoding</span><span class="py-op">)</span><span class="py-op">.</span><span class="py-name">splitlines</span><span class="py-op">(</span><span class="py-name">True</span><span class="py-op">)</span> </span>
1299
<span class="lineno">1209</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">i</span><span class="py-op">,</span> <span class="py-name">line</span> <span class="py-keyword">in</span> <a title="pythonutils.configobj.enumerate" class="py-name" href="pythonutils.configobj-module.html#enumerate">enumerate</a><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1300
<span class="lineno">1210</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">line</span><span class="py-op">,</span> <span class="py-name">unicode</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1301
<span class="lineno">1211</span> <span class="py-line"> <span class="py-comment"># NOTE: The isinstance test here handles mixed lists of unicode/string</span> </span>
1302
<span class="lineno">1212</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># NOTE: But the decode will break on any non-string values</span> </span>
1303
<span class="lineno">1213</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># NOTE: Or could raise a ``UnicodeDecodeError``</span> </span>
1304
<span class="lineno">1214</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">infile</span><span class="py-op">[</span><span class="py-name">i</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">line</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.decode" class="py-name" href="pythonutils.configobj.Section-class.html#decode">decode</a><span class="py-op">(</span><span class="py-name">encoding</span><span class="py-op">)</span> </span>
1305
<span class="lineno">1215</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">infile</span> </span>
1306
</div><span class="lineno">1216</span> <span class="py-line"> </span>
1307
<a name="ConfigObj._decode_element"></a><div id="ConfigObj._decode_element-def"><span class="lineno">1217</span> <a class="pysrc-toggle" href="#" id="ConfigObj._decode_element-toggle" onclick="toggle('ConfigObj._decode_element'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_decode_element">_decode_element</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">line</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1308
</div><div id="ConfigObj._decode_element-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._decode_element-expanded"><span class="lineno">1218</span> <span class="py-line"> <span class="py-docstring">"""Decode element to unicode if necessary."""</span> </span>
1309
<span class="lineno">1219</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span><span class="py-op">:</span> </span>
1310
<span class="lineno">1220</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">line</span> </span>
1311
<span class="lineno">1221</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">line</span><span class="py-op">,</span> <span class="py-name">str</span><span class="py-op">)</span> <span class="py-keyword">and</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">default_encoding</span><span class="py-op">:</span> </span>
1312
<span class="lineno">1222</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">line</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.decode" class="py-name" href="pythonutils.configobj.Section-class.html#decode">decode</a><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">default_encoding</span><span class="py-op">)</span> </span>
1313
<span class="lineno">1223</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">line</span> </span>
1314
</div><span class="lineno">1224</span> <span class="py-line"> </span>
1315
<a name="ConfigObj._str"></a><div id="ConfigObj._str-def"><span class="lineno">1225</span> <a class="pysrc-toggle" href="#" id="ConfigObj._str-toggle" onclick="toggle('ConfigObj._str'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_str">_str</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">value</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1316
</div><div id="ConfigObj._str-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._str-expanded"><span class="lineno">1226</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
1317
<span class="lineno">1227</span> <span class="py-line"><span class="py-docstring"> Used by ``stringify`` within validate, to turn non-string values</span> </span>
1318
<span class="lineno">1228</span> <span class="py-line"><span class="py-docstring"> into strings.</span> </span>
1319
<span class="lineno">1229</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
1320
<span class="lineno">1230</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">,</span> <span class="py-name">StringTypes</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1321
<span class="lineno">1231</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">str</span><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">)</span> </span>
1322
<span class="lineno">1232</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1323
<span class="lineno">1233</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">value</span> </span>
1324
</div><span class="lineno">1234</span> <span class="py-line"> </span>
1325
<a name="ConfigObj._parse"></a><div id="ConfigObj._parse-def"><span class="lineno">1235</span> <a class="pysrc-toggle" href="#" id="ConfigObj._parse-toggle" onclick="toggle('ConfigObj._parse'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_parse">_parse</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">infile</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1326
</div><div id="ConfigObj._parse-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._parse-expanded"><span class="lineno">1236</span> <span class="py-line"> <span class="py-docstring">"""Actually parse the config file."""</span> </span>
1327
<span class="lineno">1237</span> <span class="py-line"> <span class="py-name">temp_list_values</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">list_values</span> </span>
1328
<span class="lineno">1238</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.unrepr" class="py-name" href="pythonutils.configobj-module.html#unrepr">unrepr</a><span class="py-op">:</span> </span>
1329
<span class="lineno">1239</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">list_values</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
1330
<span class="lineno">1240</span> <span class="py-line"> <span class="py-name">comment_list</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
1331
<span class="lineno">1241</span> <span class="py-line"> <span class="py-name">done_start</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
1332
<span class="lineno">1242</span> <span class="py-line"> <span class="py-name">this_section</span> <span class="py-op">=</span> <span class="py-name">self</span> </span>
1333
<span class="lineno">1243</span> <span class="py-line"> <span class="py-name">maxline</span> <span class="py-op">=</span> <span class="py-name">len</span><span class="py-op">(</span><span class="py-name">infile</span><span class="py-op">)</span> <span class="py-op">-</span> <span class="py-number">1</span> </span>
1334
<span class="lineno">1244</span> <span class="py-line"> <span class="py-name">cur_index</span> <span class="py-op">=</span> <span class="py-op">-</span><span class="py-number">1</span> </span>
1335
<span class="lineno">1245</span> <span class="py-line"> <span class="py-name">reset_comment</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
1336
<span class="lineno">1246</span> <span class="py-line"> <span class="py-keyword">while</span> <span class="py-name">cur_index</span> <span class="py-op"><</span> <span class="py-name">maxline</span><span class="py-op">:</span> </span>
1337
<span class="lineno">1247</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">reset_comment</span><span class="py-op">:</span> </span>
1338
<span class="lineno">1248</span> <span class="py-line"> <span class="py-name">comment_list</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
1339
<span class="lineno">1249</span> <span class="py-line"> <span class="py-name">cur_index</span> <span class="py-op">+=</span> <span class="py-number">1</span> </span>
1340
<span class="lineno">1250</span> <span class="py-line"> <span class="py-name">line</span> <span class="py-op">=</span> <span class="py-name">infile</span><span class="py-op">[</span><span class="py-name">cur_index</span><span class="py-op">]</span> </span>
1341
<span class="lineno">1251</span> <span class="py-line"> <span class="py-name">sline</span> <span class="py-op">=</span> <span class="py-name">line</span><span class="py-op">.</span><span class="py-name">strip</span><span class="py-op">(</span><span class="py-op">)</span> </span>
1342
<span class="lineno">1252</span> <span class="py-line"> <span class="py-comment"># do we have anything on the line ?</span> </span>
1343
<span class="lineno">1253</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">sline</span> <span class="py-keyword">or</span> <span class="py-name">sline</span><span class="py-op">.</span><span class="py-name">startswith</span><span class="py-op">(</span><span class="py-string">'#'</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1344
<span class="lineno">1254</span> <span class="py-line"> <span class="py-name">reset_comment</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
1345
<span class="lineno">1255</span> <span class="py-line"> <span class="py-name">comment_list</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-name">line</span><span class="py-op">)</span> </span>
1346
<span class="lineno">1256</span> <span class="py-line"> <span class="py-keyword">continue</span> </span>
1347
<span class="lineno">1257</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">done_start</span><span class="py-op">:</span> </span>
1348
<span class="lineno">1258</span> <span class="py-line"> <span class="py-comment"># preserve initial comment</span> </span>
1349
<span class="lineno">1259</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">initial_comment</span> <span class="py-op">=</span> <span class="py-name">comment_list</span> </span>
1350
<span class="lineno">1260</span> <span class="py-line"> <span class="py-name">comment_list</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
1351
<span class="lineno">1261</span> <span class="py-line"> <span class="py-name">done_start</span> <span class="py-op">=</span> <span class="py-name">True</span> </span>
1352
<span class="lineno">1262</span> <span class="py-line"> <span class="py-name">reset_comment</span> <span class="py-op">=</span> <span class="py-name">True</span> </span>
1353
<span class="lineno">1263</span> <span class="py-line"> <span class="py-comment"># first we check if it's a section marker</span> </span>
1354
<span class="lineno">1264</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">mat</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._sectionmarker" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_sectionmarker">_sectionmarker</a><span class="py-op">.</span><span class="py-name">match</span><span class="py-op">(</span><span class="py-name">line</span><span class="py-op">)</span> </span>
1355
<span class="lineno">1265</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">mat</span> <span class="py-keyword">is</span> <span class="py-keyword">not</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1356
<span class="lineno">1266</span> <span class="py-line"> <span class="py-comment"># is a section line</span> </span>
1357
<span class="lineno">1267</span> <span class="py-line"><span class="py-comment"></span> <span class="py-op">(</span><span class="py-name">indent</span><span class="py-op">,</span> <span class="py-name">sect_open</span><span class="py-op">,</span> <span class="py-name">sect_name</span><span class="py-op">,</span> <span class="py-name">sect_close</span><span class="py-op">,</span> <span class="py-name">comment</span><span class="py-op">)</span> <span class="py-op">=</span> <span class="py-op">(</span> </span>
1358
<span class="lineno">1268</span> <span class="py-line"> <span class="py-name">mat</span><span class="py-op">.</span><span class="py-name">groups</span><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">)</span> </span>
1359
<span class="lineno">1269</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">indent</span> <span class="py-keyword">and</span> <span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">indent_type</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1360
<span class="lineno">1270</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">indent_type</span> <span class="py-op">=</span> <span class="py-name">indent</span><span class="py-op">[</span><span class="py-number">0</span><span class="py-op">]</span> </span>
1361
<span class="lineno">1271</span> <span class="py-line"> <span class="py-name">cur_depth</span> <span class="py-op">=</span> <span class="py-name">sect_open</span><span class="py-op">.</span><span class="py-name">count</span><span class="py-op">(</span><span class="py-string">'['</span><span class="py-op">)</span> </span>
1362
<span class="lineno">1272</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">cur_depth</span> <span class="py-op">!=</span> <span class="py-name">sect_close</span><span class="py-op">.</span><span class="py-name">count</span><span class="py-op">(</span><span class="py-string">']'</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1363
<span class="lineno">1273</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._handle_error" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_error">_handle_error</a><span class="py-op">(</span> </span>
1364
<span class="lineno">1274</span> <span class="py-line"> <span class="py-string">"Cannot compute the section depth at line %s."</span><span class="py-op">,</span> </span>
1365
<span class="lineno">1275</span> <span class="py-line"> <a title="pythonutils.configobj.NestingError" class="py-name" href="pythonutils.configobj.NestingError-class.html">NestingError</a><span class="py-op">,</span> <span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">cur_index</span><span class="py-op">)</span> </span>
1366
<span class="lineno">1276</span> <span class="py-line"> <span class="py-keyword">continue</span> </span>
1367
<span class="lineno">1277</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">cur_depth</span> <span class="py-op"><</span> <span class="py-name">this_section</span><span class="py-op">.</span><span class="py-name">depth</span><span class="py-op">:</span> </span>
1368
<span class="lineno">1278</span> <span class="py-line"> <span class="py-comment"># the new section is dropping back to a previous level</span> </span>
1369
<span class="lineno">1279</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">try</span><span class="py-op">:</span> </span>
1370
<span class="lineno">1280</span> <span class="py-line"> <span class="py-name">parent</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._match_depth" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_match_depth">_match_depth</a><span class="py-op">(</span> </span>
1371
<span class="lineno">1281</span> <span class="py-line"> <span class="py-name">this_section</span><span class="py-op">,</span> </span>
1372
<span class="lineno">1282</span> <span class="py-line"> <span class="py-name">cur_depth</span><span class="py-op">)</span><span class="py-op">.</span><span class="py-name">parent</span> </span>
1373
<span class="lineno">1283</span> <span class="py-line"> <span class="py-keyword">except</span> <span class="py-name">SyntaxError</span><span class="py-op">:</span> </span>
1374
<span class="lineno">1284</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._handle_error" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_error">_handle_error</a><span class="py-op">(</span> </span>
1375
<span class="lineno">1285</span> <span class="py-line"> <span class="py-string">"Cannot compute nesting level at line %s."</span><span class="py-op">,</span> </span>
1376
<span class="lineno">1286</span> <span class="py-line"> <a title="pythonutils.configobj.NestingError" class="py-name" href="pythonutils.configobj.NestingError-class.html">NestingError</a><span class="py-op">,</span> <span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">cur_index</span><span class="py-op">)</span> </span>
1377
<span class="lineno">1287</span> <span class="py-line"> <span class="py-keyword">continue</span> </span>
1378
<span class="lineno">1288</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">cur_depth</span> <span class="py-op">==</span> <span class="py-name">this_section</span><span class="py-op">.</span><span class="py-name">depth</span><span class="py-op">:</span> </span>
1379
<span class="lineno">1289</span> <span class="py-line"> <span class="py-comment"># the new section is a sibling of the current section</span> </span>
1380
<span class="lineno">1290</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">parent</span> <span class="py-op">=</span> <span class="py-name">this_section</span><span class="py-op">.</span><span class="py-name">parent</span> </span>
1381
<span class="lineno">1291</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">cur_depth</span> <span class="py-op">==</span> <span class="py-name">this_section</span><span class="py-op">.</span><span class="py-name">depth</span> <span class="py-op">+</span> <span class="py-number">1</span><span class="py-op">:</span> </span>
1382
<span class="lineno">1292</span> <span class="py-line"> <span class="py-comment"># the new section is a child the current section</span> </span>
1383
<span class="lineno">1293</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">parent</span> <span class="py-op">=</span> <span class="py-name">this_section</span> </span>
1384
<span class="lineno">1294</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1385
<span class="lineno">1295</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._handle_error" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_error">_handle_error</a><span class="py-op">(</span> </span>
1386
<span class="lineno">1296</span> <span class="py-line"> <span class="py-string">"Section too nested at line %s."</span><span class="py-op">,</span> </span>
1387
<span class="lineno">1297</span> <span class="py-line"> <a title="pythonutils.configobj.NestingError" class="py-name" href="pythonutils.configobj.NestingError-class.html">NestingError</a><span class="py-op">,</span> <span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">cur_index</span><span class="py-op">)</span> </span>
1388
<span class="lineno">1298</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1389
<span class="lineno">1299</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">sect_name</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._unquote" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_unquote">_unquote</a><span class="py-op">(</span><span class="py-name">sect_name</span><span class="py-op">)</span> </span>
1390
<span class="lineno">1300</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">parent</span><span class="py-op">.</span><span class="py-name">has_key</span><span class="py-op">(</span><span class="py-name">sect_name</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1391
<span class="lineno">1301</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._handle_error" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_error">_handle_error</a><span class="py-op">(</span> </span>
1392
<span class="lineno">1302</span> <span class="py-line"> <span class="py-string">'Duplicate section name at line %s.'</span><span class="py-op">,</span> </span>
1393
<span class="lineno">1303</span> <span class="py-line"> <a title="pythonutils.configobj.DuplicateError" class="py-name" href="pythonutils.configobj.DuplicateError-class.html">DuplicateError</a><span class="py-op">,</span> <span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">cur_index</span><span class="py-op">)</span> </span>
1394
<span class="lineno">1304</span> <span class="py-line"> <span class="py-keyword">continue</span> </span>
1395
<span class="lineno">1305</span> <span class="py-line"> <span class="py-comment"># create the new section</span> </span>
1396
<span class="lineno">1306</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">this_section</span> <span class="py-op">=</span> <a title="pythonutils.configobj.Section" class="py-name" href="pythonutils.configobj.Section-class.html">Section</a><span class="py-op">(</span> </span>
1397
<span class="lineno">1307</span> <span class="py-line"> <span class="py-name">parent</span><span class="py-op">,</span> </span>
1398
<span class="lineno">1308</span> <span class="py-line"> <span class="py-name">cur_depth</span><span class="py-op">,</span> </span>
1399
<span class="lineno">1309</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">,</span> </span>
1400
<span class="lineno">1310</span> <span class="py-line"> <span class="py-name">name</span><span class="py-op">=</span><span class="py-name">sect_name</span><span class="py-op">)</span> </span>
1401
<span class="lineno">1311</span> <span class="py-line"> <span class="py-name">parent</span><span class="py-op">[</span><span class="py-name">sect_name</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">this_section</span> </span>
1402
<span class="lineno">1312</span> <span class="py-line"> <span class="py-name">parent</span><span class="py-op">.</span><span class="py-name">inline_comments</span><span class="py-op">[</span><span class="py-name">sect_name</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">comment</span> </span>
1403
<span class="lineno">1313</span> <span class="py-line"> <span class="py-name">parent</span><span class="py-op">.</span><span class="py-name">comments</span><span class="py-op">[</span><span class="py-name">sect_name</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">comment_list</span> </span>
1404
<span class="lineno">1314</span> <span class="py-line"> <span class="py-keyword">continue</span> </span>
1405
<span class="lineno">1315</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1406
<span class="lineno">1316</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># it's not a section marker,</span> </span>
1407
<span class="lineno">1317</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># so it should be a valid ``key = value`` line</span> </span>
1408
<span class="lineno">1318</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">mat</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._keyword" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_keyword">_keyword</a><span class="py-op">.</span><span class="py-name">match</span><span class="py-op">(</span><span class="py-name">line</span><span class="py-op">)</span> </span>
1409
<span class="lineno">1319</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">mat</span> <span class="py-keyword">is</span> <span class="py-keyword">not</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1410
<span class="lineno">1320</span> <span class="py-line"> <span class="py-comment"># is a keyword value</span> </span>
1411
<span class="lineno">1321</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># value will include any inline comment</span> </span>
1412
<span class="lineno">1322</span> <span class="py-line"><span class="py-comment"></span> <span class="py-op">(</span><span class="py-name">indent</span><span class="py-op">,</span> <span class="py-name">key</span><span class="py-op">,</span> <span class="py-name">value</span><span class="py-op">)</span> <span class="py-op">=</span> <span class="py-name">mat</span><span class="py-op">.</span><span class="py-name">groups</span><span class="py-op">(</span><span class="py-op">)</span> </span>
1413
<span class="lineno">1323</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">indent</span> <span class="py-keyword">and</span> <span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">indent_type</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1414
<span class="lineno">1324</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">indent_type</span> <span class="py-op">=</span> <span class="py-name">indent</span><span class="py-op">[</span><span class="py-number">0</span><span class="py-op">]</span> </span>
1415
<span class="lineno">1325</span> <span class="py-line"> <span class="py-comment"># check for a multiline value</span> </span>
1416
<span class="lineno">1326</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">value</span><span class="py-op">[</span><span class="py-op">:</span><span class="py-number">3</span><span class="py-op">]</span> <span class="py-keyword">in</span> <span class="py-op">[</span><span class="py-string">'"""'</span><span class="py-op">,</span> <span class="py-string">"'''"</span><span class="py-op">]</span><span class="py-op">:</span> </span>
1417
<span class="lineno">1327</span> <span class="py-line"> <span class="py-keyword">try</span><span class="py-op">:</span> </span>
1418
<span class="lineno">1328</span> <span class="py-line"> <span class="py-op">(</span><span class="py-name">value</span><span class="py-op">,</span> <span class="py-name">comment</span><span class="py-op">,</span> <span class="py-name">cur_index</span><span class="py-op">)</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._multiline" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_multiline">_multiline</a><span class="py-op">(</span> </span>
1419
<span class="lineno">1329</span> <span class="py-line"> <span class="py-name">value</span><span class="py-op">,</span> <span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">cur_index</span><span class="py-op">,</span> <span class="py-name">maxline</span><span class="py-op">)</span> </span>
1420
<span class="lineno">1330</span> <span class="py-line"> <span class="py-keyword">except</span> <span class="py-name">SyntaxError</span><span class="py-op">:</span> </span>
1421
<span class="lineno">1331</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._handle_error" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_error">_handle_error</a><span class="py-op">(</span> </span>
1422
<span class="lineno">1332</span> <span class="py-line"> <span class="py-string">'Parse error in value at line %s.'</span><span class="py-op">,</span> </span>
1423
<span class="lineno">1333</span> <span class="py-line"> <a title="pythonutils.configobj.ParseError" class="py-name" href="pythonutils.configobj.ParseError-class.html">ParseError</a><span class="py-op">,</span> <span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">cur_index</span><span class="py-op">)</span> </span>
1424
<span class="lineno">1334</span> <span class="py-line"> <span class="py-keyword">continue</span> </span>
1425
<span class="lineno">1335</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1426
<span class="lineno">1336</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.unrepr" class="py-name" href="pythonutils.configobj-module.html#unrepr">unrepr</a><span class="py-op">:</span> </span>
1427
<span class="lineno">1337</span> <span class="py-line"> <span class="py-name">value</span> <span class="py-op">=</span> <a title="pythonutils.configobj.unrepr" class="py-name" href="pythonutils.configobj-module.html#unrepr">unrepr</a><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">)</span> </span>
1428
<span class="lineno">1338</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1429
<span class="lineno">1339</span> <span class="py-line"> <span class="py-comment"># extract comment and lists</span> </span>
1430
<span class="lineno">1340</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">try</span><span class="py-op">:</span> </span>
1431
<span class="lineno">1341</span> <span class="py-line"> <span class="py-op">(</span><span class="py-name">value</span><span class="py-op">,</span> <span class="py-name">comment</span><span class="py-op">)</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._handle_value" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_value">_handle_value</a><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">)</span> </span>
1432
<span class="lineno">1342</span> <span class="py-line"> <span class="py-keyword">except</span> <span class="py-name">SyntaxError</span><span class="py-op">:</span> </span>
1433
<span class="lineno">1343</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._handle_error" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_error">_handle_error</a><span class="py-op">(</span> </span>
1434
<span class="lineno">1344</span> <span class="py-line"> <span class="py-string">'Parse error in value at line %s.'</span><span class="py-op">,</span> </span>
1435
<span class="lineno">1345</span> <span class="py-line"> <a title="pythonutils.configobj.ParseError" class="py-name" href="pythonutils.configobj.ParseError-class.html">ParseError</a><span class="py-op">,</span> <span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">cur_index</span><span class="py-op">)</span> </span>
1436
<span class="lineno">1346</span> <span class="py-line"> <span class="py-keyword">continue</span> </span>
1437
<span class="lineno">1347</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1438
<span class="lineno">1348</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">key</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._unquote" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_unquote">_unquote</a><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span> </span>
1439
<span class="lineno">1349</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">this_section</span><span class="py-op">.</span><span class="py-name">has_key</span><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1440
<span class="lineno">1350</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._handle_error" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_error">_handle_error</a><span class="py-op">(</span> </span>
1441
<span class="lineno">1351</span> <span class="py-line"> <span class="py-string">'Duplicate keyword name at line %s.'</span><span class="py-op">,</span> </span>
1442
<span class="lineno">1352</span> <span class="py-line"> <a title="pythonutils.configobj.DuplicateError" class="py-name" href="pythonutils.configobj.DuplicateError-class.html">DuplicateError</a><span class="py-op">,</span> <span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">cur_index</span><span class="py-op">)</span> </span>
1443
<span class="lineno">1353</span> <span class="py-line"> <span class="py-keyword">continue</span> </span>
1444
<span class="lineno">1354</span> <span class="py-line"> <span class="py-comment"># add the key.</span> </span>
1445
<span class="lineno">1355</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># we set unrepr because if we have got this far we will never</span> </span>
1446
<span class="lineno">1356</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># be creating a new section</span> </span>
1447
<span class="lineno">1357</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">this_section</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.__setitem__" class="py-name" href="pythonutils.configobj.Section-class.html#__setitem__">__setitem__</a><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">,</span> <span class="py-name">value</span><span class="py-op">,</span> <a title="pythonutils.configobj.unrepr" class="py-name" href="pythonutils.configobj-module.html#unrepr">unrepr</a><span class="py-op">=</span><span class="py-name">True</span><span class="py-op">)</span> </span>
1448
<span class="lineno">1358</span> <span class="py-line"> <span class="py-name">this_section</span><span class="py-op">.</span><span class="py-name">inline_comments</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">comment</span> </span>
1449
<span class="lineno">1359</span> <span class="py-line"> <span class="py-name">this_section</span><span class="py-op">.</span><span class="py-name">comments</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">comment_list</span> </span>
1450
<span class="lineno">1360</span> <span class="py-line"> <span class="py-keyword">continue</span> </span>
1451
<span class="lineno">1361</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1452
<span class="lineno">1362</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># it neither matched as a keyword</span> </span>
1453
<span class="lineno">1363</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># or a section marker</span> </span>
1454
<span class="lineno">1364</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._handle_error" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_error">_handle_error</a><span class="py-op">(</span> </span>
1455
<span class="lineno">1365</span> <span class="py-line"> <span class="py-string">'Invalid line at line "%s".'</span><span class="py-op">,</span> </span>
1456
<span class="lineno">1366</span> <span class="py-line"> <a title="pythonutils.configobj.ParseError" class="py-name" href="pythonutils.configobj.ParseError-class.html">ParseError</a><span class="py-op">,</span> <span class="py-name">infile</span><span class="py-op">,</span> <span class="py-name">cur_index</span><span class="py-op">)</span> </span>
1457
<span class="lineno">1367</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">indent_type</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1458
<span class="lineno">1368</span> <span class="py-line"> <span class="py-comment"># no indentation used, set the type accordingly</span> </span>
1459
<span class="lineno">1369</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">indent_type</span> <span class="py-op">=</span> <span class="py-string">''</span> </span>
1460
<span class="lineno">1370</span> <span class="py-line"> <span class="py-comment"># preserve the final comment</span> </span>
1461
<span class="lineno">1371</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">self</span> <span class="py-keyword">and</span> <span class="py-keyword">not</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">initial_comment</span><span class="py-op">:</span> </span>
1462
<span class="lineno">1372</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">initial_comment</span> <span class="py-op">=</span> <span class="py-name">comment_list</span> </span>
1463
<span class="lineno">1373</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-keyword">not</span> <span class="py-name">reset_comment</span><span class="py-op">:</span> </span>
1464
<span class="lineno">1374</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">final_comment</span> <span class="py-op">=</span> <span class="py-name">comment_list</span> </span>
1465
<span class="lineno">1375</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">list_values</span> <span class="py-op">=</span> <span class="py-name">temp_list_values</span> </span>
1466
</div><span class="lineno">1376</span> <span class="py-line"> </span>
1467
<a name="ConfigObj._match_depth"></a><div id="ConfigObj._match_depth-def"><span class="lineno">1377</span> <a class="pysrc-toggle" href="#" id="ConfigObj._match_depth-toggle" onclick="toggle('ConfigObj._match_depth'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_match_depth">_match_depth</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">sect</span><span class="py-op">,</span> <span class="py-param">depth</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1468
</div><div id="ConfigObj._match_depth-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._match_depth-expanded"><span class="lineno">1378</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
1469
<span class="lineno">1379</span> <span class="py-line"><span class="py-docstring"> Given a section and a depth level, walk back through the sections</span> </span>
1470
<span class="lineno">1380</span> <span class="py-line"><span class="py-docstring"> parents to see if the depth level matches a previous section.</span> </span>
1471
<span class="lineno">1381</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1472
<span class="lineno">1382</span> <span class="py-line"><span class="py-docstring"> Return a reference to the right section,</span> </span>
1473
<span class="lineno">1383</span> <span class="py-line"><span class="py-docstring"> or raise a SyntaxError.</span> </span>
1474
<span class="lineno">1384</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
1475
<span class="lineno">1385</span> <span class="py-line"> <span class="py-keyword">while</span> <span class="py-name">depth</span> <span class="py-op"><</span> <span class="py-name">sect</span><span class="py-op">.</span><span class="py-name">depth</span><span class="py-op">:</span> </span>
1476
<span class="lineno">1386</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">sect</span> <span class="py-keyword">is</span> <span class="py-name">sect</span><span class="py-op">.</span><span class="py-name">parent</span><span class="py-op">:</span> </span>
1477
<span class="lineno">1387</span> <span class="py-line"> <span class="py-comment"># we've reached the top level already</span> </span>
1478
<span class="lineno">1388</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">raise</span> <span class="py-name">SyntaxError</span> </span>
1479
<span class="lineno">1389</span> <span class="py-line"> <span class="py-name">sect</span> <span class="py-op">=</span> <span class="py-name">sect</span><span class="py-op">.</span><span class="py-name">parent</span> </span>
1480
<span class="lineno">1390</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">sect</span><span class="py-op">.</span><span class="py-name">depth</span> <span class="py-op">==</span> <span class="py-name">depth</span><span class="py-op">:</span> </span>
1481
<span class="lineno">1391</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">sect</span> </span>
1482
<span class="lineno">1392</span> <span class="py-line"> <span class="py-comment"># shouldn't get here</span> </span>
1483
<span class="lineno">1393</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">raise</span> <span class="py-name">SyntaxError</span> </span>
1484
</div><span class="lineno">1394</span> <span class="py-line"> </span>
1485
<a name="ConfigObj._handle_error"></a><div id="ConfigObj._handle_error-def"><span class="lineno">1395</span> <a class="pysrc-toggle" href="#" id="ConfigObj._handle_error-toggle" onclick="toggle('ConfigObj._handle_error'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_error">_handle_error</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">text</span><span class="py-op">,</span> <span class="py-param">ErrorClass</span><span class="py-op">,</span> <span class="py-param">infile</span><span class="py-op">,</span> <span class="py-param">cur_index</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1486
</div><div id="ConfigObj._handle_error-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._handle_error-expanded"><span class="lineno">1396</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
1487
<span class="lineno">1397</span> <span class="py-line"><span class="py-docstring"> Handle an error according to the error settings.</span> </span>
1488
<span class="lineno">1398</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1489
<span class="lineno">1399</span> <span class="py-line"><span class="py-docstring"> Either raise the error or store it.</span> </span>
1490
<span class="lineno">1400</span> <span class="py-line"><span class="py-docstring"> The error will have occured at ``cur_index``</span> </span>
1491
<span class="lineno">1401</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
1492
<span class="lineno">1402</span> <span class="py-line"> <span class="py-name">line</span> <span class="py-op">=</span> <span class="py-name">infile</span><span class="py-op">[</span><span class="py-name">cur_index</span><span class="py-op">]</span> </span>
1493
<span class="lineno">1403</span> <span class="py-line"> <span class="py-name">message</span> <span class="py-op">=</span> <span class="py-name">text</span> <span class="py-op">%</span> <span class="py-name">cur_index</span> </span>
1494
<span class="lineno">1404</span> <span class="py-line"> <span class="py-name">error</span> <span class="py-op">=</span> <span class="py-name">ErrorClass</span><span class="py-op">(</span><span class="py-name">message</span><span class="py-op">,</span> <span class="py-name">cur_index</span><span class="py-op">,</span> <span class="py-name">line</span><span class="py-op">)</span> </span>
1495
<span class="lineno">1405</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">raise_errors</span><span class="py-op">:</span> </span>
1496
<span class="lineno">1406</span> <span class="py-line"> <span class="py-comment"># raise the error - parsing stops here</span> </span>
1497
<span class="lineno">1407</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">raise</span> <span class="py-name">error</span> </span>
1498
<span class="lineno">1408</span> <span class="py-line"> <span class="py-comment"># store the error</span> </span>
1499
<span class="lineno">1409</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># reraise when parsing has finished</span> </span>
1500
<span class="lineno">1410</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">_errors</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-name">error</span><span class="py-op">)</span> </span>
1501
</div><span class="lineno">1411</span> <span class="py-line"> </span>
1502
<a name="ConfigObj._unquote"></a><div id="ConfigObj._unquote-def"><span class="lineno">1412</span> <a class="pysrc-toggle" href="#" id="ConfigObj._unquote-toggle" onclick="toggle('ConfigObj._unquote'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_unquote">_unquote</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">value</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1503
</div><div id="ConfigObj._unquote-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._unquote-expanded"><span class="lineno">1413</span> <span class="py-line"> <span class="py-docstring">"""Return an unquoted version of a value"""</span> </span>
1504
<span class="lineno">1414</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-op">(</span><span class="py-name">value</span><span class="py-op">[</span><span class="py-number">0</span><span class="py-op">]</span> <span class="py-op">==</span> <span class="py-name">value</span><span class="py-op">[</span><span class="py-op">-</span><span class="py-number">1</span><span class="py-op">]</span><span class="py-op">)</span> <span class="py-keyword">and</span> <span class="py-op">(</span><span class="py-name">value</span><span class="py-op">[</span><span class="py-number">0</span><span class="py-op">]</span> <span class="py-keyword">in</span> <span class="py-op">(</span><span class="py-string">'"'</span><span class="py-op">,</span> <span class="py-string">"'"</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1505
<span class="lineno">1415</span> <span class="py-line"> <span class="py-name">value</span> <span class="py-op">=</span> <span class="py-name">value</span><span class="py-op">[</span><span class="py-number">1</span><span class="py-op">:</span><span class="py-op">-</span><span class="py-number">1</span><span class="py-op">]</span> </span>
1506
<span class="lineno">1416</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">value</span> </span>
1507
</div><span class="lineno">1417</span> <span class="py-line"> </span>
1508
<a name="ConfigObj._quote"></a><div id="ConfigObj._quote-def"><span class="lineno">1418</span> <a class="pysrc-toggle" href="#" id="ConfigObj._quote-toggle" onclick="toggle('ConfigObj._quote'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_quote">_quote</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">value</span><span class="py-op">,</span> <span class="py-param">multiline</span><span class="py-op">=</span><span class="py-name">True</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1509
</div><div id="ConfigObj._quote-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._quote-expanded"><span class="lineno">1419</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
1510
<span class="lineno">1420</span> <span class="py-line"><span class="py-docstring"> Return a safely quoted version of a value.</span> </span>
1511
<span class="lineno">1421</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1512
<span class="lineno">1422</span> <span class="py-line"><span class="py-docstring"> Raise a ConfigObjError if the value cannot be safely quoted.</span> </span>
1513
<span class="lineno">1423</span> <span class="py-line"><span class="py-docstring"> If multiline is ``True`` (default) then use triple quotes</span> </span>
1514
<span class="lineno">1424</span> <span class="py-line"><span class="py-docstring"> if necessary.</span> </span>
1515
<span class="lineno">1425</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1516
<span class="lineno">1426</span> <span class="py-line"><span class="py-docstring"> Don't quote values that don't need it.</span> </span>
1517
<span class="lineno">1427</span> <span class="py-line"><span class="py-docstring"> Recursively quote members of a list and return a comma joined list.</span> </span>
1518
<span class="lineno">1428</span> <span class="py-line"><span class="py-docstring"> Multiline is ``False`` for lists.</span> </span>
1519
<span class="lineno">1429</span> <span class="py-line"><span class="py-docstring"> Obey list syntax for empty and single member lists.</span> </span>
1520
<span class="lineno">1430</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1521
<span class="lineno">1431</span> <span class="py-line"><span class="py-docstring"> If ``list_values=False`` then the value is only quoted if it contains</span> </span>
1522
<span class="lineno">1432</span> <span class="py-line"><span class="py-docstring"> a ``\n`` (is multiline).</span> </span>
1523
<span class="lineno">1433</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1524
<span class="lineno">1434</span> <span class="py-line"><span class="py-docstring"> If ``write_empty_values`` is set, and the value is an empty string, it</span> </span>
1525
<span class="lineno">1435</span> <span class="py-line"><span class="py-docstring"> won't be quoted.</span> </span>
1526
<span class="lineno">1436</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
1527
<span class="lineno">1437</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">multiline</span> <span class="py-keyword">and</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">write_empty_values</span> <span class="py-keyword">and</span> <span class="py-name">value</span> <span class="py-op">==</span> <span class="py-string">''</span><span class="py-op">:</span> </span>
1528
<span class="lineno">1438</span> <span class="py-line"> <span class="py-comment"># Only if multiline is set, so that it is used for values not</span> </span>
1529
<span class="lineno">1439</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># keys, and not values that are part of a list</span> </span>
1530
<span class="lineno">1440</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">return</span> <span class="py-string">''</span> </span>
1531
<span class="lineno">1441</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">multiline</span> <span class="py-keyword">and</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">,</span> <span class="py-op">(</span><span class="py-name">list</span><span class="py-op">,</span> <span class="py-name">tuple</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1532
<span class="lineno">1442</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">value</span><span class="py-op">:</span> </span>
1533
<span class="lineno">1443</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-string">','</span> </span>
1534
<span class="lineno">1444</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">len</span><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">)</span> <span class="py-op">==</span> <span class="py-number">1</span><span class="py-op">:</span> </span>
1535
<span class="lineno">1445</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._quote" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_quote">_quote</a><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">[</span><span class="py-number">0</span><span class="py-op">]</span><span class="py-op">,</span> <span class="py-name">multiline</span><span class="py-op">=</span><span class="py-name">False</span><span class="py-op">)</span> <span class="py-op">+</span> <span class="py-string">','</span> </span>
1536
<span class="lineno">1446</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-string">', '</span><span class="py-op">.</span><span class="py-name">join</span><span class="py-op">(</span><span class="py-op">[</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._quote" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_quote">_quote</a><span class="py-op">(</span><span class="py-name">val</span><span class="py-op">,</span> <span class="py-name">multiline</span><span class="py-op">=</span><span class="py-name">False</span><span class="py-op">)</span> </span>
1537
<span class="lineno">1447</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">val</span> <span class="py-keyword">in</span> <span class="py-name">value</span><span class="py-op">]</span><span class="py-op">)</span> </span>
1538
<span class="lineno">1448</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">,</span> <span class="py-name">StringTypes</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1539
<span class="lineno">1449</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">stringify</span><span class="py-op">:</span> </span>
1540
<span class="lineno">1450</span> <span class="py-line"> <span class="py-name">value</span> <span class="py-op">=</span> <span class="py-name">str</span><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">)</span> </span>
1541
<span class="lineno">1451</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1542
<span class="lineno">1452</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">TypeError</span><span class="py-op">,</span> <span class="py-string">'Value "%s" is not a string.'</span> <span class="py-op">%</span> <span class="py-name">value</span> </span>
1543
<span class="lineno">1453</span> <span class="py-line"> <span class="py-name">squot</span> <span class="py-op">=</span> <span class="py-string">"'%s'"</span> </span>
1544
<span class="lineno">1454</span> <span class="py-line"> <span class="py-name">dquot</span> <span class="py-op">=</span> <span class="py-string">'"%s"'</span> </span>
1545
<span class="lineno">1455</span> <span class="py-line"> <span class="py-name">noquot</span> <span class="py-op">=</span> <span class="py-string">"%s"</span> </span>
1546
<span class="lineno">1456</span> <span class="py-line"> <span class="py-name">wspace_plus</span> <span class="py-op">=</span> <span class="py-string">' \r\t\n\v\t\'"'</span> </span>
1547
<span class="lineno">1457</span> <span class="py-line"> <span class="py-name">tsquot</span> <span class="py-op">=</span> <span class="py-string">'"""%s"""'</span> </span>
1548
<span class="lineno">1458</span> <span class="py-line"> <span class="py-name">tdquot</span> <span class="py-op">=</span> <span class="py-string">"'''%s'''"</span> </span>
1549
<span class="lineno">1459</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">value</span><span class="py-op">:</span> </span>
1550
<span class="lineno">1460</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-string">'""'</span> </span>
1551
<span class="lineno">1461</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-op">(</span><span class="py-keyword">not</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">list_values</span> <span class="py-keyword">and</span> <span class="py-string">'\n'</span> <span class="py-keyword">not</span> <span class="py-keyword">in</span> <span class="py-name">value</span><span class="py-op">)</span> <span class="py-keyword">or</span> <span class="py-keyword">not</span> <span class="py-op">(</span><span class="py-name">multiline</span> <span class="py-keyword">and</span> </span>
1552
<span class="lineno">1462</span> <span class="py-line"> <span class="py-op">(</span><span class="py-op">(</span><span class="py-op">(</span><span class="py-string">"'"</span> <span class="py-keyword">in</span> <span class="py-name">value</span><span class="py-op">)</span> <span class="py-keyword">and</span> <span class="py-op">(</span><span class="py-string">'"'</span> <span class="py-keyword">in</span> <span class="py-name">value</span><span class="py-op">)</span><span class="py-op">)</span> <span class="py-keyword">or</span> <span class="py-op">(</span><span class="py-string">'\n'</span> <span class="py-keyword">in</span> <span class="py-name">value</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1553
<span class="lineno">1463</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">list_values</span><span class="py-op">:</span> </span>
1554
<span class="lineno">1464</span> <span class="py-line"> <span class="py-comment"># we don't quote if ``list_values=False``</span> </span>
1555
<span class="lineno">1465</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">quot</span> <span class="py-op">=</span> <span class="py-name">noquot</span> </span>
1556
<span class="lineno">1466</span> <span class="py-line"> <span class="py-comment"># for normal values either single or double quotes will do</span> </span>
1557
<span class="lineno">1467</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">elif</span> <span class="py-string">'\n'</span> <span class="py-keyword">in</span> <span class="py-name">value</span><span class="py-op">:</span> </span>
1558
<span class="lineno">1468</span> <span class="py-line"> <span class="py-comment"># will only happen if multiline is off - e.g. '\n' in key</span> </span>
1559
<span class="lineno">1469</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">raise</span> <a title="pythonutils.configobj.ConfigObjError" class="py-name" href="pythonutils.configobj.ConfigObjError-class.html">ConfigObjError</a><span class="py-op">,</span> <span class="py-op">(</span><span class="py-string">'Value "%s" cannot be safely quoted.'</span> <span class="py-op">%</span> </span>
1560
<span class="lineno">1470</span> <span class="py-line"> <span class="py-name">value</span><span class="py-op">)</span> </span>
1561
<span class="lineno">1471</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-op">(</span><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">[</span><span class="py-number">0</span><span class="py-op">]</span> <span class="py-keyword">not</span> <span class="py-keyword">in</span> <span class="py-name">wspace_plus</span><span class="py-op">)</span> <span class="py-keyword">and</span> </span>
1562
<span class="lineno">1472</span> <span class="py-line"> <span class="py-op">(</span><span class="py-name">value</span><span class="py-op">[</span><span class="py-op">-</span><span class="py-number">1</span><span class="py-op">]</span> <span class="py-keyword">not</span> <span class="py-keyword">in</span> <span class="py-name">wspace_plus</span><span class="py-op">)</span> <span class="py-keyword">and</span> </span>
1563
<span class="lineno">1473</span> <span class="py-line"> <span class="py-op">(</span><span class="py-string">','</span> <span class="py-keyword">not</span> <span class="py-keyword">in</span> <span class="py-name">value</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1564
<span class="lineno">1474</span> <span class="py-line"> <span class="py-name">quot</span> <span class="py-op">=</span> <span class="py-name">noquot</span> </span>
1565
<span class="lineno">1475</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1566
<span class="lineno">1476</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-op">(</span><span class="py-string">"'"</span> <span class="py-keyword">in</span> <span class="py-name">value</span><span class="py-op">)</span> <span class="py-keyword">and</span> <span class="py-op">(</span><span class="py-string">'"'</span> <span class="py-keyword">in</span> <span class="py-name">value</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1567
<span class="lineno">1477</span> <span class="py-line"> <span class="py-keyword">raise</span> <a title="pythonutils.configobj.ConfigObjError" class="py-name" href="pythonutils.configobj.ConfigObjError-class.html">ConfigObjError</a><span class="py-op">,</span> <span class="py-op">(</span> </span>
1568
<span class="lineno">1478</span> <span class="py-line"> <span class="py-string">'Value "%s" cannot be safely quoted.'</span> <span class="py-op">%</span> <span class="py-name">value</span><span class="py-op">)</span> </span>
1569
<span class="lineno">1479</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-string">'"'</span> <span class="py-keyword">in</span> <span class="py-name">value</span><span class="py-op">:</span> </span>
1570
<span class="lineno">1480</span> <span class="py-line"> <span class="py-name">quot</span> <span class="py-op">=</span> <span class="py-name">squot</span> </span>
1571
<span class="lineno">1481</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1572
<span class="lineno">1482</span> <span class="py-line"> <span class="py-name">quot</span> <span class="py-op">=</span> <span class="py-name">dquot</span> </span>
1573
<span class="lineno">1483</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1574
<span class="lineno">1484</span> <span class="py-line"> <span class="py-comment"># if value has '\n' or "'" *and* '"', it will need triple quotes</span> </span>
1575
<span class="lineno">1485</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-op">(</span><span class="py-name">value</span><span class="py-op">.</span><span class="py-name">find</span><span class="py-op">(</span><span class="py-string">'"""'</span><span class="py-op">)</span> <span class="py-op">!=</span> <span class="py-op">-</span><span class="py-number">1</span><span class="py-op">)</span> <span class="py-keyword">and</span> <span class="py-op">(</span><span class="py-name">value</span><span class="py-op">.</span><span class="py-name">find</span><span class="py-op">(</span><span class="py-string">"'''"</span><span class="py-op">)</span> <span class="py-op">!=</span> <span class="py-op">-</span><span class="py-number">1</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1576
<span class="lineno">1486</span> <span class="py-line"> <span class="py-keyword">raise</span> <a title="pythonutils.configobj.ConfigObjError" class="py-name" href="pythonutils.configobj.ConfigObjError-class.html">ConfigObjError</a><span class="py-op">,</span> <span class="py-op">(</span> </span>
1577
<span class="lineno">1487</span> <span class="py-line"> <span class="py-string">'Value "%s" cannot be safely quoted.'</span> <span class="py-op">%</span> <span class="py-name">value</span><span class="py-op">)</span> </span>
1578
<span class="lineno">1488</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">value</span><span class="py-op">.</span><span class="py-name">find</span><span class="py-op">(</span><span class="py-string">'"""'</span><span class="py-op">)</span> <span class="py-op">==</span> <span class="py-op">-</span><span class="py-number">1</span><span class="py-op">:</span> </span>
1579
<span class="lineno">1489</span> <span class="py-line"> <span class="py-name">quot</span> <span class="py-op">=</span> <span class="py-name">tdquot</span> </span>
1580
<span class="lineno">1490</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1581
<span class="lineno">1491</span> <span class="py-line"> <span class="py-name">quot</span> <span class="py-op">=</span> <span class="py-name">tsquot</span> </span>
1582
<span class="lineno">1492</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">quot</span> <span class="py-op">%</span> <span class="py-name">value</span> </span>
1583
</div><span class="lineno">1493</span> <span class="py-line"> </span>
1584
<a name="ConfigObj._handle_value"></a><div id="ConfigObj._handle_value-def"><span class="lineno">1494</span> <a class="pysrc-toggle" href="#" id="ConfigObj._handle_value-toggle" onclick="toggle('ConfigObj._handle_value'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_value">_handle_value</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">value</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1585
</div><div id="ConfigObj._handle_value-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._handle_value-expanded"><span class="lineno">1495</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
1586
<span class="lineno">1496</span> <span class="py-line"><span class="py-docstring"> Given a value string, unquote, remove comment,</span> </span>
1587
<span class="lineno">1497</span> <span class="py-line"><span class="py-docstring"> handle lists. (including empty and single member lists)</span> </span>
1588
<span class="lineno">1498</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
1589
<span class="lineno">1499</span> <span class="py-line"> <span class="py-comment"># do we look for lists in values ?</span> </span>
1590
<span class="lineno">1500</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">list_values</span><span class="py-op">:</span> </span>
1591
<span class="lineno">1501</span> <span class="py-line"> <span class="py-name">mat</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._nolistvalue" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_nolistvalue">_nolistvalue</a><span class="py-op">.</span><span class="py-name">match</span><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">)</span> </span>
1592
<span class="lineno">1502</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">mat</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1593
<span class="lineno">1503</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">SyntaxError</span> </span>
1594
<span class="lineno">1504</span> <span class="py-line"> <span class="py-op">(</span><span class="py-name">value</span><span class="py-op">,</span> <span class="py-name">comment</span><span class="py-op">)</span> <span class="py-op">=</span> <span class="py-name">mat</span><span class="py-op">.</span><span class="py-name">groups</span><span class="py-op">(</span><span class="py-op">)</span> </span>
1595
<span class="lineno">1505</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.unrepr" class="py-name" href="pythonutils.configobj-module.html#unrepr">unrepr</a><span class="py-op">:</span> </span>
1596
<span class="lineno">1506</span> <span class="py-line"> <span class="py-comment"># NOTE: we don't unquote here</span> </span>
1597
<span class="lineno">1507</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">return</span> <span class="py-op">(</span><span class="py-name">value</span><span class="py-op">,</span> <span class="py-name">comment</span><span class="py-op">)</span> </span>
1598
<span class="lineno">1508</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1599
<span class="lineno">1509</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-op">(</span><a title="pythonutils.configobj.unrepr" class="py-name" href="pythonutils.configobj-module.html#unrepr">unrepr</a><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">)</span><span class="py-op">,</span> <span class="py-name">comment</span><span class="py-op">)</span> </span>
1600
<span class="lineno">1510</span> <span class="py-line"> <span class="py-name">mat</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._valueexp" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_valueexp">_valueexp</a><span class="py-op">.</span><span class="py-name">match</span><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">)</span> </span>
1601
<span class="lineno">1511</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">mat</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1602
<span class="lineno">1512</span> <span class="py-line"> <span class="py-comment"># the value is badly constructed, probably badly quoted,</span> </span>
1603
<span class="lineno">1513</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># or an invalid list</span> </span>
1604
<span class="lineno">1514</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">raise</span> <span class="py-name">SyntaxError</span> </span>
1605
<span class="lineno">1515</span> <span class="py-line"> <span class="py-op">(</span><span class="py-name">list_values</span><span class="py-op">,</span> <span class="py-name">single</span><span class="py-op">,</span> <span class="py-name">empty_list</span><span class="py-op">,</span> <span class="py-name">comment</span><span class="py-op">)</span> <span class="py-op">=</span> <span class="py-name">mat</span><span class="py-op">.</span><span class="py-name">groups</span><span class="py-op">(</span><span class="py-op">)</span> </span>
1606
<span class="lineno">1516</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-op">(</span><span class="py-name">list_values</span> <span class="py-op">==</span> <span class="py-string">''</span><span class="py-op">)</span> <span class="py-keyword">and</span> <span class="py-op">(</span><span class="py-name">single</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1607
<span class="lineno">1517</span> <span class="py-line"> <span class="py-comment"># change this if you want to accept empty values</span> </span>
1608
<span class="lineno">1518</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">raise</span> <span class="py-name">SyntaxError</span> </span>
1609
<span class="lineno">1519</span> <span class="py-line"> <span class="py-comment"># NOTE: note there is no error handling from here if the regex</span> </span>
1610
<span class="lineno">1520</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># is wrong: then incorrect values will slip through</span> </span>
1611
<span class="lineno">1521</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">empty_list</span> <span class="py-keyword">is</span> <span class="py-keyword">not</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1612
<span class="lineno">1522</span> <span class="py-line"> <span class="py-comment"># the single comma - meaning an empty list</span> </span>
1613
<span class="lineno">1523</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">return</span> <span class="py-op">(</span><span class="py-op">[</span><span class="py-op">]</span><span class="py-op">,</span> <span class="py-name">comment</span><span class="py-op">)</span> </span>
1614
<span class="lineno">1524</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">single</span> <span class="py-keyword">is</span> <span class="py-keyword">not</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1615
<span class="lineno">1525</span> <span class="py-line"> <span class="py-comment"># handle empty values</span> </span>
1616
<span class="lineno">1526</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">list_values</span> <span class="py-keyword">and</span> <span class="py-keyword">not</span> <span class="py-name">single</span><span class="py-op">:</span> </span>
1617
<span class="lineno">1527</span> <span class="py-line"> <span class="py-comment"># FIXME: the '' is a workaround because our regex now matches</span> </span>
1618
<span class="lineno">1528</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># '' at the end of a list if it has a trailing comma</span> </span>
1619
<span class="lineno">1529</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">single</span> <span class="py-op">=</span> <span class="py-name">None</span> </span>
1620
<span class="lineno">1530</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1621
<span class="lineno">1531</span> <span class="py-line"> <span class="py-name">single</span> <span class="py-op">=</span> <span class="py-name">single</span> <span class="py-keyword">or</span> <span class="py-string">'""'</span> </span>
1622
<span class="lineno">1532</span> <span class="py-line"> <span class="py-name">single</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._unquote" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_unquote">_unquote</a><span class="py-op">(</span><span class="py-name">single</span><span class="py-op">)</span> </span>
1623
<span class="lineno">1533</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">list_values</span> <span class="py-op">==</span> <span class="py-string">''</span><span class="py-op">:</span> </span>
1624
<span class="lineno">1534</span> <span class="py-line"> <span class="py-comment"># not a list value</span> </span>
1625
<span class="lineno">1535</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">return</span> <span class="py-op">(</span><span class="py-name">single</span><span class="py-op">,</span> <span class="py-name">comment</span><span class="py-op">)</span> </span>
1626
<span class="lineno">1536</span> <span class="py-line"> <span class="py-name">the_list</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._listvalueexp" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_listvalueexp">_listvalueexp</a><span class="py-op">.</span><span class="py-name">findall</span><span class="py-op">(</span><span class="py-name">list_values</span><span class="py-op">)</span> </span>
1627
<span class="lineno">1537</span> <span class="py-line"> <span class="py-name">the_list</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._unquote" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_unquote">_unquote</a><span class="py-op">(</span><span class="py-name">val</span><span class="py-op">)</span> <span class="py-keyword">for</span> <span class="py-name">val</span> <span class="py-keyword">in</span> <span class="py-name">the_list</span><span class="py-op">]</span> </span>
1628
<span class="lineno">1538</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">single</span> <span class="py-keyword">is</span> <span class="py-keyword">not</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1629
<span class="lineno">1539</span> <span class="py-line"> <span class="py-name">the_list</span> <span class="py-op">+=</span> <span class="py-op">[</span><span class="py-name">single</span><span class="py-op">]</span> </span>
1630
<span class="lineno">1540</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-op">(</span><span class="py-name">the_list</span><span class="py-op">,</span> <span class="py-name">comment</span><span class="py-op">)</span> </span>
1631
</div><span class="lineno">1541</span> <span class="py-line"> </span>
1632
<a name="ConfigObj._multiline"></a><div id="ConfigObj._multiline-def"><span class="lineno">1542</span> <a class="pysrc-toggle" href="#" id="ConfigObj._multiline-toggle" onclick="toggle('ConfigObj._multiline'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_multiline">_multiline</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">value</span><span class="py-op">,</span> <span class="py-param">infile</span><span class="py-op">,</span> <span class="py-param">cur_index</span><span class="py-op">,</span> <span class="py-param">maxline</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1633
</div><div id="ConfigObj._multiline-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._multiline-expanded"><span class="lineno">1543</span> <span class="py-line"> <span class="py-docstring">"""Extract the value, where we are in a multiline situation."""</span> </span>
1634
<span class="lineno">1544</span> <span class="py-line"> <span class="py-name">quot</span> <span class="py-op">=</span> <span class="py-name">value</span><span class="py-op">[</span><span class="py-op">:</span><span class="py-number">3</span><span class="py-op">]</span> </span>
1635
<span class="lineno">1545</span> <span class="py-line"> <span class="py-name">newvalue</span> <span class="py-op">=</span> <span class="py-name">value</span><span class="py-op">[</span><span class="py-number">3</span><span class="py-op">:</span><span class="py-op">]</span> </span>
1636
<span class="lineno">1546</span> <span class="py-line"> <span class="py-name">single_line</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._triple_quote" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_triple_quote">_triple_quote</a><span class="py-op">[</span><span class="py-name">quot</span><span class="py-op">]</span><span class="py-op">[</span><span class="py-number">0</span><span class="py-op">]</span> </span>
1637
<span class="lineno">1547</span> <span class="py-line"> <span class="py-name">multi_line</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._triple_quote" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_triple_quote">_triple_quote</a><span class="py-op">[</span><span class="py-name">quot</span><span class="py-op">]</span><span class="py-op">[</span><span class="py-number">1</span><span class="py-op">]</span> </span>
1638
<span class="lineno">1548</span> <span class="py-line"> <span class="py-name">mat</span> <span class="py-op">=</span> <span class="py-name">single_line</span><span class="py-op">.</span><span class="py-name">match</span><span class="py-op">(</span><span class="py-name">value</span><span class="py-op">)</span> </span>
1639
<span class="lineno">1549</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">mat</span> <span class="py-keyword">is</span> <span class="py-keyword">not</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1640
<span class="lineno">1550</span> <span class="py-line"> <span class="py-name">retval</span> <span class="py-op">=</span> <span class="py-name">list</span><span class="py-op">(</span><span class="py-name">mat</span><span class="py-op">.</span><span class="py-name">groups</span><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">)</span> </span>
1641
<span class="lineno">1551</span> <span class="py-line"> <span class="py-name">retval</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-name">cur_index</span><span class="py-op">)</span> </span>
1642
<span class="lineno">1552</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">retval</span> </span>
1643
<span class="lineno">1553</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">newvalue</span><span class="py-op">.</span><span class="py-name">find</span><span class="py-op">(</span><span class="py-name">quot</span><span class="py-op">)</span> <span class="py-op">!=</span> <span class="py-op">-</span><span class="py-number">1</span><span class="py-op">:</span> </span>
1644
<span class="lineno">1554</span> <span class="py-line"> <span class="py-comment"># somehow the triple quote is missing</span> </span>
1645
<span class="lineno">1555</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">raise</span> <span class="py-name">SyntaxError</span> </span>
1646
<span class="lineno">1556</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1647
<span class="lineno">1557</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">while</span> <span class="py-name">cur_index</span> <span class="py-op"><</span> <span class="py-name">maxline</span><span class="py-op">:</span> </span>
1648
<span class="lineno">1558</span> <span class="py-line"> <span class="py-name">cur_index</span> <span class="py-op">+=</span> <span class="py-number">1</span> </span>
1649
<span class="lineno">1559</span> <span class="py-line"> <span class="py-name">newvalue</span> <span class="py-op">+=</span> <span class="py-string">'\n'</span> </span>
1650
<span class="lineno">1560</span> <span class="py-line"> <span class="py-name">line</span> <span class="py-op">=</span> <span class="py-name">infile</span><span class="py-op">[</span><span class="py-name">cur_index</span><span class="py-op">]</span> </span>
1651
<span class="lineno">1561</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">line</span><span class="py-op">.</span><span class="py-name">find</span><span class="py-op">(</span><span class="py-name">quot</span><span class="py-op">)</span> <span class="py-op">==</span> <span class="py-op">-</span><span class="py-number">1</span><span class="py-op">:</span> </span>
1652
<span class="lineno">1562</span> <span class="py-line"> <span class="py-name">newvalue</span> <span class="py-op">+=</span> <span class="py-name">line</span> </span>
1653
<span class="lineno">1563</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1654
<span class="lineno">1564</span> <span class="py-line"> <span class="py-comment"># end of multiline, process it</span> </span>
1655
<span class="lineno">1565</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">break</span> </span>
1656
<span class="lineno">1566</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1657
<span class="lineno">1567</span> <span class="py-line"> <span class="py-comment"># we've got to the end of the config, oops...</span> </span>
1658
<span class="lineno">1568</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">raise</span> <span class="py-name">SyntaxError</span> </span>
1659
<span class="lineno">1569</span> <span class="py-line"> <span class="py-name">mat</span> <span class="py-op">=</span> <span class="py-name">multi_line</span><span class="py-op">.</span><span class="py-name">match</span><span class="py-op">(</span><span class="py-name">line</span><span class="py-op">)</span> </span>
1660
<span class="lineno">1570</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">mat</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1661
<span class="lineno">1571</span> <span class="py-line"> <span class="py-comment"># a badly formed line</span> </span>
1662
<span class="lineno">1572</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">raise</span> <span class="py-name">SyntaxError</span> </span>
1663
<span class="lineno">1573</span> <span class="py-line"> <span class="py-op">(</span><span class="py-name">value</span><span class="py-op">,</span> <span class="py-name">comment</span><span class="py-op">)</span> <span class="py-op">=</span> <span class="py-name">mat</span><span class="py-op">.</span><span class="py-name">groups</span><span class="py-op">(</span><span class="py-op">)</span> </span>
1664
<span class="lineno">1574</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-op">(</span><span class="py-name">newvalue</span> <span class="py-op">+</span> <span class="py-name">value</span><span class="py-op">,</span> <span class="py-name">comment</span><span class="py-op">,</span> <span class="py-name">cur_index</span><span class="py-op">)</span> </span>
1665
</div><span class="lineno">1575</span> <span class="py-line"> </span>
1666
<a name="ConfigObj._handle_configspec"></a><div id="ConfigObj._handle_configspec-def"><span class="lineno">1576</span> <a class="pysrc-toggle" href="#" id="ConfigObj._handle_configspec-toggle" onclick="toggle('ConfigObj._handle_configspec'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_configspec">_handle_configspec</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">configspec</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1667
</div><div id="ConfigObj._handle_configspec-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._handle_configspec-expanded"><span class="lineno">1577</span> <span class="py-line"> <span class="py-docstring">"""Parse the configspec."""</span> </span>
1668
<span class="lineno">1578</span> <span class="py-line"> <span class="py-comment"># FIXME: Should we check that the configspec was created with the </span> </span>
1669
<span class="lineno">1579</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># correct settings ? (i.e. ``list_values=False``)</span> </span>
1670
<span class="lineno">1580</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">configspec</span><span class="py-op">,</span> <a title="pythonutils.configobj.ConfigObj" class="py-name" href="pythonutils.configobj.ConfigObj-class.html">ConfigObj</a><span class="py-op">)</span><span class="py-op">:</span> </span>
1671
<span class="lineno">1581</span> <span class="py-line"> <span class="py-keyword">try</span><span class="py-op">:</span> </span>
1672
<span class="lineno">1582</span> <span class="py-line"> <span class="py-name">configspec</span> <span class="py-op">=</span> <a title="pythonutils.configobj.ConfigObj" class="py-name" href="pythonutils.configobj.ConfigObj-class.html">ConfigObj</a><span class="py-op">(</span> </span>
1673
<span class="lineno">1583</span> <span class="py-line"> <span class="py-name">configspec</span><span class="py-op">,</span> </span>
1674
<span class="lineno">1584</span> <span class="py-line"> <span class="py-name">raise_errors</span><span class="py-op">=</span><span class="py-name">True</span><span class="py-op">,</span> </span>
1675
<span class="lineno">1585</span> <span class="py-line"> <span class="py-name">file_error</span><span class="py-op">=</span><span class="py-name">True</span><span class="py-op">,</span> </span>
1676
<span class="lineno">1586</span> <span class="py-line"> <span class="py-name">list_values</span><span class="py-op">=</span><span class="py-name">False</span><span class="py-op">)</span> </span>
1677
<span class="lineno">1587</span> <span class="py-line"> <span class="py-keyword">except</span> <a title="pythonutils.configobj.ConfigObjError" class="py-name" href="pythonutils.configobj.ConfigObjError-class.html">ConfigObjError</a><span class="py-op">,</span> <span class="py-name">e</span><span class="py-op">:</span> </span>
1678
<span class="lineno">1588</span> <span class="py-line"> <span class="py-comment"># FIXME: Should these errors have a reference</span> </span>
1679
<span class="lineno">1589</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># to the already parsed ConfigObj ?</span> </span>
1680
<span class="lineno">1590</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">raise</span> <a title="pythonutils.configobj.ConfigspecError" class="py-name" href="pythonutils.configobj.ConfigspecError-class.html">ConfigspecError</a><span class="py-op">(</span><span class="py-string">'Parsing configspec failed: %s'</span> <span class="py-op">%</span> <span class="py-name">e</span><span class="py-op">)</span> </span>
1681
<span class="lineno">1591</span> <span class="py-line"> <span class="py-keyword">except</span> <span class="py-name">IOError</span><span class="py-op">,</span> <span class="py-name">e</span><span class="py-op">:</span> </span>
1682
<span class="lineno">1592</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">IOError</span><span class="py-op">(</span><span class="py-string">'Reading configspec failed: %s'</span> <span class="py-op">%</span> <span class="py-name">e</span><span class="py-op">)</span> </span>
1683
<span class="lineno">1593</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._set_configspec_value" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_set_configspec_value">_set_configspec_value</a><span class="py-op">(</span><span class="py-name">configspec</span><span class="py-op">,</span> <span class="py-name">self</span><span class="py-op">)</span> </span>
1684
</div><span class="lineno">1594</span> <span class="py-line"> </span>
1685
<a name="ConfigObj._set_configspec_value"></a><div id="ConfigObj._set_configspec_value-def"><span class="lineno">1595</span> <a class="pysrc-toggle" href="#" id="ConfigObj._set_configspec_value-toggle" onclick="toggle('ConfigObj._set_configspec_value'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_set_configspec_value">_set_configspec_value</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">configspec</span><span class="py-op">,</span> <span class="py-param">section</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1686
</div><div id="ConfigObj._set_configspec_value-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._set_configspec_value-expanded"><span class="lineno">1596</span> <span class="py-line"> <span class="py-docstring">"""Used to recursively set configspec values."""</span> </span>
1687
<span class="lineno">1597</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-string">'__many__'</span> <span class="py-keyword">in</span> <span class="py-name">configspec</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">:</span> </span>
1688
<span class="lineno">1598</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">configspec</span><span class="py-op">[</span><span class="py-string">'__many__'</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">configspec</span><span class="py-op">[</span><span class="py-string">'__many__'</span><span class="py-op">]</span> </span>
1689
<span class="lineno">1599</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">len</span><span class="py-op">(</span><span class="py-name">configspec</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">)</span> <span class="py-op">></span> <span class="py-number">1</span><span class="py-op">:</span> </span>
1690
<span class="lineno">1600</span> <span class="py-line"> <span class="py-comment"># FIXME: can we supply any useful information here ?</span> </span>
1691
<span class="lineno">1601</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">raise</span> <a title="pythonutils.configobj.RepeatSectionError" class="py-name" href="pythonutils.configobj.RepeatSectionError-class.html">RepeatSectionError</a> </span>
1692
<span class="lineno">1602</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">hasattr</span><span class="py-op">(</span><span class="py-name">configspec</span><span class="py-op">,</span> <span class="py-string">'initial_comment'</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1693
<span class="lineno">1603</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_configspec_initial_comment</span> <span class="py-op">=</span> <span class="py-name">configspec</span><span class="py-op">.</span><span class="py-name">initial_comment</span> </span>
1694
<span class="lineno">1604</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_configspec_final_comment</span> <span class="py-op">=</span> <span class="py-name">configspec</span><span class="py-op">.</span><span class="py-name">final_comment</span> </span>
1695
<span class="lineno">1605</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_configspec_encoding</span> <span class="py-op">=</span> <span class="py-name">configspec</span><span class="py-op">.</span><span class="py-name">encoding</span> </span>
1696
<span class="lineno">1606</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_configspec_BOM</span> <span class="py-op">=</span> <span class="py-name">configspec</span><span class="py-op">.</span><span class="py-name">BOM</span> </span>
1697
<span class="lineno">1607</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_configspec_newlines</span> <span class="py-op">=</span> <span class="py-name">configspec</span><span class="py-op">.</span><span class="py-name">newlines</span> </span>
1698
<span class="lineno">1608</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_configspec_indent_type</span> <span class="py-op">=</span> <span class="py-name">configspec</span><span class="py-op">.</span><span class="py-name">indent_type</span> </span>
1699
<span class="lineno">1609</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">configspec</span><span class="py-op">.</span><span class="py-name">scalars</span><span class="py-op">:</span> </span>
1700
<span class="lineno">1610</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_configspec_comments</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">configspec</span><span class="py-op">.</span><span class="py-name">comments</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> </span>
1701
<span class="lineno">1611</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_configspec_inline_comments</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-op">(</span> </span>
1702
<span class="lineno">1612</span> <span class="py-line"> <span class="py-name">configspec</span><span class="py-op">.</span><span class="py-name">inline_comments</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span><span class="py-op">)</span> </span>
1703
<span class="lineno">1613</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">configspec</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">configspec</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> </span>
1704
<span class="lineno">1614</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_order</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-name">entry</span><span class="py-op">)</span> </span>
1705
<span class="lineno">1615</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">configspec</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">:</span> </span>
1706
<span class="lineno">1616</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">entry</span> <span class="py-op">==</span> <span class="py-string">'__many__'</span><span class="py-op">:</span> </span>
1707
<span class="lineno">1617</span> <span class="py-line"> <span class="py-keyword">continue</span> </span>
1708
<span class="lineno">1618</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_cs_section_comments</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">configspec</span><span class="py-op">.</span><span class="py-name">comments</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> </span>
1709
<span class="lineno">1619</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_cs_section_inline_comments</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-op">(</span> </span>
1710
<span class="lineno">1620</span> <span class="py-line"> <span class="py-name">configspec</span><span class="py-op">.</span><span class="py-name">inline_comments</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span><span class="py-op">)</span> </span>
1711
<span class="lineno">1621</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">has_key</span><span class="py-op">(</span><span class="py-name">entry</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1712
<span class="lineno">1622</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
1713
<span class="lineno">1623</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._set_configspec_value" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_set_configspec_value">_set_configspec_value</a><span class="py-op">(</span><span class="py-name">configspec</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span><span class="py-op">,</span> <span class="py-name">section</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span><span class="py-op">)</span> </span>
1714
</div><span class="lineno">1624</span> <span class="py-line"> </span>
1715
<a name="ConfigObj._handle_repeat"></a><div id="ConfigObj._handle_repeat-def"><span class="lineno">1625</span> <a class="pysrc-toggle" href="#" id="ConfigObj._handle_repeat-toggle" onclick="toggle('ConfigObj._handle_repeat'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_repeat">_handle_repeat</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">section</span><span class="py-op">,</span> <span class="py-param">configspec</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1716
</div><div id="ConfigObj._handle_repeat-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._handle_repeat-expanded"><span class="lineno">1626</span> <span class="py-line"> <span class="py-docstring">"""Dynamically assign configspec for repeated section."""</span> </span>
1717
<span class="lineno">1627</span> <span class="py-line"> <span class="py-keyword">try</span><span class="py-op">:</span> </span>
1718
<span class="lineno">1628</span> <span class="py-line"> <span class="py-name">section_keys</span> <span class="py-op">=</span> <span class="py-name">configspec</span><span class="py-op">.</span><span class="py-name">sections</span> </span>
1719
<span class="lineno">1629</span> <span class="py-line"> <span class="py-name">scalar_keys</span> <span class="py-op">=</span> <span class="py-name">configspec</span><span class="py-op">.</span><span class="py-name">scalars</span> </span>
1720
<span class="lineno">1630</span> <span class="py-line"> <span class="py-keyword">except</span> <span class="py-name">AttributeError</span><span class="py-op">:</span> </span>
1721
<span class="lineno">1631</span> <span class="py-line"> <span class="py-name">section_keys</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-name">entry</span> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">configspec</span> </span>
1722
<span class="lineno">1632</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">configspec</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span><span class="py-op">,</span> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">)</span><span class="py-op">]</span> </span>
1723
<span class="lineno">1633</span> <span class="py-line"> <span class="py-name">scalar_keys</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-name">entry</span> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">configspec</span> </span>
1724
<span class="lineno">1634</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">configspec</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span><span class="py-op">,</span> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">)</span><span class="py-op">]</span> </span>
1725
<span class="lineno">1635</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-string">'__many__'</span> <span class="py-keyword">in</span> <span class="py-name">section_keys</span> <span class="py-keyword">and</span> <span class="py-name">len</span><span class="py-op">(</span><span class="py-name">section_keys</span><span class="py-op">)</span> <span class="py-op">></span> <span class="py-number">1</span><span class="py-op">:</span> </span>
1726
<span class="lineno">1636</span> <span class="py-line"> <span class="py-comment"># FIXME: can we supply any useful information here ?</span> </span>
1727
<span class="lineno">1637</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">raise</span> <a title="pythonutils.configobj.RepeatSectionError" class="py-name" href="pythonutils.configobj.RepeatSectionError-class.html">RepeatSectionError</a> </span>
1728
<span class="lineno">1638</span> <span class="py-line"> <span class="py-name">scalars</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
1729
<span class="lineno">1639</span> <span class="py-line"> <span class="py-name">sections</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
1730
<span class="lineno">1640</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">scalar_keys</span><span class="py-op">:</span> </span>
1731
<span class="lineno">1641</span> <span class="py-line"> <span class="py-name">val</span> <span class="py-op">=</span> <span class="py-name">configspec</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> </span>
1732
<span class="lineno">1642</span> <span class="py-line"> <span class="py-name">scalars</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">val</span> </span>
1733
<span class="lineno">1643</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">section_keys</span><span class="py-op">:</span> </span>
1734
<span class="lineno">1644</span> <span class="py-line"> <span class="py-name">val</span> <span class="py-op">=</span> <span class="py-name">configspec</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> </span>
1735
<span class="lineno">1645</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">entry</span> <span class="py-op">==</span> <span class="py-string">'__many__'</span><span class="py-op">:</span> </span>
1736
<span class="lineno">1646</span> <span class="py-line"> <span class="py-name">scalars</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">val</span> </span>
1737
<span class="lineno">1647</span> <span class="py-line"> <span class="py-keyword">continue</span> </span>
1738
<span class="lineno">1648</span> <span class="py-line"> <span class="py-name">sections</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">val</span> </span>
1739
<span class="lineno">1649</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1740
<span class="lineno">1650</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">configspec</span> <span class="py-op">=</span> <span class="py-name">scalars</span> </span>
1741
<span class="lineno">1651</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">sections</span><span class="py-op">:</span> </span>
1742
<span class="lineno">1652</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">has_key</span><span class="py-op">(</span><span class="py-name">entry</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1743
<span class="lineno">1653</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
1744
<span class="lineno">1654</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._handle_repeat" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_repeat">_handle_repeat</a><span class="py-op">(</span><span class="py-name">section</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span><span class="py-op">,</span> <span class="py-name">sections</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span><span class="py-op">)</span> </span>
1745
</div><span class="lineno">1655</span> <span class="py-line"> </span>
1746
<a name="ConfigObj._write_line"></a><div id="ConfigObj._write_line-def"><span class="lineno">1656</span> <a class="pysrc-toggle" href="#" id="ConfigObj._write_line-toggle" onclick="toggle('ConfigObj._write_line'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_write_line">_write_line</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">indent_string</span><span class="py-op">,</span> <span class="py-param">entry</span><span class="py-op">,</span> <span class="py-param">this_entry</span><span class="py-op">,</span> <span class="py-param">comment</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1747
</div><div id="ConfigObj._write_line-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._write_line-expanded"><span class="lineno">1657</span> <span class="py-line"> <span class="py-docstring">"""Write an individual line, for the write method"""</span> </span>
1748
<span class="lineno">1658</span> <span class="py-line"> <span class="py-comment"># NOTE: the calls to self._quote here handles non-StringType values.</span> </span>
1749
<span class="lineno">1659</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.unrepr" class="py-name" href="pythonutils.configobj-module.html#unrepr">unrepr</a><span class="py-op">:</span> </span>
1750
<span class="lineno">1660</span> <span class="py-line"> <span class="py-name">val</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._decode_element" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_decode_element">_decode_element</a><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._quote" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_quote">_quote</a><span class="py-op">(</span><span class="py-name">this_entry</span><span class="py-op">)</span><span class="py-op">)</span> </span>
1751
<span class="lineno">1661</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1752
<span class="lineno">1662</span> <span class="py-line"> <span class="py-name">val</span> <span class="py-op">=</span> <span class="py-name">repr</span><span class="py-op">(</span><span class="py-name">this_entry</span><span class="py-op">)</span> </span>
1753
<span class="lineno">1663</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-string">'%s%s%s%s%s'</span> <span class="py-op">%</span> <span class="py-op">(</span> </span>
1754
<span class="lineno">1664</span> <span class="py-line"> <span class="py-name">indent_string</span><span class="py-op">,</span> </span>
1755
<span class="lineno">1665</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._decode_element" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_decode_element">_decode_element</a><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._quote" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_quote">_quote</a><span class="py-op">(</span><span class="py-name">entry</span><span class="py-op">,</span> <span class="py-name">multiline</span><span class="py-op">=</span><span class="py-name">False</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">,</span> </span>
1756
<span class="lineno">1666</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._a_to_u" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_a_to_u">_a_to_u</a><span class="py-op">(</span><span class="py-string">' = '</span><span class="py-op">)</span><span class="py-op">,</span> </span>
1757
<span class="lineno">1667</span> <span class="py-line"> <span class="py-name">val</span><span class="py-op">,</span> </span>
1758
<span class="lineno">1668</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._decode_element" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_decode_element">_decode_element</a><span class="py-op">(</span><span class="py-name">comment</span><span class="py-op">)</span><span class="py-op">)</span> </span>
1759
</div><span class="lineno">1669</span> <span class="py-line"> </span>
1760
<a name="ConfigObj._write_marker"></a><div id="ConfigObj._write_marker-def"><span class="lineno">1670</span> <a class="pysrc-toggle" href="#" id="ConfigObj._write_marker-toggle" onclick="toggle('ConfigObj._write_marker'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_write_marker">_write_marker</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">indent_string</span><span class="py-op">,</span> <span class="py-param">depth</span><span class="py-op">,</span> <span class="py-param">entry</span><span class="py-op">,</span> <span class="py-param">comment</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1761
</div><div id="ConfigObj._write_marker-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._write_marker-expanded"><span class="lineno">1671</span> <span class="py-line"> <span class="py-docstring">"""Write a section marker line"""</span> </span>
1762
<span class="lineno">1672</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-string">'%s%s%s%s%s'</span> <span class="py-op">%</span> <span class="py-op">(</span> </span>
1763
<span class="lineno">1673</span> <span class="py-line"> <span class="py-name">indent_string</span><span class="py-op">,</span> </span>
1764
<span class="lineno">1674</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._a_to_u" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_a_to_u">_a_to_u</a><span class="py-op">(</span><span class="py-string">'['</span> <span class="py-op">*</span> <span class="py-name">depth</span><span class="py-op">)</span><span class="py-op">,</span> </span>
1765
<span class="lineno">1675</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._quote" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_quote">_quote</a><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._decode_element" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_decode_element">_decode_element</a><span class="py-op">(</span><span class="py-name">entry</span><span class="py-op">)</span><span class="py-op">,</span> <span class="py-name">multiline</span><span class="py-op">=</span><span class="py-name">False</span><span class="py-op">)</span><span class="py-op">,</span> </span>
1766
<span class="lineno">1676</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._a_to_u" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_a_to_u">_a_to_u</a><span class="py-op">(</span><span class="py-string">']'</span> <span class="py-op">*</span> <span class="py-name">depth</span><span class="py-op">)</span><span class="py-op">,</span> </span>
1767
<span class="lineno">1677</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._decode_element" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_decode_element">_decode_element</a><span class="py-op">(</span><span class="py-name">comment</span><span class="py-op">)</span><span class="py-op">)</span> </span>
1768
</div><span class="lineno">1678</span> <span class="py-line"> </span>
1769
<a name="ConfigObj._handle_comment"></a><div id="ConfigObj._handle_comment-def"><span class="lineno">1679</span> <a class="pysrc-toggle" href="#" id="ConfigObj._handle_comment-toggle" onclick="toggle('ConfigObj._handle_comment'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_comment">_handle_comment</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">comment</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1770
</div><div id="ConfigObj._handle_comment-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._handle_comment-expanded"><span class="lineno">1680</span> <span class="py-line"> <span class="py-docstring">"""Deal with a comment."""</span> </span>
1771
<span class="lineno">1681</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">comment</span><span class="py-op">:</span> </span>
1772
<span class="lineno">1682</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-string">''</span> </span>
1773
<span class="lineno">1683</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">indent_type</span> <span class="py-op">==</span> <span class="py-string">'\t'</span><span class="py-op">:</span> </span>
1774
<span class="lineno">1684</span> <span class="py-line"> <span class="py-name">start</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._a_to_u" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_a_to_u">_a_to_u</a><span class="py-op">(</span><span class="py-string">'\t'</span><span class="py-op">)</span> </span>
1775
<span class="lineno">1685</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1776
<span class="lineno">1686</span> <span class="py-line"> <span class="py-name">start</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._a_to_u" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_a_to_u">_a_to_u</a><span class="py-op">(</span><span class="py-string">' '</span> <span class="py-op">*</span> <a title="pythonutils.configobj.NUM_INDENT_SPACES" class="py-name" href="pythonutils.configobj-module.html#NUM_INDENT_SPACES">NUM_INDENT_SPACES</a><span class="py-op">)</span> </span>
1777
<span class="lineno">1687</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">comment</span><span class="py-op">.</span><span class="py-name">startswith</span><span class="py-op">(</span><span class="py-string">'#'</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1778
<span class="lineno">1688</span> <span class="py-line"> <span class="py-name">start</span> <span class="py-op">+=</span> <a title="pythonutils.configobj.ConfigObj._a_to_u" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_a_to_u">_a_to_u</a><span class="py-op">(</span><span class="py-string">'# '</span><span class="py-op">)</span> </span>
1779
<span class="lineno">1689</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-op">(</span><span class="py-name">start</span> <span class="py-op">+</span> <span class="py-name">comment</span><span class="py-op">)</span> </span>
1780
</div><span class="lineno">1690</span> <span class="py-line"> </span>
1781
<a name="ConfigObj._compute_indent_string"></a><div id="ConfigObj._compute_indent_string-def"><span class="lineno">1691</span> <a class="pysrc-toggle" href="#" id="ConfigObj._compute_indent_string-toggle" onclick="toggle('ConfigObj._compute_indent_string'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#_compute_indent_string">_compute_indent_string</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">depth</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1782
</div><div id="ConfigObj._compute_indent_string-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj._compute_indent_string-expanded"><span class="lineno">1692</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
1783
<span class="lineno">1693</span> <span class="py-line"><span class="py-docstring"> Compute the indent string, according to current indent_type and depth</span> </span>
1784
<span class="lineno">1694</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
1785
<span class="lineno">1695</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">indent_type</span> <span class="py-op">==</span> <span class="py-string">''</span><span class="py-op">:</span> </span>
1786
<span class="lineno">1696</span> <span class="py-line"> <span class="py-comment"># no indentation at all</span> </span>
1787
<span class="lineno">1697</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">return</span> <span class="py-string">''</span> </span>
1788
<span class="lineno">1698</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">indent_type</span> <span class="py-op">==</span> <span class="py-string">'\t'</span><span class="py-op">:</span> </span>
1789
<span class="lineno">1699</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-string">'\t'</span> <span class="py-op">*</span> <span class="py-name">depth</span> </span>
1790
<span class="lineno">1700</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">indent_type</span> <span class="py-op">==</span> <span class="py-string">' '</span><span class="py-op">:</span> </span>
1791
<span class="lineno">1701</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-string">' '</span> <span class="py-op">*</span> <a title="pythonutils.configobj.NUM_INDENT_SPACES" class="py-name" href="pythonutils.configobj-module.html#NUM_INDENT_SPACES">NUM_INDENT_SPACES</a> <span class="py-op">*</span> <span class="py-name">depth</span> </span>
1792
<span class="lineno">1702</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">SyntaxError</span> </span>
1793
</div><span class="lineno">1703</span> <span class="py-line"> </span>
1794
<span class="lineno">1704</span> <span class="py-line"> <span class="py-comment"># Public methods</span> </span>
1795
<span class="lineno">1705</span> <span class="py-line"><span class="py-comment"></span> </span>
1796
<a name="ConfigObj.write"></a><div id="ConfigObj.write-def"><span class="lineno">1706</span> <a class="pysrc-toggle" href="#" id="ConfigObj.write-toggle" onclick="toggle('ConfigObj.write'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#write">write</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">outfile</span><span class="py-op">=</span><span class="py-name">None</span><span class="py-op">,</span> <span class="py-param">section</span><span class="py-op">=</span><span class="py-name">None</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1797
</div><div id="ConfigObj.write-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj.write-expanded"><span class="lineno">1707</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
1798
<span class="lineno">1708</span> <span class="py-line"><span class="py-docstring"> Write the current ConfigObj as a file</span> </span>
1799
<span class="lineno">1709</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1800
<span class="lineno">1710</span> <span class="py-line"><span class="py-docstring"> tekNico: FIXME: use StringIO instead of real files</span> </span>
1801
<span class="lineno">1711</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1802
<span class="lineno">1712</span> <span class="py-line"><span class="py-docstring"> >>> filename = a.filename</span> </span>
1803
<span class="lineno">1713</span> <span class="py-line"><span class="py-docstring"> >>> a.filename = 'test.ini'</span> </span>
1804
<span class="lineno">1714</span> <span class="py-line"><span class="py-docstring"> >>> a.write()</span> </span>
1805
<span class="lineno">1715</span> <span class="py-line"><span class="py-docstring"> >>> a.filename = filename</span> </span>
1806
<span class="lineno">1716</span> <span class="py-line"><span class="py-docstring"> >>> a == ConfigObj('test.ini', raise_errors=True)</span> </span>
1807
<span class="lineno">1717</span> <span class="py-line"><span class="py-docstring"> 1</span> </span>
1808
<span class="lineno">1718</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
1809
<span class="lineno">1719</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">indent_type</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1810
<span class="lineno">1720</span> <span class="py-line"> <span class="py-comment"># this can be true if initialised from a dictionary</span> </span>
1811
<span class="lineno">1721</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">indent_type</span> <span class="py-op">=</span> <a title="pythonutils.configobj.DEFAULT_INDENT_TYPE" class="py-name" href="pythonutils.configobj-module.html#DEFAULT_INDENT_TYPE">DEFAULT_INDENT_TYPE</a> </span>
1812
<span class="lineno">1722</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1813
<span class="lineno">1723</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">out</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
1814
<span class="lineno">1724</span> <span class="py-line"> <span class="py-name">cs</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._a_to_u" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_a_to_u">_a_to_u</a><span class="py-op">(</span><span class="py-string">'#'</span><span class="py-op">)</span> </span>
1815
<span class="lineno">1725</span> <span class="py-line"> <span class="py-name">csp</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._a_to_u" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_a_to_u">_a_to_u</a><span class="py-op">(</span><span class="py-string">'# '</span><span class="py-op">)</span> </span>
1816
<span class="lineno">1726</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">section</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1817
<span class="lineno">1727</span> <span class="py-line"> <span class="py-name">int_val</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">interpolation</span> </span>
1818
<span class="lineno">1728</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">interpolation</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
1819
<span class="lineno">1729</span> <span class="py-line"> <span class="py-name">section</span> <span class="py-op">=</span> <span class="py-name">self</span> </span>
1820
<span class="lineno">1730</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">line</span> <span class="py-keyword">in</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">initial_comment</span><span class="py-op">:</span> </span>
1821
<span class="lineno">1731</span> <span class="py-line"> <span class="py-name">line</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._decode_element" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_decode_element">_decode_element</a><span class="py-op">(</span><span class="py-name">line</span><span class="py-op">)</span> </span>
1822
<span class="lineno">1732</span> <span class="py-line"> <span class="py-name">stripped_line</span> <span class="py-op">=</span> <span class="py-name">line</span><span class="py-op">.</span><span class="py-name">strip</span><span class="py-op">(</span><span class="py-op">)</span> </span>
1823
<span class="lineno">1733</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">stripped_line</span> <span class="py-keyword">and</span> <span class="py-keyword">not</span> <span class="py-name">stripped_line</span><span class="py-op">.</span><span class="py-name">startswith</span><span class="py-op">(</span><span class="py-name">cs</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1824
<span class="lineno">1734</span> <span class="py-line"> <span class="py-name">line</span> <span class="py-op">=</span> <span class="py-name">csp</span> <span class="py-op">+</span> <span class="py-name">line</span> </span>
1825
<span class="lineno">1735</span> <span class="py-line"> <span class="py-name">out</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-name">line</span><span class="py-op">)</span> </span>
1826
<span class="lineno">1736</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1827
<span class="lineno">1737</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">indent_string</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._a_to_u" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_a_to_u">_a_to_u</a><span class="py-op">(</span> </span>
1828
<span class="lineno">1738</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._compute_indent_string" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_compute_indent_string">_compute_indent_string</a><span class="py-op">(</span><span class="py-name">section</span><span class="py-op">.</span><span class="py-name">depth</span><span class="py-op">)</span><span class="py-op">)</span> </span>
1829
<span class="lineno">1739</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-op">(</span><span class="py-name">section</span><span class="py-op">.</span><span class="py-name">scalars</span> <span class="py-op">+</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1830
<span class="lineno">1740</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">defaults</span><span class="py-op">:</span> </span>
1831
<span class="lineno">1741</span> <span class="py-line"> <span class="py-comment"># don't write out default values</span> </span>
1832
<span class="lineno">1742</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">continue</span> </span>
1833
<span class="lineno">1743</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">comment_line</span> <span class="py-keyword">in</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">comments</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span><span class="py-op">:</span> </span>
1834
<span class="lineno">1744</span> <span class="py-line"> <span class="py-name">comment_line</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._decode_element" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_decode_element">_decode_element</a><span class="py-op">(</span><span class="py-name">comment_line</span><span class="py-op">.</span><span class="py-name">lstrip</span><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">)</span> </span>
1835
<span class="lineno">1745</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">comment_line</span> <span class="py-keyword">and</span> <span class="py-keyword">not</span> <span class="py-name">comment_line</span><span class="py-op">.</span><span class="py-name">startswith</span><span class="py-op">(</span><span class="py-name">cs</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1836
<span class="lineno">1746</span> <span class="py-line"> <span class="py-name">comment_line</span> <span class="py-op">=</span> <span class="py-name">csp</span> <span class="py-op">+</span> <span class="py-name">comment_line</span> </span>
1837
<span class="lineno">1747</span> <span class="py-line"> <span class="py-name">out</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-name">indent_string</span> <span class="py-op">+</span> <span class="py-name">comment_line</span><span class="py-op">)</span> </span>
1838
<span class="lineno">1748</span> <span class="py-line"> <span class="py-name">this_entry</span> <span class="py-op">=</span> <span class="py-name">section</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> </span>
1839
<span class="lineno">1749</span> <span class="py-line"> <span class="py-name">comment</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._handle_comment" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_comment">_handle_comment</a><span class="py-op">(</span><span class="py-name">section</span><span class="py-op">.</span><span class="py-name">inline_comments</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span><span class="py-op">)</span> </span>
1840
<span class="lineno">1750</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1841
<span class="lineno">1751</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">this_entry</span><span class="py-op">,</span> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">)</span><span class="py-op">:</span> </span>
1842
<span class="lineno">1752</span> <span class="py-line"> <span class="py-comment"># a section</span> </span>
1843
<span class="lineno">1753</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">out</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._write_marker" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_write_marker">_write_marker</a><span class="py-op">(</span> </span>
1844
<span class="lineno">1754</span> <span class="py-line"> <span class="py-name">indent_string</span><span class="py-op">,</span> </span>
1845
<span class="lineno">1755</span> <span class="py-line"> <span class="py-name">this_entry</span><span class="py-op">.</span><span class="py-name">depth</span><span class="py-op">,</span> </span>
1846
<span class="lineno">1756</span> <span class="py-line"> <span class="py-name">entry</span><span class="py-op">,</span> </span>
1847
<span class="lineno">1757</span> <span class="py-line"> <span class="py-name">comment</span><span class="py-op">)</span><span class="py-op">)</span> </span>
1848
<span class="lineno">1758</span> <span class="py-line"> <span class="py-name">out</span><span class="py-op">.</span><span class="py-name">extend</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj.write" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#write">write</a><span class="py-op">(</span><span class="py-name">section</span><span class="py-op">=</span><span class="py-name">this_entry</span><span class="py-op">)</span><span class="py-op">)</span> </span>
1849
<span class="lineno">1759</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1850
<span class="lineno">1760</span> <span class="py-line"> <span class="py-name">out</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._write_line" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_write_line">_write_line</a><span class="py-op">(</span> </span>
1851
<span class="lineno">1761</span> <span class="py-line"> <span class="py-name">indent_string</span><span class="py-op">,</span> </span>
1852
<span class="lineno">1762</span> <span class="py-line"> <span class="py-name">entry</span><span class="py-op">,</span> </span>
1853
<span class="lineno">1763</span> <span class="py-line"> <span class="py-name">this_entry</span><span class="py-op">,</span> </span>
1854
<span class="lineno">1764</span> <span class="py-line"> <span class="py-name">comment</span><span class="py-op">)</span><span class="py-op">)</span> </span>
1855
<span class="lineno">1765</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1856
<span class="lineno">1766</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">section</span> <span class="py-keyword">is</span> <span class="py-name">self</span><span class="py-op">:</span> </span>
1857
<span class="lineno">1767</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">line</span> <span class="py-keyword">in</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">final_comment</span><span class="py-op">:</span> </span>
1858
<span class="lineno">1768</span> <span class="py-line"> <span class="py-name">line</span> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._decode_element" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_decode_element">_decode_element</a><span class="py-op">(</span><span class="py-name">line</span><span class="py-op">)</span> </span>
1859
<span class="lineno">1769</span> <span class="py-line"> <span class="py-name">stripped_line</span> <span class="py-op">=</span> <span class="py-name">line</span><span class="py-op">.</span><span class="py-name">strip</span><span class="py-op">(</span><span class="py-op">)</span> </span>
1860
<span class="lineno">1770</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">stripped_line</span> <span class="py-keyword">and</span> <span class="py-keyword">not</span> <span class="py-name">stripped_line</span><span class="py-op">.</span><span class="py-name">startswith</span><span class="py-op">(</span><span class="py-name">cs</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1861
<span class="lineno">1771</span> <span class="py-line"> <span class="py-name">line</span> <span class="py-op">=</span> <span class="py-name">csp</span> <span class="py-op">+</span> <span class="py-name">line</span> </span>
1862
<span class="lineno">1772</span> <span class="py-line"> <span class="py-name">out</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-name">line</span><span class="py-op">)</span> </span>
1863
<span class="lineno">1773</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">interpolation</span> <span class="py-op">=</span> <span class="py-name">int_val</span> </span>
1864
<span class="lineno">1774</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1865
<span class="lineno">1775</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">section</span> <span class="py-keyword">is</span> <span class="py-keyword">not</span> <span class="py-name">self</span><span class="py-op">:</span> </span>
1866
<span class="lineno">1776</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">out</span> </span>
1867
<span class="lineno">1777</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1868
<span class="lineno">1778</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">filename</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">)</span> <span class="py-keyword">and</span> <span class="py-op">(</span><span class="py-name">outfile</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1869
<span class="lineno">1779</span> <span class="py-line"> <span class="py-comment"># output a list of lines</span> </span>
1870
<span class="lineno">1780</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># might need to encode</span> </span>
1871
<span class="lineno">1781</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># NOTE: This will *screw* UTF16, each line will start with the BOM</span> </span>
1872
<span class="lineno">1782</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span><span class="py-op">:</span> </span>
1873
<span class="lineno">1783</span> <span class="py-line"> <span class="py-name">out</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-name">l</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.encode" class="py-name" href="pythonutils.configobj.Section-class.html#encode">encode</a><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span><span class="py-op">)</span> <span class="py-keyword">for</span> <span class="py-name">l</span> <span class="py-keyword">in</span> <span class="py-name">out</span><span class="py-op">]</span> </span>
1874
<span class="lineno">1784</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">BOM</span> <span class="py-keyword">and</span> <span class="py-op">(</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">)</span> <span class="py-keyword">or</span> </span>
1875
<span class="lineno">1785</span> <span class="py-line"> <span class="py-op">(</span><a title="pythonutils.configobj.BOM_LIST" class="py-name" href="pythonutils.configobj-module.html#BOM_LIST">BOM_LIST</a><span class="py-op">.</span><a title="pythonutils.configobj.Section.get" class="py-name" href="pythonutils.configobj.Section-class.html#get">get</a><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span><span class="py-op">.</span><span class="py-name">lower</span><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">)</span> <span class="py-op">==</span> <span class="py-string">'utf_8'</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1876
<span class="lineno">1786</span> <span class="py-line"> <span class="py-comment"># Add the UTF8 BOM</span> </span>
1877
<span class="lineno">1787</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">out</span><span class="py-op">:</span> </span>
1878
<span class="lineno">1788</span> <span class="py-line"> <span class="py-name">out</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-string">''</span><span class="py-op">)</span> </span>
1879
<span class="lineno">1789</span> <span class="py-line"> <span class="py-name">out</span><span class="py-op">[</span><span class="py-number">0</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">BOM_UTF8</span> <span class="py-op">+</span> <span class="py-name">out</span><span class="py-op">[</span><span class="py-number">0</span><span class="py-op">]</span> </span>
1880
<span class="lineno">1790</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">out</span> </span>
1881
<span class="lineno">1791</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1882
<span class="lineno">1792</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># Turn the list to a string, joined with correct newlines</span> </span>
1883
<span class="lineno">1793</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">output</span> <span class="py-op">=</span> <span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._a_to_u" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_a_to_u">_a_to_u</a><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">newlines</span> <span class="py-keyword">or</span> <span class="py-name">os</span><span class="py-op">.</span><span class="py-name">linesep</span><span class="py-op">)</span> </span>
1884
<span class="lineno">1794</span> <span class="py-line"> <span class="py-op">)</span><span class="py-op">.</span><span class="py-name">join</span><span class="py-op">(</span><span class="py-name">out</span><span class="py-op">)</span> </span>
1885
<span class="lineno">1795</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span><span class="py-op">:</span> </span>
1886
<span class="lineno">1796</span> <span class="py-line"> <span class="py-name">output</span> <span class="py-op">=</span> <span class="py-name">output</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.encode" class="py-name" href="pythonutils.configobj.Section-class.html#encode">encode</a><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span><span class="py-op">)</span> </span>
1887
<span class="lineno">1797</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">BOM</span> <span class="py-keyword">and</span> <span class="py-op">(</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">)</span> <span class="py-keyword">or</span> </span>
1888
<span class="lineno">1798</span> <span class="py-line"> <span class="py-op">(</span><a title="pythonutils.configobj.BOM_LIST" class="py-name" href="pythonutils.configobj-module.html#BOM_LIST">BOM_LIST</a><span class="py-op">.</span><a title="pythonutils.configobj.Section.get" class="py-name" href="pythonutils.configobj.Section-class.html#get">get</a><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">encoding</span><span class="py-op">.</span><span class="py-name">lower</span><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">)</span> <span class="py-op">==</span> <span class="py-string">'utf_8'</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1889
<span class="lineno">1799</span> <span class="py-line"> <span class="py-comment"># Add the UTF8 BOM</span> </span>
1890
<span class="lineno">1800</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">output</span> <span class="py-op">=</span> <span class="py-name">BOM_UTF8</span> <span class="py-op">+</span> <span class="py-name">output</span> </span>
1891
<span class="lineno">1801</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">outfile</span> <span class="py-keyword">is</span> <span class="py-keyword">not</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1892
<span class="lineno">1802</span> <span class="py-line"> <span class="py-name">outfile</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj.write" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#write">write</a><span class="py-op">(</span><span class="py-name">output</span><span class="py-op">)</span> </span>
1893
<span class="lineno">1803</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1894
<span class="lineno">1804</span> <span class="py-line"> <span class="py-name">h</span> <span class="py-op">=</span> <span class="py-name">open</span><span class="py-op">(</span><span class="py-name">self</span><span class="py-op">.</span><span class="py-name">filename</span><span class="py-op">,</span> <span class="py-string">'wb'</span><span class="py-op">)</span> </span>
1895
<span class="lineno">1805</span> <span class="py-line"> <span class="py-name">h</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj.write" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#write">write</a><span class="py-op">(</span><span class="py-name">output</span><span class="py-op">)</span> </span>
1896
<span class="lineno">1806</span> <span class="py-line"> <span class="py-name">h</span><span class="py-op">.</span><span class="py-name">close</span><span class="py-op">(</span><span class="py-op">)</span> </span>
1897
</div><span class="lineno">1807</span> <span class="py-line"> </span>
1898
<a name="ConfigObj.validate"></a><div id="ConfigObj.validate-def"><span class="lineno">1808</span> <a class="pysrc-toggle" href="#" id="ConfigObj.validate-toggle" onclick="toggle('ConfigObj.validate'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.ConfigObj-class.html#validate">validate</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">validator</span><span class="py-op">,</span> <span class="py-param">preserve_errors</span><span class="py-op">=</span><span class="py-name">False</span><span class="py-op">,</span> <span class="py-param">copy</span><span class="py-op">=</span><span class="py-name">False</span><span class="py-op">,</span> </span>
1899
<span class="lineno">1809</span> <span class="py-line"> <span class="py-param">section</span><span class="py-op">=</span><span class="py-name">None</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1900
</div><div id="ConfigObj.validate-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ConfigObj.validate-expanded"><span class="lineno">1810</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
1901
<span class="lineno">1811</span> <span class="py-line"><span class="py-docstring"> Test the ConfigObj against a configspec.</span> </span>
1902
<span class="lineno">1812</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1903
<span class="lineno">1813</span> <span class="py-line"><span class="py-docstring"> It uses the ``validator`` object from *validate.py*.</span> </span>
1904
<span class="lineno">1814</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1905
<span class="lineno">1815</span> <span class="py-line"><span class="py-docstring"> To run ``validate`` on the current ConfigObj, call: ::</span> </span>
1906
<span class="lineno">1816</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1907
<span class="lineno">1817</span> <span class="py-line"><span class="py-docstring"> test = config.validate(validator)</span> </span>
1908
<span class="lineno">1818</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1909
<span class="lineno">1819</span> <span class="py-line"><span class="py-docstring"> (Normally having previously passed in the configspec when the ConfigObj</span> </span>
1910
<span class="lineno">1820</span> <span class="py-line"><span class="py-docstring"> was created - you can dynamically assign a dictionary of checks to the</span> </span>
1911
<span class="lineno">1821</span> <span class="py-line"><span class="py-docstring"> ``configspec`` attribute of a section though).</span> </span>
1912
<span class="lineno">1822</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1913
<span class="lineno">1823</span> <span class="py-line"><span class="py-docstring"> It returns ``True`` if everything passes, or a dictionary of</span> </span>
1914
<span class="lineno">1824</span> <span class="py-line"><span class="py-docstring"> pass/fails (True/False). If every member of a subsection passes, it</span> </span>
1915
<span class="lineno">1825</span> <span class="py-line"><span class="py-docstring"> will just have the value ``True``. (It also returns ``False`` if all</span> </span>
1916
<span class="lineno">1826</span> <span class="py-line"><span class="py-docstring"> members fail).</span> </span>
1917
<span class="lineno">1827</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1918
<span class="lineno">1828</span> <span class="py-line"><span class="py-docstring"> In addition, it converts the values from strings to their native</span> </span>
1919
<span class="lineno">1829</span> <span class="py-line"><span class="py-docstring"> types if their checks pass (and ``stringify`` is set).</span> </span>
1920
<span class="lineno">1830</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1921
<span class="lineno">1831</span> <span class="py-line"><span class="py-docstring"> If ``preserve_errors`` is ``True`` (``False`` is default) then instead</span> </span>
1922
<span class="lineno">1832</span> <span class="py-line"><span class="py-docstring"> of a marking a fail with a ``False``, it will preserve the actual</span> </span>
1923
<span class="lineno">1833</span> <span class="py-line"><span class="py-docstring"> exception object. This can contain info about the reason for failure.</span> </span>
1924
<span class="lineno">1834</span> <span class="py-line"><span class="py-docstring"> For example the ``VdtValueTooSmallError`` indeicates that the value</span> </span>
1925
<span class="lineno">1835</span> <span class="py-line"><span class="py-docstring"> supplied was too small. If a value (or section) is missing it will</span> </span>
1926
<span class="lineno">1836</span> <span class="py-line"><span class="py-docstring"> still be marked as ``False``.</span> </span>
1927
<span class="lineno">1837</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1928
<span class="lineno">1838</span> <span class="py-line"><span class="py-docstring"> You must have the validate module to use ``preserve_errors=True``.</span> </span>
1929
<span class="lineno">1839</span> <span class="py-line"><span class="py-docstring"> </span> </span>
1930
<span class="lineno">1840</span> <span class="py-line"><span class="py-docstring"> You can then use the ``flatten_errors`` function to turn your nested</span> </span>
1931
<span class="lineno">1841</span> <span class="py-line"><span class="py-docstring"> results dictionary into a flattened list of failures - useful for</span> </span>
1932
<span class="lineno">1842</span> <span class="py-line"><span class="py-docstring"> displaying meaningful error messages.</span> </span>
1933
<span class="lineno">1843</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
1934
<span class="lineno">1844</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">section</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1935
<span class="lineno">1845</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">configspec</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1936
<span class="lineno">1846</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">ValueError</span><span class="py-op">,</span> <span class="py-string">'No configspec supplied.'</span> </span>
1937
<span class="lineno">1847</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">preserve_errors</span><span class="py-op">:</span> </span>
1938
<span class="lineno">1848</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">VdtMissingValue</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
1939
<span class="lineno">1849</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">ImportError</span><span class="py-op">(</span><span class="py-string">'Missing validate module.'</span><span class="py-op">)</span> </span>
1940
<span class="lineno">1850</span> <span class="py-line"> <span class="py-name">section</span> <span class="py-op">=</span> <span class="py-name">self</span> </span>
1941
<span class="lineno">1851</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1942
<span class="lineno">1852</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">spec_section</span> <span class="py-op">=</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">configspec</span> </span>
1943
<span class="lineno">1853</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">copy</span> <span class="py-keyword">and</span> <span class="py-name">hasattr</span><span class="py-op">(</span><span class="py-name">section</span><span class="py-op">,</span> <span class="py-string">'_configspec_initial_comment'</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1944
<span class="lineno">1854</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">initial_comment</span> <span class="py-op">=</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_configspec_initial_comment</span> </span>
1945
<span class="lineno">1855</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">final_comment</span> <span class="py-op">=</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_configspec_final_comment</span> </span>
1946
<span class="lineno">1856</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">encoding</span> <span class="py-op">=</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_configspec_encoding</span> </span>
1947
<span class="lineno">1857</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">BOM</span> <span class="py-op">=</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_configspec_BOM</span> </span>
1948
<span class="lineno">1858</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">newlines</span> <span class="py-op">=</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_configspec_newlines</span> </span>
1949
<span class="lineno">1859</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">indent_type</span> <span class="py-op">=</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_configspec_indent_type</span> </span>
1950
<span class="lineno">1860</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-string">'__many__'</span> <span class="py-keyword">in</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">configspec</span><span class="py-op">:</span> </span>
1951
<span class="lineno">1861</span> <span class="py-line"> <span class="py-name">many</span> <span class="py-op">=</span> <span class="py-name">spec_section</span><span class="py-op">[</span><span class="py-string">'__many__'</span><span class="py-op">]</span> </span>
1952
<span class="lineno">1862</span> <span class="py-line"> <span class="py-comment"># dynamically assign the configspecs</span> </span>
1953
<span class="lineno">1863</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># for the sections below</span> </span>
1954
<span class="lineno">1864</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">:</span> </span>
1955
<span class="lineno">1865</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._handle_repeat" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_handle_repeat">_handle_repeat</a><span class="py-op">(</span><span class="py-name">section</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span><span class="py-op">,</span> <span class="py-name">many</span><span class="py-op">)</span> </span>
1956
<span class="lineno">1866</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1957
<span class="lineno">1867</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">out</span> <span class="py-op">=</span> <span class="py-op">{</span><span class="py-op">}</span> </span>
1958
<span class="lineno">1868</span> <span class="py-line"> <span class="py-name">ret_true</span> <span class="py-op">=</span> <span class="py-name">True</span> </span>
1959
<span class="lineno">1869</span> <span class="py-line"> <span class="py-name">ret_false</span> <span class="py-op">=</span> <span class="py-name">True</span> </span>
1960
<span class="lineno">1870</span> <span class="py-line"> <span class="py-name">order</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-name">k</span> <span class="py-keyword">for</span> <span class="py-name">k</span> <span class="py-keyword">in</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_order</span> <span class="py-keyword">if</span> <span class="py-name">k</span> <span class="py-keyword">in</span> <span class="py-name">spec_section</span><span class="py-op">]</span> </span>
1961
<span class="lineno">1871</span> <span class="py-line"> <span class="py-name">order</span> <span class="py-op">+=</span> <span class="py-op">[</span><span class="py-name">k</span> <span class="py-keyword">for</span> <span class="py-name">k</span> <span class="py-keyword">in</span> <span class="py-name">spec_section</span> <span class="py-keyword">if</span> <span class="py-name">k</span> <span class="py-keyword">not</span> <span class="py-keyword">in</span> <span class="py-name">order</span><span class="py-op">]</span> </span>
1962
<span class="lineno">1872</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">order</span><span class="py-op">:</span> </span>
1963
<span class="lineno">1873</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">entry</span> <span class="py-op">==</span> <span class="py-string">'__many__'</span><span class="py-op">:</span> </span>
1964
<span class="lineno">1874</span> <span class="py-line"> <span class="py-keyword">continue</span> </span>
1965
<span class="lineno">1875</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-op">(</span><span class="py-keyword">not</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">scalars</span><span class="py-op">)</span> <span class="py-keyword">or</span> <span class="py-op">(</span><span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">defaults</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1966
<span class="lineno">1876</span> <span class="py-line"> <span class="py-comment"># missing entries</span> </span>
1967
<span class="lineno">1877</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># or entries from defaults</span> </span>
1968
<span class="lineno">1878</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">missing</span> <span class="py-op">=</span> <span class="py-name">True</span> </span>
1969
<span class="lineno">1879</span> <span class="py-line"> <span class="py-name">val</span> <span class="py-op">=</span> <span class="py-name">None</span> </span>
1970
<span class="lineno">1880</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">copy</span> <span class="py-keyword">and</span> <span class="py-keyword">not</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">scalars</span><span class="py-op">:</span> </span>
1971
<span class="lineno">1881</span> <span class="py-line"> <span class="py-comment"># copy comments</span> </span>
1972
<span class="lineno">1882</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">comments</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-op">(</span> </span>
1973
<span class="lineno">1883</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_configspec_comments</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.get" class="py-name" href="pythonutils.configobj.Section-class.html#get">get</a><span class="py-op">(</span><span class="py-name">entry</span><span class="py-op">,</span> <span class="py-op">[</span><span class="py-op">]</span><span class="py-op">)</span><span class="py-op">)</span> </span>
1974
<span class="lineno">1884</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">inline_comments</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-op">(</span> </span>
1975
<span class="lineno">1885</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_configspec_inline_comments</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.get" class="py-name" href="pythonutils.configobj.Section-class.html#get">get</a><span class="py-op">(</span><span class="py-name">entry</span><span class="py-op">,</span> <span class="py-string">''</span><span class="py-op">)</span><span class="py-op">)</span> </span>
1976
<span class="lineno">1886</span> <span class="py-line"> <span class="py-comment">#</span> </span>
1977
<span class="lineno">1887</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1978
<span class="lineno">1888</span> <span class="py-line"> <span class="py-name">missing</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
1979
<span class="lineno">1889</span> <span class="py-line"> <span class="py-name">val</span> <span class="py-op">=</span> <span class="py-name">section</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> </span>
1980
<span class="lineno">1890</span> <span class="py-line"> <span class="py-keyword">try</span><span class="py-op">:</span> </span>
1981
<span class="lineno">1891</span> <span class="py-line"> <a title="pythonutils.configobj.SimpleVal.check" class="py-name" href="pythonutils.configobj.SimpleVal-class.html#check">check</a> <span class="py-op">=</span> <span class="py-name">validator</span><span class="py-op">.</span><a title="pythonutils.configobj.SimpleVal.check" class="py-name" href="pythonutils.configobj.SimpleVal-class.html#check">check</a><span class="py-op">(</span><span class="py-name">spec_section</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span><span class="py-op">,</span> </span>
1982
<span class="lineno">1892</span> <span class="py-line"> <span class="py-name">val</span><span class="py-op">,</span> </span>
1983
<span class="lineno">1893</span> <span class="py-line"> <span class="py-name">missing</span><span class="py-op">=</span><span class="py-name">missing</span> </span>
1984
<span class="lineno">1894</span> <span class="py-line"> <span class="py-op">)</span> </span>
1985
<span class="lineno">1895</span> <span class="py-line"> <span class="py-keyword">except</span> <span class="py-name">validator</span><span class="py-op">.</span><span class="py-name">baseErrorClass</span><span class="py-op">,</span> <span class="py-name">e</span><span class="py-op">:</span> </span>
1986
<span class="lineno">1896</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">preserve_errors</span> <span class="py-keyword">or</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">e</span><span class="py-op">,</span> <span class="py-name">VdtMissingValue</span><span class="py-op">)</span><span class="py-op">:</span> </span>
1987
<span class="lineno">1897</span> <span class="py-line"> <span class="py-name">out</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
1988
<span class="lineno">1898</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1989
<span class="lineno">1899</span> <span class="py-line"> <span class="py-comment"># preserve the error</span> </span>
1990
<span class="lineno">1900</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">out</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">e</span> </span>
1991
<span class="lineno">1901</span> <span class="py-line"> <span class="py-name">ret_false</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
1992
<span class="lineno">1902</span> <span class="py-line"> <span class="py-name">ret_true</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
1993
<span class="lineno">1903</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
1994
<span class="lineno">1904</span> <span class="py-line"> <span class="py-name">ret_false</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
1995
<span class="lineno">1905</span> <span class="py-line"> <span class="py-name">out</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">True</span> </span>
1996
<span class="lineno">1906</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">stringify</span> <span class="py-keyword">or</span> <span class="py-name">missing</span><span class="py-op">:</span> </span>
1997
<span class="lineno">1907</span> <span class="py-line"> <span class="py-comment"># if we are doing type conversion</span> </span>
1998
<span class="lineno">1908</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># or the value is a supplied default</span> </span>
1999
<span class="lineno">1909</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">stringify</span><span class="py-op">:</span> </span>
2000
<span class="lineno">1910</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><a title="pythonutils.configobj.SimpleVal.check" class="py-name" href="pythonutils.configobj.SimpleVal-class.html#check">check</a><span class="py-op">,</span> <span class="py-op">(</span><span class="py-name">list</span><span class="py-op">,</span> <span class="py-name">tuple</span><span class="py-op">)</span><span class="py-op">)</span><span class="py-op">:</span> </span>
2001
<span class="lineno">1911</span> <span class="py-line"> <span class="py-comment"># preserve lists</span> </span>
2002
<span class="lineno">1912</span> <span class="py-line"><span class="py-comment"></span> <a title="pythonutils.configobj.SimpleVal.check" class="py-name" href="pythonutils.configobj.SimpleVal-class.html#check">check</a> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._str" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_str">_str</a><span class="py-op">(</span><span class="py-name">item</span><span class="py-op">)</span> <span class="py-keyword">for</span> <span class="py-name">item</span> <span class="py-keyword">in</span> <a title="pythonutils.configobj.SimpleVal.check" class="py-name" href="pythonutils.configobj.SimpleVal-class.html#check">check</a><span class="py-op">]</span> </span>
2003
<span class="lineno">1913</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">missing</span> <span class="py-keyword">and</span> <a title="pythonutils.configobj.SimpleVal.check" class="py-name" href="pythonutils.configobj.SimpleVal-class.html#check">check</a> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
2004
<span class="lineno">1914</span> <span class="py-line"> <span class="py-comment"># convert the None from a default to a ''</span> </span>
2005
<span class="lineno">1915</span> <span class="py-line"><span class="py-comment"></span> <a title="pythonutils.configobj.SimpleVal.check" class="py-name" href="pythonutils.configobj.SimpleVal-class.html#check">check</a> <span class="py-op">=</span> <span class="py-string">''</span> </span>
2006
<span class="lineno">1916</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
2007
<span class="lineno">1917</span> <span class="py-line"> <a title="pythonutils.configobj.SimpleVal.check" class="py-name" href="pythonutils.configobj.SimpleVal-class.html#check">check</a> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj._str" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#_str">_str</a><span class="py-op">(</span><a title="pythonutils.configobj.SimpleVal.check" class="py-name" href="pythonutils.configobj.SimpleVal-class.html#check">check</a><span class="py-op">)</span> </span>
2008
<span class="lineno">1918</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-op">(</span><a title="pythonutils.configobj.SimpleVal.check" class="py-name" href="pythonutils.configobj.SimpleVal-class.html#check">check</a> <span class="py-op">!=</span> <span class="py-name">val</span><span class="py-op">)</span> <span class="py-keyword">or</span> <span class="py-name">missing</span><span class="py-op">:</span> </span>
2009
<span class="lineno">1919</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <a title="pythonutils.configobj.SimpleVal.check" class="py-name" href="pythonutils.configobj.SimpleVal-class.html#check">check</a> </span>
2010
<span class="lineno">1920</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-keyword">not</span> <span class="py-name">copy</span> <span class="py-keyword">and</span> <span class="py-name">missing</span> <span class="py-keyword">and</span> <span class="py-name">entry</span> <span class="py-keyword">not</span> <span class="py-keyword">in</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">defaults</span><span class="py-op">:</span> </span>
2011
<span class="lineno">1921</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">defaults</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-name">entry</span><span class="py-op">)</span> </span>
2012
<span class="lineno">1922</span> <span class="py-line"> <span class="py-comment">#</span> </span>
2013
<span class="lineno">1923</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># Missing sections will have been created as empty ones when the</span> </span>
2014
<span class="lineno">1924</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># configspec was read.</span> </span>
2015
<span class="lineno">1925</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">for</span> <span class="py-name">entry</span> <span class="py-keyword">in</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">sections</span><span class="py-op">:</span> </span>
2016
<span class="lineno">1926</span> <span class="py-line"> <span class="py-comment"># FIXME: this means DEFAULT is not copied in copy mode</span> </span>
2017
<span class="lineno">1927</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">section</span> <span class="py-keyword">is</span> <span class="py-name">self</span> <span class="py-keyword">and</span> <span class="py-name">entry</span> <span class="py-op">==</span> <span class="py-string">'DEFAULT'</span><span class="py-op">:</span> </span>
2018
<span class="lineno">1928</span> <span class="py-line"> <span class="py-keyword">continue</span> </span>
2019
<span class="lineno">1929</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">copy</span><span class="py-op">:</span> </span>
2020
<span class="lineno">1930</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">comments</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_cs_section_comments</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> </span>
2021
<span class="lineno">1931</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">inline_comments</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <span class="py-op">(</span> </span>
2022
<span class="lineno">1932</span> <span class="py-line"> <span class="py-name">section</span><span class="py-op">.</span><span class="py-name">_cs_section_inline_comments</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span><span class="py-op">)</span> </span>
2023
<span class="lineno">1933</span> <span class="py-line"> <a title="pythonutils.configobj.SimpleVal.check" class="py-name" href="pythonutils.configobj.SimpleVal-class.html#check">check</a> <span class="py-op">=</span> <span class="py-name">self</span><span class="py-op">.</span><a title="pythonutils.configobj.ConfigObj.validate" class="py-name" href="pythonutils.configobj.ConfigObj-class.html#validate">validate</a><span class="py-op">(</span><span class="py-name">validator</span><span class="py-op">,</span> <span class="py-name">preserve_errors</span><span class="py-op">=</span><span class="py-name">preserve_errors</span><span class="py-op">,</span> </span>
2024
<span class="lineno">1934</span> <span class="py-line"> <span class="py-name">copy</span><span class="py-op">=</span><span class="py-name">copy</span><span class="py-op">,</span> <span class="py-name">section</span><span class="py-op">=</span><span class="py-name">section</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span><span class="py-op">)</span> </span>
2025
<span class="lineno">1935</span> <span class="py-line"> <span class="py-name">out</span><span class="py-op">[</span><span class="py-name">entry</span><span class="py-op">]</span> <span class="py-op">=</span> <a title="pythonutils.configobj.SimpleVal.check" class="py-name" href="pythonutils.configobj.SimpleVal-class.html#check">check</a> </span>
2026
<span class="lineno">1936</span> <span class="py-line"> <span class="py-keyword">if</span> <a title="pythonutils.configobj.SimpleVal.check" class="py-name" href="pythonutils.configobj.SimpleVal-class.html#check">check</a> <span class="py-op">==</span> <span class="py-name">False</span><span class="py-op">:</span> </span>
2027
<span class="lineno">1937</span> <span class="py-line"> <span class="py-name">ret_true</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
2028
<span class="lineno">1938</span> <span class="py-line"> <span class="py-keyword">elif</span> <a title="pythonutils.configobj.SimpleVal.check" class="py-name" href="pythonutils.configobj.SimpleVal-class.html#check">check</a> <span class="py-op">==</span> <span class="py-name">True</span><span class="py-op">:</span> </span>
2029
<span class="lineno">1939</span> <span class="py-line"> <span class="py-name">ret_false</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
2030
<span class="lineno">1940</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
2031
<span class="lineno">1941</span> <span class="py-line"> <span class="py-name">ret_true</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
2032
<span class="lineno">1942</span> <span class="py-line"> <span class="py-name">ret_false</span> <span class="py-op">=</span> <span class="py-name">False</span> </span>
2033
<span class="lineno">1943</span> <span class="py-line"> <span class="py-comment">#</span> </span>
2034
<span class="lineno">1944</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">ret_true</span><span class="py-op">:</span> </span>
2035
<span class="lineno">1945</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">True</span> </span>
2036
<span class="lineno">1946</span> <span class="py-line"> <span class="py-keyword">elif</span> <span class="py-name">ret_false</span><span class="py-op">:</span> </span>
2037
<span class="lineno">1947</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">False</span> </span>
2038
<span class="lineno">1948</span> <span class="py-line"> <span class="py-keyword">else</span><span class="py-op">:</span> </span>
2039
<span class="lineno">1949</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">out</span> </span>
2040
</div></div><span class="lineno">1950</span> <span class="py-line"> </span>
2041
<a name="SimpleVal"></a><div id="SimpleVal-def"><span class="lineno">1951</span> <a class="pysrc-toggle" href="#" id="SimpleVal-toggle" onclick="toggle('SimpleVal'); return false;">-</a><span class="py-line"><span class="py-keyword">class</span> <a class="py-def-name" href="pythonutils.configobj.SimpleVal-class.html">SimpleVal</a><span class="py-op">(</span><span class="py-base-class">object</span><span class="py-op">)</span><span class="py-op">:</span> </span>
2042
</div><div id="SimpleVal-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="SimpleVal-expanded"><span class="lineno">1952</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
2043
<span class="lineno">1953</span> <span class="py-line"><span class="py-docstring"> A simple validator.</span> </span>
2044
<span class="lineno">1954</span> <span class="py-line"><span class="py-docstring"> Can be used to check that all members expected are present.</span> </span>
2045
<span class="lineno">1955</span> <span class="py-line"><span class="py-docstring"> </span> </span>
2046
<span class="lineno">1956</span> <span class="py-line"><span class="py-docstring"> To use it, provide a configspec with all your members in (the value given</span> </span>
2047
<span class="lineno">1957</span> <span class="py-line"><span class="py-docstring"> will be ignored). Pass an instance of ``SimpleVal`` to the ``validate``</span> </span>
2048
<span class="lineno">1958</span> <span class="py-line"><span class="py-docstring"> method of your ``ConfigObj``. ``validate`` will return ``True`` if all</span> </span>
2049
<span class="lineno">1959</span> <span class="py-line"><span class="py-docstring"> members are present, or a dictionary with True/False meaning</span> </span>
2050
<span class="lineno">1960</span> <span class="py-line"><span class="py-docstring"> present/missing. (Whole missing sections will be replaced with ``False``)</span> </span>
2051
<span class="lineno">1961</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
2052
<span class="lineno">1962</span> <span class="py-line"> </span>
2053
<a name="SimpleVal.__init__"></a><div id="SimpleVal.__init__-def"><span class="lineno">1963</span> <a class="pysrc-toggle" href="#" id="SimpleVal.__init__-toggle" onclick="toggle('SimpleVal.__init__'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.SimpleVal-class.html#__init__">__init__</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">)</span><span class="py-op">:</span> </span>
2054
</div><div id="SimpleVal.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="SimpleVal.__init__-expanded"><span class="lineno">1964</span> <span class="py-line"> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">baseErrorClass</span> <span class="py-op">=</span> <a title="pythonutils.configobj.ConfigObjError" class="py-name" href="pythonutils.configobj.ConfigObjError-class.html">ConfigObjError</a> </span>
2055
</div><span class="lineno">1965</span> <span class="py-line"> </span>
2056
<a name="SimpleVal.check"></a><div id="SimpleVal.check-def"><span class="lineno">1966</span> <a class="pysrc-toggle" href="#" id="SimpleVal.check-toggle" onclick="toggle('SimpleVal.check'); return false;">-</a><span class="py-line"> <span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj.SimpleVal-class.html#check">check</a><span class="py-op">(</span><span class="py-param">self</span><span class="py-op">,</span> <span class="py-param">check</span><span class="py-op">,</span> <span class="py-param">member</span><span class="py-op">,</span> <span class="py-param">missing</span><span class="py-op">=</span><span class="py-name">False</span><span class="py-op">)</span><span class="py-op">:</span> </span>
2057
</div><div id="SimpleVal.check-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="SimpleVal.check-expanded"><span class="lineno">1967</span> <span class="py-line"> <span class="py-docstring">"""A dummy check method, always returns the value unchanged."""</span> </span>
2058
<span class="lineno">1968</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">missing</span><span class="py-op">:</span> </span>
2059
<span class="lineno">1969</span> <span class="py-line"> <span class="py-keyword">raise</span> <span class="py-name">self</span><span class="py-op">.</span><span class="py-name">baseErrorClass</span> </span>
2060
<span class="lineno">1970</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">member</span> </span>
2061
</div></div><span class="lineno">1971</span> <span class="py-line"> </span>
2062
<span class="lineno">1972</span> <span class="py-line"><span class="py-comment"># Check / processing functions for options</span> </span>
2063
<a name="flatten_errors"></a><div id="flatten_errors-def"><span class="lineno">1973</span> <a class="pysrc-toggle" href="#" id="flatten_errors-toggle" onclick="toggle('flatten_errors'); return false;">-</a><span class="py-line"><span class="py-comment"></span><span class="py-keyword">def</span> <a class="py-def-name" href="pythonutils.configobj-module.html#flatten_errors">flatten_errors</a><span class="py-op">(</span><span class="py-param">cfg</span><span class="py-op">,</span> <span class="py-param">res</span><span class="py-op">,</span> <span class="py-param">levels</span><span class="py-op">=</span><span class="py-name">None</span><span class="py-op">,</span> <span class="py-param">results</span><span class="py-op">=</span><span class="py-name">None</span><span class="py-op">)</span><span class="py-op">:</span> </span>
2064
</div><div id="flatten_errors-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="flatten_errors-expanded"><span class="lineno">1974</span> <span class="py-line"> <span class="py-docstring">"""</span> </span>
2065
<span class="lineno">1975</span> <span class="py-line"><span class="py-docstring"> An example function that will turn a nested dictionary of results</span> </span>
2066
<span class="lineno">1976</span> <span class="py-line"><span class="py-docstring"> (as returned by ``ConfigObj.validate``) into a flat list.</span> </span>
2067
<span class="lineno">1977</span> <span class="py-line"><span class="py-docstring"> </span> </span>
2068
<span class="lineno">1978</span> <span class="py-line"><span class="py-docstring"> ``cfg`` is the ConfigObj instance being checked, ``res`` is the results</span> </span>
2069
<span class="lineno">1979</span> <span class="py-line"><span class="py-docstring"> dictionary returned by ``validate``.</span> </span>
2070
<span class="lineno">1980</span> <span class="py-line"><span class="py-docstring"> </span> </span>
2071
<span class="lineno">1981</span> <span class="py-line"><span class="py-docstring"> (This is a recursive function, so you shouldn't use the ``levels`` or</span> </span>
2072
<span class="lineno">1982</span> <span class="py-line"><span class="py-docstring"> ``results`` arguments - they are used by the function.</span> </span>
2073
<span class="lineno">1983</span> <span class="py-line"><span class="py-docstring"> </span> </span>
2074
<span class="lineno">1984</span> <span class="py-line"><span class="py-docstring"> Returns a list of keys that failed. Each member of the list is a tuple :</span> </span>
2075
<span class="lineno">1985</span> <span class="py-line"><span class="py-docstring"> ::</span> </span>
2076
<span class="lineno">1986</span> <span class="py-line"><span class="py-docstring"> </span> </span>
2077
<span class="lineno">1987</span> <span class="py-line"><span class="py-docstring"> ([list of sections...], key, result)</span> </span>
2078
<span class="lineno">1988</span> <span class="py-line"><span class="py-docstring"> </span> </span>
2079
<span class="lineno">1989</span> <span class="py-line"><span class="py-docstring"> If ``validate`` was called with ``preserve_errors=False`` (the default)</span> </span>
2080
<span class="lineno">1990</span> <span class="py-line"><span class="py-docstring"> then ``result`` will always be ``False``.</span> </span>
2081
<span class="lineno">1991</span> <span class="py-line"><span class="py-docstring"></span> </span>
2082
<span class="lineno">1992</span> <span class="py-line"><span class="py-docstring"> *list of sections* is a flattened list of sections that the key was found</span> </span>
2083
<span class="lineno">1993</span> <span class="py-line"><span class="py-docstring"> in.</span> </span>
2084
<span class="lineno">1994</span> <span class="py-line"><span class="py-docstring"> </span> </span>
2085
<span class="lineno">1995</span> <span class="py-line"><span class="py-docstring"> If the section was missing then key will be ``None``.</span> </span>
2086
<span class="lineno">1996</span> <span class="py-line"><span class="py-docstring"> </span> </span>
2087
<span class="lineno">1997</span> <span class="py-line"><span class="py-docstring"> If the value (or section) was missing then ``result`` will be ``False``.</span> </span>
2088
<span class="lineno">1998</span> <span class="py-line"><span class="py-docstring"> </span> </span>
2089
<span class="lineno">1999</span> <span class="py-line"><span class="py-docstring"> If ``validate`` was called with ``preserve_errors=True`` and a value</span> </span>
2090
<span class="lineno">2000</span> <span class="py-line"><span class="py-docstring"> was present, but failed the check, then ``result`` will be the exception</span> </span>
2091
<span class="lineno">2001</span> <span class="py-line"><span class="py-docstring"> object returned. You can use this as a string that describes the failure.</span> </span>
2092
<span class="lineno">2002</span> <span class="py-line"><span class="py-docstring"> </span> </span>
2093
<span class="lineno">2003</span> <span class="py-line"><span class="py-docstring"> For example *The value "3" is of the wrong type*.</span> </span>
2094
<span class="lineno">2004</span> <span class="py-line"><span class="py-docstring"> </span> </span>
2095
<span class="lineno">2005</span> <span class="py-line"><span class="py-docstring"> >>> import validate</span> </span>
2096
<span class="lineno">2006</span> <span class="py-line"><span class="py-docstring"> >>> vtor = validate.Validator()</span> </span>
2097
<span class="lineno">2007</span> <span class="py-line"><span class="py-docstring"> >>> my_ini = '''</span> </span>
2098
<span class="lineno">2008</span> <span class="py-line"><span class="py-docstring"> ... option1 = True</span> </span>
2099
<span class="lineno">2009</span> <span class="py-line"><span class="py-docstring"> ... [section1]</span> </span>
2100
<span class="lineno">2010</span> <span class="py-line"><span class="py-docstring"> ... option1 = True</span> </span>
2101
<span class="lineno">2011</span> <span class="py-line"><span class="py-docstring"> ... [section2]</span> </span>
2102
<span class="lineno">2012</span> <span class="py-line"><span class="py-docstring"> ... another_option = Probably</span> </span>
2103
<span class="lineno">2013</span> <span class="py-line"><span class="py-docstring"> ... [section3]</span> </span>
2104
<span class="lineno">2014</span> <span class="py-line"><span class="py-docstring"> ... another_option = True</span> </span>
2105
<span class="lineno">2015</span> <span class="py-line"><span class="py-docstring"> ... [[section3b]]</span> </span>
2106
<span class="lineno">2016</span> <span class="py-line"><span class="py-docstring"> ... value = 3</span> </span>
2107
<span class="lineno">2017</span> <span class="py-line"><span class="py-docstring"> ... value2 = a</span> </span>
2108
<span class="lineno">2018</span> <span class="py-line"><span class="py-docstring"> ... value3 = 11</span> </span>
2109
<span class="lineno">2019</span> <span class="py-line"><span class="py-docstring"> ... '''</span> </span>
2110
<span class="lineno">2020</span> <span class="py-line"><span class="py-docstring"> >>> my_cfg = '''</span> </span>
2111
<span class="lineno">2021</span> <span class="py-line"><span class="py-docstring"> ... option1 = boolean()</span> </span>
2112
<span class="lineno">2022</span> <span class="py-line"><span class="py-docstring"> ... option2 = boolean()</span> </span>
2113
<span class="lineno">2023</span> <span class="py-line"><span class="py-docstring"> ... option3 = boolean(default=Bad_value)</span> </span>
2114
<span class="lineno">2024</span> <span class="py-line"><span class="py-docstring"> ... [section1]</span> </span>
2115
<span class="lineno">2025</span> <span class="py-line"><span class="py-docstring"> ... option1 = boolean()</span> </span>
2116
<span class="lineno">2026</span> <span class="py-line"><span class="py-docstring"> ... option2 = boolean()</span> </span>
2117
<span class="lineno">2027</span> <span class="py-line"><span class="py-docstring"> ... option3 = boolean(default=Bad_value)</span> </span>
2118
<span class="lineno">2028</span> <span class="py-line"><span class="py-docstring"> ... [section2]</span> </span>
2119
<span class="lineno">2029</span> <span class="py-line"><span class="py-docstring"> ... another_option = boolean()</span> </span>
2120
<span class="lineno">2030</span> <span class="py-line"><span class="py-docstring"> ... [section3]</span> </span>
2121
<span class="lineno">2031</span> <span class="py-line"><span class="py-docstring"> ... another_option = boolean()</span> </span>
2122
<span class="lineno">2032</span> <span class="py-line"><span class="py-docstring"> ... [[section3b]]</span> </span>
2123
<span class="lineno">2033</span> <span class="py-line"><span class="py-docstring"> ... value = integer</span> </span>
2124
<span class="lineno">2034</span> <span class="py-line"><span class="py-docstring"> ... value2 = integer</span> </span>
2125
<span class="lineno">2035</span> <span class="py-line"><span class="py-docstring"> ... value3 = integer(0, 10)</span> </span>
2126
<span class="lineno">2036</span> <span class="py-line"><span class="py-docstring"> ... [[[section3b-sub]]]</span> </span>
2127
<span class="lineno">2037</span> <span class="py-line"><span class="py-docstring"> ... value = string</span> </span>
2128
<span class="lineno">2038</span> <span class="py-line"><span class="py-docstring"> ... [section4]</span> </span>
2129
<span class="lineno">2039</span> <span class="py-line"><span class="py-docstring"> ... another_option = boolean()</span> </span>
2130
<span class="lineno">2040</span> <span class="py-line"><span class="py-docstring"> ... '''</span> </span>
2131
<span class="lineno">2041</span> <span class="py-line"><span class="py-docstring"> >>> cs = my_cfg.split('\\n')</span> </span>
2132
<span class="lineno">2042</span> <span class="py-line"><span class="py-docstring"> >>> ini = my_ini.split('\\n')</span> </span>
2133
<span class="lineno">2043</span> <span class="py-line"><span class="py-docstring"> >>> cfg = ConfigObj(ini, configspec=cs)</span> </span>
2134
<span class="lineno">2044</span> <span class="py-line"><span class="py-docstring"> >>> res = cfg.validate(vtor, preserve_errors=True)</span> </span>
2135
<span class="lineno">2045</span> <span class="py-line"><span class="py-docstring"> >>> errors = []</span> </span>
2136
<span class="lineno">2046</span> <span class="py-line"><span class="py-docstring"> >>> for entry in flatten_errors(cfg, res):</span> </span>
2137
<span class="lineno">2047</span> <span class="py-line"><span class="py-docstring"> ... section_list, key, error = entry</span> </span>
2138
<span class="lineno">2048</span> <span class="py-line"><span class="py-docstring"> ... section_list.insert(0, '[root]')</span> </span>
2139
<span class="lineno">2049</span> <span class="py-line"><span class="py-docstring"> ... if key is not None:</span> </span>
2140
<span class="lineno">2050</span> <span class="py-line"><span class="py-docstring"> ... section_list.append(key)</span> </span>
2141
<span class="lineno">2051</span> <span class="py-line"><span class="py-docstring"> ... else:</span> </span>
2142
<span class="lineno">2052</span> <span class="py-line"><span class="py-docstring"> ... section_list.append('[missing]')</span> </span>
2143
<span class="lineno">2053</span> <span class="py-line"><span class="py-docstring"> ... section_string = ', '.join(section_list)</span> </span>
2144
<span class="lineno">2054</span> <span class="py-line"><span class="py-docstring"> ... errors.append((section_string, ' = ', error))</span> </span>
2145
<span class="lineno">2055</span> <span class="py-line"><span class="py-docstring"> >>> errors.sort()</span> </span>
2146
<span class="lineno">2056</span> <span class="py-line"><span class="py-docstring"> >>> for entry in errors:</span> </span>
2147
<span class="lineno">2057</span> <span class="py-line"><span class="py-docstring"> ... print entry[0], entry[1], (entry[2] or 0)</span> </span>
2148
<span class="lineno">2058</span> <span class="py-line"><span class="py-docstring"> [root], option2 = 0</span> </span>
2149
<span class="lineno">2059</span> <span class="py-line"><span class="py-docstring"> [root], option3 = the value "Bad_value" is of the wrong type.</span> </span>
2150
<span class="lineno">2060</span> <span class="py-line"><span class="py-docstring"> [root], section1, option2 = 0</span> </span>
2151
<span class="lineno">2061</span> <span class="py-line"><span class="py-docstring"> [root], section1, option3 = the value "Bad_value" is of the wrong type.</span> </span>
2152
<span class="lineno">2062</span> <span class="py-line"><span class="py-docstring"> [root], section2, another_option = the value "Probably" is of the wrong type.</span> </span>
2153
<span class="lineno">2063</span> <span class="py-line"><span class="py-docstring"> [root], section3, section3b, section3b-sub, [missing] = 0</span> </span>
2154
<span class="lineno">2064</span> <span class="py-line"><span class="py-docstring"> [root], section3, section3b, value2 = the value "a" is of the wrong type.</span> </span>
2155
<span class="lineno">2065</span> <span class="py-line"><span class="py-docstring"> [root], section3, section3b, value3 = the value "11" is too big.</span> </span>
2156
<span class="lineno">2066</span> <span class="py-line"><span class="py-docstring"> [root], section4, [missing] = 0</span> </span>
2157
<span class="lineno">2067</span> <span class="py-line"><span class="py-docstring"> """</span> </span>
2158
<span class="lineno">2068</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">levels</span> <span class="py-keyword">is</span> <span class="py-name">None</span><span class="py-op">:</span> </span>
2159
<span class="lineno">2069</span> <span class="py-line"> <span class="py-comment"># first time called</span> </span>
2160
<span class="lineno">2070</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">levels</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
2161
<span class="lineno">2071</span> <span class="py-line"> <span class="py-name">results</span> <span class="py-op">=</span> <span class="py-op">[</span><span class="py-op">]</span> </span>
2162
<span class="lineno">2072</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">res</span> <span class="py-keyword">is</span> <span class="py-name">True</span><span class="py-op">:</span> </span>
2163
<span class="lineno">2073</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">results</span> </span>
2164
<span class="lineno">2074</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">res</span> <span class="py-keyword">is</span> <span class="py-name">False</span><span class="py-op">:</span> </span>
2165
<span class="lineno">2075</span> <span class="py-line"> <span class="py-name">results</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-op">(</span><span class="py-name">levels</span><span class="py-op">[</span><span class="py-op">:</span><span class="py-op">]</span><span class="py-op">,</span> <span class="py-name">None</span><span class="py-op">,</span> <span class="py-name">False</span><span class="py-op">)</span><span class="py-op">)</span> </span>
2166
<span class="lineno">2076</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">levels</span><span class="py-op">:</span> </span>
2167
<span class="lineno">2077</span> <span class="py-line"> <span class="py-name">levels</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.pop" class="py-name" href="pythonutils.configobj.Section-class.html#pop">pop</a><span class="py-op">(</span><span class="py-op">)</span> </span>
2168
<span class="lineno">2078</span> <span class="py-line"> <span class="py-keyword">return</span> <span class="py-name">results</span> </span>
2169
<span class="lineno">2079</span> <span class="py-line"> <span class="py-keyword">for</span> <span class="py-op">(</span><span class="py-name">key</span><span class="py-op">,</span> <span class="py-name">val</span><span class="py-op">)</span> <span class="py-keyword">in</span> <span class="py-name">res</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.items" class="py-name" href="pythonutils.configobj.Section-class.html#items">items</a><span class="py-op">(</span><span class="py-op">)</span><span class="py-op">:</span> </span>
2170
<span class="lineno">2080</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">val</span> <span class="py-op">==</span> <span class="py-name">True</span><span class="py-op">:</span> </span>
2171
<span class="lineno">2081</span> <span class="py-line"> <span class="py-keyword">continue</span> </span>
2172
<span class="lineno">2082</span> <span class="py-line"> <span class="py-keyword">if</span> <span class="py-name">isinstance</span><span class="py-op">(</span><span class="py-name">cfg</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.get" class="py-name" href="pythonutils.configobj.Section-class.html#get">get</a><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span><span class="py-op">,</span> <a title="pythonutils.configobj.Section.dict" class="py-name" href="pythonutils.configobj.Section-class.html#dict">dict</a><span class="py-op">)</span><span class="py-op">:</span> </span>
2173
<span class="lineno">2083</span> <span class="py-line"> <span class="py-comment"># Go down one level</span> </span>
2174
<span class="lineno">2084</span> <span class="py-line"><span class="py-comment"></span> <span class="py-name">levels</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-name">key</span><span class="py-op">)</span> </span>
2175
<span class="lineno">2085</span> <span class="py-line"> <a title="pythonutils.configobj.flatten_errors" class="py-name" href="pythonutils.configobj-module.html#flatten_errors">flatten_errors</a><span class="py-op">(</span><span class="py-name">cfg</span><span class="py-op">[</span><span class="py-name">key</span><span class="py-op">]</span><span class="py-op">,</span> <span class="py-name">val</span><span class="py-op">,</span> <span class="py-name">levels</span><span class="py-op">,</span> <span class="py-name">results</span><span class="py-op">)</span> </span>
2176
<span class="lineno">2086</span> <span class="py-line"> <span class="py-keyword">continue</span> </span>
2177
<span class="lineno">2087</span> <span class="py-line"> <span class="py-name">results</span><span class="py-op">.</span><span class="py-name">append</span><span class="py-op">(</span><span class="py-op">(</span><span class="py-name">levels</span><span class="py-op">[</span><span class="py-op">:</span><span class="py-op">]</span><span class="py-op">,</span> <span class="py-name">key</span><span class="py-op">,</span> <span class="py-name">val</span><span class="py-op">)</span><span class="py-op">)</span> </span>
2178
<span class="lineno">2088</span> <span class="py-line"> <span class="py-comment">#</span> </span>
2179
<span class="lineno">2089</span> <span class="py-line"><span class="py-comment"></span> <span class="py-comment"># Go up one level</span> </span>
2180
<span class="lineno">2090</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">if</span> <span class="py-name">levels</span><span class="py-op">:</span> </span>
2181
<span class="lineno">2091</span> <span class="py-line"> <span class="py-name">levels</span><span class="py-op">.</span><a title="pythonutils.configobj.Section.pop" class="py-name" href="pythonutils.configobj.Section-class.html#pop">pop</a><span class="py-op">(</span><span class="py-op">)</span> </span>
2182
<span class="lineno">2092</span> <span class="py-line"> <span class="py-comment">#</span> </span>
2183
<span class="lineno">2093</span> <span class="py-line"><span class="py-comment"></span> <span class="py-keyword">return</span> <span class="py-name">results</span> </span>
2184
</div><span class="lineno">2094</span> <span class="py-line"> </span>
2185
<span class="lineno">2095</span> <span class="py-line"><span class="py-string">"""*A programming language is a medium of expression.* - Paul Graham"""</span> </span>
2186
<span class="lineno">2096</span> <span class="py-line"> </span><script type="text/javascript">
2188
expandto(location.href);
2194
<!-- ==================== NAVIGATION BAR ==================== -->
2195
<table class="navbar" border="0" width="100%" cellpadding="0"
2196
bgcolor="#a0c0ff" cellspacing="0">
2197
<tr valign="middle">
2199
<th bgcolor="#70b0f0" class="navselect"
2200
> Home </th>
2203
<th class="navbar"> <a class="navbar"
2204
href="trees.html">Trees</a> </th>
2207
<th class="navbar"> <a class="navbar"
2208
href="indices.html">Index</a> </th>
2211
<th class="navbar"> <a class="navbar"
2212
href="help.html">Help</a> </th>
2214
<!-- Project homepage -->
2215
<th class="navbar" align="right" width="100%">
2216
<table border="0" cellpadding="0" cellspacing="0">
2217
<tr><th class="navbar" align="center">
2218
<p class="nomargin">
2219
<a class="navbar" target="_top" href="http://www.voidspace.org.uk/python/configobj.html">ConfigObj</a>
2220
</p></th></tr></table></th>
2223
<table border="0" cellpadding="0" cellspacing="0" width="100%%">
2225
<td align="left" class="footer">Generated by Epydoc
2226
3.0alpha2 on Sat Apr 29 11:33:54 2006</td>
2227
<td align="right" class="footer">
2228
<a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>
2233
<script type="text/javascript">
2235
// Private objects are initially displayed (because if
2236
// javascript is turned off then we want them to be
2237
// visible); but by default, we want to hide them. So hide
2238
// them unless we have a cookie that says to show them.