~ubuntu-branches/debian/squeeze/configobj/squeeze

« back to all changes in this revision

Viewing changes to configobj-api/pythonutils.configobj-pysrc.html

  • Committer: Bazaar Package Importer
  • Author(s): Gustavo Noronha Silva
  • Date: 2006-05-07 22:49:58 UTC
  • Revision ID: james.westby@ubuntu.com-20060507224958-sbmw45csexigf431
Tags: upstream-4.3.1
ImportĀ upstreamĀ versionĀ 4.3.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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">
 
5
<head>
 
6
  <title>pythonutils.configobj</title>
 
7
  <link rel="stylesheet" href="epydoc.css" type="text/css" />
 
8
  <script type="text/javascript" src="epydoc.js"></script>
 
9
</head>
 
10
 
 
11
<body bgcolor="white" text="black" link="blue" vlink="#204080"
 
12
      alink="#204080">
 
13
<!-- ==================== NAVIGATION BAR ==================== -->
 
14
<table class="navbar" border="0" width="100%" cellpadding="0"
 
15
       bgcolor="#a0c0ff" cellspacing="0">
 
16
  <tr valign="middle">
 
17
  <!-- Home link -->
 
18
      <th bgcolor="#70b0f0" class="navselect"
 
19
          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
 
20
 
 
21
  <!-- Tree link -->
 
22
      <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar"
 
23
        href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
 
24
 
 
25
  <!-- Index link -->
 
26
      <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar"
 
27
        href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>
 
28
 
 
29
  <!-- Help link -->
 
30
      <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar"
 
31
        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
 
32
 
 
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">
 
37
            <p class="nomargin">
 
38
              <a class="navbar" target="_top" href="http://www.voidspace.org.uk/python/configobj.html">ConfigObj</a>
 
39
      </p></th></tr></table></th>
 
40
  </tr>
 
41
</table>
 
42
<table width="100%" cellpadding="0" cellspacing="0">
 
43
  <tr valign="top">
 
44
    <td width="100%">
 
45
      <span class="breadcrumbs">
 
46
        Package&nbsp;pythonutils ::
 
47
        Module&nbsp;configobj
 
48
      </span>
 
49
    </td>
 
50
    <td>
 
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
            >]&nbsp;|&nbsp;<a href="pythonutils.configobj-pysrc.html"
 
58
            target="_top">no&nbsp;frames</a>]</span></td></tr>
 
59
      </table>
 
60
    </td>
 
61
  </tr>
 
62
</table>
 
63
<h2 class="py-src">Source Code for <a href="pythonutils.configobj-module.html">Module pythonutils.configobj</a></h2>
 
64
<div class="py-src">
 
65
<pre class="py-src">
 
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">&lt;</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">        &gt;&gt;&gt; n = a.dict()</span> </span>
 
629
<span class="lineno"> 544</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; c1 = ConfigObj(b)</span> </span>
 
662
<span class="lineno"> 577</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; c2 = ConfigObj(a)</span> </span>
 
663
<span class="lineno"> 578</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; c2.merge(c1)</span> </span>
 
664
<span class="lineno"> 579</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; cfg = ConfigObj(config)</span> </span>
 
734
<span class="lineno"> 649</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; m = ConfigObj(a)</span> </span>
 
797
<span class="lineno"> 712</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; m.decode('ascii')</span> </span>
 
798
<span class="lineno"> 713</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; 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 &gt;&gt; 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">        &gt;&gt;&gt; testuni(m)</span> </span>
 
808
<span class="lineno"> 723</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; m.encode('ascii')</span> </span>
 
809
<span class="lineno"> 724</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; a = ConfigObj()</span> </span>
 
878
<span class="lineno"> 793</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; a['a'] = 'fish'</span> </span>
 
879
<span class="lineno"> 794</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; a['b'] = 'True'</span> </span>
 
883
<span class="lineno"> 798</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; a['b'] = 'off'</span> </span>
 
886
<span class="lineno"> 801</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; a = ConfigObj()</span> </span>
 
911
<span class="lineno"> 826</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; a['a'] = 'fish'</span> </span>
 
912
<span class="lineno"> 827</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; a['b'] = '1'</span> </span>
 
