~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: John Arbash Meinel
  • Date: 2007-05-04 18:59:36 UTC
  • mto: This revision was merged to the branch mainline in revision 2643.
  • Revision ID: john@arbash-meinel.com-20070504185936-1mjdoqmtz74xe5mg
A C implementation of _fields_to_entry_0_parents drops the time from 400ms to 330ms for a 21k-entry tree

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
----------------------------------------
8
8
 
9
9
:Authors: Michael Foord, Nicola Larosa
10
 
:Version: ConfigObj 4.5.2
11
 
:Date: 2008/02/24
 
10
:Version: ConfigObj 4.2.0
 
11
:Date: 2006/02/16
12
12
:Homepage: `ConfigObj Homepage`_
13
13
:Sourceforge: Sourceforge_
14
 
:Development: `SVN Repository`_
15
14
:License: `BSD License`_
16
15
:Support: `Mailing List`_
17
16
 
18
17
.. _Mailing List: http://lists.sourceforge.net/lists/listinfo/configobj-develop
19
 
.. _SVN Repository: http://svn.pythonutils.python-hosting.com
20
18
 
21
19
.. meta::
22
20
   :description: ConfigObj - a Python module for easy reading and writing of 
24
22
   :keywords: python, script, module, config, configuration, data, persistence,
25
23
              developer, configparser
26
24
 
27
 
 
28
25
.. contents:: ConfigObj Manual
29
26
.. sectnum::
30
27
 
31
 
 
32
28
Introduction
33
29
============
34
30
 
36
32
file round tripper*. Its main feature is that it is very easy to use, with a
37
33
straightforward programmer's interface and a simple syntax for config files.
38
34
It has lots of other features though :
39
 
    
 
35
 
 
36
.. sidebar:: ConfigObj in Bazaar
 
37
 
 
38
    **ConfigObj** is now used as the config file parser for `Bazaar <http://bazaar-vcs.org>`_.
 
39
    
 
40
    Bazaar is *the* Python  distributed {acro;VCS;Version Control System}. 
 
41
    ConfigObj is used to read ``bazaar.conf`` and ``branches.conf``.
 
42
    
 
43
    Other projects that use **ConfigObj** include :
 
44
    
 
45
    * `Planet Plus <http://planetplus.python-hosting.com/>`_
 
46
    
 
47
        A new web application version of `Planet <http://www.planetplanet.org/>`_, 
 
48
        the web aggregator.
 
49
        
 
50
    * `NeuroImaging in Python <http://projects.scipy.org/neuroimaging/ni/wiki>`_
 
51
    
 
52
        BrainSTAT is a project with the ultimate goal to produce a
 
53
        platform-independent python environment for the analysis of brain
 
54
        imaging data.
 
55
        
 
56
    * `Gruik <http://www.tracos.org/gruik/wiki>`_
 
57
    
 
58
        Gruik is a free software network packet sniffer.
 
59
 
40
60
* Nested sections (subsections), to any level
41
61
* List values
42
62
* Multiple line values
47
67
    - repeated sections
48
68
    - and allowing default values
49
69
 
50
 
* When writing out config files, ConfigObj preserves all comments and the order of members and sections
51
 
* Many useful methods and options for working with configuration files (like the 'reload' method)
52
 
* Full Unicode support
 
70
* All comments in the file are preserved
 
71
* The order of keys/sections is preserved
 
72
* No external dependencies
 
