U
    '1eE,                     @   s  d Z dZddlZddlZddlmZmZmZ ddlm	Z	 z
ej
ZW n ek
r\   ejZY nX G dd deZG dd	 d	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G dd 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G dd 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G d&d' d'eZdd(l m!Z! G d)d* d*eZ"G d+d, d,eZ#G d-d. d.e#Z$G d/d0 d0eZ%G d1d2 d2eZ&G d3d4 d4eZ'G d5d6 d6eZ(G d7d8 d8e(Z)G d9d: d:e(Z*G d;d< d<eZ+G d=d> d>eZ,G d?d@ d@e(Z-G dAdB dBeZ.G dCdD dDeZ/G dEdF dFeZ0G dGdH dHZ1G dIdJ dJe1Z2e2 Z3G dKdL dLe4Z5e, Z6e Z7e Z8e Z9e Z:e Z;e)e;dMZ<e Z=e&dNdOdPdQZ>e'e:dRZ?e'e=dSZ@e'e@dTZAe ZBe ZCe'e8dUZDe ZEe ZFe ZGe'eGdVZHe ZIe#  ZJZKe$  ZLZMe ZNe ZOe'e:dWdWddXZPe&dYdZd[d\d]d^d_d`dadbdcZQe)e8ddZRe'eRdedfdgZSe'eRdhddgZTe'e=didfdgZUe% ZVe)eVZWe(e8eVfdjZXe)eXdkZYe)e8dlZZe" Z[e+ Z\dS )mz3.5.33z-Standard verifying functions used by attrmap.    N)isSeqisBytesisStr)colorsc                   @   s   e Zd ZdS )
PercentageN)__name__
__module____qualname__ r
   r
   </tmp/pip-unpacked-wheel-109iniqw/reportlab/lib/validators.pyr      s   r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )	Validatorzbase validator classc                 C   s
   |  |S N)testselfxr
   r
   r   __call__   s    zValidator.__call__c                 C   s   t | d| jjS )N_str)getattr	__class__r   r   r
   r
   r   __str__   s    zValidator.__str__c                 C   s   |S r   r
   r   r
   r
   r   	normalize   s    zValidator.normalizec                 C   s$   z|  | W dS    Y dS X d S NTF)r   r   r
   r
   r   normalizeTest   s
    
zValidator.normalizeTestN)r   r   r	   __doc__r   r   r   r   r
   r
   r
   r   r      s
   r   c                   @   s   e Zd Zdd ZdS )_isAnythingc                 C   s   dS NTr
   r   r
   r
   r   r   %   s    z_isAnything.testNr   r   r	   r   r
   r
   r
   r   r   $   s   r   c                   @   s   e Zd Zdd ZdS )
_isNothingc                 C   s   dS NFr
   r   r
   r
   r   r   )   s    z_isNothing.testNr   r
   r
   r
   r   r   (   s   r   c                   @   s   e Zd Zdd Zdd ZdS )
_isBooleanc                 C   s   t ttr|dkS | |S )Nr      )
isinstanceintboolr   r   r
   r
   r   r   -   s    
 z_isBoolean.testc                 C   sb   |dkr|S z|  }W n   tdtt Y nX |dkrBdS |dkrNdS tdtt d S )Nr"   zMust be boolean not %s)ZYESTRUET)NOFALSENF)upper
ValueErrorasciis)r   r   Sr
   r
   r   r   1   s       z_isBoolean.normalizeNr   r   r	   r   r   r
   r
   r
   r   r!   ,   s   r!   c                   @   s   e Zd Zdd ZdS )	_isStringc                 C   s   t |S r   )r   r   r
   r
   r   r   <   s    z_isString.testNr   r
   r
   r
   r   r0   ;   s   r0   c                   @   s   e Zd Zdd ZdS )_isCodecc                 C   s@   t |sdS zt|\}}}}W dS  tk
r:   Y dS X d S )NFT)r   codecslookupLookupError)r   r   abcdr
   r
   r   r   @   s    z_isCodec.testNr   r
   r
   r
   r   r1   ?   s   r1   c                   @   s   e Zd Zdd Zdd ZdS )	_isNumberc                 C   s   t |ttfrdS | |S r   )r$   floatr%   r   r   r
   r
   r   r   J   s     z_isNumber.testc                 C   s$   z
t |W S    t| Y S X d S r   )r:   r%   r   r
   r
   r   r   N   s    