916
<span class="lineno"> 831</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; a['b'] = '3.2'</span> </span>
 
919
<span class="lineno"> 834</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; a = ConfigObj()</span> </span>
 
933
<span class="lineno"> 848</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; a['a'] = 'fish'</span> </span>
 
934
<span class="lineno"> 849</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; a['b'] = '1'</span> </span>
 
938
<span class="lineno"> 853</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; 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">        &gt;&gt;&gt; a['b'] = '3.2'</span> </span>
 
941
<span class="lineno"> 856</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; 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">                    (?:(?&lt;!,))                      # 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">&lt;</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">&lt;</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">&lt;</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">&lt;</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">&gt;</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">&gt;</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">        &gt;&gt;&gt; filename = a.filename</span> </span>
 
1803
<span class="lineno">1713</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; a.filename = 'test.ini'</span> </span>
 
1804
<span class="lineno">1714</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; a.write()</span> </span>
 
1805
<span class="lineno">1715</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; a.filename = filename</span> </span>
 
1806
<span class="lineno">1716</span>  <span class="py-line"><span class="py-docstring">        &gt;&gt;&gt; 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">    &gt;&gt;&gt; import validate</span> </span>
 
2096
<span class="lineno">2006</span>  <span class="py-line"><span class="py-docstring">    &gt;&gt;&gt; vtor = validate.Validator()</span> </span>
 
2097
<span class="lineno">2007</span>  <span class="py-line"><span class="py-docstring">    &gt;&gt;&gt; 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">    &gt;&gt;&gt; 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">    &gt;&gt;&gt; cs = my_cfg.split('\\n')</span> </span>
 
2132
<span class="lineno">2042</span>  <span class="py-line"><span class="py-docstring">    &gt;&gt;&gt; ini = my_ini.split('\\n')</span> </span>
 
2133
<span class="lineno">2043</span>  <span class="py-line"><span class="py-docstring">    &gt;&gt;&gt; cfg = ConfigObj(ini, configspec=cs)</span> </span>
 
2134
<span class="lineno">2044</span>  <span class="py-line"><span class="py-docstring">    &gt;&gt;&gt; res = cfg.validate(vtor, preserve_errors=True)</span> </span>
 
2135
<span class="lineno">2045</span>  <span class="py-line"><span class="py-docstring">    &gt;&gt;&gt; errors = []</span> </span>
 
2136
<span class="lineno">2046</span>  <span class="py-line"><span class="py-docstring">    &gt;&gt;&gt; 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">    &gt;&gt;&gt; errors.sort()</span> </span>
 
2146
<span class="lineno">2056</span>  <span class="py-line"><span class="py-docstring">    &gt;&gt;&gt; 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">
 
2187
<!--
 
2188
expandto(location.href);
 
2189
// -->
 
2190
</script>
 
2191
</pre>
 
2192
</div>
 
2193
<br />
 
2194
<!-- ==================== NAVIGATION BAR ==================== -->
 
2195
<table class="navbar" border="0" width="100%" cellpadding="0"
 
2196
       bgcolor="#a0c0ff" cellspacing="0">
 
2197
  <tr valign="middle">
 
2198
  <!-- Home link -->
 
2199
      <th bgcolor="#70b0f0" class="navselect"
 
2200
          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
 
2201
 
 
2202
  <!-- Tree link -->
 
2203
      <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar"
 
2204
        href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
 
2205
 
 
2206
  <!-- Index link -->
 
2207
      <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar"
 
2208
        href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>
 
2209
 
 
2210
  <!-- Help link -->
 
2211
      <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar"
 
2212
        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
 
2213
 
 
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>
 
2221
  </tr>
 
2222
</table>
 
2223
<table border="0" cellpadding="0" cellspacing="0" width="100%%">
 
2224
  <tr>
 
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>
 
2229
    </td>
 
2230
  </tr>
 
2231
</table>
 
2232
 
 
2233
<script type="text/javascript">
 
2234
  <!--
 
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.
 
2239
  checkCookie()
 
2240
  // -->
 
2241
</script>
 
2242
  
 
2243
</body>
 
2244
</html>