~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2008-09-03 08:32:49 UTC
  • mfrom: (1739.2.13 integration)
  • Revision ID: pqm@pqm.ubuntu.com-20080903083249-e76ygekseh1peidm
Fix typo in ReadDirFeature.

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
 
9
9
 
10
10
:Authors: `Michael Foord`_, `Nicola Larosa`_, `Mark Andrews`_
11
 
:Version: Validate 0.2.0
12
 
:Date: 2005/08/25
 
11
:Version: Validate 0.3.2
 
12
:Date: 2008/02/24
13
13
:Homepage: `Validate Homepage`_
14
14
:License: `BSD License`_
15
15
:Support: `Mailing List`_
17
17
.. _Mailing List: http://lists.sourceforge.net/lists/listinfo/configobj-develop
18
18
.. _Michael Foord: fuzzyman@voidspace.org.uk
19
19
.. _Nicola Larosa: nico@teknico.net
20
 
.. _Mark Andrews: mark@la-la.com
21
20
.. _This Document:
22
21
.. _Validate Homepage: http://www.voidspace.org.uk/python/validate.html
23
 
.. _BSD License: http://www.voidspace.org.uk/documents/BSD-LICENSE.txt
 
22
.. _BSD License: http://www.voidspace.org.uk/python/license.shtml
24
23
 
25
24
 
26
25
.. contents:: Validate Manual
 
26
.. sectnum::
 
27
 
27
28
 
28
29
Introduction
29
30
============
37
38
type.
38
39
 
39
40
Checks are also strings, and are easy to write. One generic system can be used
40
 
to validate information from different sources, via a single consistent
 
41
to validate information from different sources via a single consistent
41
42
mechanism.
42
43
 
43
44
Checks look like function calls, and map to function calls. They can include
56
57
into every validator. Additional checks are easy to write: they can be provided
57
58
when the ``Validator`` is instantiated, or added afterwards.
58
59
 
59
 
Validate was primarily written to support ConfigObj_, but was designed to be 
 
60
Validate was primarily written to support ConfigObj_, but is designed to be 
60
61
applicable to many other situations.
61
62
 
62
63
For support and bug reports please use the ConfigObj `Mailing List`_.
63
64
 
64
65
.. _ConfigObj: http://www.voidspace.org.uk/python/configobj.html
65
66
 
 
67
 
66
68
Downloading
67
69
===========
68
70
 
69
 
The current version is **0.2.0**, dated 25th August 2005. 
 
71
The current version is **0.3.2**, dated 24th February 2008. 
70
72
 
71
73
You can get obtain validate in the following ways :
72
74
 
 
75
 
73
76
Files
74
77
-----
75
78
 
76
79
* validate.py_ from Voidspace
77
80
 
78
81
* configobj.zip from Voidspace - See the homepage of ConfigObj_ for the latest 
79
 
  version and downlaod links.
 
82
  version and download links.
80
83
 
81
84
    This contains validate.py and `this document`_. (As well as ConfigObj_ and 
82
85
    the ConfigObj documentation).
83
86
    
84
87
* The latest development version can be obtained from the `Subversion Repository`_.
85
88
 
 
89
 
86
90
Documentation
87
91
-------------
88
92
 
89
 
*configobj.zip* contains `this document`_ and full `API Docs`_, generated 
90
 
automatically by EpyDoc_.
 
93
*configobj.zip* contains `this document`_.
91
94
 
92
95
* You can view `this document`_ online as the `Validate Homepage`_.
93
96
 
94
 
* You can also browse the `API Docs`_ online.
95
97
 
