~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/util/configobj/docs/configobj.txt

  • Committer: Patch Queue Manager
  • Date: 2016-04-21 04:10:52 UTC
  • mfrom: (6616.1.1 fix-en-user-guide)
  • Revision ID: pqm@pqm.ubuntu.com-20160421041052-clcye7ns1qcl2n7w
(richard-wilbur) Ensure build of English use guide always uses English text
 even when user's locale specifies a different language. (Jelmer Vernooij)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
==================================
2
 
 Reading and Writing Config Files
3
 
==================================
4
 
 
5
 
----------------------------------------
6
 
 ConfigObj 4 Introduction and Reference
7
 
----------------------------------------
8
 
 
9
 
:Authors: Michael Foord, Nicola Larosa
10
 
:Version: ConfigObj 4.4.0
11
 
:Date: 2007/02/04
12
 
:Homepage: `ConfigObj Homepage`_
13
 
:Sourceforge: Sourceforge_
14
 
:Development: `SVN Repository`_
15
 
:License: `BSD License`_
16
 
:Support: `Mailing List`_
17
 
 
18
 
.. _Mailing List: http://lists.sourceforge.net/lists/listinfo/configobj-develop
19
 
.. _SVN Repository: http://svn.pythonutils.python-hosting.com
20
 
 
21
 
.. meta::
22
 
   :description: ConfigObj - a Python module for easy reading and writing of 
23
 
                 config files.
24
 
   :keywords: python, script, module, config, configuration, data, persistence,
25
 
              developer, configparser
26
 
 
27
 
.. contents:: ConfigObj Manual
28
 
.. sectnum::
29
 
 
30
 
Introduction
31
 
============
32
 
 
33
 
**ConfigObj** is a simple but powerful config file reader and writer: an *ini
34
 
file round tripper*. Its main feature is that it is very easy to use, with a
35
 
straightforward programmer's interface and a simple syntax for config files.
36
 
It has lots of other features though :
37
 
    
38
 
* Nested sections (subsections), to any level
39
 
* List values
40
 
* Multiple line values
41
 
* String interpolation (substitution)
42
 
* Integrated with a powerful validation system
43
 
 
44
 
    - including automatic type checking/conversion
45
 
    - repeated sections
46
 
    - and allowing default values
47
 
 
48
 
* All comments in the file are preserved
49
 
* The order of keys/sections is preserved
50
 
* No external dependencies
51
 
* Full Unicode support
52
 
* A powerful ``unrepr`` mode for storing basic datatypes
53
 
 
54
 