73
* Full unicode support.
53
74
 
 
75
ConfigObj 4 is a complete rewrite of ConfigObj. ConfigObj now has a barrage [#]_
 
76
of doctests built into it, testing almost every feature. Run ``python configobj.py -v``
 
77
to see them in action. Despite the tests, ConfigObj 4 is smaller than version 3
 
78
and has no external dependencies.
54
79
 
55
80
For support and bug reports please use the ConfigObj `Mailing List`_.
56
81
 
 
82
.. hint::
 
83
 
 
84
    ConfigObj provides a convenient API for storing all sorts of data, not just
 
85
    config files. There is an article on using `ConfigObj for Data Persistence`_.
 
86
    
 
87
    The code from that article is available as ConfigPersist.py_.
 
88
 
 
89
.. _ConfigObj for Data Persistence: http://www.voidspace.org.uk/python/articles/configobj_for_data_persistence.shtml
 
90
.. _ConfigPersist.py: http://www.voidspace.org.uk/python/configpersist.html
 
91
 
57
92
 
58
93
Downloading
59
94
===========
60
95
 
61
 
The current version is **4.5.2**, dated 24th February 2008. ConfigObj 4 is
 
96
The current version is **4.2.0**, dated 16th February 2006. ConfigObj 4 is
62
97
now stable. We still expect to pick up a few bugs along the way though [#]_.
63
98
{sm;:-)}
64
99
 
74
109
 
75
110
* configobj.zip_ from Voidspace
76
111
 
77
 
    This also contains validate.py_  and `this document`_.
 
112
    This also contains validate.py_ , the `API Docs`_ and `this document`_.
78
113
 
79
114
* The latest development version can be obtained from the `Subversion
80
115
  Repository`_.
86
121
Documentation
87
122
-------------
88
123
 
89
 
*configobj.zip* also contains `this document`_.
90
 
 
91
 
* You can view `this document`_ online at the `ConfigObj Homepage`_.
92
 
 
 
124
*configobj.zip* contains `this document`_ and full `API Docs`_, generated by
 
125
the EpyDoc_ program.
 
126
 
 
127
* You can view `this document`_ online as the `ConfigObj Homepage`_.
 
128
 
 
129
* You can also browse the `API Docs`_ online.
93
130
 
94
131
Pythonutils
95
132
-----------
98
135
various other useful modules, and is required by many of the `Voidspace Python
99
136
Projects`_.
100
137
 
101
 
 
102
 
Development Version
103
 
-------------------
104
 
 
105
 
It is sometimes possible to get the latest *development version* of ConfigObj
106
 
from the `Subversion Repository <http://svn.pythonutils.python-hosting.com/trunk/pythonutils/>`_.
107
 
 
108
138
.. _configobj.py: http://www.voidspace.org.uk/cgi-bin/voidspace/downman.py?file=configobj.py
109
 
.. _configobj.zip: http://www.voidspace.org.uk/cgi-bin/voidspace/downman.py?file=configobj-4.5.2.zip
 
139
.. _configobj.zip: http://www.voidspace.org.uk/cgi-bin/voidspace/downman.py?file=configobj-4.2.0.zip
110
140
.. _validate.py: http://www.voidspace.org.uk/cgi-bin/voidspace/downman.py?file=validate.py
 
141
.. _API Docs: http://www.voidspace.org.uk/python/configobj-api/
111
142
.. _this document:
112
143
.. _configobj homepage: http://www.voidspace.org.uk/python/configobj.html
 
144
.. _Subversion Repository: http://svn.rest2web.python-hosting.com/branches/configobj4
113
145
.. _Sourceforge: http://sourceforge.net/projects/configobj
 
146
.. _EpyDoc: http://epydoc.sourceforge.net
114
147
.. _pythonutils: http://www.voidspace.org.uk/python/pythonutils.html
115
 
.. _Voidspace Python Projects: http://www.voidspace.org.uk/python/index.shtml
116
 
 
117
 
 
118
 
 
119
 
ConfigObj in the Real World
120
 
===========================
121
 
    
122
 
**ConfigObj** is widely used. Projects using it include:
123
 
 
124
 
* `Bazaar <http://bazaar-ng.org>`_.
125
 
 
126
 
    Bazaar is a Python distributed {acro;VCS;Version Control System}.
127
 
    ConfigObj is used to read ``bazaar.conf`` and ``branches.conf``.
128
 
 
129
 
* `Turbogears <http://www.turbogears.org/>`_
130
 
 
131
 
    Turbogears is a web application framework.
132
 
 
133
 
* `Chandler <http://chandler.osafoundation.org/>`_
134
 
 
135
 
   A Python and `wxPython <http://www.wxpython.org>`_ 
136
 
   {acro;PIM;Personal Information Manager}, being developed by the 
137
 
   `OSAFoundation <http://www.osafoundation.org/>`_.
138
 
 
139
 
* `matplotlib <http://matplotlib.sourceforge.net/>`_
140
 
 
141
 
        A 2D plotting library.
142
 
 
143
 
* `IPython <http://ipython.scipy.org/moin/>`_
144
 
 
145
 
    IPython is an enhanced interactive Python shell. IPython uses ConfigObj in a module called 'TConfig' that combines it with enthought `Traits <http://code.enthought.com/traits/>`_: `tconfig <http://ipython.scipy.org/ipython/ipython/browser/ipython/branches/saw/sandbox/tconfig>`_.
146
 
    
147
 
* `Elisa - the Fluendo Mediacenter <http://elisa.fluendo.com/>`_    
148
 
    
149
 
    Elisa is an open source cross-platform media center solution designed to be simple for people not particularly familiar with computers.
 
148
.. _Voidspace Python Projects: http://www.voidspace.org.uk/python
150
149
 
151
150
 
152
151
Getting Started
155
154
The outstanding feature of using ConfigObj is simplicity. Most functions can be
156
155
performed with single line commands.
157
156
 
158
 
 
159
157
Reading a Config File
160
158
---------------------
161
159
 
196
194
 
197
195
    {-coloring}
198
196
 
199
 
 
200
197
Writing a Config File
201
198
---------------------
202
199
 
246
243
    Keywords and section names can only be strings [#]_. Attempting to set
247
244
    anything else will raise a ``ValueError``.
248
245
 
249
 
 
250
246
Config Files
251
247
------------
252
248
 
308
304
 
309
305
    {-coloring}
310
306
 
311
 
 
312
307
infile
313
308
------
314
309
 
332
327
  ``filename`` attribute of your ConfigObj will be ``None``. All keys must be
333
328
  strings. In this case, the order of values and sections is arbitrary.
334
329
 
335
 
 
336
330
options
337
331
-------
338
332
 
360
354
    values are not parsed for lists.
361
355
        
362
356
        If ``list_values = False`` then single line values are not quoted or
363
 
        unquoted when reading and writing.
 
357
        unqouted when reading and writing.
364
358
 
365
359
    Changing this value affects whether single line values will be quoted or 
366
360
    not when writing.
386
380
    default.
387
381
 
388
382
    You can set this attribute to change whether string interpolation is done
389
 
    when values are fetched. See the `String Interpolation`_ section for more details.
 
383
    when values are fetched. See the interpolation_ section for more details.
390
384
 
391
385
* 'configspec': ``None``
392
386
 
416
410
    non-string value [#]_ will raise a ``TypeError`` (no type conversion is
417
411
    done by validation).
418
412
 
419
 
* 'indent_type': ``'    '``
 
413
* 'indent_type': ``' '``
420
414
 
421
 
    Indentation is not significant; it can however be present in the input and
422
 
    output config. Any combination of tabs and spaces may be used: the string
423
 
    will be repeated for each level of indentation. Typical values are: ``''``
424
 
    (no indentation), ``'    '`` (indentation with four spaces, the default),
425
 
    ``'\t'`` (indentation with one tab).
 
415
    Indentation is not significant; it can however be present in the output
 
416
    config. Allowable values are: ``''`` (no indentation), ``' '`` (indentation
 
417
    with spaces, fixed at four per level), or ``'\t'`` (indentation with tabs,
 
418
    one tab per level).
426
419
 
427
420
    If this option is not specified, and the ConfigObj is initialised with a
428
421
    dictionary, the indentation used in the output is the default one, that is,
429
 
    four spaces.
 
422
    spaces.
430
423
 
431
424
    If this option is not specified, and the ConfigObj is initialised with a
432
425
    list of lines or a file, the indentation used in the first indented line is
465
458
 
466
459
    ``default_encoding``, if specified, is the encoding used to decode byte
467
460
    strings in the **ConfigObj** before writing. If this is ``None``, then
468
 
    the Python default encoding (``sys.defaultencoding`` - usually ASCII) is
 
461
    the Python default encoding (``sys.defaultencoding`` - usually ascii) is
469
462
    used.
470
463
    
471
464
    For most Western European users, a value of ``latin-1`` is sensible.
475
468
    Any characters in byte-strings that can't be decoded using the
476
469
    ``default_encoding`` will raise a ``UnicodeDecodeError``.
477
470
 
478
 
* 'unrepr': ``False``
479
 
 
480
 
    The ``unrepr`` option reads and writes files in a different mode. This
481
 
    allows you to store and retrieve the basic Python data-types using config
482
 
    files.
483
 
    
484
 
    This uses Python syntax for lists and quoting. See `unrepr mode`_ for the
485
 
    full details.
486
 
 
487
 
* 'write_empty_values': ``False`` 
488
 
 
489
 
    If ``write_empty_values`` is ``True``, empty strings are written as
490
 
    empty values. See `Empty Values`_ for more details.
491
 
 
492
471
 
493
472
Methods
494
473
-------
499
478
 
500
479
In addition, the following `Section Methods`_ may be useful :
501
480
 
502
 
* 'restore_default'
503
 
* 'restore_defaults'
504
 
* 'walk'
505
 
* 'merge'
506
 
* 'dict'
507
 
* 'as_bool'
508
 
* 'as_float'
509
 
* 'as_int'
 
481
* *encode*
 
482
* *decode*
 
483
* *walk*
 
484
* *merge*
 
485
* *dict* 
 
486
* *as_bool*
 
487
* *as_float*
 
488
* *as_int*
510
489
 
511
490
Read about Sections_ for details of all the methods.
512
491
 
519
498
    
520
499
    You would typically use this to create a default ConfigObj and then merge
521
500
    in user settings. This way users only need to specify values that are
522
 
    different from the default. You can use configspecs and validation to
523
 
    achieve the same thing of course.
 
501
    different from the default.
524
502
    
525
503
 
526
504
The public methods available on ConfigObj are :
527
505
 
528
506
* 'write'
529
507
* 'validate'
530
 
* 'reset'
531
 
* 'reload'
532
 
 
533
508
 
534
509
write
535
510
~~~~~
559
534
'final_comment'. Comment lines and inline comments are written with each
560
535
key/value.
561
536
 
562
 
 
563
537
validate
564
538
~~~~~~~~
565
539
 
566
540
::
567
541
 
568
 
    validate(validator, preserve_errors=False, copy=False)
 
542
    validate(validator, preserve_errors=False)
569
543
 
570
544
.. raw:: html
571
545
 
581
555
    test = config.validate(val)
582
556
    if test == True:
583
557
        print 'Succeeded.'
 
558
 
584
559
    {-coloring}
585
560
 
586
561
The validate method uses the `validate 
588
563
validation.
589
564
    
590
565
This method validates the ConfigObj against the configspec. By doing type
591
 
conversion as well it can abstract away the config file altogether and present
 
566
conversion as well, it can abstract away the config file altogether and present
592
567
the config *data* to your application (in the types it expects it to be).
593
568
 
594
569
If the ``configspec`` attribute of the ConfigObj is ``None``, it raises a
606
581
 
607
582
.. hint::
608
583
 
609
 
    The system of configspecs can seem confusing at first, but is actually
610
 
    quite simple and powerful. For a concrete example of how to use it, you may
611
 
    find this blog entry helpful :
612
 
    `Transforming Values with ConfigObj <http://www.voidspace.org.uk/python/weblog/arch_d7_2006_03_04.shtml#e257>`_.
613
 
 
614
 
 
615
 
The ``copy`` parameter fills in missing values from the configspec (default
616
 
values), *without* marking the values as defaults. It also causes comments to
617
 
be copied from the configspec into the config file. This allows you to use a
618
 
configspec to create default config files. (Normally default values aren't
619
 
written out by the ``write`` method.)
620
 
 
621
 
As of ConfigObj 4.3.0 you can also pass in a ConfigObj instance as your
622
 
configspec. This is especially useful if you need to specify the encoding of
623
 
your configspec file. When you read your configspec file, you *must* specify
624
 
``list_values=False``.
625
 
 
626
 
.. raw:: html
627
 
 
628
 
    {+coloring}
629
 
    from configobj import ConfigObj
630
 
    configspec = ConfigObj(configspecfilename, encoding='UTF8',
631
 
                           list_values=False)
632
 
    config = ConfigObj(filename, configspec=configspec)
633
 
    {-coloring}
 
584
    If your ConfigObj is only comprised of basic data types, then you can use
 
585
    a function from the ConfigPersist.py_ module to auto-generate your
 
586
    configspec.
634
587
    
 
588
    See `ConfigObj for Data Persistence`_.
 
589
 
635
590
 
636
591
Return Value
637
592
############
703
658
Writing invalid default values is a *guaranteed* way of confusing your users.
704
659
Default values **must** pass the check.
705
660
 
706
 
 
707
661
Mentioning Repeated Sections
708
662
############################
709
663
 
744
698
 
745
699
    {-coloring}
746
700
 
747
 
 
748
 
Mentioning copy Mode
749
 
####################
750
 
 
751
 
As discussed in `Mentioning Default Values`_, you can use a configspec to
752
 
supply default values. These are marked in the ConfigObj instance as defaults,
753
 
and *not* written out by the ``write`` mode. This means that your users only
754
 
need to supply values that are different from the defaults.
755
 
 
756
 
This can be inconvenient if you *do* want to write out the default values,
757
 
for example to write out a default config file.
758
 
 
759
 
If you set ``copy=True`` when you call validate, then no values are marked as
760
 
defaults. In addition, all comments from the configspec are copied into
761
 
your ConfigObj instance. You can then call ``write`` to create your config
762
 
file.
763
701
    
764
 
There is a limitation with this. In order to allow `String Interpolation`_ to work
765
 
within configspecs, ``DEFAULT`` sections are not processed by
766
 
validation; even in copy mode.
767
 
 
768
 
 
769
 
reload
770
 
~~~~~~
771
 
 
772
 
If a ConfigObj instance was loaded from the filesystem, then this method will reload it. It
773
 
will also reuse any configspec you supplied at instantiation (including reloading it from
774
 
the filesystem if you passed it in as a filename).
775
 
 
776
 
If the ConfigObj does not have a filename attribute pointing to a file, then a ``ReloadError`` 
777
 
will be raised.
778
 
 
779
 
 
780
 
reset
781
 
~~~~~
782
 
 
783
 
This method takes no arguments and doesn't return anything. It restores a ConfigObj
784
 
instance to a freshly created state.
785
 
 
786
 
 
787
702
Attributes
788
703
----------
789
704
 
798
713
* list_values
799
714
* encoding
800
715
* default_encoding
801
 
* unrepr
802
 
* write_empty_values
803
 
* newlines
804
716
 
805
717
.. note::
806
718
 
814
726
* create_empty
815
727
* file_error
816
728
 
817
 
 
818
 
interpolation
819
 
~~~~~~~~~~~~~
 
729
interpolate
 
730
~~~~~~~~~~~
820
731
 
821
732
ConfigObj can perform string interpolation in a *similar* way to
822
 
``ConfigParser``. See the `String Interpolation`_ section for full details.
 
733
``ConfigParser``. See the interpolation_ section for full details.
823
734
 
824
 
If ``interpolation`` is set to ``False``, then interpolation is *not* done when
 
735
If ``interpolate`` is set to ``False``, then interpolation is *not* done when
825
736
you fetch values.
826
737
 
827
 
 
828
738
stringify
829
739
~~~~~~~~~
830
740
 
835
745
If stringify is unset (``False``) then attempting to set a value to a non
836
746
string (or a list of strings) will raise a ``TypeError``.
837
747
 
838
 
 
839
748
BOM
840
749
~~~
841
750
 
848
757
 
849
758
For UTF16 encodings, a BOM is *always* written.
850
759
 
851
 
 
852
760
initial_comment
853
761
~~~~~~~~~~~~~~~
854
762
 
859
767
 
860
768
The write method puts these lines before it starts writing out the members.
861
769
 
862
 
 
863
770
final_comment
864
771
~~~~~~~~~~~~~
865
772
 
871
778
The ``write`` method puts these lines after it finishes writing out the
872
779
members.
873
780
 
874
 
 
875
781
list_values
876
782
~~~~~~~~~~~
877
783
 
899
805
        ``list_values=False``. This means that files written by **ConfigObj**
900
806
        *could* now be incompatible - and need the quotes removing by hand.
901
807
 
902
 
 
903
808
encoding
904
809
~~~~~~~~
905
810
 
913
818
~~~~~~~~~~~~~~~~
914
819
 
915
820
If encoding is set, any byte-strings in your ConfigObj instance (keys or
916
 
members) will first be decoded to Unicode using the encoding specified by the
 
821
members) will first be decoded to unicode using the encoding specified by the
917
822
``default_encoding`` attribute. This ensures that the output is in the encoding
918
823
specified.
919
824
 
920
825
If this value is ``None`` then ``sys.defaultencoding`` is used instead.
921
826
 
922
 
 
923
 
unrepr
924
 
~~~~~~
925
 
 
926
 
Another boolean value. If this is set, then ``repr(value)`` is used to write
927
 
values. This writes values in a slightly different way to the normal ConfigObj
928
 
file syntax.
929
 
 
930
 
This preserves basic Python data-types when read back in. See `unrepr mode`_
931
 
for more details.
932
 
 
933
 
 
934
 
write_empty_values
935
 
~~~~~~~~~~~~~~~~~~
936
 
 
937
 
Also boolean. If set, values that are an empty string (``''``) are written as
938
 
empty values. See `Empty Values`_ for more details.
939
 
 
940
 
 
941
 
newlines
942
 
~~~~~~~~
943
 
 
944
 
When a config file is read, ConfigObj records the type of newline separators in the
945
 
file and uses this separator when writing. It defaults to ``None``, and ConfigObj
946
 
uses the system default (``os.sep``) if write is called without newlines having
947
 
been set.
948
 
 
949
 
 
950
827
The Config File Format
951
828
======================
952
829
 
1063
940
 
1064
941
    {+coloring}
1065
942
 
1066
 
    ConfigObj({
 
943
    {
1067
944
        'keyword1': 'value1',
1068
945
        'keyword2': 'value2',
1069
946
        'section 1': {
1086
963
                'keyword2': 'value2',
1087
964
            },
1088
965
        },
1089
 
    })
 
966
    }
