File: //lib/python3.9/site-packages/__pycache__/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<