z_isNumber.normalizeNr/   r
   r
   r
   r   r9   I   s   r9   c                   @   s   e Zd Zdd Zdd ZdS )_isIntc                 C   s    t |tst|sdS | |S r    )r$   r%   r   r   r   r
   r
   r   r   U   s     z_isInt.testc                 C   s   t t|r|dn|S )Nutf8)r%   r   decoder   r
   r
   r   r   Y   s    z_isInt.normalizeNr/   r
   r
   r
   r   r;   T   s   r;   c                   @   s   e Zd Zdd Zdd ZdS )_isNumberOrNonec                 C   s   |d kpt |S r   )isNumberr   r
   r
   r   r   ]   s    z_isNumberOrNone.testc                 C   s   |d kr|S t |S r   )r9   r   r   r
   r
   r   r   `   s     z_isNumberOrNone.normalizeNr/   r
   r
   r
   r   r>   \   s   r>   c                   @   s   e Zd ZdZdd ZdS )_isListOfNumbersOrNonez$ListOfNumbersOrNone validator class.c                 C   s   |d krdS t |S r   )isListOfNumbersr   r
   r
   r   r   f   s     z_isListOfNumbersOrNone.testNr   r   r	   r   r   r
   r
   r
   r   r@   d   s   r@   c                   @   s   e Zd Zdd Zdd ZdS )isNumberInRangec                 C   s   || _ || _d S r   )minmax)r   rD   rE   r
   r
   r   __init__k   s    zisNumberInRange.__init__c                 C   sJ   z0|  |}| j|  kr$| jkr.n nW dS W n tk
rD   Y nX dS r   )r   rD   rE   r+   )r   r   nr
   r
   r   r   o   s    

zisNumberInRange.testNr   r   r	   rF   r   r
   r
   r
   r   rC   j   s   rC   c                   @   s   e Zd ZdZdd ZdS )_isListOfShapeszListOfShapes validator class.c                 C   s<   ddl m} t|r4d}|D ]}t||sd}q|S dS d S )Nr   )Shaper#   F)reportlab.graphics.shapesrJ   r   r$   )r   r   rJ   Zanswerer
   r
   r   r   {   s    
z_isListOfShapes.testNrB   r
   r
   r
   r   rI   y   s   rI   c                   @   s   e Zd ZdZdd ZdS )_isListOfStringsOrNonez$ListOfStringsOrNone validator class.c                 C   s   |d krdS t |S r   )isListOfStringsr   r
   r
   r   r      s     z_isListOfStringsOrNone.testNrB   r
   r
   r
   r   rM      s   rM   c                   @   s   e Zd ZdZdd ZdS )_isTransformzTransform validator class.c                 C   s>   t |r6t|dkr0|D ]}t|s dS qdS dS ndS d S )N   FT)r   lenr?   )r   r   elementr
   r
   r   r      s    z_isTransform.testNrB   r
   r
   r
   r   rO      s   rO   c                   @   s   e Zd ZdZdd ZdS )_isColorzColor validator class.c                 C   s   t |tjS r   )r$   r   ZColorr   r
   r
   r   r      s    z_isColor.testNrB   r
   r
   r
   r   rS      s   rS   c                   @   s   e Zd ZdZdd ZdS )_isColorOrNonezColorOrNone validator class.c                 C   s   |d krdS t |S r   )isColorr   r
   r
   r   r      s     z_isColorOrNone.testNrB   r
   r
   r
   r   rT      s   rT   
NormalDatec                   @   s   e Zd Zdd Zdd ZdS )_isNormalDatec                 C   s    t |trdS |d k	o| |S r   )r$   rW   r   r   r
   r
   r   r      s    
z_isNormalDate.testc                 C   s   t |S r   rV   r   r
   r
   r   r      s    z_isNormalDate.normalizeNr/   r
   r
   r
   r   rX      s   rX   c                   @   s   e Zd ZdZdd ZdS )_isValidChildzValidChild validator class.c                 C   s$   ddl m}m} t||p"t||S )zjIs this child allowed in a drawing or group?
        I.e. does it descend from Shape or UserNode?
        r   )UserNoderJ   )rK   rZ   rJ   r$   )r   r   rZ   rJ   r
   r
   r   r      s    z_isValidChild.testNrB   r
   r
   r
   r   rY      s   rY   c                   @   s   e Zd Zdd ZdS )_isValidChildOrNonec                 C   s   t | |p|d kS r   )rY   r   r   r
   r
   r   r      s    z_isValidChildOrNone.testNr   r
   r
   r
   r   r[      s   r[   c                   @   s   e Zd Zdd ZdS )_isCallablec                 C   s
   t |dS )Nr   )hasattrr   r
   r
   r   r      s    z_isCallable.testNr   r
   r
   r
   r   r\      s   r\   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	OneOfzMake validator functions for list of choices.

    Usage:
    f = reportlab.lib.validators.OneOf('happy','sad')
    or
    f = reportlab.lib.validators.OneOf(('happy','sad'))
    f('sad'),f('happy'), f('grumpy')
    (1,1,0)
    c                 G   sr   t |r(|dkrtdt|| | _n|f| | _tdd | jD | _| jrntdd | jD | _| j| _d S )Nr
   z7Either all singleton args or a single sequence argumentc                 s   s   | ]}t |tr|V  qd S r   r$   _re_Pattern.0_r
   r
   r   	<genexpr>   s     
 z!OneOf.__init__.<locals>.<genexpr>c                 s   s   | ]}t |ts|V  qd S r   r_   ra   r
   r
   r   rd      s     
 )r   r+   tuple_enum	_patterns_test_patternsr   )r   enumargsr
   r
   r   rF      s    zOneOf.__init__c                 C   s
   || j kS r   )rf   r   r
   r
   r   r      s    z
OneOf.testc                 C   s6   || j k}|rdS | jD ]}||}|r dS qdS r   )rf   rg   match)r   r   vpr
   r
   r   rh      s    
 

 zOneOf._test_patternsN)r   r   r	   r   rF   r   rh   r
   r
   r
   r   r^      s   	r^   c                   @   s   e Zd Zd	ddZdd ZdS )

SequenceOfNr#   r   c                 C   s.   || _ || _|| _|| | _| _|r*|| _d S r   )	_elemTest_emptyOK_NoneOK_lo_hir   )r   ZelemTestnameemptyOKNoneOKlohir
   r
   r   rF      s     zSequenceOf.__init__c                 C   sp   t |s|d kr| jS dS |g ks*|dkr0| jS | jt|  krL| jksRn dS |D ]}| |sV dS qVdS )NFr
   T)r   rr   rq   rs   rQ   rt   rp   )r   r   rL   r
   r
   r   r      s      
 zSequenceOf.test)Nr#   r   r   ro   rH   r
   r
   r
   r   rn      s   
rn   c                   @   s   e Zd ZdddZdd ZdS )EitherOrNc                 C   s"   t |s|f}|| _|r|| _d S r   )r   _testsr   )r   testsru   r
   r
   r   rF      s
      zEitherOr.__init__c                 C   s   | j D ]}||r dS qdS r   )r{   )r   r   tr
   r
   r   r      s    
 zEitherOr.test)NrH   r
   r
   r
   r   rz      s   
rz   c                       s   e Zd Z fddZ  ZS )NoneOrc                    s   |d kpt  |S r   )superr   r   r   r
   r   r     s    zNoneOr.testr   r   r	   r   __classcell__r
   r
   r   r   r~     s   r~   c                       s.   e Zd Ze Z fddZedd Z  ZS )NotSetOrc                    s   |t jkpt |S r   )r   _not_setr   r   r   r   r
   r   r     s    zNotSetOr.testc                 C   s   | t jkr|S | S r   r   r   )rl   r5   r
   r
   r   conditionalValue  s    zNotSetOr.conditionalValue)	r   r   r	   objectr   r   staticmethodr   r   r
   r
   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )	_isNotSetc                 C   s
   |t jkS r   r   r   r
   r
   r   r     s    z_isNotSet.testNr   r
   r
   r
   r   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )Autoc                 K   s   | j | d S r   )__dict__update)r   kwr
   r
   r   rF     s    zAuto.__init__c                 C   s   || j kpt|| j S r   )r   r$   r   r
   r
   r   r     s    z	Auto.testNrH   r
   r
   r
   r   r     s   r   c                       s   e Zd Z fddZ  ZS )AutoOrc                    s   t |pt |S r   )isAutor   r   r   r   r
   r   r     s    zAutoOr.testr   r
   r
   r   r   r     s   r   c                   @   s   e Zd ZdddZdd ZdS )isInstanceOfNc                 C   s
   || _ d S r   _klassr   klassr
   r
   r   rF     s    zisInstanceOf.__init__c                 C   s   t || jS r   )r$   r   r   r
   r
   r   r   !  s    zisInstanceOf.test)NrH   r
   r
   r
   r   r     s   
r   c                   @   s   e Zd ZdddZdd ZdS )isSubclassOfNc                 C   s
   || _ d S r   r   r   r
   r
   r   rF   %  s    zisSubclassOf.__init__c                 C   s   t |tot|| jS r   )r$   type
issubclassr   r   r
   r
   r   r   '  s    zisSubclassOf.test)NrH   r
   r
   r
   r   r   $  s   
r   c                   @   s    e Zd ZdZdd Zdd ZdS )matchesPatternz:Matches value, or its string representation, against regexc                 C   s   t || _d S r   )recompile_pattern)r   patternr
   r
   r   rF   ,  s    zmatchesPattern.__init__c                 C   s*   t |}td|| jf  | j|d kS )Nztesting %s against %s)strprintr   rk   r   r
   r
   r   r   /  s    zmatchesPattern.testN)r   r   r	   r   rF   r   r
   r
   r
   r   r   *  s   r   c                   @   s   e Zd ZdZdd ZdS )DerivedValuea  This is used for magic values which work themselves out.
    An example would be an "inherit" property, so that one can have

      drawing.chart.categoryAxis.labels.fontName = inherit

    and pick up the value from the top of the drawing.
    Validators will permit this provided that a value can be pulled
    in which satisfies it.  And the renderer will have special
    knowledge of these so they can evaluate themselves.
    c                 C   s   dS )zOverride this.  The renderers will pass the renderer,
        and the attribute name.  Algorithms can then backtrack up
        through all the stuff the renderer provides, including
        a correct stack of parent nodes.Nr
   r   Zrendererattrr
   r
   r   getValue?  s    zDerivedValue.getValueN)r   r   r	   r   r   r
   r
   r
   r   r   4  s   
r   c                   @   s   e Zd Zdd Zdd ZdS )Inheritc                 C   s   dS )Ninheritr
   r   r
   r
   r   __repr__G  s    zInherit.__repr__c                 C   s
   | |S r   )ZgetStateValuer   r
   r
   r   r   J  s    zInherit.getValueN)r   r   r	   r   r   r
   r
   r
   r   r   F  s   r   c                   @   s   e Zd ZdZdddZdS )NumericAlignzfor creating the numeric string value for anchors etc etc
    dp is the character to align on (the last occurrence will be used)
    dpLen is the length of characters after the dp
    .r   c                 C   s   t | d}||_||_|S )Nnumeric)r   __new__Z_dpZ_dpLen)clsZdpZdpLenr   r
   r
   r   r   S  s    zNumericAlign.__new__N)r   r   )r   r   r	   r   r   r
   r
   r
   r   r   N  s   r   isNoneOrIntstartZmiddleendZboxautorA   isListOfNoneOrNumberisListOfListOfNoneOrNumberrN   isListOfColors   )rx   ry   rv   nwrG   newr7   rL   swr-   seZautoxZautoyZNoneOrStringisNoneOrListOfNoneOrStringsr#   )rw   isListOfNoneOrStringisNoneOrListOfNoneOrNumbersisStringOrCallableZisStringOrCallableNoneisStringOrNone)]__version__r   r2   r   Zreportlab.lib.utilsr   r   r   Zreportlab.libr   Patternr`   AttributeErrorZ_pattern_typer:   r   r   r   r   r!   r0   r1   r9   r;   r>   r@   rC   rI   rM   rO   rS   rT   Zreportlab.lib.normalDaterW   rX   rY   r[   r\   r^   rn   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   Z	isBooleanZisStringZisCodecr?   ZisIntr   ZisNumberOrNoneZisTextAnchorrA   r   r   ZisListOfNumbersOrNoneZisListOfShapesrN   ZisListOfStringsOrNoneZisTransformrU   r   ZisColorOrNoneZisShapeZisValidChildZisNoneOrShapeZisValidChildOrNoneZ
isAnythingZ	isNothingZ	isXYCoordZisBoxAnchorZisNoneOrStringr   r   r   Z
isCallableZisNoneOrCallabler   ZisStringOrCallableOrNoner   ZisNormalDateZisNotSetr
   r
   r
   r   <module>   s   

	
"	