1090
967
 
1091
968
    {-coloring}
1092
969
 
1093
970
Sections are ordered: note how the structure of the resulting ConfigObj is in
1094
971
the same order as the original file.
1095
972
 
1096
 
.. note::
1097
 
 
1098
 
    In ConfigObj 4.3.0 *empty values* became valid syntax. They are read as the
1099
 
    empty string. There is also an option/attribute (``write_empty_values``) to
1100
 
    allow the writing of these.
1101
 
    
1102
 
    This is mainly to support 'legacy' config files, written from other
1103
 
    applications. This is documented under `Empty Values`_.
1104
 
    
1105
 
    `unrepr mode`_ introduces *another* syntax variation, used for storing
1106
 
    basic Python datatypes in config files. {sm;:-)}
1107
 
 
1108
 
 
1109
973
Sections
1110
974
========
1111
975
 
1171
1035
 
1172
1036
* 'values'
1173
1037
 
1174
 
 
1175
1038
Section Attributes
1176
1039
------------------
1177
1040
 
1201
1064
    Setting any of these values in the section removes them from the defaults
1202
1065
    list.
1203
1066
 
1204
 
* default_values
1205
 
 
1206
 
    This attribute is a dictionary mapping keys to the default values for the
1207
 
    keys. By default it is an empty dictionary and is populated when you
1208
 
    validate the ConfigObj.
1209
 
 
1210
1067
* scalars, sections
1211
1068
 
1212
1069
    These attributes are normal lists, representing the order that members,
1258
1115
 
1259
1116
    See the validation_ section for full details of how to write configspecs.
1260
1117
 
1261
 
 
1262
1118
Section Methods
1263
1119
---------------
1264
1120
 
1357
1213
    
1358
1214
        In ConfigObj 4.1.0, this method was called ``istrue``. That method is
1359
1215
        now deprecated and will issue a warning when used. It will go away
1360
 
        in a future release.
 
1216
        in the next release.
1361
1217
        
1362
1218
* **as_int**
1363
1219
 
1375
1231
    
1376
1232
    It raises a ``ValueError`` if the conversion can't be done.
1377
1233
    
1378
 
* **restore_default**
1379
 
 
1380
 
    ``restore_default(key)``
1381
 
    
1382
 
    Restore (and return) the default value for the specified key.
1383
 
    
1384
 
    This method will only work for a ConfigObj that was created
1385
 
    with a configspec and has been validated.
1386
 
    
1387
 
    If there is no default value for this key, ``KeyError`` is raised.
1388
 
 
1389
 
* **restore_defaults**
1390
 
    
1391
 
    ``restore_defaults()``
1392
 
 
1393
 
    Recursively restore default values to all members
1394
 
    that have them.
1395
 
    
1396
 
    This method will only work for a ConfigObj that was created
1397
 
    with a configspec and has been validated.
1398
 
    
1399
 
    It doesn't delete or modify entries without default values.
