a
    mJhx                     @   s   d dl mZ d dlmZmZ ddlmZmZ ee ee eee  dddZeG dd	 d	Z	d
dee
 edddZee	 dddZdd ZdS )    )	dataclass)ListOptional   )ParserT)pre_validatorsparserpost_validatorsc                    s$   ss S  fdd}|S d S )Nc                    s0   D ]}|| } q | } D ]}|| } q| S N )datavr	   r
   r   r   N/var/www/shaz/venv/lib/python3.9/site-packages/dataclass_factory/validators.pypre_post_validating_parser   s    

z=combine_parser_validators.<locals>.pre_post_validating_parserr   )r   r	   r
   r   r   r   r   combine_parser_validators
   s    r   c                   @   s"   e Zd ZU eed< ee ed< dS )ValidatorInfo	pre_parsefieldN)__name__
__module____qualname__bool__annotations__r   strr   r   r   r   r      s   
r   F)prefieldsr   c                    s    fdd} sd |S )a  
    Decorator to set a method as a data validator.
    Such method will be called during data parsing.

    Validator method receives data which must be validated
    and returns corrected data or raises ValueError

    :param fields: names of fields (as they are in target class)
                   which are processed by this validator.
                   None is treated as "any single field"
    :param pre: flag to call validator before parsing corresponding value
    c                    sH   z
| j }W n ty&   g  | _ }Y n0  D ]}|t|d q,| S )N)r   r   )dataclass_factory_validate_infoAttributeErrorappendr   )funcvi	fieldnamer   r   r   dec0   s    
zvalidate.<locals>.decr   r   )r   r   r%   r   r   r   validate#   s    	r&   )infosc                 C   s>   |D ]4}|j r$||jg |  q||jg |  qd S r   )r   
setdefaultr   r!   )r"   r'   r   postinfor   r   r   fill_validators>   s    r+   c              	   C   sP   i }i }t | D ]6}t| |}zt||j|| W q tyD   Y q0 q||fS r   )dirgetattrr+   r   r    )objectr   r)   xZatrr   r   r   prepare_validatorsF   s    
r0   N)dataclassesr   typingr   r   commonr   r   r   r   r   r   r&   r+   r0   r   r   r   r   <module>   s   
