관리-도구
편집 파일: validate.cpython-39.opt-1.pyc
a ��S�� � @ s� d Z dZdZddlZddlZddlmZ ejdk r8eZne Zdd� Z eZe� d ejejB �Ze� d ejejB �ZdZde Zze W n ey� d d� ZY n0 dd� Zdd� ZG dd� de�ZG dd� de�ZG dd� de�ZG dd� de�ZG dd� de�ZG dd� de�ZG dd � d e�Z G d!d"� d"e�Z!G d#d$� d$e�Z"G d%d&� d&e�Z#G d'd(� d(e$�Z%dVd*d+�Z&dWd,d-�Z'dXd.d/�Z(d0d0d0d0d0d)d)d)d)d)d1� Z)d2d3� Z*d4d5� Z+dYd6d7�Z,dZd8d9�Z-d[d:d;�Z.d\d<d=�Z/d]d>d?�Z0d^d@dA�Z1d_dBdC�Z2d`dDdE�Z3dadFdG�Z4e'e(e+e.e*dH�Z5dIdJ� Z6dKdL� Z7dMdN� Z8dOdP� Z9dQdR� Z:e;dSk�r�ddlZddl<Z<ej=�>dS�Z?e?j@�A� ZBeB�CdTe%� i� e<jDe?eBe<jEe<jFB dU�\ZGZHdS )ba 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. (Always returns a list.) * 'tuple': matches any tuple. Takes optional keyword args 'min', and 'max' to specify min and max sizes of the tuple. (Always returns a tuple.) * '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``. z1.0.1)�__version__�dottedQuadToNum�numToDottedQuad� ValidateError�VdtUnknownCheckError� VdtParamError�VdtTypeError� VdtValueError�VdtValueTooSmallError�VdtValueTooBigError�VdtValueTooShortError�VdtValueTooLongError�VdtMissingValue� Validator� is_integer�is_float� is_boolean�is_list�is_tuple� is_ip_addr� is_string�is_int_list�is_bool_list� is_float_list�is_string_list�is_ip_addr_list� is_mixed_list� is_optionZ __docformat__� N)�pprint)� c C s | S �N� )�xr! r! �,/usr/lib/python3.9/site-packages/validate.py�<lambda>� � r$ a� (?: ([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 ) \) ) z� ( (?:".*?")| # double quotes (?:'.*?')| # single quotes (?:[^'",\s=][^,=]*?) # unquoted ) (?: (?:\s*,\s*)|(?:\s*$) # comma ) a� (?: ( (?: [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 ) ) z^%s*c C s | rdS dS dS )z$Simple boolean equivalent function. � r Nr! )�valr! r! r# �bool s r( c C sR ddl }ddl}z|�d|�| �� ��d W S |jyL td| ��Y n0 dS )a� Convert decimal dotted quad string to long integer >>> int(dottedQuadToNum('1 ')) 1 >>> int(dottedQuadToNum(' 1.2')) 16777218 >>> int(dottedQuadToNum(' 1.2.3 ')) 16908291 >>> int(dottedQuadToNum('1.2.3.4')) 16909060 >>> dottedQuadToNum('255.255.255.255') 4294967295 >>> dottedQuadToNum('255.255.255.256') Traceback (most recent call last): ValueError: Not a good dotted-quad IP: 255.255.255.256 r N�!LzNot a good dotted-quad IP: %s)�socket�struct�unpackZ inet_aton�strip�error� ValueError)Zipr* r+ r! r! r# r s ��r c C sv ddl }ddl}| td�ks$| dk r0td| ��z|�|�dt| ���W S |j|jtfyp td| ��Y n0 dS )a! Convert int or long int to dotted quad string >>> numToDottedQuad(long(-1)) Traceback (most recent call last): ValueError: Not a good numeric IP: -1 >>> numToDottedQuad(long(1)) '0.0.0.1' >>> numToDottedQuad(long(16777218)) '1.0.0.2' >>> numToDottedQuad(long(16908291)) '1.2.0.3' >>> numToDottedQuad(long(16909060)) '1.2.3.4' >>> numToDottedQuad(long(4294967295)) '255.255.255.255' >>> numToDottedQuad(long(4294967296)) Traceback (most recent call last): ValueError: Not a good numeric IP: 4294967296 >>> numToDottedQuad(-1) Traceback (most recent call last): ValueError: Not a good numeric IP: -1 >>> numToDottedQuad(1) '0.0.0.1' >>> numToDottedQuad(16777218) '1.0.0.2' >>> numToDottedQuad(16908291) '1.2.0.3' >>> numToDottedQuad(16909060) '1.2.3.4' >>> numToDottedQuad(4294967295) '255.255.255.255' >>> numToDottedQuad(4294967296) Traceback (most recent call last): ValueError: Not a good numeric IP: 4294967296 r Nl �� zNot a good numeric IP: %sr) )r* r+ �longr/ Z inet_ntoa�packr. � OverflowError)Znumr* r+ r! r! r# r 0 s (�r c @ s e Zd ZdZdS )r a 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 N��__name__� __module__�__qualname__�__doc__r! r! r! r# r d s r c @ s e Zd ZdZdS )r z1No value was supplied to a check that needed one.Nr3 r! r! r! r# r r s r c @ s e Zd ZdZdd� ZdS )r z'An unknown check function was requestedc C s t �| d|f � dS )z� >>> raise VdtUnknownCheckError('yoda') Traceback (most recent call last): VdtUnknownCheckError: the check "yoda" is unknown. zthe check "%s" is unknown.N�r �__init__��self�valuer! r! r# r9 y s zVdtUnknownCheckError.__init__N�r4 r5 r6 r7 r9 r! r! r! r# r v s r c @ s e Zd ZdZdd� ZdS )r z!An incorrect parameter was passedc C s t �| d||f � dS )z� >>> raise VdtParamError('yoda', 'jedi') Traceback (most recent call last): VdtParamError: passed an incorrect value "jedi" for parameter "yoda". z2passed an incorrect value "%s" for parameter "%s".N)�SyntaxErrorr9 )r; �namer<