1400
 
 
1401
 
 
1402
1234
Walking a Section
1403
1235
-----------------
1404
1236
 
1577
1409
    #
1578
1410
    cfg.walk(transform, call_on_sections=True)
1579
1411
    print cfg
1580
 
    ConfigObj({'CLIENT1key1': 'CLIENT1value1', 'CLIENT1key2': 'CLIENT1value2', 
 
1412
    {'CLIENT1key1': 'CLIENT1value1', 'CLIENT1key2': 'CLIENT1value2', 
1581
1413
    'CLIENT1key3': 'CLIENT1value3', 
1582
1414
    'CLIENT1section1': {'CLIENT1key1': 'CLIENT1value1', 
1583
1415
        'CLIENT1key2': 'CLIENT1value2', 'CLIENT1key3': 'CLIENT1value3'}, 
1584
1416
    'CLIENT1section2': {'CLIENT1key1': 'CLIENT1value1', 
1585
1417
        'CLIENT1key2': 'CLIENT1value2', 'CLIENT1key3': 'CLIENT1value3', 
1586
1418
        'CLIENT1section1': {'CLIENT1key1': 'CLIENT1value1', 
1587
 
            'CLIENT1key2': 'CLIENT1value2', 'CLIENT1key3': 'CLIENT1value3'}}})
 
1419
            'CLIENT1key2': 'CLIENT1value2', 'CLIENT1key3': 'CLIENT1value3'}}}
1588
1420
            
1589
1421
    {-coloring}
1590
1422
 
1613
1445
    (in a configspec), a ``RepeatSectionError`` will be raised.
1614
1446
 
1615
1447
Number 5 (which is actually two different types of exceptions) is documented
1616
 
    in `String Interpolation`_.
 
1448
    in interpolation_.
1617
1449
 
1618
1450
Number 6 is explained in the validation_ section.
1619
1451
 
1642
1474
 
1643
1475
* ``ConfigspecError``
1644
1476
 
1645
 
    An error occurred whilst parsing a configspec.
1646
 
 
1647
 
* ``UnreprError``
1648
 
 
1649
 
    An error occurred when parsing a value in `unrepr mode`_.
1650
 
    
1651
 
* ``ReloadError``
1652
 
 
1653
 
    ``reload`` was called on a ConfigObj instance that doesn't have a valid 
1654
 
    filename attribute.
 
1477
    An error occured whilst parsing a configspec.
1655
1478
 
1656
1479
When parsing a configspec, ConfigObj will stop on the first error it
1657
1480
encounters.  It will raise a ``ConfigspecError``. This will have an ``error``
1658
1481
attribute, which is the actual error that was raised.
1659
1482
 
1660
 
Behaviour when parsing a config file depends on the option ``raise_errors``.
 
1483
Behavior when parsing a config file depends on the option ``raise_errors``.
1661
1484
If ConfigObj encounters an error while parsing a config file:
1662
1485
 
1663
1486
    If ``raise_errors=True`` then ConfigObj will raise the appropriate error
1666
1489
    If ``raise_errors=False`` (the default) then parsing will continue to the
1667
1490
    end and *all* errors will be collected.
1668
1491
 
1669
 
If ``raise_errors`` is False and multiple errors are found a ``ConfigObjError``
1670
 
is raised. The error raised has a ``config`` attribute, which is the parts of
1671
 
the ConfigObj that parsed successfully. It also has an attribute ``errors``,
1672
 
which is a list of *all* the errors raised. Each entry in the list is an
1673
 
instance of the appropriate error type. Each one has the following attributes
1674
 
(useful for delivering a sensible error message to your user) :
 
1492
In the second case a ``ConfigObjError`` is raised after parsing has stopped.
 
1493
The error raised has a ``config`` attribute, which is the parts of the
 
1494
ConfigObj that parsed successfully. It also has an attribute ``errors``, which
 
1495
is a list of *all* the errors raised. Each entry in the list is an instance of
 
1496
the appropriate error type. Each one has the following attributes (useful for
 
1497
delivering a sensible error message to your user) :
1675
1498
 
1676
1499
* ``line``: the original line that caused the error.
1677
1500
 
1679
1502
 
1680
1503
* ``message``: the error message that accompanied the error.
1681
1504
 
1682
 
If only one error is found, then that error is re-raised. The error still has
1683
 
the ``config`` and ``errors`` attributes. This means that your error handling
1684
 
code can be the same whether one error is raised in parsing , or several.
1685
 
 
1686
 
It also means that in the most common case (a single error) a useful error
1687
 
message will be raised.
1688
 
 
1689
1505
.. note::
1690
1506
 
1691
1507
    One wrongly written line could break the basic structure of your config
1697
1513
Validation
1698
1514
==========
1699
1515
 
1700
 
.. hint::
1701
 
 
1702
 
    The system of configspecs can seem confusing at first, but is actually
1703
 
    quite simple and powerful. For a concrete example of how to use it, you may
1704
 
    find this blog entry helpful :
1705
 
    `Transforming Values with ConfigObj <http://www.voidspace.org.uk/python/weblog/arch_d7_2006_03_04.shtml#e257>`_.