96
98
Pythonutils
97
99
-----------
101
103
Python Projects`_.
102
104
 
103
105
.. _configobj.py: http://www.voidspace.org.uk/cgi-bin/voidspace/downman.py?file=configobj.py
104
 
.. _configobj.zip: http://www.voidspace.org.uk/cgi-bin/voidspace/downman.py?file=configobj-4.0.0b4.zip
 
106
.. _configobj.zip: http://www.voidspace.org.uk/cgi-bin/voidspace/downman.py?file=configobj-4.5.2.zip
105
107
.. _validate.py: http://www.voidspace.org.uk/cgi-bin/voidspace/downman.py?file=validate.py
106
 
.. _API Docs: http://www.voidspace.org.uk/python/configobj-api/
107
 
.. _Subversion Repository: http://svn.rest2web.python-hosting.com/branches/configobj4/
 
108
.. _Subversion Repository: http://svn.pythonutils.python-hosting.com/trunk/pythonutils/
108
109
.. _Sourceforge: http://sourceforge.net/projects/configobj
109
 
.. _EpyDoc: http://epydoc.sourceforge.net
110
110
.. _pythonutils: http://www.voidspace.org.uk/python/pythonutils.html
111
111
.. _Voidspace Python Projects: http://www.voidspace.org.uk/python
112
112
.. _validate: http://www.voidspace.org.uk/python/validate.html
141
141
:'float': matches float values
142
142
          Has the same parameters as the integer check.
143
143
 
144
 
:'bool': matches boolean values: ``True`` or ``False``.
145
 
         Acceptable string values for True are : ::
 
144
:'boolean': matches boolean values: ``True`` or ``False``.
 
145
            Acceptable string values for True are : ::
146
146
 
147
147
             true, on, yes, 1
148
148
 
159
159
            dotted-quad string, i.e. '1.2.3.4'.
160
160
 
161
161
:'list': matches any list. Takes optional keyword args 'min', and 'max' to
162
 
         specify min and max sizes of the list.
 
162
         specify min and max sizes of the list. The list checks always 
 
163
         return a list.
 
164
         
 
165
:'tuple': matches any list. This check returns a tuple rather than a list.
163
166
 
164
167
:'int_list': Matches a list of integers. Takes the same arguments as list.
165
168
 
178
181
 
179
182
               Each position can be one of : ::
180
183
 
181
 
                   int, str, bool, float, ip_addr
 
184
                   int, str, boolean, float, ip_addr
182
185
 
183
186
               So to specify a list with two strings followed by two integers,
184
187
               you write the check as : ::
203
206
    from validate import Validator
204
207
    #
205
208
    vtor = Validator()
206
 
    newval1 = vtor.check(value1, 'integer')
207
 
    newval2 = vtor.check(value2, 'bool')
 
209
    newval1 = vtor.check('integer', value1)
 
210
    newval2 = vtor.check('boolean', value2)
208
211
    # etc ...
209
212
 
210
213
    {-coloring}
215
218
    them in ``try...except`` blocks. Better still,  use ConfigObj for a higher
216
219
    level interface.
217
220
 
 
221
 
218
222
Using Validator
219
223
===============
220
224
 
264
268
Dictionary keys/functions you pass in can override the built-in ones if you
265
269
want.
266
270
 
 
271
 
267
272
Adding functions
268
273
----------------
269
274
 
283
288
 
284
289
    {-coloring}
285
290
 
286
 
``vtor.functions``is just a dictionary that maps names to functions, so we
 
291
``vtor.functions`` is just a dictionary that maps names to functions, so we
287
292
could also have called ``vtor.functions.update(fdict)``.
288
293
 
 
294
 
289
295
Writing the check
290
296
-----------------
291
297
 
300
306
 
301
307
but the check part will be identical .
302
308
 
 
309
 
303
310
The check method
304
311
----------------
305
312
 
332
339
    Although the value can be a string, if it represents a list it should
333
340
    already have been turned into a list of strings.
334
341
 
 
342
 
335
343
Default Values
336
344
~~~~~~~~~~~~~~
337
345
 
350
358
    check1 = 'integer(default=50)'
351
359
    check2 = 'option("val 1", "val 2", "val 3", default="val 1")'
352
360
 
353
 
    assert vtor.check('', check1, missing=True) == 50
354
 
    assert vtor.check('', check2, missing=True) == "val 1"
 
361
    assert vtor.check(check1, '', missing=True) == 50
 
362
    assert vtor.check(check2, '', missing=True) == "val 1"
355
363
 
356
364
    {-coloring}
357
365
 
365
373
that this check contains no useful value when missing, i.e. the value is
366
374
optional, and may be omitted without harm.
367
375
 
 
376
 
 
377
.. note:: 
 
378
 
 
379
    As of version 0.3.0, if you specify ``default='None'`` (note the quote marks
 
380
    around ``None``) then it will be interpreted as the string ``'None'``.
 
381
 
 
382
 
 
383
List Values
 
384
~~~~~~~~~~~
 
385
 
 
386
It's possible that you would like your default value to be a list. It's even
 
387
possible that you will write your own check functions - and would like to pass
 
388
them keyword arguments as lists from within the check.
 
389
 
 
390
To avoid confusing syntax with commas and quotes you use a list constructor to
 
391
specify that keyword arguments are lists. This includes the ``default`` value.
 
392
This makes checks look something like : ::
 
393
 
 
394
    checkname(default=list('val1', 'val2', 'val3'))
 
395
 
 
396
 
 
397
get_default_value
 
398
-----------------
 
399
 
 
400
``Validator`` instances have a ``get_default_value`` method. It takes a ``check`` string 
 
401
(the same string you would pass to the ``check`` method) and returns the default value,
 
402
converted to the right type. If the check doesn't define a default value then this method
 
403
raises a ``KeyError``.
 
404
 
 
405
If the ``check`` has been seen before then it will have been parsed and cached already, 
 
406
so this method is not expensive to call (however the conversion is done each time).
 
407
 
 
408
 
 
409
 
368
410
Validator Exceptions
369
411
====================
370
412
 
423
465
* ``VdtValueTooShortError``
424
466
* ``VdtValueTooLongError``
425
467
 
 
468
 
426
469
Writing check functions
427
470
=======================
428
471
 
446
489
 
447
490
And that's it !
448
491
 
 
492
 
449
493
Example
450
494
-------
451
495
 
534
578
If you are using validate in another circumstance you may want to create your 
535
579
own subclasses of ``ValidateError``, that convey more specific information.
536
580
 
 
581
 
 
582
Known Issues
 
583
============
 
584
 
 
585
The following parses and then blows up. The resulting error message
 
586
is confusing:
 
587
 
 
588
    ``checkname(default=list(1, 2, 3, 4)``
 
589
    
 
590
This is because it parses as: ``checkname(default="list(1", 2, 3, 4)``.
 
591
That isn't actually unreasonable, but the error message won't help you
 
592
work out what has happened.
 
593
    
 
594
 
537
595
TODO
538
596
====
539
597
 
540
598
* A regex check function ?
541
 
* A timestamp check function ? (Using the ``parse`` function from ``DateUtil``).
542
 
* Allow triple quotes ? (getting a bit heavy for a single regex)
 
599
* A timestamp check function ? (Using the ``parse`` function from ``DateUtil`` perhaps).
 
600
 
543
601
 
544
602
ISSUES
545
603
======
549
607
    Please file any bug reports to `Michael Foord`_ or the ConfigObj
550
608
    `Mailing List`_.
551
609
 
552
 
Lists passed as function arguments need additional quotes. Ugly, could do
553
 
with fixing this.
554
 
 
555
610
If we could pull tuples out of arguments, it would be easier
556
611
to specify arguments for 'mixed_lists'.
557
612
 
 
613
 
558
614
CHANGELOG
559
615
=========
560
616
 
 
617
2008/02/24 - Version 0.3.2
 
618
--------------------------
 
619
 
 
620
BUGFIX: Handling of None as default value fixed.
 
621
 
 
622
 
 
623
2008/02/05 - Version 0.3.1
 
624
--------------------------
 
625
 
 
626
BUGFIX: Unicode checks no longer broken.
 
627
 
 
628
 
 
629
2008/02/05 - Version 0.3.0
 
630
--------------------------
 
631
 
 
632
Improved performance with a parse cache.
 
633
 
 
634
New ``get_default_value`` method. Given a check it returns the default
 
635
value (converted to the correct type) or raises a ``KeyError`` if the
 
636
check doesn't specify a default.
 
637
 
 
638
Added 'tuple' check and corresponding 'is_tuple' function (which always returns a tuple).
 
639
 
 
640
BUGFIX: A quoted 'None' as a default value is no longer treated as None,
 
641
but as the string 'None'.
 
642
 
 
643
BUGFIX: We weren't unquoting keyword arguments of length two, so an
 
644
empty string didn't work as a default.
 
645
 
 
646
BUGFIX: Strings no longer pass the 'is_list' check. Additionally, the
 
647
list checks always return lists.
 
648
 
 
649
A couple of documentation bug fixes.
 
650
 
 
651
Removed CHANGELOG from module.
 
652
 
 
653
 
 
654
2007/02/04      Version 0.2.3
 
655
-----------------------------
 
656
 
 
657
Release of 0.2.3
 
658
 
 
659
 
 
660
2006/12/17      Version 0.2.3-alpha1
 
661
------------------------------------
 
662
 
 
663
By Nicola Larosa
 
664
 
 
665
Fixed validate doc to talk of ``boolean`` instead of ``bool``; changed the
 
666
``is_bool`` function to ``is_boolean`` (Sourceforge bug #1531525).
 
667
 
 
668
 
 
669
2006/04/29      Version 0.2.2
 
670
-----------------------------
 
671
 
 
672
Addressed bug where a string would pass the ``is_list`` test. (Thanks to
 
673
Konrad Wojas.)
 
674
 
 
675
 
 
676
2005/12/16      Version 0.2.1
 
677
-----------------------------
 
678
 
 
679
Fixed bug so we can handle keyword argument values with commas.
 
680
 
 
681
We now use a list constructor for passing list values to keyword arguments
 
682
(including ``default``) : ::
 
683
 
 
684
    default=list("val", "val", "val")
 
685
 
 
686
Added the ``_test`` test. {sm;:-)}
 
687
 
 
688
Moved a function call outside a try...except block.
 
689
 
561
690
 
562
691
2005/08/18      Version 0.2.0
563
692
-----------------------------
566
695
 
567
696
Does type conversion as well.
568
697
 
 
698
 
569
699
2005/02/01      Version 0.1.0
570
700
-----------------------------
571
701
 
572
702
Initial version developed by `Michael Foord`_
573
 
and `Mark Andrews`_
 
703
and Mark Andrews.
574
704
 
575
705
.. note::
576
706
 
578
708
    textmacros module and the PySrc CSS stuff. See
579
709
    http://www.voidspace.org.uk/python/firedrop2/textmacros.shtml
580
710
 
 
711
 
581
712
.. raw:: html
582
713
 
583
714
    <div align="center">
584
 
        <a href="http://www.python.org">
585
 
            <img src="images/powered_by_python.jpg" width="602" height="186" border="0" />
586
 
        </a>
587
 
        <a href="http://www.opensource.org">
588
 
            <img src="images/osi-certified-120x100.gif" width="120" height="100" border="0" />
589
 
            <br /><strong>Certified Open Source</strong>
590
 
        </a>
591
 
        <br /><br />
592
 
        <script type="text/javascript" language="JavaScript">var site="s16atlantibots"</script>
593
 
        <script type="text/javascript" language="JavaScript1.2" src="http://s16.sitemeter.com/js/counter.js?site=s16atlantibots"></script>
594
 
        <noscript>
595
 
            <a href="http://s16.sitemeter.com/stats.asp?site=s16atlantibots">
596
 
                <img src="http://s16.sitemeter.com/meter.asp?site=s16atlantibots" alt="Site Meter" border=0 />
597
 
            </a>
598
 
        </noscript>
 
715
        <p>
 
716
            <a href="http://www.python.org">
 
717
                <img src="images/new_python.gif" width="100" height="103" border="0" 
 
718
                    alt="Powered by Python" />
 
719
            </a>
 
720
            <a href="http://sourceforge.net">
 
721
                <img src="http://sourceforge.net/sflogo.php?group_id=123265&amp;type=1" width="88" height="31" border="0" alt="SourceForge.net Logo" />
 
722
            </a>
 
723
            <a href="http://www.opensource.org">
 
724
                <img src="images/osi-certified-120x100.gif" width="120" height="100" border="0"
 
725
                    alt="Certified Open Source"/>
 
726
            </a>
 
727
        </p>
 
728
        <p>
 
729
            <a href="http://www.voidspace.org.uk/python/index.shtml">
 
730
                <img src="images/pythonbanner.gif" width="468" height="60" 
 
731
                alt="Python on Voidspace" border="0" />
 
732
            </a>
 
733
        </p>
599
734
    </div>
 
735