ConfigObj has a barrage of doctests [#]_ built into it, testing almost every
55
 
feature. Run ``python configobj_test.py -v`` to see them in action.
56
 
 
57
 
For support and bug reports please use the ConfigObj `Mailing List`_.
58
 
 
59
 
 
60
 
.. _ConfigObj for Data Persistence: http://www.voidspace.org.uk/python/articles/configobj_for_data_persistence.shtml
61
 
.. _ConfigPersist.py: http://www.voidspace.org.uk/python/configpersist.html
62
 
 
63
 
 
64
 
Downloading
65
 
===========
66
 
 
67
 
The current version is **4.4.0**, dated 4th February 2007. ConfigObj 4 is
68
 
now stable. We still expect to pick up a few bugs along the way though [#]_.
69
 
{sm;:-)}
70
 
 
71
 
You can get ConfigObj in the following ways :
72
 
 
73
 
Files
74
 
-----
75
 
 
76
 
* configobj.py_ from Voidspace
77
 
 
78
 
    ConfigObj has no external dependencies. This file is sufficient to access
79
 
    all the functionality except Validation_.
80
 
 
81
 
* configobj.zip_ from Voidspace
82
 
 
83
 
    This also contains validate.py_ , the `API Docs`_ and `this document`_.
84
 
 
85
 
* The latest development version can be obtained from the `Subversion
86
 
  Repository`_.
87
 
 
88
 
* validate.py_ from Voidspace
89
 
 
90
 
* You can also download *configobj.zip* from Sourceforge_
91
 
 
92
 
Documentation
93
 
-------------
94
 
 
95
 
*configobj.zip* contains `this document`_ and full `API Docs`_, generated by
96
 
the EpyDoc_ program.
97
 
 
98
 
* You can view `this document`_ online as the `ConfigObj Homepage`_.
99
 
 
100
 
* You can also browse the `API Docs`_ online.
101
 
 
102
 
Pythonutils
103
 
-----------
104
 
 
105
 
ConfigObj is also part of the Pythonutils_ set of modules. This contains
106
 
various other useful modules, and is required by many of the `Voidspace Python
107
 
Projects`_.
108
 
 
109
 
Development Version
110
 
-------------------
111
 
 
112
 
It is sometimes possible to get the latest *development version* of ConfigObj
113
 
from the `Subversion Repository <http://svn.pythonutils.python-hosting.com/trunk/pythonutils/>`_.
114
 
 
115
 
.. _configobj.py: http://www.voidspace.org.uk/cgi-bin/voidspace/downman.py?file=configobj.py
116
 
.. _configobj.zip: http://www.voidspace.org.uk/cgi-bin/voidspace/downman.py?file=configobj-4.4.0.zip
117
 
.. _validate.py: http://www.voidspace.org.uk/cgi-bin/voidspace/downman.py?file=validate.py
118
 
.. _API Docs: http://www.voidspace.org.uk/python/configobj-api/
119
 
.. _this document:
120
 
.. _configobj homepage: http://www.voidspace.org.uk/python/configobj.html
121
 
.. _Sourceforge: http://sourceforge.net/projects/configobj
122
 
.. _EpyDoc: http://epydoc.sourceforge.net
123
 
.. _pythonutils: http://www.voidspace.org.uk/python/pythonutils.html
124
 
.. _Voidspace Python Projects: http://www.voidspace.org.uk/python
125
 
 
126
 
 
127
 
 
128
 
ConfigObj in the Real World
129
 
===========================
130
 
    
131
 
Projects that use **ConfigObj** include :
132
 
 
133
 
* `Bazaar <http://bazaar-ng.org>`_.
134
 
 
135
 
    Bazaar is a Python distributed {acro;VCS;Version Control System}.
136
 
    ConfigObj is used to read ``bazaar.conf`` and ``branches.conf``.
137
 
 
138
 
* `Turbogears <http://www.turbogears.org/>`_
139
 
 
140
 
    Turbogears is a web application framework.
141
 
 
142
 
* `Chandler <http://chandler.osafoundation.org/>`_
143
 
 
144
 
   A Python and `wxPython <http://www.wxpython.org>`_ 
145
 
   {acro;PIM;Personal Information Manager}, being developed by the 
146
 
   `OSAFoundation <http://www.osafoundation.org/>`_.
147
 
 
148
 
* `CryptoBox <https://systemausfall.org/trac/cryptobox/wiki/CryptoBox/en>`_
149
 
 
150
 
   A very interesting looking Debian based Live-CD which supports storing 
151
 
   data using an encrypted harddisk; usable even by non technical users.
152
 
 
153
 
* `Simple64 <http://ubuntuforums.org/showthread.php?t=266290>`_
154
 
 
155
 
    A Ubuntu tool which provides a GUI to install a host of applications.
156
 
 
157
 
* `Debian-cd-ng <http://wiki.debian.org/debian-cd-ng>`_
158
 
 
159
 
    *Debian-cd-ng* recommends ConfigObj for parsing the Debian-cd configuration files.
160
 
 
161
 
* `NeuroImaging in Python <http://projects.scipy.org/neuroimaging/ni/wiki>`_
162
 
 
163
 
    BrainSTAT is a project with the ultimate goal to produce a
164
 
    platform-independent python environment for the analysis of brain
165
 
    imaging data.
166
 
    
167
 
* `Gruik <http://www.tracos.org/gruik/wiki>`_
168
 
 
169
 
    Gruik is a free software network packet sniffer.
170
 
 
171
 
 
172
 
Getting Started
173
 
===============
174
 
 
175
 
The outstanding feature of using ConfigObj is simplicity. Most functions can be
176
 
performed with single line commands.
177
 
 
178
 
Reading a Config File
179
 
---------------------
180
 
 
181
 
The normal way to read a config file, is to give ConfigObj the filename :
182
 
 
183
 
.. raw:: html
184
 
 
185
 
    {+coloring}
186
 
 
187
 
    from configobj import ConfigObj
188
 
    config = ConfigObj(filename)
189
 
 
190
 
    {-coloring}
191
 
 
192
 
You can also pass the config file in as a list of lines, or a ``StringIO``
193
 
instance, so it doesn't matter where your config data comes from.
194
 
 
195
 
You can then access members of your config file as a dictionary. Subsections
196
 
will also be dictionaries.
197
 
 
198
 
.. raw:: html
199
 
 
200
 
    {+coloring}
201
 
 
202
 
    from configobj import ConfigObj
203
 
    config = ConfigObj(filename)
204
 
    #
205
 
    value1 = config['keyword1']
206
 
    value2 = config['keyword2']
207
 
    #
208
 
    section1 = config['section1']
209
 
    value3 = section1['keyword3']
210
 
    value4 = section1['keyword4']
211
 
    #
212
 
    # you could also write
213
 
    value3 = config['section1']['keyword3']
214
 
    value4 = config['section1']['keyword4']
215
 
 
216
 
    {-coloring}
217
 
 
218
 
Writing a Config File
219
 
---------------------
220
 
 
221
 
Creating a new config file is just as easy as reading one. You can specify a
222
 
filename when you create the ConfigObj, or do it later [#]_.
223
 
 
224
 
If you *don't* set a filename, then the ``write`` method will return a list of
225
 
lines instead of writing to file. See the write_ method for more details.
226
 
 
227
 
Here we show creating an empty ConfigObj, setting a filename and some values,
228
 
and then writing to file :
229
 
 
230
 
.. raw:: html
231
 
 
232
 
    {+coloring}
233
 
 
234
 
    from configobj import ConfigObj
235
 
    config = ConfigObj()
236
 
    config.filename = filename
237
 
    #
238
 
    config['keyword1'] = value1
239
 
    config['keyword2'] = value2
240
 
    #
241
 
    config['section1'] = {}
242
 
    config['section1']['keyword3'] = value3
243
 
    config['section1']['keyword4'] = value4
244
 
    #
245
 
    section2 = {
246
 
        'keyword5': value5,
247
 
        'keyword6': value6,
248
 
        'sub-section': {
249
 
            'keyword7': value7
250
 
            }
251
 
    }
252
 
    config['section2'] = section2
253
 
    #
254
 
    config['section3'] = {}
255
 
    config['section3']['keyword 8'] = [value8, value9, value10]
256
 
    config['section3']['keyword 9'] = [value11, value12, value13]
257
 
    #
258
 
    config.write()
259
 
 
260
 
    {-coloring}
261
 
 
262
 
.. caution::
263
 
 
264
 
    Keywords and section names can only be strings [#]_. Attempting to set
265
 
    anything else will raise a ``ValueError``.
266
 
 
267
 
Config Files
268
 
------------
269
 
 
270
 
The config files that ConfigObj will read and write are based on the 'INI'
271
 
format. This means it will read and write files created for ``ConfigParser``
272
 
[#]_.
273
 
 
274
 
Keywords and values are separated by an ``'='``, and section markers are
275
 
between square brackets. Keywords, values, and section names can be surrounded
276
 
by single or double quotes. Indentation is not significant, but can be
277
 
preserved.
278
 
 
279
 
Subsections are indicated by repeating the square brackets in the section
280
 
marker. You nest levels by using more brackets.
281
 
 
282
 
You can have list values by separating items with a comma, and values spanning
283
 
multiple lines by using triple quotes (single or double).
284
 
 
285
 
For full details on all these see `the config file format`_. Here's an example
286
 
to illustrate : ::
287
 
 
288
 
    # This is the 'initial_comment'
289
 
    # Which may be several lines
290
 
    keyword1 = value1
291
 
    'keyword 2' = 'value 2'
292
 
 
293
 
    [ "section 1" ]
294
 
    # This comment goes with keyword 3
295
 
    keyword 3 = value 3
296
 
    'keyword 4' = value4, value 5, 'value 6'
297
 
 
298
 
        [[ sub-section ]]    # an inline comment
299
 
        # sub-section is inside "section 1"
300
 
        'keyword 5' = 'value 7'
301
 
        'keyword 6' = '''A multiline value,
302
 
    that spans more than one line :-)
303
 
    The line breaks are included in the value.'''
304
 
 
305
 
            [[[ sub-sub-section ]]]
306
 
            # sub-sub-section is *in* 'sub-section'
307
 
            # which is in 'section 1'
308
 
            'keyword 7' = 'value 8'
309
 
 
310
 
    [section 2]    # an inline comment
311
 
    keyword8 = "value 9"
312
 
    keyword9 = value10     # an inline comment
313
 
    # The 'final_comment'
314
 
    # Which also may be several lines
315
 
 
316
 
 
317
 
ConfigObj specifications
318
 
========================
319
 
 
320
 
.. raw:: html
321
 
 
322
 
    {+coloring}
323
 
 
324
 
    config = ConfigObj(infile=None, options=None, **keywargs)
325
 
 
326
 
    {-coloring}
327
 
 
328
 
infile
329
 
------
330
 
 
331
 
You don't need to specify an infile. If you omit it, an empty ConfigObj will be
332
 
created. ``infile`` *can* be :
333
 
 
334
 
* Nothing. In which case the ``filename`` attribute of your ConfigObj will be
335
 
  ``None``. You can set a filename at any time.
336
 
 
337
 
* A filename. What happens if the file doesn't already exist is determined by
338
 
  the options_ ``file_error`` and ``create_empty``. The filename will be
339
 
  preserved as the ``filename`` attribute. This can be changed at any time.
340
 
 
341
 
* A list of lines. Any trailing newlines will be removed from the lines. The
342
 
  ``filename`` attribute of your ConfigObj will be ``None``.
343
 
 
344
 
* A ``StringIO`` instance or file object, or any object with a ``read`` method.
345
 
  The ``filename`` attribute of your ConfigObj will be ``None`` [#]_.
346
 
 
347
 
* A dictionary. You can initialise a ConfigObj from a dictionary [#]_. The
348
 
  ``filename`` attribute of your ConfigObj will be ``None``. All keys must be
349
 
  strings. In this case, the order of values and sections is arbitrary.
350
 
 
351
 
options
352
 
-------
353
 
 
354
 
There are various options that control the way ConfigObj behaves. They can be
355
 
passed in as a dictionary of options, or as keyword arguments. Explicit keyword
356
 
arguments override the dictionary.
357
 
 
358
 
All of the options are available as attributes after the config file has been
359
 
parsed.
360
 
 
361
 
ConfigObj has the following options (with the default values shown) :
362
 
 
363
 
* 'raise_errors': ``False``
364
 
 
365
 
    When parsing, it is possible that the config file will be badly formed. The
366
 
    default is to parse the whole file and raise a single error at the end. You
367
 
    can set ``raise_errors = True`` to have errors raised immediately. See the
368
 
    exceptions_ section for more details.
369
 
 
370
 
    Altering this value after initial parsing has no effect.
371
 
 
372
 
* 'list_values': ``True``
373
 
 
374
 
    If ``True`` (the default) then list values are possible. If ``False``, the
375
 
    values are not parsed for lists.
376
 
        
377
 
        If ``list_values = False`` then single line values are not quoted or
378
 
        unquoted when reading and writing.
379
 
 
380
 
    Changing this value affects whether single line values will be quoted or 
381
 
    not when writing.
382
 
 
383
 
* 'create_empty': ``False``
384
 
 
385
 
    If this value is ``True`` and the file specified by ``infile`` doesn't
386
 
    exist, ConfigObj will create an empty file. This can be a useful test that
387
 
    the filename makes sense: an impossible filename will cause an error.
388
 
 
389
 
    Altering this value after initial parsing has no effect.
390
 
 
391
 
* 'file_error': ``False``
392
 
 
393
 
    If this value is ``True`` and the file specified by ``infile`` doesn't
394
 
    exist, ConfigObj will raise an ``IOError``.
395
 
 
396
 
    Altering this value after initial parsing has no effect.
397
 
 
398
 
* 'interpolation': ``True``
399
 
 
400
 
    Whether string interpolation is switched on or not. It is on (``True``) by
401
 
    default.
402
 
 
403
 
    You can set this attribute to change whether string interpolation is done
404
 
    when values are fetched. See the `String Interpolation`_ section for more details.
405
 
 
406
 
* 'configspec': ``None``
407
 
 
408
 
    If you want to use the validation system, you supply a configspec. This is
409
 
    effectively a type of config file that specifies a check for each member.
410
 
    This check can be used to do type conversion as well as check that the
411
 
    value is within your required parameters.
412
 
 
413
 
    You provide a configspec in the same way as you do the initial file: a
414
 
    filename, or list of lines, etc. See the validation_ section for full
415
 
    details on how to use the system.
416
 
 
417
 
    When parsed, every section has a ``configspec`` with a dictionary of
418
 
    configspec checks for *that section*.
419
 
 
420
 
* 'stringify': ``True``
421
 
 
422
 
    If you use the validation scheme, it can do type checking *and* conversion
423
 
    for you. This means you may want to set members to integers, or other
424
 
    non-string values.
425
 
 
426
 
    If 'stringify' is set to ``True`` (default) then non-string values will
427
 
    be converted to strings when you write the config file. The validation_
428
 
    process converts values from strings to the required type.
429
 
 
430
 
    If 'stringify' is set to ``False``, attempting to set a member to a
431
 
    non-string value [#]_ will raise a ``TypeError`` (no type conversion is
432
 
    done by validation).
433
 
 
434
 
* 'indent_type': ``'    '``
435
 
 
436
 
    Indentation is not significant; it can however be present in the input and
437
 
    output config. Any combination of tabs and spaces may be used: the string
438
 
    will be repeated for each level of indentation. Typical values are: ``''``
439
 
    (no indentation), ``'    '`` (indentation with four spaces, the default),
440
 
    ``'\t'`` (indentation with one tab).
441
 
 
442
 
    If this option is not specified, and the ConfigObj is initialised with a
443
 
    dictionary, the indentation used in the output is the default one, that is,
444
 
    four spaces.
445
 
 
446
 
    If this option is not specified, and the ConfigObj is initialised with a
447
 
    list of lines or a file, the indentation used in the first indented line is
448
 
    selected and used in all output lines. If no input line is indented, no
449
 
    output line will be either.
450
 
 
451
 
    If this option *is* specified, the option value is used in the output
452
 
    config, overriding the type of indentation in the input config (if any).
453
 
 
454
 
* 'encoding': ``None``
455
 
 
456
 
    By default **ConfigObj** does not decode the file/strings you pass it into
457
 
    Unicode [#]_. If you want your config file as Unicode (keys and members)
458
 
    you need to provide an encoding to decode the file with. This encoding will
459
 
    also be used to encode the config file when writing.
460
 
    
461
 
    You can change the encoding attribute at any time.
462
 
    
463
 
    Any characters in your strings that can't be encoded with the specified
464
 
    encoding will raise a ``UnicodeEncodeError``.
465
 
    
466
 
    .. note::
467
 
    
468
 
        ``UTF16`` encoded files will automatically be detected and decoded,
469
 
        even if ``encoding`` is ``None``.
470
 
        
471
 
        This is because it is a 16-bit encoding, and ConfigObj will mangle it
472
 
        (split characters on byte boundaries) if it parses it without decoding.
473
 
 
474
 
* 'default_encoding': ``None``
475
 
 
476
 
    When using the ``write`` method, **ConfigObj** uses the ``encoding``
477
 
    attribute to encode the Unicode strings. If any members (or keys) have
478
 
    been set as byte strings instead of Unicode, these must first be decoded
479
 
    to Unicode before outputting in the specified encoding.
480
 
 
481
 
    ``default_encoding``, if specified, is the encoding used to decode byte
482
 
    strings in the **ConfigObj** before writing. If this is ``None``, then
483
 
    the Python default encoding (``sys.defaultencoding`` - usually ASCII) is
484
 
    used.
485
 
    
486
 
    For most Western European users, a value of ``latin-1`` is sensible.
487
 
    
488
 
    ``default_encoding`` is *only* used if an ``encoding`` is specified.
489
 
    
490
 
    Any characters in byte-strings that can't be decoded using the
491
 
    ``default_encoding`` will raise a ``UnicodeDecodeError``.
492
 
 
493
 
* 'unrepr': ``False``
494
 
 
495
 
    The ``unrepr`` option reads and writes files in a different mode. This
496
 
    allows you to store and retrieve the basic Python data-types using config
497
 
    files.
498
 
    
499
 
    This uses Python syntax for lists and quoting. See `unrepr mode`_ for the
500
 
    full details.
501
 
 
502
 
* 'write_empty_values': ``False`` 
503
 
 
504
 
    If ``write_empty_values`` is ``True``, empty strings are written as
505
 
    empty values. See `Empty Values`_ for more details.
506
 
 
507
 
Methods
508
 
-------
509
 
 
510
 
The ConfigObj is a subclass of an object called ``Section``, which is itself a
511
 
subclass of ``dict``, the builtin dictionary type. This means it also has
512
 
**all** the normal dictionary methods.
513
 
 
514
 
In addition, the following `Section Methods`_ may be useful :
515
 
 
516
 
* *encode*
517
 
* *decode*
518
 
* *walk*
519
 
* *merge*
520
 
* *dict* 
521
 
* *as_bool*
522
 
* *as_float*
523
 
* *as_int*
524
 
 
525
 
Read about Sections_ for details of all the methods.
526
 
 
527
 
.. hint::
528
 
 
529
 
    The *merge* method of sections is a recursive update.
530
 
    
531
 
    You can use this to merge sections, or even whole ConfigObjs, into each
532
 
    other.
533
 
    
534
 
    You would typically use this to create a default ConfigObj and then merge
535
 
    in user settings. This way users only need to specify values that are
536
 
    different from the default.
537
 
    
538
 
 
539
 
The public methods available on ConfigObj are :
540
 
 
541
 
* 'write'
542
 
* 'validate'
543
 
 
544
 
write
545
 
~~~~~
546
 
 
547
 
::
548
 
 
549
 
    write(file_object=None)
550
 
 
551
 
This method writes the current ConfigObj and takes a single, optional argument
552
 
[#]_.
553
 
 
554
 
If you pass in a file like object to the ``write`` method, the config file will
555
 
be written to this. (The only method of this object that is used is its
556
 
``write`` method, so a ``StringIO`` instance, or any other file like object
557
 
will work.)
558
 
 
559
 
Otherwise, the behaviour of this method depends on the ``filename`` attribute
560
 
of the ConfigObj.
561
 
 
562
 
``filename``
563
 
    ConfigObj will write the configuration to the file specified.
564
 
 
565
 
``None``
566
 
    ``write`` returns a list of lines. (Not ``'\n'`` terminated)
567
 
 
568
 
First the 'initial_comment' is written, then the config file, followed by the
569
 
'final_comment'. Comment lines and inline comments are written with each
570
 
key/value.
571
 
 
572
 
validate
573
 
~~~~~~~~
574
 
 
575
 
::
576
 
 
577
 
    validate(validator, preserve_errors=False, copy=False)
578
 
 
579
 
.. raw:: html
580
 
 
581
 
    {+coloring}
582
 
 
583
 
    # filename is the config file
584
 
    # filename2 is the configspec
585
 
    # (which could also be hardcoded into your program)
586
 
    config = ConfigObj(filename, configspec=filename2)
587
 
    #
588
 
    from validate import Validator
589
 
    val = Validator()
590
 
    test = config.validate(val)
591
 
    if test == True:
592
 
        print 'Succeeded.'
593
 
 
594
 
    {-coloring}
595
 
 
596
 
The validate method uses the `validate 
597
 
<http://www.voidspace.org.uk/python/validate.html>`__ module to do the
598
 
validation.
599
 
    
600
 
This method validates the ConfigObj against the configspec. By doing type
601
 
conversion as well, it can abstract away the config file altogether and present
602
 
the config *data* to your application (in the types it expects it to be).
603
 
 
604
 
If the ``configspec`` attribute of the ConfigObj is ``None``, it raises a
605
 
``ValueError``.
606
 
 
607
 
If the stringify_ attribute is set, this process will convert values to the
608
 
type defined in the configspec.
609
 
 
610
 
The validate method uses checks specified in the configspec and defined in the
611
 
``Validator`` object. It is very easy to extend.
612
 
 
613
 
The configspec looks like the config file, but instead of the value, you
614
 
specify the check (and any default value). See the validation_ section for
615
 
details.
616
 
 
617
 
.. hint::
618
 
 
619
 
    The system of configspecs can seem confusing at first, but is actually
620
 
    quite simple and powerful. For a concrete example of how to use it, you may
621
 
    find this blog entry helpful :
622
 
    `Transforming Values with ConfigObj <http://www.voidspace.org.uk/python/weblog/arch_d7_2006_03_04.shtml#e257>`_.
623
 
 
624
 
    There is also a module to assist in auto-generating configspecs called
625
 
    ConfigPersist.py_. Its use is explained in `ConfigObj for Data Persistence`_.
626
 
 
627
 
The ``copy`` parameter fills in missing values from the configspec (default
628
 
values), *without* marking the values as defaults. It also causes comments to
629
 
be copied from the configspec into the config file. This allows you to use a
630
 
configspec to create default config files. (Normally default values aren't
631
 
written out by the ``write`` method.)
632
 
 
633
 
As of ConfigObj 4.3.0 you can also pass in a ConfigObj instance as your
634
 
configspec. This is especially useful if you need to specify the encoding of
635
 
your configspec file. When you read your configspec file, you *must* specify
636
 
``list_values=False``.
637
 
 
638
 
.. raw:: html
639
 
 
640
 
    {+coloring}
641
 
    from configobj import ConfigObj
642
 
    configspec = ConfigObj(configspecfilename, encoding='UTF8',
643
 
        list_values=False)
644
 
    config = ConfigObj(filename, configspec=configspec)
645
 
    {-coloring}
646
 
 
647
 
Return Value
648
 
############
649
 
 
650
 
By default, the validate method either returns ``True`` (everything passed) 
651
 
or a dictionary of ``True``/``False`` representing pass/fail. The dictionary 
652
 
follows the structure of the ConfigObj.
653
 
 
654
 
If a whole section passes then it is replaced with the value ``True``. If a 
655
 
whole section fails, then it is replaced with the value ``False``.
656
 
 
657
 
If a value is missing, and there is no default in the check, then the check 
658
 
automatically fails.
659
 
 
660
 
The ``validate`` method takes an optional keyword argument ``preserve_errors``.
661
 
If you set this to ``True``, instead of getting ``False`` for failed checks you
662
 
get the actual error object from the **validate** module. This usually contains
663
 
useful information about why the check failed.
664
 
 
665
 
See the `flatten_errors`_ function for how to turn your results dictionary into
666
 
a useful list of error messages.
667
 
 
668
 
Even if ``preserve_errors`` is ``True``, missing keys or sections will still be
669
 
represented by a ``False`` in the results dictionary.
670
 
 
671
 
Mentioning Default Values
672
 
#########################
673
 
 
674
 
In the check in your configspec, you can specify a default to be used - by 
675
 
using the ``default`` keyword. E.g. ::
676
 
 
677
 
    key1 = integer(0, 30, default=15)
678
 
    key2 = integer(default=15)
679
 
    key3 = boolean(default=True)
680
 
    key4 = option('Hello', 'Goodbye', 'Not Today', default='Not Today')
681
 
 
682
 
If the configspec check supplies a default and the value is missing in the
683
 
config, then the default will be set in your ConfigObj. (It is still passed to
684
 
the ``Validator`` so that type conversion can be done: this means the default
685
 
value must still pass the check.)
686
 
 
687
 
ConfigObj keeps a record of which values come from defaults, using the
688
 
``defaults`` attribute of sections_. Any key in this list isn't written out by
689
 
the ``write`` method. If a key is set from outside (even to the same value)
690
 
then it is removed from the ``defaults`` list.
691
 
 
692
 
.. note:
693
 
 
694
 
    Even if all the keys in a section are in the defaults list, the section
695
 
    marker is still written out.
696
 
 
697
 
There is additionally a special case default value of ``None``. If you set the
698
 
default value to ``None`` and the value is missing, the value will always be
699
 
set to ``None``. As the other checks don't return ``None`` (unless you
700
 
implement your own that do), you can tell that this value came from a default
701
 
value (and was missing from the config file). It allows an easy way of
702
 
implementing optional values. Simply check (and ignore) members that are set
703
 
to ``None``.
704
 
 
705
 
.. note::
706
 
 
707
 
    If stringify_ is ``False`` then ``default=None`` returns ``''`` instead of
708
 
    ``None``. This is because setting a value to a non-string raises an error
709
 
    if stringify is unset.
710
 
 
711
 
The default value can be a list. See `List Values`_ for the way to do this.
712
 
 
713
 
Writing invalid default values is a *guaranteed* way of confusing your users.
714
 
Default values **must** pass the check.
715
 
 
716
 
Mentioning Repeated Sections
717
 
############################
718
 
 
719
 
In the configspec it is possible to cause *every* sub-section in a section to
720
 
be validated using the same configspec. You do this with a section in the
721
 
configspec  called ``__many__``. Every sub-section in that section has the
722
 
``__many__`` configspec applied to it (without you having to explicitly name
723
 
them in advance).
724
 
 
725
 
If you define a ``__many__`` type section it must the only sub-section in that
726
 
section. Having a ``__many__`` *and* other sub-sections defined in the same
727
 
section will raise a ``RepeatSectionError``.
728
 
 
729
 
Your ``__many__`` section can have nested subsections, which can also include
730
 
``__many__`` type sections.
731
 
 
732
 
See `Repeated Sections`_ for examples.
733
 
 
734
 
 
735
 
Mentioning SimpleVal
736
 
####################
737
 
 
738
 
If you just want to check if all members are present, then you can use the
739
 
``SimpleVal`` object that comes with ConfigObj. It only fails members if they
740
 
are missing.
741
 
 
742
 
Write a configspec that has all the members you want to check for, but set
743
 
every section to ``''``.
744
 
 
745
 
.. raw:: html
746
 
 
747
 
    {+coloring}
748
 
 
749
 
    val = SimpleVal()
750
 
    test = config.validate(val)
751
 
    if test is True:
752
 
        print 'Succeeded.'
753
 
 
754
 
    {-coloring}
755
 
 
756
 
 
757
 
Mentioning copy Mode
758
 
####################
759
 
 
760
 
As discussed in `Mentioning Default Values`_, you can use a configspec to
761
 
supply default values. These are marked in the ConfigObj instance as defaults,
762
 
and *not* written out by the ``write`` mode. This means that your users only
763
 
need to supply values that are different from the defaults.
764
 
 
765
 
This can be inconvenient if you *do* want to write out the default values,
766
 
for example to write out a default config file.
767
 
 
768
 
If you set ``copy=True`` when you call validate, then no values are marked as
769
 
defaults. In addition, all comments from the configspec are copied into
770
 
your ConfigObj instance. You can then call ``write`` to create your config
771
 
file.
772
 
    
773
 
There is a limitation with this. In order to allow `String Interpolation`_ to work
774
 
within configspecs, ``DEFAULT`` sections are not processed by
775
 
validation; even in copy mode.
776
 
 
777
 
Attributes
778
 
----------
779
 
 
780
 
A ConfigObj has the following attributes :
781
 
 
782
 
* indent_type
783
 
* interpolate
784
 
* stringify
785
 
* BOM
786
 
* initial_comment
787
 
* final_comment
788
 
* list_values
789
 
* encoding
790
 
* default_encoding
791
 
* unrepr
792
 
* write_empty_values
793
 
 
794
 
.. note::
795
 
 
796
 
    This doesn't include *comments*, *inline_comments*, *defaults*, or
797
 
    *configspec*. These are actually attributes of Sections_.
798
 
 
799
 
It also has the following attributes as a result of parsing. They correspond to
800
 
options_ when the ConfigObj was created, but changing them has no effect.
801
 
 
802
 
* raise_errors
803
 
* create_empty
804
 
* file_error
805
 
 
806
 
interpolation
807
 
~~~~~~~~~~~~~
808
 
 
809
 
ConfigObj can perform string interpolation in a *similar* way to
810
 
``ConfigParser``. See the `String Interpolation`_ section for full details.
811
 
 
812
 
If ``interpolation`` is set to ``False``, then interpolation is *not* done when
813
 
you fetch values.
814
 
 
815
 
stringify
816
 
~~~~~~~~~
817
 
 
818
 
If this attribute is set (``True``) then the validate_ method changes the
819
 
values in the ConfigObj. These are turned back into strings when write_ is
820
 
called.
821
 
 
822
 
If stringify is unset (``False``) then attempting to set a value to a non
823
 
string (or a list of strings) will raise a ``TypeError``.
824
 
 
825
 
BOM
826
 
~~~
827
 
 
828
 
If the initial config file *started* with the UTF8 Unicode signature (known
829
 
slightly incorrectly as the {acro;BOM;Byte Order Mark}), or the UTF16 BOM, then
830
 
this attribute is set to ``True``. Otherwise it is ``False``.
831
 
 
832
 
If it is set to ``True`` when ``write`` is called then, if ``encoding`` is set
833
 
to ``None`` *or* to ``utf_8`` (and variants) a UTF BOM will be written.
834
 
 
835
 
For UTF16 encodings, a BOM is *always* written.
836
 
 
837
 
initial_comment
838
 
~~~~~~~~~~~~~~~
839
 
 
840
 
This is a list of lines. If the ConfigObj is created from an existing file, it
841
 
will contain any lines of comments before the start of the members.
842
 
 
843
 
If you create a new ConfigObj, this will be an empty list.
844
 
 
845
 
The write method puts these lines before it starts writing out the members.
846
 
 
847
 
final_comment
848
 
~~~~~~~~~~~~~
849
 
 
850
 
This is a list of lines. If the ConfigObj is created from an existing file, it
851
 
will contain any lines of comments after the last member.
852
 
 
853
 
If you create a new ConfigObj, this will be an empty list.
854
 
 
855
 
The ``write`` method puts these lines after it finishes writing out the
856
 
members.
857
 
 
858
 
list_values
859
 
~~~~~~~~~~~
860
 
 
861
 
This attribute is ``True`` or ``False``. If set to ``False`` then values are
862
 
not parsed for list values. In addition single line values are not unquoted.
863
 
 
864
 
This allows you to do your own parsing of values. It exists primarily to
865
 
support the reading of the configspec_ - but has other use cases.
866
 
 
867
 
For example you could use the ``LineParser`` from the
868
 
`listquote module <http://www.voidspace.org.uk/python/listquote.html#lineparser>`_ 
869
 
to read values for nested lists.
870
 
 
871
 
Single line values aren't quoted when writing - but multiline values are
872
 
handled as normal.
873
 
 
874
 
.. caution::
875
 
 
876
 
    Because values aren't quoted, leading or trailing whitespace can be
877
 
        lost.
878
 
 
879
 
    This behaviour was changed in version 4.0.1.
880
 
        
881
 
        Prior to this, single line values might have been quoted; even with
882
 
        ``list_values=False``. This means that files written by **ConfigObj**
883
 
        *could* now be incompatible - and need the quotes removing by hand.
884
 
 
885
 
encoding
886
 
~~~~~~~~
887
 
 
888
 
This is the encoding used to encode the output, when you call ``write``. It
889
 
must be a valid encoding `recognised by Python <http://docs.python.org/lib/standard-encodings.html>`_.
890
 
 
891
 
If this value is ``None`` then no encoding is done when ``write`` is called.
892
 
 
893
 
 
894
 
default_encoding
895
 
~~~~~~~~~~~~~~~~
896
 
 
897
 
If encoding is set, any byte-strings in your ConfigObj instance (keys or
898
 
members) will first be decoded to Unicode using the encoding specified by the
899
 
``default_encoding`` attribute. This ensures that the output is in the encoding
900
 
specified.
901
 
 
902
 
If this value is ``None`` then ``sys.defaultencoding`` is used instead.
903
 
 
904
 
unrepr
905
 
~~~~~~
906
 
 
907
 
Another boolean value. If this is set, then ``repr(value)`` is used to write
908
 
values. This writes values in a slightly different way to the normal ConfigObj
909
 
file syntax.
910
 
 
911
 
This preserves basic Python data-types when read back in. See `unrepr mode`_
912
 
for more details.
913
 
 
914
 
write_empty_values
915
 
~~~~~~~~~~~~~~~~~~
916
 
 
917
 
Also boolean. If set, values that are an empty string (``''``) are written as
918
 
empty values. See `Empty Values`_ for more details.
919
 
 
920
 
 
921
 
The Config File Format
922
 
======================
923
 
 
924
 
You saw an example config file in the `Config Files`_ section. Here is a fuller
925
 
specification of the config files used and created by ConfigObj.
926
 
 
927
 
The basic pattern for keywords is : ::
928
 
 
929
 
    # comment line
930
 
    # comment line
931
 
    keyword = value # inline comment
932
 
 
933
 
Both keyword and value can optionally be surrounded in quotes. The equals sign
934
 
is the only valid divider.
935
 
 
936
 
Values can have comments on the lines above them, and an inline comment after
937
 
them. This, of course, is optional. See the comments_ section for details.
938
 
 
939
 
If a keyword or value starts or ends with whitespace, or contains a quote mark
940
 
or comma, then it should be surrounded by quotes. Quotes are not necessary if
941
 
whitespace is surrounded by non-whitespace.
942
 
 
943
 
Values can also be lists. Lists are comma separated. You indicate a single
944
 
member list by a trailing comma. An empty list is shown by a single comma : ::
945
 
 
946
 
    keyword1 = value1, value2, value3
947
 
    keyword2 = value1, # a single member list
948
 
    keyword3 = , # an empty list
949
 
 
950
 
Values that contain line breaks (multi-line values) can be surrounded by triple
951
 
quotes. These can also be used if a value contains both types of quotes. List
952
 
members cannot be surrounded by triple quotes : ::
953
 
 
954
 
    keyword1 = ''' A multi line value
955
 
    on several
956
 
    lines'''     # with a comment
957
 
    keyword2 = '''I won't be "afraid".'''
958
 
    #
959
 
    keyword3 = """ A multi line value
960
 
    on several
961
 
    lines"""     # with a comment
962
 
    keyword4 = """I won't be "afraid"."""
963
 
 
964
 
.. warning::
965
 
 
966
 
    There is no way of safely quoting values that contain both types of triple
967
 
    quotes.
968
 
 
969
 
A line that starts with a '#', possibly preceded by whitespace, is a comment.
970
 
 
971
 
New sections are indicated by a section marker line. That is the section name
972
 
in square brackets. Whitespace around the section name is ignored. The name can
973
 
be quoted with single or double quotes. The marker can have comments before it
974
 
and an inline comment after it : ::
975
 
 
976
 
    # The First Section
977
 
    [ section name 1 ] # first section
978
 
    keyword1 = value1
979
 
 
980
 
    # The Second Section
981
 
    [ "section name 2" ] # second section
982
 
    keyword2 = value2
983
 
 
984
 
Any subsections (sections that are *inside* the current section) are
985
 
designated by repeating the square brackets before and after the section name.
986
 
The number of square brackets represents the nesting level of the sub-section.
987
 
Square brackets may be separated by whitespace; such whitespace, however, will
988
 
not be present in the output config written by the ``write`` method.
989
 
 
990
 
Indentation is not significant, but can be preserved. See the description of
991
 
the ``indent_type`` option, in the `ConfigObj specifications`_ chapter, for the
992
 
details.
993
 
 
994
 
A *NestingError* will be raised if the number of the opening and the closing
995
 
brackets in a section marker is not the same, or if a sub-section's nesting
996
 
level is greater than the nesting level of it parent plus one.
997
 
 
998
 
In the outer section, single values can only appear before any sub-section.
999
 
Otherwise they will belong to the sub-section immediately before them. ::
1000
 
 
1001
 
    # initial comment
1002
 
    keyword1 = value1
1003
 
    keyword2 = value2
1004
 
 
1005
 
    [section 1]
1006
 
    keyword1 = value1
1007
 
    keyword2 = value2
1008
 
 
1009
 
        [[sub-section]]
1010
 
        # this is in section 1
1011
 
        keyword1 = value1
1012
 
        keyword2 = value2
1013
 
 
1014
 
            [[[nested section]]]
1015
 
            # this is in sub section
1016
 
            keyword1 = value1
1017
 
            keyword2 = value2
1018
 
 
1019
 
        [[sub-section2]]
1020
 
        # this is in section 1 again
1021
 
        keyword1 = value1
1022
 
        keyword2 = value2
1023
 
 
1024
 
    [[sub-section3]]
1025
 
    # this is also in section 1, indentation is misleading here
1026
 
    keyword1 = value1
1027
 
    keyword2 = value2
1028
 
 
1029
 
    # final comment
1030
 
 
1031
 
When parsed, the above config file produces the following data structure :
1032
 
 
1033
 
.. raw:: html
1034
 
 
1035
 
    {+coloring}
1036
 
 
1037
 
    ConfigObj({
1038
 
        'keyword1': 'value1',
1039
 
        'keyword2': 'value2',
1040
 
        'section 1': {
1041
 
            'keyword1': 'value1',
1042
 
            'keyword2': 'value2',
1043
 
            'sub-section': {
1044
 
                'keyword1': 'value1',
1045
 
                'keyword2': 'value2',
1046
 
                'nested section': {
1047
 
                    'keyword1': 'value1',
1048
 
                    'keyword2': 'value2',
1049
 
                },
1050
 
            },
1051
 
            'sub-section2': {
1052
 
                'keyword1': 'value1',
1053
 
                'keyword2': 'value2',
1054
 
            },
1055
 
            'sub-section3': {
1056
 
                'keyword1': 'value1',
1057
 
                'keyword2': 'value2',
1058
 
            },
1059
 
        },
1060
 
    })
1061
 
 
1062
 
    {-coloring}
1063
 
 
1064
 
Sections are ordered: note how the structure of the resulting ConfigObj is in
1065
 
the same order as the original file.
1066
 
 
1067
 
.. note::
1068
 
 
1069
 
    In ConfigObj 4.3.0 *empty values* became valid syntax. They are read as the
1070
 
    empty string. There is also an option/attribute (``write_empty_values``) to
1071
 
    allow the writing of these.
1072
 
    
1073
 
    This is mainly to support 'legacy' config files, written from other
1074
 
    applications. This is documented under `Empty Values`_.
1075
 
    
1076
 
    `unrepr mode`_ introduces *another* syntax variation, used for storing
1077
 
    basic Python datatypes in config files. {sm;:-)}
1078
 
 
1079
 
 
1080
 
Sections
1081
 
========
1082
 
 
1083
 
Every section in a ConfigObj has certain properties. The ConfigObj itself also
1084
 
has these properties, because it too is a section (sometimes called the *root
1085
 
section*).
1086
 
 
1087
 
``Section`` is a subclass of the standard new-class dictionary, therefore it
1088
 
has **all** the methods of a normal dictionary. This means you can ``update``
1089
 
and ``clear`` sections.
1090
 
 
1091
 
.. note::
1092
 
 
1093
 
    You create a new section by assigning a member to be a dictionary.
1094
 
    
1095
 
    The new ``Section`` is created *from* the dictionary, but isn't the same
1096
 
    thing as the dictionary. (So references to the dictionary you use to create
1097
 
    the section *aren't* references to the new section).
1098
 
    
1099
 
    Note the following.
1100
 
 
1101
 
    .. raw:: html
1102
 
    
1103
 
        {+coloring}
1104
 
        
1105
 
        config = ConfigObj()
1106
 
        vals = {'key1': 'value 1', 
1107
 
                'key2': 'value 2'
1108
 
               }
1109
 
        config['vals'] = vals
1110
 
        config['vals'] == vals
1111
 
        True
1112
 
        config['vals'] is vals
1113
 
        False
1114
 
        
1115
 
        {-coloring}
1116
 
     
1117
 
    If you now change ``vals``, the changes won't be reflected in ``config['vals']``.
1118
 
 
1119
 
A section is ordered, following its ``scalars`` and ``sections``
1120
 
attributes documented below. This means that the following dictionary
1121
 
attributes return their results in order.
1122
 
 
1123
 
* '__iter__'
1124
 
 
1125
 
    More commonly known as ``for member in section:``.
1126
 
 
1127
 
* '__repr__' and '__str__'
1128
 
 
1129
 
    Any time you print or display the ConfigObj.
1130
 
 
1131
 
* 'items'
1132
 
 
1133
 
* 'iteritems'
1134
 
 
1135
 
* 'iterkeys'
1136
 
 
1137
 
* 'itervalues'
1138
 
 
1139
 
* 'keys'
1140
 
 
1141
 
* 'popitem'
1142
 
 
1143
 
* 'values'
1144
 
 
1145
 
Section Attributes
1146
 
------------------
1147
 
 
1148
 
* main
1149
 
 
1150
 
    A reference to the main ConfigObj.
1151
 
 
1152
 
* parent
1153
 
 
1154
 
    A reference to the 'parent' section, the section that this section is a
1155
 
    member of.
1156
 
 
1157
 
    On the ConfigObj this attribute is a reference to itself. You can use this
1158
 
    to walk up the sections, stopping when ``section.parent is section``.
1159
 
 
1160
 
* depth
1161
 
 
1162
 
    The nesting level of the current section.
1163
 
 
1164
 
    If you create a new ConfigObj and add sections, 1 will be added to the
1165
 
    depth level between sections.
1166
 
 
1167
 
* defaults
1168
 
 
1169
 
    This attribute is a list of scalars that came from default values. Values
1170
 
    that came from defaults aren't written out by the ``write`` method.
1171
 
    Setting any of these values in the section removes them from the defaults
1172
 
    list.
1173
 
 
1174
 
* scalars, sections
1175
 
 
1176
 
    These attributes are normal lists, representing the order that members,
1177
 
    single values and subsections appear in the section. The order will either
1178
 
    be the order of the original config file, *or* the order that you added
1179
 
    members.
1180
 
 
1181
 
    The order of members in this lists is the order that ``write`` creates in
1182
 
    the config file. The ``scalars`` list is output before the ``sections``
1183
 
    list.
1184
 
 
1185
 
    Adding or removing members also alters these lists. You can manipulate the
1186
 
    lists directly to alter the order of members.
1187
 
 
1188
 
    .. warning::
1189
 
 
1190
 
        If you alter the ``scalars``, ``sections``, or ``defaults`` attributes
1191
 
        so that they no longer reflect the contents of the section, you will
1192
 
        break your ConfigObj.
1193
 
 
1194
 
    See also the ``rename`` method.
1195
 
 
1196
 
* comments
1197
 
 
1198
 
    This is a dictionary of comments associated with each member. Each entry is
1199
 
    a list of lines. These lines are written out before the member.
1200
 
 
1201
 
* inline_comments
1202
 
 
1203
 
    This is *another* dictionary of comments associated with each member. Each
1204
 
    entry is a string that is put inline with the member.
1205
 
 
1206
 
* configspec
1207
 
 
1208
 
    The configspec attribute is a dictionary mapping scalars to *checks*. A
1209
 
    check defines the expected type and possibly the allowed values for a
1210
 
    member.
1211
 
 
1212
 
    The configspec has the same format as a config file, but instead of values
1213
 
    it has a specification for the value (which may include a default value).
1214
 
    The validate_ method uses it to check the config file makes sense. If a
1215
 
    configspec is passed in when the ConfigObj is created, then it is parsed
1216
 
    and broken up to become the ``configspec`` attribute of each section.
1217
 
 
1218
 
    If you didn't pass in a configspec, this attribute will be ``None`` on the
1219
 
    root section (the main ConfigObj).
1220
 
 
1221
 
    You can set the configspec attribute directly on a section.
1222
 
 
1223
 
    See the validation_ section for full details of how to write configspecs.
1224
 
 
1225
 
Section Methods
1226
 
---------------
1227
 
 
1228
 
* **dict**
1229
 
 
1230
 
    This method takes no arguments. It returns a deep copy of the section as a
1231
 
    dictionary. All subsections will also be dictionaries, and list values will
1232
 
    be copies, rather than references to the original [#]_.
1233
 
 
1234
 
* **rename**
1235
 
 
1236
 
    ``rename(oldkey, newkey)``
1237
 
 
1238
 
    This method renames a key, without affecting its position in the sequence.
1239
 
 
1240
 
    It is mainly implemented for the ``encode`` and ``decode`` methods, which
1241
 
    provide some Unicode support.
1242
 
 
1243
 
* **merge**
1244
 
 
1245
 
    ``merge(indict)``
1246
 
    
1247
 
    This method is a *recursive update* method. It allows you to merge two
1248
 
    config files together.
1249
 
    
1250
 
    You would typically use this to create a default ConfigObj and then merge
1251
 
    in user settings. This way users only need to specify values that are
1252
 
    different from the default.
1253
 
    
1254
 
    For example :
1255
 
    
1256
 
    .. raw:: html
1257
 
    
1258
 
        {+coloring}
1259
 
        
1260
 
        # def_cfg contains your default config settings
1261
 
        # user_cfg contains the user settings
1262
 
        cfg = ConfigObj(def_cfg)
1263
 
        usr = ConfigObj(user_cfg)
1264
 
        #
1265
 
        cfg.merge(usr)
1266
 
        
1267
 
        """
1268
 
        cfg now contains a combination of the default settings and the user
1269
 
        settings.
1270
 
        
1271
 
        The user settings will have overwritten any of the default ones.
1272
 
        """
1273
 
    
1274
 
        {-coloring}
1275
 
    
1276
 
* **walk**
1277
 
 
1278
 
    This method can be used to transform values and names. See `walking a
1279
 
    section`_ for examples and explanation.
1280
 
 
1281
 
* **decode**
1282
 
 
1283
 
    ``decode(encoding)``
1284
 
 
1285
 
    This method decodes names and values into Unicode objects, using the
1286
 
    supplied encoding.
1287
 
 
1288
 
* **encode**
1289
 
 
1290
 
    ``encode(encoding)``
1291
 
 
1292
 
    This method is the opposite of ``decode`` {sm;:!:}.
1293
 
 
1294
 
    It encodes names and values using the supplied encoding. If any of your
1295
 
    names/values are strings rather than Unicode, Python will have to do an
1296
 
    implicit decode first. (This method uses ``sys.defaultencoding`` for
1297
 
    implicit decodes.)
1298
 
 
1299
 
* **as_bool**
1300
 
 
1301
 
    ``as_bool(key)``
1302
 
    
1303
 
    Returns ``True`` if the key contains a string that represents ``True``, or
1304
 
    is the ``True`` object.
1305
 
    
1306
 
    Returns ``False`` if the key contains a string that represents ``False``, 
1307
 
    or is the ``False`` object. 
1308
 
 
1309
 
    Raises a ``ValueError`` if the key contains anything else.
1310
 
    
1311
 
    Strings that represent ``True`` are (not case sensitive) : ::
1312
 
    
1313
 
        true, yes, on, 1
1314
 
        
1315
 
    Strings that represent ``False`` are : ::
1316
 
    
1317
 
        false, no, off, 0
1318
 
    
1319
 
    .. note::
1320
 
    
1321
 
        In ConfigObj 4.1.0, this method was called ``istrue``. That method is
1322
 
        now deprecated and will issue a warning when used. It will go away
1323
 
        in a future release.
1324
 
        
1325
 
* **as_int**
1326
 
 
1327
 
    ``as_int(key)``
1328
 
    
1329
 
    This returns the value contained in the specified key as an integer.
1330
 
    
1331
 
    It raises a ``ValueError`` if the conversion can't be done.
1332
 
 
1333
 
* **as_float**
1334
 
 
1335
 
    ``as_float(key)``
1336
 
    
1337
 
    This returns the value contained in the specified key as a float.
1338
 
    
1339
 
    It raises a ``ValueError`` if the conversion can't be done.
1340
 
    
1341
 
Walking a Section
1342
 
-----------------
1343
 
 
1344
 
.. note::
1345
 
 
1346
 
    The walk method allows you to call a function on every member/name.
1347
 
 
1348
 
.. raw:: html
1349
 
 
1350
 
    {+coloring}
1351
 
 
1352
 
        walk(function, raise_errors=True,
1353
 
            call_on_sections=False, **keywargs):
1354
 
 
1355
 
    {-coloring}
1356
 
 
1357
 
``walk`` is a method of the ``Section`` object. This means it is also a method
1358
 
of ConfigObj.
1359
 
 
1360
 
It walks through every member and calls a function on the keyword and value. It
1361
 
walks recursively through subsections.
1362
 
 
1363
 
It returns a dictionary of all the computed values.
1364
 
 
1365
 
If the function raises an exception, the default is to propagate the error, and
1366
 
stop. If ``raise_errors=False`` then it sets the return value for that keyword
1367
 
to ``False`` instead, and continues. This is similar to the way validation_
1368
 
works.
1369
 
 
1370
 
Your function receives the arguments ``(section, key)``. The current value is
1371
 
then ``section[key]`` [#]_. Any unrecognised keyword arguments you pass to
1372
 
walk, are passed on to the function.
1373
 
 
1374
 
Normally ``walk`` just recurses into subsections. If you are transforming (or
1375
 
checking) names as well as values, then you want to be able to change the names
1376
 
of sections. In this case set ``call_on_sections`` to ``True``. Now, on
1377
 
encountering a sub-section, *first* the function is called for the *whole*
1378
 
sub-section, and *then* it recurses into it's members. This means your function
1379
 
must be able to handle receiving dictionaries as well as strings and lists.
1380
 
 
1381
 
If you are using the return value from ``walk`` *and* ``call_on_sections``,
1382
 
note that walk discards the return value when it calls your function.
1383
 
 
1384
 
.. caution::
1385
 
 
1386
 
    You can use ``walk`` to transform the names of members of a section
1387
 
    but you mustn't add or delete members.
1388
 
 
1389
 
 
1390
 
Examples
1391
 
--------
1392
 
 
1393
 
Examples that use the walk method are the ``encode`` and ``decode`` methods.
1394
 
They both define a function and pass it to walk. Because these functions
1395
 
transform names as well as values (from byte strings to Unicode) they set
1396
 
``call_on_sections=True``.
1397
 
 
1398
 
To see how they do it, *read the source Luke* {sm;:cool:}.
1399
 
 
1400
 
You can use this for transforming all values in your ConfigObj. For example
1401
 
you might like the nested lists from ConfigObj 3. This was provided by the
1402
 
listquote_ module. You could switch off the parsing for list values
1403
 
(``list_values=False``) and use listquote to parse every value.
1404
 
 
1405
 
Another thing you might want to do is use the Python escape codes in your
1406
 
values. You might be *used* to using ``\n`` for line feed and ``\t`` for tab.
1407
 
Obviously we'd need to decode strings that come from the config file (using the
1408
 
escape codes). Before writing out we'll need to put the escape codes back in
1409
 
encode.
1410
 
 
1411
 
As an example we'll write a function to use with walk, that encodes or decodes
1412
 
values using the ``string-escape`` codec.
1413
 
 
1414
 
The function has to take each value and set the new value. As a bonus we'll
1415
 
create one function that will do decode *or* encode depending on a keyword
1416
 
argument.
1417
 
 
1418
 
We don't want to work with section names, we're only transforming values, so
1419
 
we can leave ``call_on_sections`` as ``False``. This means the two datatypes we
1420
 
have to handle are strings and lists, we can ignore everything else. (We'll
1421
 
treat tuples as lists as well).
1422
 
 
1423
 
We're not using the return values, so it doesn't need to return anything, just
1424
 
change the values if appropriate.
1425
 
 
1426
 
.. raw:: html
1427
 
 
1428
 
    {+coloring}
1429
 
 
1430
 
    def string_escape(section, key, encode=False):
1431
 
        """
1432
 
        A function to encode or decode using the 'string-escape' codec.
1433
 
        To be passed to the walk method of a ConfigObj.
1434
 
        By default it decodes.
1435
 
        To encode, pass in the keyword argument ``encode=True``.
1436
 
        """
1437
 
        val = section[key]
1438
 
        # is it a type we can work with
1439
 
        # NOTE: for platforms where Python > 2.2
1440
 
        # you can use basestring instead of (str, unicode)
1441
 
        if not isinstance(val, (str, unicode, list, tuple)):
1442
 
            # no !
1443
 
            return
1444
 
        elif isinstance(val, (str, unicode)):
1445
 
            # it's a string !
1446
 
            if not encode:
1447
 
                section[key] = val.decode('string-escape')
1448
 
            else:
1449
 
                section[key] = val.encode('string-escape')
1450
 
        else:
1451
 
            # it must be a list or tuple!
1452
 
            # we'll be lazy and create a new list
1453
 
            newval = []
1454
 
            # we'll check every member of the list
1455
 
            for entry in val:
1456
 
                if isinstance(entry, (str, unicode)):
1457
 
                    if not encode:
1458
 
                        newval.append(entry.decode('string-escape'))
1459
 
                    else:
1460
 
                       newval.append(entry.encode('string-escape'))
1461
 
                else:
1462
 
                    newval.append(entry)
1463
 
            # done !
1464
 
            section[key] =  newval
1465
 
 
1466
 
    # assume we have a ConfigObj called ``config``
1467
 
    #
1468
 
    # To decode
1469
 
    config.walk(string_escape)
1470
 
    #
1471
 
    # To encode.
1472
 
    # Because ``walk`` doesn't recognise the ``encode`` argument
1473
 
    # it passes it to our function.
1474
 
    config.walk(string_escape, encode=True)
1475
 
 
1476
 
    {-coloring}
1477
 
 
1478
 
Here's a simple example of using ``walk`` to transform names and values. One
1479
 
usecase of this would be to create a *standard* config file with placeholders
1480
 
for section and keynames. You can then use walk to create new config files
1481
 
and change values and member names :
1482
 
 
1483
 
.. raw:: html
1484
 
 
1485
 
    {+coloring}
1486
 
 
1487
 
    # We use 'XXXX' as a placeholder
1488
 
    config = '''
1489
 
    XXXXkey1 = XXXXvalue1
1490
 
    XXXXkey2 = XXXXvalue2
1491
 
    XXXXkey3 = XXXXvalue3
1492
 
    [XXXXsection1]
1493
 
    XXXXkey1 = XXXXvalue1
1494
 
    XXXXkey2 = XXXXvalue2
1495
 
    XXXXkey3 = XXXXvalue3
1496
 
    [XXXXsection2]
1497
 
    XXXXkey1 = XXXXvalue1
1498
 
    XXXXkey2 = XXXXvalue2
1499
 
    XXXXkey3 = XXXXvalue3
1500
 
        [[XXXXsection1]]
1501
 
        XXXXkey1 = XXXXvalue1
1502
 
        XXXXkey2 = XXXXvalue2
1503
 
        XXXXkey3 = XXXXvalue3
1504
 
    '''.splitlines()
1505
 
    cfg = ConfigObj(config)
1506
 
    #
1507
 
    def transform(section, key):
1508
 
        val = section[key]
1509
 
        newkey = key.replace('XXXX', 'CLIENT1')
1510
 
        section.rename(key, newkey)
1511
 
        if isinstance(val, (tuple, list, dict)):
1512
 
            pass
1513
 
        else:
1514
 
            val = val.replace('XXXX', 'CLIENT1')
1515
 
            section[newkey] = val
1516
 
    #
1517
 
    cfg.walk(transform, call_on_sections=True)
1518
 
    print cfg
1519
 
    ConfigObj({'CLIENT1key1': 'CLIENT1value1', 'CLIENT1key2': 'CLIENT1value2', 
1520
 
    'CLIENT1key3': 'CLIENT1value3', 
1521
 
    'CLIENT1section1': {'CLIENT1key1': 'CLIENT1value1', 
1522
 
        'CLIENT1key2': 'CLIENT1value2', 'CLIENT1key3': 'CLIENT1value3'}, 
1523
 
    'CLIENT1section2': {'CLIENT1key1': 'CLIENT1value1', 
1524
 
        'CLIENT1key2': 'CLIENT1value2', 'CLIENT1key3': 'CLIENT1value3', 
1525
 
        'CLIENT1section1': {'CLIENT1key1': 'CLIENT1value1', 
1526
 
            'CLIENT1key2': 'CLIENT1value2', 'CLIENT1key3': 'CLIENT1value3'}}})
1527
 
            
1528
 
    {-coloring}
1529
 
 
1530
 
 
1531
 
Exceptions
1532
 
==========
1533
 
 
1534
 
There are several places where ConfigObj may raise exceptions (other than
1535
 
because of bugs).
1536
 
 
1537
 
1) If a configspec filename you pass in doesn't exist, or a config file
1538
 
    filename doesn't exist *and* ``file_error=True``, an ``IOError`` will be
1539
 
    raised.
1540
 
 
1541
 
2) If you try to set a non-string key, or a non string value when
1542
 
    ``stringify=False``, a ``TypeError`` will be raised.
1543
 
 
1544
 
3) A badly built config file will cause parsing errors.
1545
 
 
1546
 
4) A parsing error can also occur when reading a configspec.
1547
 
 
1548
 
5) In string interpolation you can specify a value that doesn't exist, or
1549
 
    create circular references (recursion).
1550
 
 
1551
 
6) If you have a ``__many__`` repeated section with other section definitions
1552
 
    (in a configspec), a ``RepeatSectionError`` will be raised.
1553
 
 
1554
 
Number 5 (which is actually two different types of exceptions) is documented
1555
 
    in `String Interpolation`_.
1556
 
 
1557
 
Number 6 is explained in the validation_ section.
1558
 
 
1559
 
*This* section is about errors raised during parsing.
1560
 
 
1561
 
The base error class is ``ConfigObjError``. This is a subclass of
1562
 
``SyntaxError``, so you can trap for ``SyntaxError`` without needing to
1563
 
directly import any of the ConfigObj exceptions.
1564
 
 
1565
 
The following other exceptions are defined (all deriving from
1566
 
``ConfigObjError``) :
1567
 
 
1568
 
* ``NestingError``
1569
 
 
1570
 
    This error indicates either a mismatch in the brackets in a section marker,
1571
 
    or an excessive level of nesting.
1572
 
 
1573
 
* ``ParseError``
1574
 
 
1575
 
    This error indicates that a line is badly written. It is neither a valid
1576
 
    ``key = value`` line, nor a valid section marker line, nor a comment line.
1577
 
 
1578
 
* ``DuplicateError``
1579
 
 
1580
 
    The keyword or section specified already exists.
1581
 
 
1582
 
* ``ConfigspecError``
1583
 
 
1584
 
    An error occurred whilst parsing a configspec.
1585
 
 
1586
 
* ``UnreprError``
1587
 
 
1588
 
    An error occurred when parsing a value in `unrepr mode`_.
1589
 
 
1590
 
When parsing a configspec, ConfigObj will stop on the first error it
1591
 
encounters.  It will raise a ``ConfigspecError``. This will have an ``error``
1592
 
attribute, which is the actual error that was raised.
1593
 
 
1594
 
Behaviour when parsing a config file depends on the option ``raise_errors``.
1595
 
If ConfigObj encounters an error while parsing a config file:
1596
 
 
1597
 
    If ``raise_errors=True`` then ConfigObj will raise the appropriate error
1598
 
    and parsing will stop.
1599
 
 
1600
 
    If ``raise_errors=False`` (the default) then parsing will continue to the
1601
 
    end and *all* errors will be collected.
1602
 
 
1603
 
If ``raise_errors`` is False and multiple errors are found a ``ConfigObjError``
1604
 
is raised. The error raised has a ``config`` attribute, which is the parts of
1605
 
the ConfigObj that parsed successfully. It also has an attribute ``errors``,
1606
 
which is a list of *all* the errors raised. Each entry in the list is an
1607
 
instance of the appropriate error type. Each one has the following attributes
1608
 
(useful for delivering a sensible error message to your user) :
1609
 
 
1610
 
* ``line``: the original line that caused the error.
1611
 
 
1612
 
* ``line_number``: its number in the config file.
1613
 
 
1614
 
* ``message``: the error message that accompanied the error.
1615
 
 
1616
 
If only one error is found, then that error is re-raised. The error still has
1617
 
the ``config`` and ``errors`` attributes. This means that your error handling
1618
 
code can be the same whether one error is raised in parsing , or several.
1619
 
 
1620
 
It also means that in the most common case (a single error) a useful error
1621
 
message will be raised.
1622
 
 
1623
 
.. note::
1624
 
 
1625
 
    One wrongly written line could break the basic structure of your config
1626
 
    file. This could cause every line after it to flag an error, so having a
1627
 
    list of all the lines that caused errors may not be as useful as it sounds.
1628
 
    {sm;:-(}.
1629
 
 
1630
 
 
1631
 
Validation
1632
 
==========
1633
 
 
1634
 
.. hint::
1635
 
 
1636
 
    The system of configspecs can seem confusing at first, but is actually
1637
 
    quite simple and powerful. For a concrete example of how to use it, you may
1638
 
    find this blog entry helpful :
1639
 
    `Transforming Values with ConfigObj <http://www.voidspace.org.uk/python/weblog/arch_d7_2006_03_04.shtml#e257>`_.
1640
 
 
1641
 
    There is also a module to assist in auto-generating configspecs called
1642
 
    ConfigPersist.py_. Its use is explained in `ConfigObj for Data Persistence`_.
1643
 
 
1644
 
Validation is done through a combination of the configspec_ and a ``Validator``
1645
 
object. For this you need *validate.py* [#]_. See downloading_ if you don't
1646
 
have a copy.
1647
 
 
1648
 
Validation can perform two different operations :
1649
 
 
1650
 
1) Check that a value meets a specification. For example, check that a value
1651
 
    is an integer between one and six, or is a choice from a specific set of
1652
 
    options.
1653
 
 
1654
 
2) It can convert the value into the type required. For example, if one of
1655
 
    your values is a port number, validation will turn it into an integer for
1656
 
    you.
1657
 
 
1658
 
So validation can act as a transparent layer between the datatypes of your
1659
 
application configuration (boolean, integers, floats, etc) and the text format
1660
 
of your config file.
1661
 
 
1662
 
configspec
1663
 
----------
1664
 
 
1665
 
The ``validate`` method checks members against an entry in the configspec. Your
1666
 
configspec therefore resembles your config file, with a check for every member.
1667
 
 
1668
 
In order to perform validation you need a ``Validator`` object. This has
1669
 
several useful built-in check functions. You can also create your own custom
1670
 
functions and register them with your Validator object.
1671
 
 
1672
 
Each check is the name of one of these functions, including any parameters and
1673
 
keyword arguments. The configspecs look like function calls, and they map to
1674
 
function calls.
1675
 
 
1676
 
The basic datatypes that an un-extended Validator can test for are :
1677
 
 
1678
 
* boolean values (True and False)
1679
 
* integers (including minimum and maximum values)
1680
 
* floats (including min and max)
1681
 
* strings (including min and max length)
1682
 
* IP addresses (v4 only)
1683
 
 
1684
 
It can also handle lists of these types and restrict a value to being one from
1685
 
a set of options.
1686
 
 
1687
 
An example configspec is going to look something like : ::
1688
 
 
1689
 
    port = integer(0, 100)
1690
 
    user = string(max=25)
1691
 
    mode = option('quiet', 'loud', 'silent')
1692
 
 
1693
 
You can specify default values, and also have the same configspec applied to
1694
 
several sections. This is called `repeated sections`_.
1695
 
 
1696
 
For full details on writing configspecs, please refer to the `validate.py
1697
 
documentation`_.
1698
 
 
1699
 
.. important::
1700
 
 
1701
 
    Your configspec is read by ConfigObj in the same way as a config file.
1702
 
    
1703
 
    That means you can do interpolation *within* your configspec.
1704
 
    
1705
 
    In order to allow this, checks in the 'DEFAULT' section (of the root level
1706
 
    of your configspec) are *not* used.
1707
 
 
1708
 
If you need to specify the encoding of your configspec, then you can pass in a
1709
 
ConfigObj instance as your configspec. When you read your configspec file, you
1710
 
*must* specify ``list_values=False``.
1711
 
 
1712
 
.. raw:: html
1713
 
 
1714
 
    {+coloring}
1715
 
    from configobj import ConfigObj
1716
 
    configspec = ConfigObj(configspecfilename, encoding='UTF8',
1717
 
        list_values=False)
1718
 
    config = ConfigObj(filename, configspec=configspec)
1719
 
    {-coloring}
1720
 
 
1721
 
.. _validate.py documentation: http://www.voidspace.org.uk/python/validate.html
1722
 
 
1723
 
Type Conversion
1724
 
---------------
1725
 
 
1726
 
By default, validation does type conversion. This means that if you specify
1727
 
``integer`` as the check, then calling validate_ will actually change the value
1728
 
to an integer (so long as the check succeeds).
1729
 
 
1730
 
It also means that when you call the write_ method, the value will be converted
1731
 
back into a string using the ``str`` function.
1732
 
 
1733
 
To switch this off, and leave values as strings after validation, you need to
1734
 
set the stringify_ attribute to ``False``. If this is the case, attempting to
1735
 
set a value to a non-string will raise an error.
1736
 
 
1737
 
Default Values
1738
 
--------------
1739
 
 
1740
 
You can set a default value in your check. If the value is missing from the
1741
 
config file then this value will be used instead. This means that your user
1742
 
only has to supply values that differ from the defaults.
1743
 
 
1744
 
If you *don't* supply a default then for a value to be missing is an error,
1745
 
and this will show in the `return value`_ from validate.
1746
 
 
1747
 
Additionally you can set the default to be ``None``. This means the value will
1748
 
be set to ``None`` (the object) *whichever check is used*. (It will be set to
1749
 
``''`` rather than ``None`` if stringify_ is ``False``). You can use this
1750
 
to easily implement optional values in your config files. ::
1751
 
 
1752
 
    port = integer(0, 100, default=80)
1753
 
    user = string(max=25, default=0)
1754
 
    mode = option('quiet', 'loud', 'silent', default='loud')
1755
 
    nick = string(default=None)
1756
 
 
1757
 
.. note::
1758
 
 
1759
 
    Because the default goes through type conversion, it also has to pass the
1760
 
    check.
1761
 
 
1762
 
    Note that ``default=None`` is case sensitive.
1763
 
 
1764
 
 
1765
 
List Values
1766
 
~~~~~~~~~~~
1767
 
 
1768
 
It's possible that you will want to specify a list as a default value. To avoid
1769
 
confusing syntax with commas and quotes you use a list constructor to specify 
1770
 
that keyword arguments are lists. This includes the ``default`` value. This 
1771
 
makes checks look something like : ::
1772
 
 
1773
 
    checkname(default=list('val1', 'val2', 'val3'))
1774
 
 
1775
 
This works with all keyword arguments, but is most useful for default values.
1776
 
 
1777
 
 
1778
 
Repeated Sections
1779
 
-----------------
1780
 
 
1781
 
Repeated sections are a way of specifying a configspec for a section that
1782
 
should be applied to *all* subsections in the same section.
1783
 
 
1784
 
The easiest way of explaining this is to give an example. Suppose you have a
1785
 
config file that describes a dog. That dog has various attributes, but it can
1786
 
also have many fleas. You don't know in advance how many fleas there will be,
1787
 
or what they will be called, but you want each flea validated against the same
1788
 
configspec.
1789
 
 
1790
 
We can define a section called *fleas*. We want every flea in that section
1791
 
(every sub-section) to have the same configspec applied to it. We do this by
1792
 
defining a single section called ``__many__``. ::
1793
 
 
1794
 
    [dog]
1795
 
    name = string(default=Rover)
1796
 
    age = float(0, 99, default=0)
1797
 
 
1798
 
        [[fleas]]
1799
 
 
1800
 
            [[[__many__]]]
1801
 
            bloodsucker = boolean(default=True)
1802
 
            children = integer(default=10000)
1803
 
            size = option(small, tiny, micro, default=tiny)
1804
 
 
1805
 
Every flea on our dog will now be validated using the ``__many__`` configspec.
1806
 
 
1807
 
If you define another sub-section in a section *as well as* a ``__many__`` then
1808
 
you will get an error.
1809
 
 
1810
 
``__many__`` sections can have sub-sections, including their own ``__many__``
1811
 
sub-sections. Defaults work in the normal way in repeated sections.
1812
 
 
1813
 
 
1814
 
Copy Mode
1815
 
---------
1816
 
 
1817
 
Because you can specify default values in your configspec, you can use
1818
 
ConfigObj to write out default config files for your application.
1819
 
 
1820
 
However, normally values supplied from a default in a configspec are *not*
1821
 
written out by the ``write`` method.
1822
 
 
1823
 
To do this, you need to specify ``copy=True`` when you call validate. As well
1824
 
as not marking values as default, all the comments in the configspec file
1825
 
will be copied into your ConfigObj instance.
1826
 
 
1827
 
.. raw:: html
1828
 
 
1829
 
    {+coloring}
1830
 
    from configobj import ConfigObj
1831
 
    from validate import Validator
1832
 
    vdt = Validator()
1833
 
    config = ConfigObj(configspec='default.ini')
1834
 
    config.filename = 'new_default.ini'
1835
 
    config.validate(vdt, copy=True)
1836
 
    config.write()
1837
 
    {-coloring}
1838
 
 
1839
 
Validation and Interpolation
1840
 
----------------------------
1841
 
 
1842
 
String interpolation and validation don't play well together. When validation
1843
 
changes type it sets the value. If the value uses interpolation, then the 
1844
 
interpolation reference would normally be overwritten. Calling ``write`` would
1845
 
then use the absolute value and the interpolation reference would be lost.
1846
 
 
1847
 
As a compromise - if the value is unchanged by validation then it is not reset.
1848
 
This means strings that pass through validation unmodified will not be 
1849
 
overwritten. If validation changes type - the value has to be overwritten, and
1850
 
any interpolation references are lost {sm;:-(}.
1851
 
 
1852
 
SimpleVal
1853
 
---------
1854
 
 
1855
 
You may not need a full validation process, but still want to check if all the
1856
 
expected values are present.
1857
 
 
1858
 
Provided as part of the ConfigObj module is the ``SimpleVal`` object. This has
1859
 
a dummy ``test`` method that always passes.
1860
 
 
1861
 
The only reason a test will fail is if the value is missing. The return value
1862
 
from ``validate`` will either be ``True``, meaning all present, or a dictionary
1863
 
with ``False`` for all missing values/sections.
1864
 
 
1865
 
To use it, you still need to pass in a valid configspec when you create the
1866
 
ConfigObj, but just set all the values to ``''``. Then create an instance of
1867
 
``SimpleVal`` and pass it to the ``validate`` method.
1868
 
 
1869
 
As a trivial example if you had the following config file : ::
1870
 
 
1871
 
    # config file for an application
1872
 
    port = 80
1873
 
    protocol = http
1874
 
    domain = voidspace
1875
 
    top_level_domain = org.uk
1876
 
 
1877
 
You would write the following configspec : ::
1878
 
 
1879
 
    port = ''
1880
 
    protocol = ''
1881
 
    domain = ''
1882
 
    top_level_domain = ''
1883
 
 
1884
 
.. raw:: html
1885
 
 
1886
 
    {+coloring}
1887
 
 
1888
 
    config = Configobj(filename, configspec=configspec)
1889
 
    val = SimpleVal()
1890
 
    test = config.validate(val)
1891
 
    if test == True:
1892
 
        print 'All values present.'
1893
 
    elif test == False:
1894
 
        print 'No values present!'
1895
 
    else:
1896
 
        for entry in test:
1897
 
            if test[entry] == False:
1898
 
                print '"%s" missing.' % entry
1899
 
 
1900
 
    {-coloring}
1901
 
 
1902
 
 
1903
 
Empty values
1904
 
============
1905
 
 
1906
 
Many config files from other applications allow empty values. As of version
1907
 
4.3.0, ConfigObj will read these as an empty string.
1908
 
 
1909
 
A new option/attribute has been added (``write_empty_values``) to allow
1910
 
ConfigObj to write empty strings as empty values.
1911
 
 
1912
 
.. raw:: html
1913
 
 
1914
 
    {+coloring}
1915
 
    from configobj import ConfigObj
1916
 
    cfg = '''
1917
 
        key =
1918
 
        key2 = # a comment
1919
 
    '''.splitlines()
1920
 
    config = ConfigObj(cfg)
1921
 
    print config
1922
 
    ConfigObj({'key': '', 'key2': ''})
1923
 
    
1924
 
    config.write_empty_values = True
1925
 
    for line in config.write():
1926
 
        print line
1927
 
    
1928
 
    key = 
1929
 
    key2 =     # a comment
1930
 
    {-coloring}
1931
 
 
1932
 
unrepr mode
1933
 
===========
1934
 
 
1935
 
The ``unrepr`` option allows you to store and retrieve the basic Python
1936
 
data-types using config files. It has to use a slightly different syntax to
1937
 
normal ConfigObj files. Unsurprisingly it uses Python syntax.
1938
 
 
1939
 
This means that lists are different (they are surrounded by square brackets),
1940
 
and strings *must* be quoted.
1941
 
 
1942
 
The types that ``unrepr`` can work with are :
1943
 
 
1944
 
    | strings, lists tuples
1945
 
    | None, True, False
1946
 
    | dictionaries, integers, floats
1947
 
    | longs and complex numbers
1948
 
    
1949
 
You can't store classes, types or instances.
1950
 
 
1951
 
``unrepr`` uses ``repr(object)`` to write out values, so it currently *doesn't*
1952
 
check that you are writing valid objects. If you attempt to read an unsupported
1953
 
value, ConfigObj will raise a ``configobj.UnknownType`` exception.
1954
 
 
1955
 
Values that are triple quoted cased. The triple quotes are removed *before*
1956
 
converting. This means that you can use triple quotes to write dictionaries
1957
 
over several lines in your config files. They won't be written like this
1958
 
though.
1959
 
 
1960
 
If you are writing config files by hand, for use with ``unrepr``, you should
1961
 
be aware of the following differences from normal ConfigObj syntax :
1962
 
 
1963
 
    | List : ``['A List', 'With', 'Strings']``
1964
 
    | Strings : ``"Must be quoted."``
1965
 
    | Backslash : ``"The backslash must be escaped \\"``
1966
 
 
1967
 
These all follow normal Python syntax.
1968
 
 
1969
 
In unrepr mode *inline comments* are not saved. This is because lines are
1970
 
parsed using the `compiler package <http://docs.python.org/lib/compiler.html>`_
1971
 
which discards comments.
1972
 
 
1973
 
String Interpolation
1974
 
====================
1975
 
 
1976
 
ConfigObj allows string interpolation *similar* to the way ``ConfigParser``
1977
 
or ``string.Template`` work. The value of the ``interpolation`` attribute
1978
 
determines which style of interpolation you want to use. Valid values are
1979
 
"ConfigParser" or "Template" (case-insensitive, so "configparser" and
1980
 
"template" will also work). For backwards compatibility reasons, the value
1981
 
``True`` is also a valid value for the ``interpolation`` attribute, and
1982
 
will select ``ConfigParser``-style interpolation. At some undetermined point
1983
 
in the future, that default *may* change to ``Template``-style interpolation.
1984
 
 
1985
 
For ``ConfigParser``-style interpolation, you specify a value to be
1986
 
substituted by including ``%(name)s`` in the value.
1987
 
 
1988
 
For ``Template``-style interpolation, you specify a value to be substituted
1989
 
by including ``${cl}name{cr}`` in the value. Alternately, if 'name' is a valid
1990
 
Python identifier (i.e., is composed of nothing but alphanumeric characters,
1991
 
plus the underscore character), then the braces are optional and the value
1992
 
can be written as ``$name``.
1993
 
 
1994
 
Note that ``ConfigParser``-style interpolation and ``Template``-style
1995
 
interpolation are mutually exclusive; you cannot have a configuration file
1996
 
that's a mix of one or the other. Pick one and stick to it. ``Template``-style
1997
 
interpolation is simpler to read and write by hand, and is recommended if
1998
 
you don't have a particular reason to use ``ConfigParser``-style.
1999
 
 
2000
 
Interpolation checks first the current section to see if ``name`` is the key
2001
 
to a value. ('name' is case sensitive).
2002
 
 
2003
 
If it doesn't find it, next it checks the 'DEFAULT' sub-section of the current
2004
 
section.
2005
 
 
2006
 
If it still doesn't find it, it moves on to check the parent section and the
2007
 
parent section's 'DEFAULT' subsection, and so on all the way up to the main
2008
 
section.
2009
 
 
2010
 
If the value specified isn't found in any of these locations, then a
2011
 
``MissingInterpolationOption`` error is raised (a subclass of
2012
 
``ConfigObjError``).
2013
 
 
2014
 
If it is found then the returned value is also checked for substitutions. This
2015
 
allows you to make up compound values (for example directory paths) that use
2016
 
more than one default value. It also means it's possible to create circular
2017
 
references. If there are any circular references which would cause an infinite
2018
 
interpolation loop, an ``InterpolationLoopError`` is raised.
2019
 
 
2020
 
Both of these errors are subclasses of ``InterpolationError``, which is a
2021
 
subclass of ``ConfigObjError``.
2022
 
 
2023
 
String interpolation and validation don't play well together. This is because 
2024
 
validation overwrites values - and so may erase the interpolation references.
2025
 
See `Validation and Interpolation`_. (This can only happen if validation
2026
 
has to *change* the value).
2027
 
 
2028
 
 
2029
 
Comments
2030
 
========
2031
 
 
2032
 
Any line that starts with a '#', possibly preceded by whitespace, is a comment.
2033
 
 
2034
 
If a config file starts with comments then these are preserved as the
2035
 
initial_comment_.
2036
 
 
2037
 
If a config file ends with comments then these are preserved as the
2038
 
final_comment_.
2039
 
 
2040
 
Every key or section marker may have lines of comments immediately above it.
2041
 
These are saved as the ``comments`` attribute of the section. Each member is a
2042
 
list of lines.
2043
 
 
2044
 
You can also have a comment inline with a value. These are saved as the
2045
 
``inline_comments`` attribute of the section, with one entry per member of the
2046
 
section.
2047
 
 
2048
 
Subsections (section markers in the config file) can also have comments.
2049
 
 
2050
 
See `Section Attributes`_ for more on these attributes.
2051
 
 
2052
 
These comments are all written back out by the ``write`` method.
2053
 
 
2054
 
 
2055
 
flatten_errors
2056
 
==============
2057
 
 
2058
 
::
2059
 
 
2060
 
    flatten_errors(cfg, res)
2061
 
 
2062
 
Validation_ is a powerful way of checking that the values supplied by the user
2063
 
make sense.
2064
 
 
2065
 
The validate_ method returns a results dictionary that represents pass or fail
2066
 
for each value. This doesn't give you any information about *why* the check
2067
 
failed.
2068
 
 
2069
 
``flatten_errors`` is an example function that turns a results dictionary into
2070
 
a flat list, that only contains values that *failed*.
2071
 
 
2072
 
``cfg`` is the ConfigObj instance being checked, ``res`` is the results
2073
 
dictionary returned by ``validate``.
2074
 
 
2075
 
It returns a list of keys that failed. Each member of the list is a tuple : ::
2076
 
 
2077
 
    ([list of sections...], key, result)
2078
 
 
2079
 
If ``validate`` was called with ``preserve_errors=False`` (the default)
2080
 
then ``result`` will always be ``False``.
2081
 
 
2082
 
*list of sections* is a flattened list of sections that the key was found
2083
 
in.
2084
 
 
2085
 
If the section was missing then key will be ``None``.
2086
 
 
2087
 
If the value (or section) was missing then ``result`` will be ``False``.
2088
 
 
2089
 
If ``validate`` was called with ``preserve_errors=True`` and a value
2090
 
was present, but failed the check, then ``result`` will be the exception
2091
 
object returned. You can use this as a string that describes the failure.
2092
 
 
2093
 
For example :
2094
 
 
2095
 
    *The value "3" is of the wrong type*.
2096
 
 
2097
 
 
2098
 
Example Usage
2099
 
-------------
2100
 
 
2101
 
The output from ``flatten_errors`` is a list of tuples.
2102
 
 
2103
 
Here is an example of how you could present this information to the user.
2104
 
 
2105
 
.. raw:: html
2106
 
 
2107
 
    {+coloring}
2108
 
    
2109
 
    vtor = validate.Validator()
2110
 
    # ini is your config file - cs is the configspec
2111
 
    cfg = ConfigObj(ini, configspec=cs)
2112
 
    res = cfg.validate(vtor, preserve_errors=True)
2113
 
    for entry in flatten_errors(cfg, res):
2114
 
        # each entry is a tuple
2115
 
        section_list, key, error = entry
2116
 
        if key is not None:
2117
 
           section_list.append(key)
2118
 
        else:
2119
 
            section_list.append('[missing section]')
2120
 
        section_string = ', '.join(section_list)
2121
 
        if error == False:
2122
 
            error = 'Missing value or section.'
2123
 
        print section_string, ' = ', error
2124
 
 
2125
 
    {-coloring}
2126
 
 
2127
 
Backwards Compatibility
2128
 
=======================
2129
 
 
2130
 
There have been a lot of changes since ConfigObj 3. The core parser is now
2131
 
based on regular expressions, and is a lot faster and smaller. There is now no
2132
 
difference in the way we treat flat files and non-flatfiles, that is, no empty
2133
 
sections. This means some of the code can be a lot simpler, less code does
2134
 
more of the work [#]_.
2135
 
 
2136
 
There have been other simplifications: for example we only have eight options
2137
 
instead of seventeen.
2138
 
 
2139
 
Most config files created for ConfigObj 3 will be read with no changes and many
2140
 
programs will work without having to alter code. Some of the changes do break
2141
 
backwards compatibility: for example, code that uses the previous options will
2142
 
now raise an error. It should be very easy to fix these, though.
2143
 
 
2144
 
Below is a list of all the changes that affect backwards compatibility. This
2145
 
doesn't include details of method signatures that have changed, because almost
2146
 
all of them have.
2147
 
 
2148
 
Incompatible Changes
2149
 
--------------------
2150
 
 
2151
 
(I have removed a lot of needless complications: this list is probably not
2152
 
conclusive, many option/attribute/method names have changed.)
2153
 
 
2154
 
Case sensitive.
2155
 
 
2156
 
The only valid divider is '='.
2157
 
 
2158
 
Line continuations with ``\`` removed.
2159
 
 
2160
 
No recursive lists in values.
2161
 
 
2162
 
No empty sections.
2163
 
 
2164
 
No distinction between flatfiles and non flatfiles.
2165
 
 
2166
 
Change in list syntax: use commas to indicate list, not parentheses (square
2167
 
brackets and parentheses are no longer recognised as lists).
2168
 
 
2169
 
';' is no longer valid for comments, and no multiline comments.
2170
 
 
2171
 
No attribute-style access to values.
2172
 
 
2173
 
Empty values not allowed: use '' or "".
2174
 
 
2175
 
In ConfigObj 3, setting a non-flatfile member to ``None`` would initialise it
2176
 
as an empty section.
2177
 
 
2178
 
The escape entities '&mjf-lf;' and '&mjf-quot;' have gone, replaced by triple
2179
 
quote, multiple line values.
2180
 
 
2181
 
The ``newline``, ``force_return``, and ``default`` options have gone.
2182
 
 
2183
 
``fileerror`` and ``createempty`` options have become ``file_error`` and
2184
 
``create_empty``.
2185
 
 
2186
 
Partial configspecs (for specifying the order members should be written out,
2187
 
and which should be present) have gone. The configspec is no longer used to
2188
 
specify order for the ``write`` method.
2189
 
 
2190
 
Infinite loops in string interpolation are now detected and raise an error
2191
 
``InterpolationLoopError``.
2192
 
 
2193
 
Specifying a value for interpolation which doesn't exist now raises a
2194
 
``MissingInterpolationOption`` error (instead of merely being ignored).
2195
 
 
2196
 
The ``writein`` method has been removed.
2197
 
 
2198
 
The comments attribute is now a list (``inline_comments`` equates to the old
2199
 
comments attribute).
2200
 
 
2201
 
ConfigObj 3
2202
 
-----------
2203
 
 
2204
 
ConfigObj 3 is now deprecated in favour of ConfigObj 4. I can fix bugs in
2205
 
ConfigObj 3 if needed, though.
2206
 
 
2207
 
For anyone who still needs it, you can download it here: `ConfigObj 3.3.1`_
2208
 
 
2209
 
You can read the old docs at : `ConfigObj 3 Docs`_
2210
 
 
2211
 
.. _ConfigObj 3.3.1: http://www.voidspace.org.uk/cgi-bin/voidspace/downman.py?file=configobj3.zip
2212
 
.. _ConfigObj 3 Docs: http://www.voidspace.org.uk/python/configobj3.html
2213
 
 
2214
 
 
2215
 
CREDITS
2216
 
=======
2217
 
 
2218
 
ConfigObj 4 is written by (and copyright) `Michael Foord`_ and 
2219
 
`Nicola Larosa`_.
2220
 
 
2221
 
Particularly thanks to Nicola Larosa for help on the config file spec, the
2222
 
validation system and the doctests.
2223
 
 
2224
 
*validate.py* was originally written by Michael Foord and `Mark Andrews`_.
2225
 
 
2226
 
Thanks to others for input and bugfixes.
2227
 
 
2228
 
 
2229
 
LICENSE
2230
 
=======
2231
 
 
2232
 
ConfigObj, and related files, are licensed under the BSD license. This is a
2233
 
very unrestrictive license, but it comes with the usual disclaimer. This is
2234
 
free software: test it, break it, just don't blame us if it eats your data !
2235
 
Of course if it does, let us know and we'll fix the problem so it doesn't
2236
 
happen to anyone else {sm;:-)}. ::
2237
 
 
2238
 
    Copyright (c) 2004 - 2006, Michael Foord & Nicola Larosa
2239
 
    All rights reserved.
2240
 
 
2241
 
    Redistribution and use in source and binary forms, with or without
2242
 
    modification, are permitted provided that the following conditions are
2243
 
    met:
2244
 
 
2245
 
 
2246
 
        * Redistributions of source code must retain the above copyright
2247
 
          notice, this list of conditions and the following disclaimer.
2248
 
 
2249
 
        * Redistributions in binary form must reproduce the above
2250
 
          copyright notice, this list of conditions and the following
2251
 
          disclaimer in the documentation and/or other materials provided
2252
 
          with the distribution.
2253
 
 
2254
 
        * Neither the name of Michael Foord nor Nicola Larosa
2255
 
          may be used to endorse or promote products derived from this
2256
 
          software without specific prior written permission.
2257
 
 
2258
 
    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2259
 
    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2260
 
    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2261
 
    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2262
 
    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2263
 
    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2264
 
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2265
 
    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2266
 
    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2267
 
    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2268
 
    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2269
 
 
2270
 
You should also be able to find a copy of this license at : `BSD License`_
2271
 
 
2272
 
.. _BSD License: http://www.voidspace.org.uk/python/license.shtml
2273
 
 
2274
 
 
2275
 
TODO
2276
 
====
2277
 
 
2278
 
Better support for configuration from multiple files, including tracking
2279
 
*where* the original file came from and writing changes to the correct
2280
 
file.
2281
 
 
2282
 
Make ``newline`` an option (as well as an attribute) ?
2283
 
 
2284
 
``UTF16`` encoded files, when returned as a list of lines, will have the
2285
 
BOM at the start of every line. Should this be removed from all but the
2286
 
first line ?
2287
 
 
2288
 
Option to set warning type for unicode decode ? (Defaults to strict).
2289
 
 
2290
 
A method to optionally remove uniform indentation from multiline values.
2291
 
(do as an example of using ``walk`` - along with string-escape)
2292
 
 
2293
 
Should the results dictionary from validate be an ordered dictionary if
2294
 
`odict <http://www.voidspace.org.uk/python/odict.html>`_ is available ?
2295
 
 
2296
 
Implement some of the sequence methods (which include slicing) from the
2297
 
newer ``odict`` ?
2298
 
 
2299
 
Preserve line numbers of values (and possibly the original text of each value).
2300
 
 
2301
 
 
2302
 
ISSUES
2303
 
======
2304
 
 
2305
 
.. note::
2306
 
 
2307
 
    Please file any bug reports to `Michael Foord`_ or the **ConfigObj**
2308
 
    `Mailing List`_.
2309
 
 
2310
 
There is currently no way to specify the encoding of a configspec file.
2311
 
 
2312
 
When using ``copy`` mode for validation, it won't copy ``DEFAULT``
2313
 
sections. This is so that you *can* use interpolation in configspec
2314
 
files.
2315
 
 
2316
 
``validate`` doesn't report *extra* values or sections.
2317
 
 
2318
 
You can't have a keyword with the same name as a section (in the same
2319
 
section). They are both dictionary keys - so they would overlap.
2320
 
 
2321
 
ConfigObj doesn't quote and unquote values if ``list_values=False``.
2322
 
This means that leading or trailing whitespace in values will be lost when
2323
 
writing. (Unless you manually quote).
2324
 
 
2325
 
Interpolation checks first the current section, then the 'DEFAULT' subsection
2326
 
of the current section, before moving on to the current section's parent and
2327
 
so on up the tree.
2328
 
 
2329
 
Logically a 'DEFAULT' section should apply to all subsections of the *same
2330
 
parent* - this means that checking the 'DEFAULT' subsection in the
2331
 
*current section* is not necessarily logical ?
2332
 
 
2333
 
Does it matter that we don't support the ':' divider, which is supported
2334
 
by ``ConfigParser`` ?
2335
 
 
2336
 
String interpolation and validation don't play well together. When
2337
 
validation changes type it sets the value. This will correctly fetch the
2338
 
value using interpolation - but then overwrite the interpolation reference.
2339
 
If the value is unchanged by validation (it's a string) - but other types
2340
 
will be.
2341
 
 
2342
 
 
2343
 
CHANGELOG
2344
 
=========
2345
 
 
2346
 
This is an abbreviated changelog showing the major releases up to version 4.
2347
 
From version 4 it lists all releases and changes. *More* data on individual
2348
 
changes may be found in the source code or the CHANGELOG file.
2349
 
 
2350
 
 
2351
 
2007/02/04 - Version 4.4.0
2352
 
--------------------------
2353
 
 
2354
 
Official release of 4.4.0
2355
 
 
2356
 
 
2357
 
2006/12/17 - Version 4.3.3-alpha4
2358
 
---------------------------------
2359
 
 
2360
 
By Nicola Larosa
2361
 
 
2362
 
Allowed arbitrary indentation in the ``indent_type`` parameter, removed the
2363
 
``NUM_INDENT_SPACES`` and ``MAX_INTERPOL_DEPTH`` (a leftover) constants,
2364
 
added indentation tests (including another docutils workaround, sigh), updated
2365
 
the documentation.
2366
 
 
2367
 
By Michael Foord
2368
 
 
2369
 
Made the import of ``compiler`` conditional so that ``ConfigObj`` can be used
2370
 
with `IronPython <http://www.codeplex.com/IronPython>`_.
2371
 
 
2372
 
 
2373
 
2006/12/17 - Version 4.3.3-alpha3
2374
 
---------------------------------
2375
 
 
2376
 
By Nicola Larosa
2377
 
 
2378
 
Added a missing ``self.`` in the _handle_comment method and a related test,
2379
 
per Sourceforge bug #1523975.
2380
 
 
2381
 
 
2382
 
2006/12/09 - Version 4.3.3-alpha2
2383
 
---------------------------------
2384
 
 
2385
 
By Nicola Larosa
2386
 
 
2387
 
Changed interpolation search strategy, based on this patch by Robin Munn:
2388
 
http://sourceforge.net/mailarchive/message.php?msg_id=17125993
2389
 
 
2390
 
 
2391
 
2006/12/09 - Version 4.3.3-alpha1
2392
 
---------------------------------
2393
 
 
2394
 
By Nicola Larosa
2395
 
 
2396
 
Added Template-style interpolation, with tests, based on this patch by
2397
 
Robin Munn: http://sourceforge.net/mailarchive/message.php?msg_id=17125991
2398
 
(awful archives, bad Sourceforge, bad).
2399
 
 
2400
 
 
2401
 
2006/06/04 - Version 4.3.2
2402
 
--------------------------
2403
 
 
2404
 
Changed error handling, if parsing finds a single error then that error will
2405
 
be re-raised. That error will still have an ``errors`` and a ``config``
2406
 
attribute.
2407
 
 
2408
 
Fixed bug where '\n' terminated files could be truncated.
2409
 
 
2410
 
Bugfix in ``unrepr`` mode, it couldn't handle '#' in values. (Thanks to
2411
 
Philippe Normand for the report.)
2412
 
 
2413
 
As a consequence of this fix, ConfigObj doesn't now keep inline comments in
2414
 
``unrepr`` mode. This is because the parser in the `compiler package`_
2415
 
doesn't keep comments. {sm;:-)}
2416
 
 
2417
 
Error messages are now more useful. They tell you the number of parsing errors
2418
 
and the line number of the first error. (In the case of multiple errors.)
2419
 
 
2420
 
Line numbers in exceptions now start at 1, not 0.
2421
 
 
2422
 
Errors in ``unrepr`` mode are now handled the same way as in the normal mode.
2423
 
The errors stored will be an ``UnreprError``.
2424
 
 
2425
 
 
2426
 
2006/04/29 - Version 4.3.1
2427
 
--------------------------
2428
 
 
2429
 
Added ``validate.py`` back into ``configobj.zip``. (Thanks to Stewart
2430
 
Midwinter)
2431
 
 
2432
 
Updated to `validate.py`_ 0.2.2.
2433
 
 
2434
 
Preserve tuples when calling the ``dict`` method. (Thanks to Gustavo Niemeyer.)
2435
 
 
2436
 
Changed ``__repr__`` to return a string that contains ``ConfigObj({ ... })``.
2437
 
 
2438
 
Change so that an options dictionary isn't modified by passing it to ConfigObj.
2439
 
(Thanks to Artarious.)
2440
 
 
2441
 
Added ability to handle negative integers in ``unrepr``. (Thanks to Kevin
2442
 
Dangoor.)
2443
 
 
2444
 
 
2445
 
2006/03/24 - Version 4.3.0
2446
 
--------------------------
2447
 
 
2448
 
Moved the tests and the CHANGELOG (etc) into a separate file. This has reduced
2449
 
the size of ``configobj.py`` by about 40%.
2450
 
 
2451
 
Added the ``unrepr`` mode to reading and writing config files. Thanks to Kevin
2452
 
Dangoor for this suggestion.
2453
 
 
2454
 
Empty values are now valid syntax. They are read as an empty string ``''``.
2455
 
(``key =``, or ``key = # comment``.)
2456
 
 
2457
 
``validate`` now honours the order of the configspec.
2458
 
 
2459
 
Added the ``copy`` mode to validate. Thanks to Louis Cordier for this
2460
 
suggestion.
2461
 
 
2462
 
Fixed bug where files written on windows could be given ``'\r\r\n'`` line
2463
 
terminators.
2464
 
 
2465
 
Fixed bug where last occurring comment line could be interpreted as the
2466
 
final comment if the last line isn't terminated.
2467
 
 
2468
 
Fixed bug where nested list values would be flattened when ``write`` is
2469
 
called. Now sub-lists have a string representation written instead.
2470
 
 
2471
 
Deprecated ``encode`` and ``decode`` methods instead.
2472
 
 
2473
 
You can now pass in a ConfigObj instance as a configspec (remember to read
2474
 
the configspec file using ``list_values=False``).
2475
 
 
2476
 
Sorted footnotes in the docs.
2477
 
 
2478
 
 
2479
 
2006/02/16 - Version 4.2.0
2480
 
--------------------------
2481
 
 
2482
 
Removed ``BOM_UTF8`` from ``__all__``.
2483
 
 
2484
 
The ``BOM`` attribute has become a boolean. (Defaults to ``False``.) It is
2485
 
*only* ``True`` for the ``UTF16/UTF8`` encodings.
2486
 
 
2487
 
File like objects no longer need a ``seek`` attribute.
2488
 
 
2489
 
Full unicode support added. New options/attributes ``encoding``,
2490
 
``default_encoding``.
2491
 
 
2492
 
ConfigObj no longer keeps a reference to file like objects. Instead the
2493
 
``write`` method takes a file like object as an optional argument. (Which
2494
 
will be used in preference of the ``filename`` attribute if that exists as
2495
 
well.)
2496
 
 
2497
 
utf16 files decoded to unicode.
2498
 
 
2499
 
If ``BOM`` is ``True``, but no encoding specified, then the utf8 BOM is
2500
 
written out at the start of the file. (It will normally only be ``True`` if
2501
 
the utf8 BOM was found when the file was read.)
2502
 
 
2503
 
Thanks to Aaron Bentley for help and testing on the unicode issues.
2504
 
 
2505
 
File paths are *not* converted to absolute paths, relative paths will
2506
 
remain relative as the ``filename`` attribute.
2507
 
 
2508
 
Fixed bug where ``final_comment`` wasn't returned if ``write`` is returning
2509
 
a list of lines.
2510
 
 
2511
 
Deprecated ``istrue``, replaced it with ``as_bool``.
2512
 
 
2513
 
Added ``as_int`` and ``as_float``.
2514
 
 
2515
 
2005/12/14 - Version 4.1.0
2516
 
--------------------------
2517
 
 
2518
 
Added ``merge``, a recursive update.
2519
 
 
2520
 
Added ``preserve_errors`` to ``validate`` and the ``flatten_errors``
2521
 
example function.
2522
 
 
2523
 
Thanks to Matthew Brett for suggestions and helping me iron out bugs.
2524
 
    
2525
 
Fixed bug where a config file is *all* comment, the comment will now be
2526
 
``initial_comment`` rather than ``final_comment``.
2527
 
 
2528
 
Validation no longer done on the 'DEFAULT' section (only in the root level).
2529
 
This allows interpolation in configspecs.
2530
 
 
2531
 
Also use the new list syntax in validate_ 0.2.1. (For configspecs).
2532
 
 
2533
 
2005/12/02 - Version 4.0.2
2534
 
--------------------------
2535
 
 
2536
 
Fixed bug in ``create_empty``. Thanks to Paul Jimenez for the report.
2537
 
 
2538
 
 
2539
 
2005/11/05 - Version 4.0.1
2540
 
--------------------------
2541
 
 
2542
 
Fixed bug in ``Section.walk`` when transforming names as well as values.
2543
 
 
2544
 
Added the ``istrue`` method. (Fetches the boolean equivalent of a string
2545
 
value).
2546
 
 
2547
 
Fixed ``list_values=False`` - they are now only quoted/unquoted if they
2548
 
are multiline values.
2549
 
 
2550
 
List values are written as ``item, item`` rather than ``item,item``.
2551
 
 
2552
 
 
2553
 
2005/10/17 - Version 4.0.0
2554
 
--------------------------
2555
 
 
2556
 
**ConfigObj 4.0.0 Final**
2557
 
 
2558
 
Fixed bug in ``setdefault``. When creating a new section with setdefault the
2559
 
reference returned would be to the dictionary passed in *not* to the new 
2560
 
section. Bug fixed and behaviour documented.
2561
 
 
2562
 
Obscure typo/bug fixed in ``write``. Wouldn't have affected anyone though.
2563
 
 
2564
 
2005/09/09 - Version 4.0.0 beta 5
2565
 
---------------------------------
2566
 
 
2567
 
Removed ``PositionError``.
2568
 
 
2569
 
Allowed quotes around keys as documented.
2570
 
 
2571
 
Fixed bug with commas in comments. (matched as a list value)
2572
 
 
2573
 
2005/09/07 - Version 4.0.0 beta 4
2574
 
---------------------------------
2575
 
 
2576
 
Fixed bug in ``__delitem__``. Deleting an item no longer deletes the 
2577
 
``inline_comments`` attribute.
2578
 
 
2579
 
Fixed bug in initialising ConfigObj from a ConfigObj.
2580
 
 
2581
 
Changed the mailing list address.
2582
 
 
2583
 
2005/08/28 - Version 4.0.0 beta 3
2584
 
---------------------------------
2585
 
 
2586
 
Interpolation is switched off before writing out files.
2587
 
 
2588
 
Fixed bug in handling ``StringIO`` instances. (Thanks to report from
2589
 
"Gustavo Niemeyer" <gustavo@niemeyer.net>)
2590
 
 
2591
 
Moved the doctests from the ``__init__`` method to a separate function.
2592
 
(For the sake of IDE calltips).
2593
 
 
2594
 
2005/08/25 - Version 4.0.0 beta 2
2595
 
---------------------------------
2596
 
 
2597
 
Amendments to *validate.py*.
2598
 
 
2599
 
Official release.
2600
 
 
2601
 
2005/08/21 - Version 4.0.0 beta 1
2602
 
---------------------------------
2603
 
 
2604
 
Reads nested subsections to any depth.
2605
 
 
2606
 
Multiline values.
2607
 
 
2608
 
Simplified options and methods.
2609
 
 
2610
 
New list syntax.
2611
 
 
2612
 
Faster, smaller, and better parser.
2613
 
 
2614
 
Validation greatly improved. Includes:
2615
 
 
2616
 
    * type conversion
2617
 
    * default values
2618
 
    * repeated sections
2619
 
 
2620
 
Improved error handling.
2621
 
 
2622
 
Plus lots of other improvements {sm;:grin:}.
2623
 
 
2624
 
2004/05/24 - Version 3.0.0
2625
 
--------------------------
2626
 
 
2627
 
Several incompatible changes: another major overhaul and change. (Lots of
2628
 
improvements though).
2629
 
 
2630
 
Added support for standard config files with sections. This has an entirely
2631
 
new interface: each section is a dictionary of values.
2632
 
 
2633
 
Changed the update method to be called writein: update clashes with a dict
2634
 
method.
2635
 
 
2636
 
Made various attributes keyword arguments, added several.
2637
 
 
2638
 
Configspecs and orderlists have changed a great deal.
2639
 
 
2640
 
Removed support for adding dictionaries: use update instead.
2641
 
 
2642
 
Now subclasses a new class called caselessDict. This should add various
2643
 
dictionary methods that could have caused errors before.
2644
 
 
2645
 
It also preserves the original casing of keywords when writing them back out.
2646
 
 
2647
 
Comments are also saved using a ``caselessDict``.
2648
 
 
2649
 
Using a non-string key will now raise a ``TypeError`` rather than converting 
2650
 
the key.
2651
 
 
2652
 
Added an exceptions keyword for *much* better handling of errors.
2653
 
 
2654
 
Made ``creatempty=False`` the default.
2655
 
 
2656
 
Now checks indict *and* any keyword args. Keyword args take precedence over
2657
 
indict.
2658
 
 
2659
 
``' ', ':', '=', ','`` and ``'\t'`` are now all valid dividers where the 
2660
 
keyword is unquoted.
2661
 
 
2662
 
ConfigObj now does no type checking against configspec when you set items.
2663
 
 
2664
 
delete and add methods removed (they were unnecessary).
2665
 
 
2666
 
Docs rewritten to include all this gumph and more; actually ConfigObj is
2667
 
*really* easy to use.
2668
 
 
2669
 
Support for stdout was removed.
2670
 
 
2671
 
A few new methods added.
2672
 
 
2673
 
Charmap is now incorporated into ConfigObj.
2674
 
 
2675
 
2004/03/14 - Version 2.0.0 beta
2676
 
-------------------------------
2677
 
 
2678
 
Re-written it to subclass dict. My first forays into inheritance and operator
2679
 
overloading.
2680
 
 
2681
 
The config object now behaves like a dictionary.
2682
 
 
2683
 
I've completely broken the interface, but I don't think anyone was really
2684
 
 using it anyway.
2685
 
 
2686
 
This new version is much more 'classy' {sm;:wink:}
2687
 
 
2688
 
It will also read straight from/to a filename and completely parse a config
2689
 
file without you *having* to supply a config spec.
2690
 
 
2691
 
Uses listparse, so can handle nested list items as values.
2692
 
 
2693
 
No longer has getval and setval methods: use normal dictionary methods, or add
2694
 
and delete.
2695
 
 
2696
 
2004/01/29 - Version 1.0.5
2697
 
--------------------------
2698
 
 
2699
 
Version 1.0.5 has a couple of bugfixes as well as a couple of useful additions
2700
 
over previous versions.
2701
 
 
2702
 
Since 1.0.0 the buildconfig function has been moved into this distribution,
2703
 
and the methods reset, verify, getval and setval have been added.
2704
 
 
2705
 
A couple of bugs have been fixed.
2706
 
 
2707
 
Origins
2708
 
-------
2709
 
 
2710
 
ConfigObj originated in a set of functions for reading config files in the
2711
 
`atlantibots <http://www.voidspace.org.uk/atlantibots/>`_ project. The original
2712
 
functions were written by Rob McNeur.
2713
 
 
2714
 
 
2715
 
----------
2716
 
 
2717
 
Footnotes
2718
 
=========
2719
 
 
2720
 
.. [#] 315 of them, at the time of writing.
2721
 
 
2722
 
.. [#] And if you discover any bugs, let us know. We'll fix them quickly.
2723
 
 
2724
 
.. [#] If you specify a filename that doesn't exist, ConfigObj will assume you
2725
 
    are creating a new one. See the *create_empty* and *file_error* options_.
2726
 
 
2727
 
.. [#] They can be byte strings (*ordinary* strings) or Unicode.
2728
 
 
2729
 
.. [#] Except we don't support the RFC822 style line continuations, nor ':' as
2730
 
    a divider.
2731
 
 
2732
 
.. [#] This is a change in ConfigObj 4.2.0. Note that ConfigObj doesn't call
2733
 
    the seek method of any file like object you pass in. You may want to call
2734
 
    ``file_object.seek(0)`` yourself, first.
2735
 
 
2736
 
.. [#] A side effect of this is that it enables you to copy a ConfigObj :
2737
 
 
2738
 
    .. raw:: html
2739
 
    
2740
 
        {+coloring}
2741
 
    
2742
 
        # only copies members
2743
 
        # not attributes/comments
2744
 
        config2 = ConfigObj(config1)
2745
 
    
2746
 
        {-coloring}
2747
 
 
2748
 
    The order of values and sections will not be preserved, though.
2749
 
 
2750
 
.. [#] Other than lists of strings.
2751
 
 
2752
 
.. [#] The exception is if it detects a ``UTF16`` encoded file which it
2753
 
    must decode before parsing.
2754
 
     
2755
 
.. [#] The method signature in the API docs will show that this method takes
2756
 
    two arguments. The second is the section to be written. This is because the
2757
 
    ``write`` method is called recursively.
2758
 
 
2759
 
.. [#] The dict method doesn't actually use the deepcopy mechanism. This means
2760
 
    if you add nested lists (etc) to your ConfigObj, then the dictionary
2761
 
    returned by dict may contain some references. For all *normal* ConfigObjs
2762
 
    it will return a deepcopy.
2763
 
 
2764
 
.. [#] Passing ``(section, key)`` rather than ``(value, key)`` allows you to
2765
 
    change the value by setting ``section[key] = newval``. It also gives you
2766
 
    access to the *rename* method of the section.
2767
 
 
2768
 
.. [#] Minimum required version of *validate.py* 0.2.0 .
2769
 
 
2770
 
.. [#] It also makes ConfigObj a lot simpler to *use*.
2771
 
 
2772
 
.. note::
2773
 
 
2774
 
    Rendering this document with docutils also needs the
2775
 
    textmacros module and the PySrc CSS stuff. See
2776
 
    http://www.voidspace.org.uk/python/firedrop2/textmacros.shtml
2777
 
 
2778
 
.. raw:: html
2779
 
 
2780
 
    <div align="center">
2781
 
        <p>
2782
 
            <a href="http://www.python.org">
2783
 
                <img src="images/new_python.gif" width="100" height="103" border="0" 
2784
 
                    alt="Powered by Python" />
2785
 
            </a>
2786
 
            <a href="http://sourceforge.net">
2787
 
                <img src="http://sourceforge.net/sflogo.php?group_id=123265&amp;type=1" width="88" height="31" border="0" alt="SourceForge.net Logo" />
2788
 
            </a>
2789
 
            <a href="http://www.opensource.org">
2790
 
                <img src="images/osi-certified-120x100.gif" width="120" height="100" border="0"
2791
 
                    alt="Certified Open Source"/>
2792
 
            </a>
2793
 
        </p>
2794
 
        <p>
2795
 
            <a href="http://www.voidspace.org.uk/python/index.shtml">
2796
 
                <img src="images/pythonbanner.gif" width="468" height="60" 
2797
 
                alt="Python on Voidspace" border="0" />
2798
 
            </a>
2799
 
        </p>
2800
 
        <p>
2801
 
            <a href="http://sourceforge.net/donate/index.php?group_id=123265">
2802
 
                <img src="http://images.sourceforge.net/images/project-support.jpg" width="88" height="32" border="0" alt="Support This Project" /> 
2803
 
            </a>
2804
 
        </p>
2805
 
        <p>
2806
 
            <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
2807
 
            </script>
2808
 
            <script type="text/javascript">
2809
 
            _uacct = "UA-203625-1";
2810
 
            urchinTracker();
2811
 
            </script>
2812
 
        </p>
2813
 
 
2814
 
    </div>
2815
 
 
2816
 
.. _listquote: http://www.voidspace.org.uk/python/modules.shtml#listquote
2817
 
.. _Michael Foord: http://www.voidspace.org.uk/index2.shtml
2818
 
.. _Nicola Larosa: http://www.teknico.net
2819
 
.. _Mark Andrews: http://www.la-la.com