1706
 
 
1707
1516
Validation is done through a combination of the configspec_ and a ``Validator``
1708
1517
object. For this you need *validate.py* [#]_. See downloading_ if you don't
1709
1518
have a copy.
1722
1531
application configuration (boolean, integers, floats, etc) and the text format
1723
1532
of your config file.
1724
1533
 
1725
 
 
1726
1534
configspec
1727
1535
----------
1728
1536
 
1769
1577
    In order to allow this, checks in the 'DEFAULT' section (of the root level
1770
1578
    of your configspec) are *not* used.
1771
1579
 
1772
 
If you need to specify the encoding of your configspec, then you can pass in a
1773
 
ConfigObj instance as your configspec. When you read your configspec file, you
1774
 
*must* specify ``list_values=False``.
1775
 
 
1776
 
.. raw:: html
1777
 
 
1778
 
    {+coloring}
1779
 
    from configobj import ConfigObj
1780
 
    configspec = ConfigObj(configspecfilename, encoding='UTF8',
1781
 
        list_values=False)
1782
 
    config = ConfigObj(filename, configspec=configspec)
1783
 
    {-coloring}
1784
 
 
1785
1580
.. _validate.py documentation: http://www.voidspace.org.uk/python/validate.html
1786
1581
 
1787
 
 
1788
1582
Type Conversion
1789
1583
---------------
1790
1584
 
1799
1593
set the stringify_ attribute to ``False``. If this is the case, attempting to
1800
1594
set a value to a non-string will raise an error.
1801
1595
 
1802
 
 
1803
1596
Default Values
1804
1597
--------------
1805
1598
 
1877
1670
sub-sections. Defaults work in the normal way in repeated sections.
1878
1671
 
1879
1672
 
1880
 
Copy Mode
1881
 
---------
1882
 
 
1883
 
Because you can specify default values in your configspec, you can use
1884
 
ConfigObj to write out default config files for your application.
1885
 
 
1886
 
However, normally values supplied from a default in a configspec are *not*
1887
 
written out by the ``write`` method.
1888
 
 
1889
 
To do this, you need to specify ``copy=True`` when you call validate. As well
1890
 
as not marking values as default, all the comments in the configspec file
1891
 
will be copied into your ConfigObj instance.
1892
 
 
1893
 
.. raw:: html
1894
 
 
1895
 
    {+coloring}
1896
 
    from configobj import ConfigObj
1897
 
    from validate import Validator
1898
 
    vdt = Validator()
1899
 
    config = ConfigObj(configspec='default.ini')
1900
 
    config.filename = 'new_default.ini'
1901
 
    config.validate(vdt, copy=True)
1902
 
    config.write()
1903
 
    {-coloring}
1904
 
 
1905
 
 
1906
1673
Validation and Interpolation
1907
1674
----------------------------
1908
1675
 
1916
1683
overwritten. If validation changes type - the value has to be overwritten, and
1917
1684
any interpolation references are lost {sm;:-(}.
1918
1685
 
1919
 
 
1920
1686
SimpleVal
1921
1687
---------
1922
1688
 
1968
1734
    {-coloring}
1969
1735
 
1970
1736
 
1971
 
Empty values
1972
 
============
1973
 
 
1974
 
Many config files from other applications allow empty values. As of version
1975
 
4.3.0, ConfigObj will read these as an empty string.
1976
 
 
1977
 
A new option/attribute has been added (``write_empty_values``) to allow
1978
 
ConfigObj to write empty strings as empty values.
1979
 
 
1980
 
.. raw:: html
1981
 
 
1982
 
    {+coloring}
1983
 
    from configobj import ConfigObj
1984
 
    cfg = '''
1985
 
        key =
1986
 
        key2 = # a comment
1987
 
    '''.splitlines()
1988
 
    config = ConfigObj(cfg)
1989
 
    print config
1990
 
    ConfigObj({'key': '', 'key2': ''})
1991
 
    
1992
 
    config.write_empty_values = True
1993
 
    for line in config.write():
1994
 
        print line
1995
 
    
1996
 
    key = 
1997
 
    key2 =     # a comment
1998
 
    {-coloring}
1999
 
 
2000
 
 
2001
 
unrepr mode
2002
 
===========
2003
 
 
2004
 
The ``unrepr`` option allows you to store and retrieve the basic Python
2005
 
data-types using config files. It has to use a slightly different syntax to
2006
 
normal ConfigObj files. Unsurprisingly it uses Python syntax.
2007
 
 
2008
 
This means that lists are different (they are surrounded by square brackets),
2009
 
and strings *must* be quoted.
2010
 
 
2011
 
The types that ``unrepr`` can work with are :
2012
 
 
2013
 
    | strings, lists tuples
2014
 
    | None, True, False
2015
 
    | dictionaries, integers, floats
2016
 
    | longs and complex numbers
2017
 
    
2018
 
You can't store classes, types or instances.
2019
 
 
2020
 
``unrepr`` uses ``repr(object)`` to write out values, so it currently *doesn't*
2021
 
check that you are writing valid objects. If you attempt to read an unsupported
2022
 
value, ConfigObj will raise a ``configobj.UnknownType`` exception.
2023
 
 
2024
 
Values that are triple quoted cased. The triple quotes are removed *before*
2025
 
converting. This means that you can use triple quotes to write dictionaries
2026
 
over several lines in your config files. They won't be written like this
2027
 
though.
2028
 
 
2029
 
If you are writing config files by hand, for use with ``unrepr``, you should
2030
 
be aware of the following differences from normal ConfigObj syntax :
2031
 
 
2032
 
    | List : ``['A List', 'With', 'Strings']``
2033
 
    | Strings : ``"Must be quoted."``
2034
 
    | Backslash : ``"The backslash must be escaped \\"``
2035
 
 
2036
 
These all follow normal Python syntax.
2037
 
 
2038
 
In unrepr mode *inline comments* are not saved. This is because lines are
2039
 
parsed using the `compiler package <http://docs.python.org/lib/compiler.html>`_
2040
 
which discards comments.
2041
 
 
2042
 
 
2043
 
String Interpolation
2044
 
====================
 
1737
Interpolation
 
1738
=============
2045
1739
 
2046
1740
ConfigObj allows string interpolation *similar* to the way ``ConfigParser``
2047
 
or ``string.Template`` work. The value of the ``interpolation`` attribute
2048
 
determines which style of interpolation you want to use. Valid values are
2049
 
"ConfigParser" or "Template" (case-insensitive, so "configparser" and
2050
 
"template" will also work). For backwards compatibility reasons, the value
2051
 
``True`` is also a valid value for the ``interpolation`` attribute, and
2052
 
will select ``ConfigParser``-style interpolation. At some undetermined point
2053
 
in the future, that default *may* change to ``Template``-style interpolation.
2054
 
 
2055
 
For ``ConfigParser``-style interpolation, you specify a value to be
2056
 
substituted by including ``%(name)s`` in the value.
2057
 
 
2058
 
For ``Template``-style interpolation, you specify a value to be substituted
2059
 
by including ``${cl}name{cr}`` in the value. Alternately, if 'name' is a valid
2060
 
Python identifier (i.e., is composed of nothing but alphanumeric characters,
2061
 
plus the underscore character), then the braces are optional and the value
2062
 
can be written as ``$name``.
2063
 
 
2064
 
Note that ``ConfigParser``-style interpolation and ``Template``-style
2065
 
interpolation are mutually exclusive; you cannot have a configuration file
2066
 
that's a mix of one or the other. Pick one and stick to it. ``Template``-style
2067
 
interpolation is simpler to read and write by hand, and is recommended if
2068
 
you don't have a particular reason to use ``ConfigParser``-style.
2069
 
 
2070
 
Interpolation checks first the current section to see if ``name`` is the key
2071
 
to a value. ('name' is case sensitive).
2072
 
 
2073
 
If it doesn't find it, next it checks the 'DEFAULT' sub-section of the current
2074
 
section.
2075
 
 
2076
 
If it still doesn't find it, it moves on to check the parent section and the
2077
 
parent section's 'DEFAULT' subsection, and so on all the way up to the main
2078
 
section.
2079
 
 
2080
 
If the value specified isn't found in any of these locations, then a
2081
 
``MissingInterpolationOption`` error is raised (a subclass of
2082
 
``ConfigObjError``).
 
1741
 
 
1742
You specify a value to be substituted by including ``%(name)s`` in the value.
 
1743
 
 
1744
Interpolation checks first the 'DEFAULT' sub-section of the current section to
 
1745
see if ``name`` is the key to a value. ('name' is case sensitive).
 
1746
 
 
1747
If it doesn't find it, next it checks the 'DEFAULT' section of the parent
 
1748
section, last it checks the 'DEFAULT' section of the main section.
 
1749
 
 
1750
If the value specified isn't found then a ``MissingInterpolationOption`` error
 
1751
is raised (a subclass of ``ConfigObjError``).
2083
1752
 
2084
1753
If it is found then the returned value is also checked for substitutions. This
2085
1754
allows you to make up compound values (for example directory paths) that use
2086
1755
more than one default value. It also means it's possible to create circular
2087
 
references. If there are any circular references which would cause an infinite
2088
 
interpolation loop, an ``InterpolationLoopError`` is raised.
 
1756
references. If after ten replacements there are still values to substitute, an
 
1757
``InterpolationDepthError`` is raised.
2089
1758
 
2090
1759
Both of these errors are subclasses of ``InterpolationError``, which is a
2091
1760
subclass of ``ConfigObjError``.
2137
1806
failed.
2138
1807
 
2139
1808
``flatten_errors`` is an example function that turns a results dictionary into
2140
 
a flat list, that only contains values that *failed*.
 
1809
a flat list, that only contains vaues that *failed*.
2141
1810
 
2142
1811
``cfg`` is the ConfigObj instance being checked, ``res`` is the results
2143
1812
dictionary returned by ``validate``.
2194
1863
 
2195
1864
    {-coloring}
2196
1865
 
 
1866
Backwards Compatibility
 
1867
=======================
 
1868
 
 
1869
There have been a lot of changes since ConfigObj 3. The core parser is now
 
1870
based on regular expressions, and is a lot faster and smaller. There is now no
 
1871
difference in the way we treat flat files and non-flatfiles, that is, no empty
 
1872
sections. This means some of the code can be a lot simpler, less code does
 
1873
more of the work [#]_.
 
1874
 
 
1875
There have been other simplifications: for example we only have eight options
 
1876
instead of seventeen.
 
1877
 
 
1878
Most config files created for ConfigObj 3 will be read with no changes and many
 
1879
programs will work without having to alter code. Some of the changes do break
 
1880
backwards compatibility: for example, code that uses the previous options will
 
1881
now raise an error. It should be very easy to fix these, though.
 
1882
 
 
1883
Below is a list of all the changes that affect backwards compatibility. This
 
1884
doesn't include details of method signatures that have changed, because almost
 
1885
all of them have.
 
1886
 
 
1887
Incompatible Changes
 
1888
--------------------
 
1889
 
 
1890
(I have removed a lot of needless complications: this list is probably not
 
1891
conclusive, many option/attribute/method names have changed.)
 
1892
 
 
1893
Case sensitive.
 
1894
 
 
1895
The only valid divider is '='.
 
1896
 
 
1897
Line continuations with ``\`` removed.
 
1898
 
 
1899
No recursive lists in values.
 
1900
 
 
1901
No empty sections.
 
1902
 
 
1903
No distinction between flatfiles and non flatfiles.
 
1904
 
 
1905
Change in list syntax: use commas to indicate list, not parentheses (square
 
1906
brackets and parentheses are no longer recognised as lists).
 
1907
 
 
1908
';' is no longer valid for comments, and no multiline comments.
 
1909
 
 
1910
No attribute-style access to values.
 
1911
 
 
1912
Empty values not allowed: use '' or "".
 
1913
 
 
1914
In ConfigObj 3, setting a non-flatfile member to ``None`` would initialise it
 
1915
as an empty section.
 
1916
 
 
1917
The escape entities '&mjf-lf;' and '&mjf-quot;' have gone, replaced by triple
 
1918
quote, multiple line values.
 
1919
 
 
1920
The ``newline``, ``force_return``, and ``default`` options have gone.
 
1921
 
 
1922
``fileerror`` and ``createempty`` options have become ``file_error`` and
 
1923
``create_empty``.
 
1924
 
 
1925
Partial configspecs (for specifying the order members should be written out,
 
1926
and which should be present) have gone. The configspec is no longer used to
 
1927
specify order for the ``write`` method.
 
1928
 
 
1929
Exceeding the maximum depth of recursion in string interpolation now raises an
 
1930
error ``InterpolationDepthError``.
 
1931
 
 
1932
Specifying a value for interpolation which doesn't exist now raises a
 
1933
``MissingInterpolationOption`` error (instead of merely being ignored).
 
1934
 
 
1935
The ``writein`` method has been removed.
 
1936
 
 
1937
The comments attribute is now a list (``inline_comments`` equates to the old
 
1938
comments attribute).
2197
1939
 
2198
1940
ConfigObj 3
2199
 
===========
 
1941
-----------
2200
1942
 
2201
1943
ConfigObj 3 is now deprecated in favour of ConfigObj 4. I can fix bugs in
2202
1944
ConfigObj 3 if needed, though.
2218
1960
Particularly thanks to Nicola Larosa for help on the config file spec, the
2219
1961
validation system and the doctests.
2220
1962
 
2221
 
*validate.py* was originally written by Michael Foord and Mark Andrews.
 
1963
*validate.py* was originally written by Michael Foord and `Mark Andrews`_.
2222
1964
 
2223
1965
Thanks to others for input and bugfixes.
2224
1966
 
2232
1974
Of course if it does, let us know and we'll fix the problem so it doesn't
2233
1975
happen to anyone else {sm;:-)}. ::
2234
1976
 
2235
 
    Copyright (c) 2004 - 2008, Michael Foord & Nicola Larosa
 
1977
    Copyright (c) 2004 - 2006, Michael Foord & Nicola Larosa
2236
1978
    All rights reserved.
2237
1979
 
2238
1980
    Redistribution and use in source and binary forms, with or without
2272
2014
TODO
2273
2015
====
2274
2016
 
2275
 
Better support for configuration from multiple files, including tracking
2276
 
*where* the original file came from and writing changes to the correct
2277
 
file.
2278
 
 
2279
 
Make ``newline`` an option (as well as an attribute) ?
2280
 
 
2281
 
``UTF16`` encoded files, when returned as a list of lines, will have the
2282
 
BOM at the start of every line. Should this be removed from all but the
2283
 
first line ?
2284
 
 
2285
 
Option to set warning type for unicode decode ? (Defaults to strict).
2286
 
 
2287
 
A method to optionally remove uniform indentation from multiline values.
2288
 
(do as an example of using ``walk`` - along with string-escape)
2289
 
 
2290
 
Should the results dictionary from validate be an ordered dictionary if
2291
 
`odict <http://www.voidspace.org.uk/python/odict.html>`_ is available ?
2292
 
 
2293
 
Implement some of the sequence methods (which include slicing) from the
2294
 
newer ``odict`` ?
2295
 
 
2296
 
Preserve line numbers of values (and possibly the original text of each value).
 
2017
Fix any bugs (and resolvable issues).
 
2018
 
 
2019
Do an example for the 'walk' which removes uniform indentation in multiline
 
2020
values.
 
2021
 
 
2022
When initialising a section from a ConfigObj *or* an ``OrderedDictionary``
 
2023
we could preserve ordering.
 
2024
 
 
2025
Add an *odict* method which returns an ``OrderedDictionary``.
2297
2026
 
2298
2027
 
2299
2028
ISSUES
2304
2033
    Please file any bug reports to `Michael Foord`_ or the **ConfigObj**
2305
2034
    `Mailing List`_.
2306
2035
 
2307
 
There is currently no way to specify the encoding of a configspec file.
2308
 
 
2309
 
When using ``copy`` mode for validation, it won't copy ``DEFAULT``
2310
 
sections. This is so that you *can* use interpolation in configspec
2311
 
files.
2312
 
 
2313
 
``validate`` doesn't report *extra* values or sections.
2314
 
 
2315
 
You can't have a keyword with the same name as a section (in the same
2316
 
section). They are both dictionary keys - so they would overlap.
2317
 
 
2318
 
ConfigObj doesn't quote and unquote values if ``list_values=False``.
2319
 
This means that leading or trailing whitespace in values will be lost when
2320
 
writing. (Unless you manually quote).
2321
 
 
2322
 
Interpolation checks first the current section, then the 'DEFAULT' subsection
2323
 
of the current section, before moving on to the current section's parent and
2324
 
so on up the tree.
2325
 
 
2326
 
Does it matter that we don't support the ':' divider, which is supported
2327
 
by ``ConfigParser`` ?
2328
 
 
2329
 
String interpolation and validation don't play well together. When
2330
 
validation changes type it sets the value. This will correctly fetch the
2331
 
value using interpolation - but then overwrite the interpolation reference.
2332
 
If the value is unchanged by validation (it's a string) - but other types
2333
 
will be.
 
2036
You can't have a keyword with the same name as a section (in the same section).
 
2037
They are both dictionary keys, so they would overlap.
 
2038
 
 
2039
Interpolation checks first the 'DEFAULT' sub-section of the current section,
 
2040
next it checks the 'DEFAULT' section of the parent section, last it checks the
 
2041
'DEFAULT' section of the main section.
 
2042
 
 
2043
Logically a 'DEFAULT' section should apply to all subsections of the *same
 
2044
parent*: this means that checking the 'DEFAULT' sub-section in the *current
 
2045
section* is not necessarily logical ?
 
2046
 
 
2047
Does it matter that we don't support the ':' divider, which is supported by
 
2048
``ConfigParser`` ?
 
2049
 
 
2050
String interpolation and validation don't play well together. See 
 
2051
`Validation and Interpolation`_.
 
2052
 
 
2053
Validation is no longer done on the 'DEFAULT' section (on the root level). This
 
2054
allows interpolation from within your configspec - but also prevents you
 
2055
validating the 'DEFAULT' section.
2334
2056
 
2335
2057
 
2336
2058
CHANGELOG
2337
2059
=========
2338
2060
 
2339
2061
This is an abbreviated changelog showing the major releases up to version 4.
2340
 
From version 4 it lists all releases and changes.
2341
 
 
2342
 
 
2343
 
2008/02/05 - Version 4.5.2
2344
 
--------------------------
2345
 
 
2346
 
Distribution updated to include version 0.3.2 of validate_. This means that
2347
 
``None`` as a default value win configspecs works.
2348
 
 
2349
 
 
2350
 
2008/02/05 - Version 4.5.1
2351
 
--------------------------
2352
 
 
2353
 
Distribution updated to include version 0.3.1 of validate_. This means that
2354
 
Unicode configspecs now work.
2355
 
 
2356
 
 
2357
 
2008/02/05 - Version 4.5.0
2358
 
--------------------------
2359
 
 
2360
 
ConfigObj will now guarantee that files will be written terminated with a
2361
 
newline.
2362
 
 
2363
 
ConfigObj will no longer attempt to import the ``validate`` module, until/unless 
2364
 
you call ``ConfigObj.validate`` with ``preserve_errors=True``. This makes it 
2365
 
faster to import.
2366
 
 
2367
 
New methods ``restore_default`` and ``restore_defaults``. ``restore_default``
2368
 
resets an entry to its default value (and returns that value). ``restore_defaults``
2369
 
resets all entries to their default value. It doesn't modify entries without a 
2370
 
default value. You must have validated a ConfigObj (which populates the
2371
 
``default_values`` dictionary) before calling these methods.
2372
 
 
2373
 
BUGFIX: Proper quoting of keys, values and list values that contain hashes 
2374
 
(when writing).  When ``list_values=False``, values containing hashes are 
2375
 
triple quoted.
2376
 
 
2377
 
Added the ``reload`` method. This reloads a ConfigObj from file. If the filename
2378
 
attribute is not set then a ``ReloadError`` (a new exception inheriting from
2379
 
``IOError``) is raised.
2380
 
 
2381
 
BUGFIX: Files are read in with 'rb' mode, so that native/non-native line endings work!
2382
 
 
2383
 
Minor efficiency improvement in ``unrepr`` mode.
2384
 
 
2385
 
Added missing docstrings for some overidden dictionary methods.
2386
 
 
2387
 
Added the ``reset`` method. This restores a ConfigObj to a freshly created state.
2388
 
 
2389
 
Removed old CHANGELOG file.
2390
 
 
2391
 
 
2392
 
2007/02/04 - Version 4.4.0
2393
 
--------------------------
2394
 
 
2395
 
Official release of 4.4.0
2396
 
 
2397
 
 
2398
 
2006/12/17 - Version 4.3.3-alpha4
2399
 
---------------------------------
2400
 
 
2401
 
By Nicola Larosa
2402
 
 
2403
 
Allowed arbitrary indentation in the ``indent_type`` parameter, removed the
2404
 
``NUM_INDENT_SPACES`` and ``MAX_INTERPOL_DEPTH`` (a leftover) constants,
2405
 
added indentation tests (including another docutils workaround, sigh), updated
2406
 
the documentation.
2407
 
 
2408
 
By Michael Foord
2409
 
 
2410
 
Made the import of ``compiler`` conditional so that ``ConfigObj`` can be used
2411
 
with `IronPython <http://www.codeplex.com/IronPython>`_.
2412
 
 
2413
 
 
2414
 
2006/12/17 - Version 4.3.3-alpha3
2415
 
---------------------------------
2416
 
 
2417
 
By Nicola Larosa
2418
 
 
2419
 
Added a missing ``self.`` in the _handle_comment method and a related test,
2420
 
per Sourceforge bug #1523975.
2421
 
 
2422
 
 
2423
 
2006/12/09 - Version 4.3.3-alpha2
2424
 
---------------------------------
2425
 
 
2426
 
By Nicola Larosa
2427
 
 
2428
 
Changed interpolation search strategy, based on this patch by Robin Munn:
2429
 
http://sourceforge.net/mailarchive/message.php?msg_id=17125993
2430
 
 
2431
 
 
2432
 
2006/12/09 - Version 4.3.3-alpha1
2433
 
---------------------------------
2434
 
 
2435
 
By Nicola Larosa
2436
 
 
2437
 
Added Template-style interpolation, with tests, based on this patch by
2438
 
Robin Munn: http://sourceforge.net/mailarchive/message.php?msg_id=17125991
2439
 
(awful archives, bad Sourceforge, bad).
2440
 
 
2441
 
 
2442
 
2006/06/04 - Version 4.3.2
2443
 
--------------------------
2444
 
 
2445
 
Changed error handling, if parsing finds a single error then that error will
2446
 
be re-raised. That error will still have an ``errors`` and a ``config``
2447
 
attribute.
2448
 
 
2449
 
Fixed bug where '\\n' terminated files could be truncated.
2450
 
 
2451
 
Bugfix in ``unrepr`` mode, it couldn't handle '#' in values. (Thanks to
2452
 
Philippe Normand for the report.)
2453
 
 
2454
 
As a consequence of this fix, ConfigObj doesn't now keep inline comments in
2455
 
``unrepr`` mode. This is because the parser in the `compiler package`_
2456
 
doesn't keep comments. {sm;:-)}
2457
 
 
2458
 
Error messages are now more useful. They tell you the number of parsing errors
2459
 
and the line number of the first error. (In the case of multiple errors.)
2460
 
 
2461
 
Line numbers in exceptions now start at 1, not 0.
2462
 
 
2463
 
Errors in ``unrepr`` mode are now handled the same way as in the normal mode.
2464
 
The errors stored will be an ``UnreprError``.
2465
 
 
2466
 
 
2467
 
2006/04/29 - Version 4.3.1
2468
 
--------------------------
2469
 
 
2470
 
Added ``validate.py`` back into ``configobj.zip``. (Thanks to Stewart
2471
 
Midwinter)
2472
 
 
2473
 
Updated to `validate.py`_ 0.2.2.
2474
 
 
2475
 
Preserve tuples when calling the ``dict`` method. (Thanks to Gustavo Niemeyer.)
2476
 
 
2477
 
Changed ``__repr__`` to return a string that contains ``ConfigObj({ ... })``.
2478
 
 
2479
 
Change so that an options dictionary isn't modified by passing it to ConfigObj.
2480
 
(Thanks to Artarious.)
2481
 
 
2482
 
Added ability to handle negative integers in ``unrepr``. (Thanks to Kevin
2483
 
Dangoor.)
2484
 
 
2485
 
 
2486
 
2006/03/24 - Version 4.3.0
2487
 
--------------------------
2488
 
 
2489
 
Moved the tests and the CHANGELOG (etc) into a separate file. This has reduced
2490
 
the size of ``configobj.py`` by about 40%.
2491
 
 
2492
 
Added the ``unrepr`` mode to reading and writing config files. Thanks to Kevin
2493
 
Dangoor for this suggestion.
2494
 
 
2495
 
Empty values are now valid syntax. They are read as an empty string ``''``.
2496
 
(``key =``, or ``key = # comment``.)
2497
 
 
2498
 
``validate`` now honours the order of the configspec.
2499
 
 
2500
 
Added the ``copy`` mode to validate. Thanks to Louis Cordier for this
2501
 
suggestion.
2502
 
 
2503
 
Fixed bug where files written on windows could be given ``'\r\r\n'`` line
2504
 
terminators.
2505
 
 
2506
 
Fixed bug where last occurring comment line could be interpreted as the
2507
 
final comment if the last line isn't terminated.
2508
 
 
2509
 
Fixed bug where nested list values would be flattened when ``write`` is
2510
 
called. Now sub-lists have a string representation written instead.
2511
 
 
2512
 
Deprecated ``encode`` and ``decode`` methods instead.
2513
 
 
2514
 
You can now pass in a ConfigObj instance as a configspec (remember to read
2515
 
the configspec file using ``list_values=False``).
2516
 
 
2517
 
Sorted footnotes in the docs.
2518
 
 
 
2062
From version 4 it lists all releases and changes. *More* data on individual
 
2063
changes may be found in the source code.
2519
2064
 
2520
2065
2006/02/16 - Version 4.2.0
2521
2066
--------------------------
2523
2068
Removed ``BOM_UTF8`` from ``__all__``.
2524
2069
 
2525
2070
The ``BOM`` attribute has become a boolean. (Defaults to ``False``.) It is
2526
 
*only* ``True`` for the ``UTF16/UTF8`` encodings.
 
2071
*only* ``True`` for the ``UTF16`` encoding.
2527
2072
 
2528
2073
File like objects no longer need a ``seek`` attribute.
2529
2074
 
2541
2086
written out at the start of the file. (It will normally only be ``True`` if
2542
2087
the utf8 BOM was found when the file was read.)
2543
2088
 
2544
 
Thanks to Aaron Bentley for help and testing on the unicode issues.
2545
 
 
2546
2089
File paths are *not* converted to absolute paths, relative paths will
2547
2090
remain relative as the ``filename`` attribute.
2548
2091
 
2553
2096
 
2554
2097
Added ``as_int`` and ``as_float``.
2555
2098
 
2556
 
 
2557
2099
2005/12/14 - Version 4.1.0
2558
2100
--------------------------
2559
2101
 
2572
2114
 
2573
2115
Also use the new list syntax in validate_ 0.2.1. (For configspecs).
2574
2116
 
2575
 
 
2576
2117
2005/12/02 - Version 4.0.2
2577
2118
--------------------------
2578
2119
 
2604
2145
 
2605
2146
Obscure typo/bug fixed in ``write``. Wouldn't have affected anyone though.
2606
2147
 
2607
 
 
2608
2148
2005/09/09 - Version 4.0.0 beta 5
2609
2149
---------------------------------
2610
2150
 
2614
2154
 
2615
2155
Fixed bug with commas in comments. (matched as a list value)
2616
2156
 
2617
 
 
2618
2157
2005/09/07 - Version 4.0.0 beta 4
2619
2158
---------------------------------
2620
2159
 
2625
2164
 
2626
2165
Changed the mailing list address.
2627
2166
 
2628
 
 
2629
2167
2005/08/28 - Version 4.0.0 beta 3
2630
2168
---------------------------------
2631
2169
 
2632
2170
Interpolation is switched off before writing out files.
2633
2171
 
2634
2172
Fixed bug in handling ``StringIO`` instances. (Thanks to report from
2635
 
Gustavo Niemeyer.)
 
2173
"Gustavo Niemeyer" <gustavo@niemeyer.net>)
2636
2174
 
2637
2175
Moved the doctests from the ``__init__`` method to a separate function.
2638
2176
(For the sake of IDE calltips).
2639
2177
 
2640
 
 
2641
2178
2005/08/25 - Version 4.0.0 beta 2
2642
2179
---------------------------------
2643
2180
 
2644
2181
Amendments to *validate.py*.
2645
2182
 
2646
 
First public release.
2647
 
 
 
2183
Official release.
2648
2184
 
2649
2185
2005/08/21 - Version 4.0.0 beta 1
2650
2186
---------------------------------
2667
2203
 
2668
2204
Improved error handling.
2669
2205
 
2670
 
Plus lots of other improvements. {sm;:grin:}
2671
 
 
 
2206
Plus lots of other improvements {sm;:grin:}.
2672
2207
 
2673
2208
2004/05/24 - Version 3.0.0
2674
2209
--------------------------
2721
2256
 
2722
2257
Charmap is now incorporated into ConfigObj.
2723
2258
 
2724
 
 
2725
2259
2004/03/14 - Version 2.0.0 beta
2726
2260
-------------------------------
2727
2261
 
2731
2265
The config object now behaves like a dictionary.
2732
2266
 
2733
2267
I've completely broken the interface, but I don't think anyone was really
2734
 
using it anyway.
 
2268
 using it anyway.
2735
2269
 
2736
 
This new version is much more 'classy'. {sm;:wink:}
 
2270
This new version is much more 'classy' {sm;:wink:}
2737
2271
 
2738
2272
It will also read straight from/to a filename and completely parse a config
2739
2273
file without you *having* to supply a config spec.
2743
2277
No longer has getval and setval methods: use normal dictionary methods, or add
2744
2278
and delete.
2745
2279
 
2746
 
 
2747
2280
2004/01/29 - Version 1.0.5
2748
2281
--------------------------
2749
2282
 
2755
2288
 
2756
2289
A couple of bugs have been fixed.
2757
2290
 
2758
 
 
2759
2291
Origins
2760
2292
-------
2761
2293
 
2762
2294
ConfigObj originated in a set of functions for reading config files in the
2763
 
`atlantibots <http://www.voidspace.org.uk/atlantibots/>`_ project. The original
2764
 
functions were written by Rob McNeur.
 
2295
atlantibots_ project. The original functions were written by Rob McNeur...
2765
2296
 
 
2297
.. _atlantibots: http://www.voidspace.org.uk/atlantibots
2766
2298
 
2767
2299
----------
2768
2300
 
2769
 
 
2770
2301
Footnotes
2771
2302
=========
2772
2303
 
 
2304
.. [#] 253 of them, at the time of writing.
 
2305
 
2773
2306
.. [#] And if you discover any bugs, let us know. We'll fix them quickly.
2774
2307
 
2775
2308
.. [#] If you specify a filename that doesn't exist, ConfigObj will assume you
2776
2309
    are creating a new one. See the *create_empty* and *file_error* options_.
2777
2310
 
2778
 
.. [#] They can be byte strings (*ordinary* strings) or Unicode.
2779
 
 
2780
 
.. [#] Except we don't support the RFC822 style line continuations, nor ':' as
2781
 
    a divider.
 
2311
.. [#] They can be byte strings ('ordinary' strings) or Unicode.
2782
2312
 
2783
2313
.. [#] This is a change in ConfigObj 4.2.0. Note that ConfigObj doesn't call
2784
2314
    the seek method of any file like object you pass in. You may want to call
2785
2315
    ``file_object.seek(0)`` yourself, first.
2786
2316
 
 
2317
.. [#] Except we don't support the RFC822 style line continuations, nor ':' as
 
2318
    a divider.
 
2319
 
 
2320
.. [#] For a file object that will depend what mode it was opened with. You
 
2321
    can read *and* write to a ``StringIO`` instance, but not always to a
 
2322
    ``cStringIO`` instance.
 
2323
 
2787
2324
.. [#] A side effect of this is that it enables you to copy a ConfigObj :
2788
2325
 
2789
2326
    .. raw:: html
2798
2335
 
2799
2336
    The order of values and sections will not be preserved, though.
2800
2337
 
2801
 
.. [#] Other than lists of strings.
2802
 
 
2803
2338
.. [#] The exception is if it detects a ``UTF16`` encoded file which it
2804
2339
    must decode before parsing.
2805
2340
     
2806
 
.. [#] The method signature shows that this method takes
 
2341
.. [#] Other than lists of strings.
 
2342
 
 
2343
.. [#] The method signature in the API docs will show that this method takes
2807
2344
    two arguments. The second is the section to be written. This is because the
2808
2345
    ``write`` method is called recursively.
2809
2346
 
2818
2355
 
2819
2356
.. [#] Minimum required version of *validate.py* 0.2.0 .
2820
2357
 
 
2358
.. [#] There's nothing to stop you decoding the whole config file to Unicode
 
2359
    *first*.
 
2360
 
 
2361
.. [#] It also makes ConfigObj a lot simpler to *use*.
2821
2362
 
2822
2363
.. note::
2823
2364
 
2825
2366
    textmacros module and the PySrc CSS stuff. See
2826
2367
    http://www.voidspace.org.uk/python/firedrop2/textmacros.shtml
2827
2368
 
2828
 
 
2829
2369
.. raw:: html
2830
2370
 
2831
2371
    <div align="center">
2832
 
        <p>
2833
 
            <a href="http://www.python.org">
2834
 
                <img src="images/new_python.gif" width="100" height="103" border="0" 
2835
 
                    alt="Powered by Python" />
2836
 
            </a>
2837
 
            <a href="http://sourceforge.net">
2838
 
                <img src="http://sourceforge.net/sflogo.php?group_id=123265&amp;type=1" width="88" height="31" border="0" alt="SourceForge.net Logo" />
2839
 
            </a>
2840
 
            <a href="http://www.opensource.org">
2841
 
                <img src="images/osi-certified-120x100.gif" width="120" height="100" border="0"
2842
 
                    alt="Certified Open Source"/>
2843
 
            </a>
2844
 
        </p>
2845
 
        <p>
2846
 
            <a href="http://www.voidspace.org.uk/python/index.shtml">
2847
 
                <img src="images/pythonbanner.gif" width="468" height="60" 
2848
 
                alt="Python on Voidspace" border="0" />
2849
 
            </a>
2850
 
        </p>
2851
 
 
 
2372
        <a href="http://sourceforge.net/donate/index.php?group_id=123265">
 
2373
            <img src="http://images.sourceforge.net/images/project-support.jpg" width="88" height="32" border="0" alt="Support This Project" /> 
 
2374
        </a>
 
2375
        <a href="http://sourceforge.net">
 
2376
            <img src="http://sourceforge.net/sflogo.php?group_id=123265&amp;type=1" width="88" height="31" border="0" alt="SourceForge.net Logo" />
 
2377
        </a>
 
2378
        <br />
 
2379
        <a href="http://www.python.org">
 
2380
            <img src="images/powered_by_python.jpg" width="602" height="186" border="0" />
 
2381
        </a><br /><br />
 
2382
        <a href="http://www.opensource.org">
 
2383
            <img src="images/osi-certified-120x100.gif" width="120" height="100" border="0" />
 
2384
            <br /><strong>Certified Open Source</strong>
 
2385
        </a>
 
2386
        <br /><br />
 
2387
        <script type="text/javascript" language="JavaScript">var site="s16atlantibots"</script>
 
2388
        <script type="text/javascript" language="JavaScript1.2" src="http://s16.sitemeter.com/js/counter.js?site=s16atlantibots"></script>
 
2389
        <noscript>
 
2390
            <a href="http://s16.sitemeter.com/stats.asp?site=s16atlantibots">
 
2391
                <img src="http://s16.sitemeter.com/meter.asp?site=s16atlantibots" alt="Site Meter" border=0 />
 
2392
            </a>
 
2393
        </noscript>
2852
2394
    </div>
2853
2395
 
2854
2396
.. _listquote: http://www.voidspace.org.uk/python/modules.shtml#listquote
2855
 
.. _Michael Foord: http://www.voidspace.org.uk/python/weblog/index.shtml
 
2397
.. _Michael Foord: http://www.voidspace.org.uk/index2.shtml
2856
2398
.. _Nicola Larosa: http://www.teknico.net
 
2399
.. _Mark Andrews: http://www.la-la.com