; :PEc@sdZdZdZdZdddddd d d d d ddddddddddddddddddfZd kZeid! Zed!d!fjoed"nd k Z e e fZ e i d#e iZe i d$e iZd%Zd&eZyeWnej od'ZnXd(Zd)Zdefd*YZdefd+YZdefd,YZd efd-YZd efd.YZd efd/YZd efd0YZd efd1YZ defd2YZ!defd3YZ"de#fd4YZ$e%d5Z&e'e'd6Z(e'e'd7Z)he*e*<d8e*<d9e*<d:e*<d;e*<e%e%<d<e%<d=e%<d>e%<d?e%i?Z@e@iAhdRe<dSe$<e:iBe=dTe@nd S(UsF The Validator object is used to check that supplied values conform to a specification. The value can be supplied as a string - e.g. from a config file. In this case the check will also *convert* the value to the required type. This allows you to add validation as a transparent layer to access data stored as strings. The validation checks that the data is correct *and* converts it to the expected type. Some standard checks are provided for basic data types. Additional checks are easy to write. They can be provided when the ``Validator`` is instantiated or added afterwards. The standard functions work with the following basic data types : * integers * floats * booleans * strings * ip_addr plus lists of these datatypes Adding additional checks is done through coding simple functions. The full set of standard checks are : * 'integer': matches integer values (including negative) Takes optional 'min' and 'max' arguments : :: integer() integer(3, 9) # any value from 3 to 9 integer(min=0) # any positive value integer(max=9) * 'float': matches float values Has the same parameters as the integer check. * 'boolean': matches boolean values - ``True`` or ``False`` Acceptable string values for True are : true, on, yes, 1 Acceptable string values for False are : false, off, no, 0 Any other value raises an error. * 'ip_addr': matches an Internet Protocol address, v.4, represented by a dotted-quad string, i.e. '1.2.3.4'. * 'string': matches any string. Takes optional keyword args 'min' and 'max' to specify min and max lengths of the string. * 'list': matches any list. Takes optional keyword args 'min', and 'max' to specify min and max sizes of the list. * 'int_list': Matches a list of integers. Takes the same arguments as list. * 'float_list': Matches a list of floats. Takes the same arguments as list. * 'bool_list': Matches a list of boolean values. Takes the same arguments as list. * 'ip_addr_list': Matches a list of IP addresses. Takes the same arguments as list. * 'string_list': Matches a list of strings. Takes the same arguments as list. * 'mixed_list': Matches a list with different types in specific positions. List size must match the number of arguments. Each position can be one of : 'integer', 'float', 'ip_addr', 'string', 'boolean' So to specify a list with two strings followed by two integers, you write the check as : :: mixed_list('string', 'string', 'integer', 'integer') * 'pass': This check matches everything ! It never fails and the value is unchanged. It is also the default if no check is specified. * 'option': This check matches any from a list of options. You specify this check with : :: option('option 1', 'option 2', 'option 3') You can supply a default value (returned if no value is supplied) using the default keyword argument. You specify a list argument for default using a list constructor syntax in the check : :: checkname(arg1, arg2, default=list('val 1', 'val 2', 'val 3')) A badly formatted set of arguments will raise a ``VdtParamError``. srestructuredtext ens0.2.3s4$Id: validate.py 123 2005-09-08 08:54:28Z fuzzyman $s __version__sdottedQuadToNumsnumToDottedQuads ValidateErrorsVdtUnknownCheckErrors VdtParamErrors VdtTypeErrors VdtValueErrorsVdtValueTooSmallErrorsVdtValueTooBigErrorsVdtValueTooShortErrorsVdtValueTooLongErrorsVdtMissingValues Validators is_integersis_floats is_booleansis_lists is_ip_addrs is_strings is_int_lists is_bool_lists is_float_listsis_string_listsis_ip_addr_lists is_mixed_lists is_options __docformat__NisPython v.2.2 or later neededs (?: ([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*list\( ( (?: \s* (?: (?:".*?")| # double quotes (?:'.*?')| # single quotes (?:[^'",\s\)][^,\)]*?) # unquoted ) \s*,\s* )* (?: (?:".*?")| # double quotes (?:'.*?')| # single quotes (?:[^'",\s\)][^,\)]*?) # unquoted )? # last one ) \) ) s ( (?:".*?")| # double quotes (?:'.*?')| # single quotes (?:[^'",\s=][^,=]*?) # unquoted ) (?: (?:\s*,\s*)|(?:\s*$) # comma ) s (?: ( (?: [a-zA-Z_][a-zA-Z0-9_]*\s*=\s*list\( (?: \s* (?: (?:".*?")| # double quotes (?:'.*?')| # single quotes (?:[^'",\s\)][^,\)]*?) # unquoted ) \s*,\s* )* (?: (?:".*?")| # double quotes (?:'.*?')| # single quotes (?:[^'",\s\)][^,\)]*?) # unquoted )? # last one \) )| (?: (?:".*?")| # double quotes (?:'.*?')| # single quotes (?:[^'",\s=][^,=]*?)| # unquoted (?: # keyword argument [a-zA-Z_][a-zA-Z0-9_]*\s*=\s* (?: (?:".*?")| # double quotes (?:'.*?')| # single quotes (?:[^'",\s=][^,=]*?) # unquoted ) ) ) ) (?: (?:\s*,\s*)|(?:\s*$) # comma ) ) s^%s*cCs|odSndSdS(s$Simple boolean equivalent function. iiN(sval(sval((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pysboolscCsdk}dk}y'|id|i|idSWnA|ij o2|idjodSq}td|nXdSdS(s= Convert decimal dotted quad string to long integer >>> dottedQuadToNum('1 ') 1L >>> dottedQuadToNum(' 1.2') 16777218L >>> dottedQuadToNum(' 1.2.3 ') 16908291L >>> dottedQuadToNum('1.2.3.4') 16909060L >>> dottedQuadToNum('1.2.3. 4') Traceback (most recent call last): ValueError: Not a good dotted-quad IP: 1.2.3. 4 >>> dottedQuadToNum('255.255.255.255') 4294967295L >>> dottedQuadToNum('255.255.255.256') Traceback (most recent call last): ValueError: Not a good dotted-quad IP: 255.255.255.256 Ns!Lis255.255.255.255lsNot a good dotted-quad IP: %s(ssocketsstructsunpacks inet_atonsipsstripserrors ValueError(sipssocketsstruct((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pysdottedQuadToNums cCsndk}dk}y#|i|idt|SWn2|i|itfj otd|nXdS(s Convert long int to dotted quad string >>> numToDottedQuad(-1L) Traceback (most recent call last): ValueError: Not a good numeric IP: -1 >>> numToDottedQuad(1L) '0.0.0.1' >>> numToDottedQuad(16777218L) '1.0.0.2' >>> numToDottedQuad(16908291L) '1.2.0.3' >>> numToDottedQuad(16909060L) '1.2.3.4' >>> numToDottedQuad(4294967295L) '255.255.255.255' >>> numToDottedQuad(4294967296L) Traceback (most recent call last): ValueError: Not a good numeric IP: 4294967296 Ns!LsNot a good numeric IP: %s( ssocketsstructs inet_ntoaspackslongsnumserrors OverflowErrors ValueError(snumssocketsstruct((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pysnumToDottedQuad)s #cBstZdZRS(s This error indicates that the check failed. It can be the base class for more specific errors. Any check function that fails ought to raise this error. (or a subclass) >>> raise ValidateError Traceback (most recent call last): ValidateError (s__name__s __module__s__doc__(((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys ValidateErrorIs cBstZdZRS(s1No value was supplied to a check that needed one.(s__name__s __module__s__doc__(((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pysVdtMissingValueVs cBstZdZdZRS(s'An unknown check function was requestedcCsti|d|dS(s >>> raise VdtUnknownCheckError('yoda') Traceback (most recent call last): VdtUnknownCheckError: the check "yoda" is unknown. sthe check "%s" is unknown.N(s ValidateErrors__init__sselfsvalue(sselfsvalue((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys__init__\s (s__name__s __module__s__doc__s__init__(((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pysVdtUnknownCheckErrorYs cBstZdZdZRS(s!An incorrect parameter was passedcCsti|d||fdS(s >>> raise VdtParamError('yoda', 'jedi') Traceback (most recent call last): VdtParamError: passed an incorrect value "jedi" for parameter "yoda". s2passed an incorrect value "%s" for parameter "%s".N(s SyntaxErrors__init__sselfsvaluesname(sselfsnamesvalue((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys__init__is (s__name__s __module__s__doc__s__init__(((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys VdtParamErrorfs cBstZdZdZRS(s(The value supplied was of the wrong typecCsti|d|dS(s >>> raise VdtTypeError('jedi') Traceback (most recent call last): VdtTypeError: the value "jedi" is of the wrong type. s$the value "%s" is of the wrong type.N(s ValidateErrors__init__sselfsvalue(sselfsvalue((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys__init__ws (s__name__s __module__s__doc__s__init__(((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys VdtTypeErrorts cBstZdZdZRS(sS The value supplied was of the correct type, but was not an allowed value. cCsti|d|dS(s >>> raise VdtValueError('jedi') Traceback (most recent call last): VdtValueError: the value "jedi" is unacceptable. sthe value "%s" is unacceptable.N(s ValidateErrors__init__sselfsvalue(sselfsvalue((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys__init__s (s__name__s __module__s__doc__s__init__(((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys VdtValueErrors cBstZdZdZRS(s>The value supplied was of the correct type, but was too small.cCsti|d|dS(s >>> raise VdtValueTooSmallError('0') Traceback (most recent call last): VdtValueTooSmallError: the value "0" is too small. sthe value "%s" is too small.N(s ValidateErrors__init__sselfsvalue(sselfsvalue((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys__init__s (s__name__s __module__s__doc__s__init__(((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pysVdtValueTooSmallErrors cBstZdZdZRS(s<The value supplied was of the correct type, but was too big.cCsti|d|dS(s >>> raise VdtValueTooBigError('1') Traceback (most recent call last): VdtValueTooBigError: the value "1" is too big. sthe value "%s" is too big.N(s ValidateErrors__init__sselfsvalue(sselfsvalue((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys__init__s (s__name__s __module__s__doc__s__init__(((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pysVdtValueTooBigErrors cBstZdZdZRS(s>The value supplied was of the correct type, but was too short.cCsti|d|fdS(s >>> raise VdtValueTooShortError('jed') Traceback (most recent call last): VdtValueTooShortError: the value "jed" is too short. sthe value "%s" is too short.N(s ValidateErrors__init__sselfsvalue(sselfsvalue((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys__init__s (s__name__s __module__s__doc__s__init__(((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pysVdtValueTooShortErrors cBstZdZdZRS(s=The value supplied was of the correct type, but was too long.cCsti|d|fdS(s >>> raise VdtValueTooLongError('jedie') Traceback (most recent call last): VdtValueTooLongError: the value "jedie" is too long. sthe value "%s" is too long.N(s ValidateErrors__init__sselfsvalue(sselfsvalue((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys__init__s (s__name__s __module__s__doc__s__init__(((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pysVdtValueTooLongErrors cBstZdZeidZeidZeZeZeie ei Z eie ei Z edZedZdZdZdZRS(s: Validator is an object that allows you to register a set of 'checks'. These checks take input and test that it conforms to the check. This can also involve converting the value from a string into the correct datatype. The ``check`` method takes an input string which configures which check is to be used and applies that check to a supplied value. An example input string would be: 'int_range(param1, param2)' You would then provide something like: >>> def int_range_check(value, min, max): ... # turn min and max from strings to integers ... min = int(min) ... max = int(max) ... # check that value is of the correct type. ... # possible valid inputs are integers or strings ... # that represent integers ... if not isinstance(value, (int, long, StringTypes)): ... raise VdtTypeError(value) ... elif isinstance(value, StringTypes): ... # if we are given a string ... # attempt to convert to an integer ... try: ... value = int(value) ... except ValueError: ... raise VdtValueError(value) ... # check the value is between our constraints ... if not min <= value: ... raise VdtValueTooSmallError(value) ... if not value <= max: ... raise VdtValueTooBigError(value) ... return value >>> fdict = {'int_range': int_range_check} >>> vtr1 = Validator(fdict) >>> vtr1.check('int_range(20, 40)', '30') 30 >>> vtr1.check('int_range(20, 40)', '60') Traceback (most recent call last): VdtValueTooBigError: the value "60" is too big. New functions can be added with : :: >>> vtr2 = Validator() >>> vtr2.functions['int_range'] = int_range_check Or by passing in a dictionary of functions when Validator is instantiated. Your functions *can* use keyword arguments, but the first argument should always be 'value'. If the function doesn't take additional arguments, the parentheses are optional in the check. It can be written with either of : :: keyword = function_name keyword = function_name() The first program to utilise Validator() was Michael Foord's ConfigObj, an alternative to ConfigParser which supports lists and can validate a config file using a config schema. For more details on using Validator with ConfigObj see: http://www.voidspace.org.uk/python/configobj.html s (.+?)\((.*)\)s%^([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*(.*)$cCshd|i<dt<dt<dt<dt<dt<dt<dt<d t <d t <d t <d t <d t <d|i<dt<|_|tj o|ii|nt|_dS(s( >>> vtri = Validator() ssintegersfloatsbooleansip_addrsstringslistsint_lists float_lists bool_lists ip_addr_lists string_lists mixed_listspasssoptionN(sselfs_passs is_integersis_floats is_booleans is_ip_addrs is_stringsis_lists is_int_lists is_float_lists is_bool_listsis_ip_addr_listsis_string_lists is_mixed_lists is_options functionssNonesupdates ValidateErrorsbaseErrorClass(sselfs functions((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys__init__s  cCs|ii|}|o |id} |id}|ii|}|t jo t ng}h}x|ii|D]} | i} |ii| }|o&|i|\} }||| >> vtor.check('yoda', '') Traceback (most recent call last): VdtUnknownCheckError: the check "yoda" is unknown. >>> vtor.check('yoda()', '') Traceback (most recent call last): VdtUnknownCheckError: the check "yoda" is unknown. iisdefaultsNoneN("sselfs_func_resmatchschecks fun_matchsgroupsfun_names arg_strings _matchfinders arg_matchsNones VdtParamErrorsfun_argss fun_kwargss _paramfindersfindallsargsstrips _list_args listmatchs _list_handleskeysvals_key_argskeymatchs_unquotesappendsmissingsvaluesKeyErrorsVdtMissingValues functionssfunsVdtUnknownCheckError(sselfschecksvaluesmissingsfun_argssvals arg_strings arg_matchs fun_matchsfun_nameskeymatchskeysargsfuns listmatchs fun_kwargs((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pyscheck9sV        cCsXt|djo)|dddfjo|d|djo|dd!}n|SdS(sUnquote a value if necessary.iis's"iiN(slensval(sselfsval((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys_unquotes?cCseg}|id}|id}x0|ii|D]}|i |i |q7W||fSdS(s7Take apart a ``keyword=list('val, 'val')`` type string.iiN( souts listmatchsgroupsnamesargssselfs _list_memberssfindallsargsappends_unquote(sselfs listmatchsnamesargssargsout((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys _list_handlescCs|SdS(s Dummy check that always passes >>> vtor.check('', 0) 0 >>> vtor.check('', '0') '0' N(svalue(sselfsvalue((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys_passs(s__name__s __module__s__doc__srescompiles_func_res_key_args _list_args _list_memberss _paramstringsVERBOSEs _paramfinders _matchstrings _matchfindersNones__init__sFalseschecks_unquotes _list_handles_pass(((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys Validators F  H  cCs|otpt}g}xt||D]\}}|t jo|i |q*t |tt ttfoBy|i ||Wqtj o}t||qXq*t||q*W|SdS(s Return numbers from inputs or raise VdtParamError. Lets ``None`` pass through. Pass in keyword argument ``to_float=True`` to use float for the conversion rather than int. >>> _is_num_param(('', ''), (0, 1.0)) [0, 1] >>> _is_num_param(('', ''), (0, 1.0), to_float=True) [0.0, 1.0] >>> _is_num_param(('a'), ('a')) Traceback (most recent call last): VdtParamError: passed an incorrect value "a" for parameter "a". N(sto_floatsfloatsintsfuns out_paramsszipsnamessvaluessnamesvalsNonesappends isinstanceslongs StringTypess ValueErrorses VdtParamError(snamessvaluessto_floatsesnamesvals out_paramssfun((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys _is_num_params  cCstddf||f\}}t|ttt f ot |nt|t o6yt|}Wqt j ot |qXn|t j o ||jot |n|t j o ||jot|n|SdS(sH A check that tests that a given value is an integer (int, or long) and optionally, between bounds. A negative value is accepted, while a float will fail. If the value is a string, then the conversion is done - if possible. Otherwise a VdtError is raised. >>> vtor.check('integer', '-1') -1 >>> vtor.check('integer', '0') 0 >>> vtor.check('integer', 9) 9 >>> vtor.check('integer', 'a') Traceback (most recent call last): VdtTypeError: the value "a" is of the wrong type. >>> vtor.check('integer', '2.2') Traceback (most recent call last): VdtTypeError: the value "2.2" is of the wrong type. >>> vtor.check('integer(10)', '20') 20 >>> vtor.check('integer(max=20)', '15') 15 >>> vtor.check('integer(10)', '9') Traceback (most recent call last): VdtValueTooSmallError: the value "9" is too small. >>> vtor.check('integer(10)', 9) Traceback (most recent call last): VdtValueTooSmallError: the value "9" is too small. >>> vtor.check('integer(max=20)', '35') Traceback (most recent call last): VdtValueTooBigError: the value "35" is too big. >>> vtor.check('integer(max=20)', 35) Traceback (most recent call last): VdtValueTooBigError: the value "35" is too big. >>> vtor.check('integer(0, 9)', False) 0 sminsmaxN(s _is_num_paramsminsmaxsmin_valsmax_vals isinstancesvaluesintslongs StringTypess VdtTypeErrors ValueErrorsNonesVdtValueTooSmallErrorsVdtValueTooBigError(svaluesminsmaxsmin_valsmax_val((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys is_integers'!cCstddf||fdt\}}t|tt t t f ot |nt|t  o6yt |}Wqt j ot |qXn|tj o ||jot|n|tj o ||jot|n|SdS(s< A check that tests that a given value is a float (an integer will be accepted), and optionally - that it is between bounds. If the value is a string, then the conversion is done - if possible. Otherwise a VdtError is raised. This can accept negative values. >>> vtor.check('float', '2') 2.0 From now on we multiply the value to avoid comparing decimals >>> vtor.check('float', '-6.8') * 10 -68.0 >>> vtor.check('float', '12.2') * 10 122.0 >>> vtor.check('float', 8.4) * 10 84.0 >>> vtor.check('float', 'a') Traceback (most recent call last): VdtTypeError: the value "a" is of the wrong type. >>> vtor.check('float(10.1)', '10.2') * 10 102.0 >>> vtor.check('float(max=20.2)', '15.1') * 10 151.0 >>> vtor.check('float(10.0)', '9.0') Traceback (most recent call last): VdtValueTooSmallError: the value "9.0" is too small. >>> vtor.check('float(max=20.0)', '35.0') Traceback (most recent call last): VdtValueTooBigError: the value "35.0" is too big. sminsmaxsto_floatN(s _is_num_paramsminsmaxsTruesmin_valsmax_vals isinstancesvaluesintslongsfloats StringTypess VdtTypeErrors ValueErrorsNonesVdtValueTooSmallErrorsVdtValueTooBigError(svaluesminsmaxsmin_valsmax_val((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pysis_floats"'sons1struesyessoffs0sfalsesnocCst|to8yt|iSWqHtj ot|qHXn|tjotSn"|tjotSn t|dS(s Check if the value represents a boolean. >>> vtor.check('boolean', 0) 0 >>> vtor.check('boolean', False) 0 >>> vtor.check('boolean', '0') 0 >>> vtor.check('boolean', 'off') 0 >>> vtor.check('boolean', 'false') 0 >>> vtor.check('boolean', 'no') 0 >>> vtor.check('boolean', 'nO') 0 >>> vtor.check('boolean', 'NO') 0 >>> vtor.check('boolean', 1) 1 >>> vtor.check('boolean', True) 1 >>> vtor.check('boolean', '1') 1 >>> vtor.check('boolean', 'on') 1 >>> vtor.check('boolean', 'true') 1 >>> vtor.check('boolean', 'yes') 1 >>> vtor.check('boolean', 'Yes') 1 >>> vtor.check('boolean', 'YES') 1 >>> vtor.check('boolean', '') Traceback (most recent call last): VdtTypeError: the value "" is of the wrong type. >>> vtor.check('boolean', 'up') Traceback (most recent call last): VdtTypeError: the value "up" is of the wrong type. N( s isinstancesvalues StringTypess bool_dictslowersKeyErrors VdtTypeErrorsFalsesTrue(svalue((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys is_boolean0s+  cCset|t ot|n|i}yt|Wntj ot|nX|SdS(s Check that the supplied value is an Internet Protocol address, v.4, represented by a dotted-quad string, i.e. '1.2.3.4'. >>> vtor.check('ip_addr', '1 ') '1' >>> vtor.check('ip_addr', ' 1.2') '1.2' >>> vtor.check('ip_addr', ' 1.2.3 ') '1.2.3' >>> vtor.check('ip_addr', '1.2.3.4') '1.2.3.4' >>> vtor.check('ip_addr', '0.0.0.0') '0.0.0.0' >>> vtor.check('ip_addr', '255.255.255.255') '255.255.255.255' >>> vtor.check('ip_addr', '255.255.255.256') Traceback (most recent call last): VdtValueError: the value "255.255.255.256" is unacceptable. >>> vtor.check('ip_addr', '1.2.3.4.5') Traceback (most recent call last): VdtValueError: the value "1.2.3.4.5" is unacceptable. >>> vtor.check('ip_addr', '1.2.3. 4') Traceback (most recent call last): VdtValueError: the value "1.2.3. 4" is unacceptable. >>> vtor.check('ip_addr', 0) Traceback (most recent call last): VdtTypeError: the value "0" is of the wrong type. N(s isinstancesvalues StringTypess VdtTypeErrorsstripsdottedQuadToNums ValueErrors VdtValueError(svalue((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys is_ip_addrls cCstddf||f\}}yt|}Wntj ot |nX|t j o ||jot |n|t j o ||jot |n|SdS(ss Check that the value is a list of values. You can optionally specify the minimum and maximum number of members. It does no check on list members. >>> vtor.check('list', ()) () >>> vtor.check('list', []) [] >>> vtor.check('list', (1, 2)) (1, 2) >>> vtor.check('list', [1, 2]) [1, 2] >>> vtor.check('list', '12') '12' >>> vtor.check('list(3)', (1, 2)) Traceback (most recent call last): VdtValueTooShortError: the value "(1, 2)" is too short. >>> vtor.check('list(max=5)', (1, 2, 3, 4, 5, 6)) Traceback (most recent call last): VdtValueTooLongError: the value "(1, 2, 3, 4, 5, 6)" is too long. >>> vtor.check('list(min=3, max=5)', (1, 2, 3, 4)) (1, 2, 3, 4) >>> vtor.check('list', 0) Traceback (most recent call last): VdtTypeError: the value "0" is of the wrong type. sminsmaxN( s _is_num_paramsminsmaxsmin_lensmax_lenslensvalues num_memberss TypeErrors VdtTypeErrorsNonesVdtValueTooShortErrorsVdtValueTooLongError(svaluesminsmaxs num_memberssmin_lensmax_len((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pysis_lists!cCst|t ot|ntddf||f\}}yt |}Wnt j ot|nX|t j o ||jot |n|t j o ||jot|n|SdS(s Check that the supplied value is a string. You can optionally specify the minimum and maximum number of members. >>> vtor.check('string', '0') '0' >>> vtor.check('string', 0) Traceback (most recent call last): VdtTypeError: the value "0" is of the wrong type. >>> vtor.check('string(2)', '12') '12' >>> vtor.check('string(2)', '1') Traceback (most recent call last): VdtValueTooShortError: the value "1" is too short. >>> vtor.check('string(min=2, max=3)', '123') '123' >>> vtor.check('string(min=2, max=3)', '1234') Traceback (most recent call last): VdtValueTooLongError: the value "1234" is too long. sminsmaxN(s isinstancesvalues StringTypess VdtTypeErrors _is_num_paramsminsmaxsmin_lensmax_lenslens num_memberss TypeErrorsNonesVdtValueTooShortErrorsVdtValueTooLongError(svaluesminsmaxs num_memberssmin_lensmax_len((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys is_strings!cCs;gi}t|||D]}|t|q~SdS(s Check that the value is a list of integers. You can optionally specify the minimum and maximum number of members. Each list member is checked that it is an integer. >>> vtor.check('int_list', ()) [] >>> vtor.check('int_list', []) [] >>> vtor.check('int_list', (1, 2)) [1, 2] >>> vtor.check('int_list', [1, 2]) [1, 2] >>> vtor.check('int_list', [1, 'a']) Traceback (most recent call last): VdtTypeError: the value "a" is of the wrong type. N(sappends_[1]sis_listsvaluesminsmaxsmems is_integer(svaluesminsmaxsmems_[1]((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys is_int_listscCs;gi}t|||D]}|t|q~SdS(sl Check that the value is a list of booleans. You can optionally specify the minimum and maximum number of members. Each list member is checked that it is a boolean. >>> vtor.check('bool_list', ()) [] >>> vtor.check('bool_list', []) [] >>> check_res = vtor.check('bool_list', (True, False)) >>> check_res == [True, False] 1 >>> check_res = vtor.check('bool_list', [True, False]) >>> check_res == [True, False] 1 >>> vtor.check('bool_list', [True, 'a']) Traceback (most recent call last): VdtTypeError: the value "a" is of the wrong type. N(sappends_[1]sis_listsvaluesminsmaxsmems is_boolean(svaluesminsmaxsmems_[1]((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys is_bool_listscCs;gi}t|||D]}|t|q~SdS(s Check that the value is a list of floats. You can optionally specify the minimum and maximum number of members. Each list member is checked that it is a float. >>> vtor.check('float_list', ()) [] >>> vtor.check('float_list', []) [] >>> vtor.check('float_list', (1, 2.0)) [1.0, 2.0] >>> vtor.check('float_list', [1, 2.0]) [1.0, 2.0] >>> vtor.check('float_list', [1, 'a']) Traceback (most recent call last): VdtTypeError: the value "a" is of the wrong type. N(sappends_[1]sis_listsvaluesminsmaxsmemsis_float(svaluesminsmaxsmems_[1]((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys is_float_list scCs[t|tot|ngi}t|||D]}|t |q:~SdS(sn Check that the value is a list of strings. You can optionally specify the minimum and maximum number of members. Each list member is checked that it is a string. >>> vtor.check('string_list', ()) [] >>> vtor.check('string_list', []) [] >>> vtor.check('string_list', ('a', 'b')) ['a', 'b'] >>> vtor.check('string_list', ['a', 1]) Traceback (most recent call last): VdtTypeError: the value "1" is of the wrong type. >>> vtor.check('string_list', 'hello') Traceback (most recent call last): VdtTypeError: the value "hello" is of the wrong type. N( s isinstancesvalues StringTypess VdtTypeErrorsappends_[1]sis_listsminsmaxsmems is_string(svaluesminsmaxs_[1]smem((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pysis_string_list#scCs;gi}t|||D]}|t|q~SdS(s Check that the value is a list of IP addresses. You can optionally specify the minimum and maximum number of members. Each list member is checked that it is an IP address. >>> vtor.check('ip_addr_list', ()) [] >>> vtor.check('ip_addr_list', []) [] >>> vtor.check('ip_addr_list', ('1.2.3.4', '5.6.7.8')) ['1.2.3.4', '5.6.7.8'] >>> vtor.check('ip_addr_list', ['a']) Traceback (most recent call last): VdtValueError: the value "a" is unacceptable. N(sappends_[1]sis_listsvaluesminsmaxsmems is_ip_addr(svaluesminsmaxsmems_[1]((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pysis_ip_addr_list<ssintegersfloatsip_addrsstringsbooleancGsyt|}Wntj ot|nX|t|jot|n$|t|jot|nyBgi}t ||D] \}}|t ||q~SWn$tj o}td|nXdS(s3 Check that the value is a list. Allow specifying the type of each member. Work on lists of specific lengths. You specify each member as a positional argument specifying type Each type should be one of the following strings : 'integer', 'float', 'ip_addr', 'string', 'boolean' So you can specify a list of two strings, followed by two integers as : mixed_list('string', 'string', 'integer', 'integer') The length of the list must match the number of positional arguments you supply. >>> mix_str = "mixed_list('integer', 'float', 'ip_addr', 'string', 'boolean')" >>> check_res = vtor.check(mix_str, (1, 2.0, '1.2.3.4', 'a', True)) >>> check_res == [1, 2.0, '1.2.3.4', 'a', True] 1 >>> check_res = vtor.check(mix_str, ('1', '2.0', '1.2.3.4', 'a', 'True')) >>> check_res == [1, 2.0, '1.2.3.4', 'a', True] 1 >>> vtor.check(mix_str, ('b', 2.0, '1.2.3.4', 'a', True)) Traceback (most recent call last): VdtTypeError: the value "b" is of the wrong type. >>> vtor.check(mix_str, (1, 2.0, '1.2.3.4', 'a')) Traceback (most recent call last): VdtValueTooShortError: the value "(1, 2.0, '1.2.3.4', 'a')" is too short. >>> vtor.check(mix_str, (1, 2.0, '1.2.3.4', 'a', 1, 'b')) Traceback (most recent call last): VdtValueTooLongError: the value "(1, 2.0, '1.2.3.4', 'a', 1, 'b')" is too long. >>> vtor.check(mix_str, 0) Traceback (most recent call last): VdtTypeError: the value "0" is of the wrong type. This test requires an elaborate setup, because of a change in error string output from the interpreter between Python 2.2 and 2.3 . >>> res_seq = ( ... 'passed an incorrect value "', ... 'yoda', ... '" for parameter "mixed_list".', ... ) >>> if INTP_VER == (2, 2): ... res_str = "".join(res_seq) ... else: ... res_str = "'".join(res_seq) >>> try: ... vtor.check('mixed_list("yoda")', ('a')) ... except VdtParamError, err: ... str(err) == res_str 1 s mixed_listN(slensvalueslengths TypeErrors VdtTypeErrorsargssVdtValueTooShortErrorsVdtValueTooLongErrorsappends_[1]szipsargsvalsfun_dictsKeyErrorses VdtParamError(svaluesargss_[1]sesvalslengthsarg((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys is_mixed_listXs8BcGsGt|t ot|n||j ot|n|SdS(s This check matches the value to any of a set of options. >>> vtor.check('option("yoda", "jedi")', 'yoda') 'yoda' >>> vtor.check('option("yoda", "jedi")', 'jed') Traceback (most recent call last): VdtValueError: the value "jed" is unacceptable. >>> vtor.check('option("yoda", "jedi")', 0) Traceback (most recent call last): VdtTypeError: the value "0" is of the wrong type. N(s isinstancesvalues StringTypess VdtTypeErrorsoptionss VdtValueError(svaluesoptions((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys is_options cOs|||fSdS(s  A function that exists for test purposes. >>> checks = [ ... '3, 6, min=1, max=3, test=list(a, b, c)', ... '3', ... '3, 6', ... '3,', ... 'min=1, test="a b c"', ... 'min=5, test="a, b, c"', ... 'min=1, max=3, test="a, b, c"', ... 'min=-100, test=-99', ... 'min=1, max=3', ... '3, 6, test="36"', ... '3, 6, test="a, b, c"', ... '3, max=3, test=list("a", "b", "c")', ... '''3, max=3, test=list("'a'", 'b', "x=(c)")''', ... "test='x=fish(3)'", ... ] >>> v = Validator({'test': _test}) >>> for entry in checks: ... print v.check(('test(%s)' % entry), 3) (3, ('3', '6'), {'test': ['a', 'b', 'c'], 'max': '3', 'min': '1'}) (3, ('3',), {}) (3, ('3', '6'), {}) (3, ('3',), {}) (3, (), {'test': 'a b c', 'min': '1'}) (3, (), {'test': 'a, b, c', 'min': '5'}) (3, (), {'test': 'a, b, c', 'max': '3', 'min': '1'}) (3, (), {'test': '-99', 'min': '-100'}) (3, (), {'max': '3', 'min': '1'}) (3, ('3', '6'), {'test': '36'}) (3, ('3', '6'), {'test': 'a, b, c'}) (3, ('3',), {'test': ['a', 'b', 'c'], 'max': '3'}) (3, ('3',), {'test': ["'a'", 'b', 'x=(c)'], 'max': '3'}) (3, (), {'test': 'x=fish(3)'}) N(svaluesargsskeywargs(svaluesargsskeywargs((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys_tests%s__main__sINTP_VERsvtorsglobs(Cs__doc__s __docformat__s __version__s __revision__s__all__ssyss version_infosINTP_VERs RuntimeErrorsresstrsunicodes StringTypesscompilesVERBOSEs _list_args _list_memberss _paramstrings _matchstringsbools NameErrorsdottedQuadToNumsnumToDottedQuads Exceptions ValidateErrorsVdtMissingValuesVdtUnknownCheckErrors SyntaxErrors VdtParamErrors VdtTypeErrors VdtValueErrorsVdtValueTooSmallErrorsVdtValueTooBigErrorsVdtValueTooShortErrorsVdtValueTooLongErrorsobjects ValidatorsFalses _is_num_paramsNones is_integersis_floatsTrues bool_dicts is_booleans is_ip_addrsis_lists is_strings is_int_lists is_bool_lists is_float_listsis_string_listsis_ip_addr_listsfun_dicts is_mixed_lists is_options_tests__name__sdoctestsmodulessgetsms__dict__scopysglobssupdatestestmod(.s is_bool_lists _matchstrings __docformat__s is_int_lists_testsVdtValueTooShortErrors is_ip_addrsglobss is_integersis_ip_addr_lists _list_argsdottedQuadToNums bool_dicts __revision__s VdtParamErrors is_strings__all__sresis_listsis_floatsnumToDottedQuadsVdtMissingValues is_float_listsbools is_mixed_lists StringTypessVdtValueTooBigErrors __version__sVdtUnknownCheckErrors VdtTypeErrorsINTP_VERs _paramstringssyss Validatorsis_string_lists VdtValueErrors _is_num_paramsVdtValueTooLongErrorsfun_dictsVdtValueTooSmallErrorsms _list_memberss is_options is_booleansdoctests ValidateError((sF/mnt/gmirror/ports/devel/py-configobj/work/configobj-4.4.0/validate.pys?}snZ     )  $         $83` < ')#3 F  )  "